Wednesday, October 21, 2015

Giới thiệu tổng quan khái niệm về App Thinning

Nếu ứng dụng của bạn hỗ trợ những thiết bị khác nhau như: iPad 1, iPad 2, iPad 3, iPhone 4, iPhone 5, iPhone 6, iPhone 6 plus,... thì dung lượng của nó rất lớn vì bạn phải thêm những hình tuỳ thuộc vào kích thước màn hình của từng thiết bị như @1x, @2x,  @3x.
Ngoài ra nếu ứng dụng của bạn sử dụng những file âm thanh lớn mà phải thêm vào bản build từ đầu, thành ra dung lượng của ứng dụng càng nặng.
Vì thế Apple đã giới thiệu khái niệm App Thinning trong WWDC 2015 nhằm giải quyết vấn đề giảm dung lượng của ứng dụng khi archive bản build.

Bài này mình xin giới thiệu sơ qua những khái niệm trong App Thinning như Slicing, Bitcode, On-Demand resources.

Slicing:

Slicing là một tiến trình tạo và phân phối những gói ứng dụng variant cho những thiết bị khác nhau. Một variant chỉ chứa kiến trúc thực thi và tài nguyên cần thiết cho từng thiết bị. Khi bạn tiếp tục phát triển và tải ứng dụng của bạn với full version lên trên iTunes Connect, thì Store sẽ tạo và phân phối những variant khác nhau dựa trên những thiết bị mà bạn hỗ trợ. Những tài nguyên về hình ảnh hay GPU cũng được chia nhỏ dựa theo độ phân giải, loại thiết bị và dung lượng thiết bị.

XCode giả slicing trong thời gian phát triển ứng dụng, vì thế bạn có thể tạo và kiểm tra những variant ở dưới local. XCode chia nhỏ ứng dụng của bạn khi bạn build và chạy ứng dụng trên một thiết bị. Khi bạn tạo ra một Archive, XCode bao gồm full version ứng dụng của bạn nhưng cho phép bạn export những variant từ archive.

Lưu ý: Sliced App chỉ hỗ trợ những thiết bị chạy từ iOS 9.0 trở về sau. Ứng dụng phải sử dụng Asset Catalog.

NGỮ PHÁP N5

Ghi chú: Danh sách dưới đây chỉ để THAM KHẢO.
Phiên bản tốt hơn sẽ có tại Lớp học Cú Mèo.

Phiên bản Saromalang 2.0

Di chuyển nhanh: Mẫu 01-10 | 11-20 | 21-30 | 31-40 | 41-50 | 51-60

 ♪  BẢNG TRA CỨU NHANH NGỮ PHÁP N5  ♬ 

NGỮ PHÁP N5: MẪU CÂU 01 ~ 10

1 . ~ は~ : thì, là, ở N1は~です là động từ "to be" www.saromalang.com

N1はN2です = N1 là N2
~N1はN2が~[mô tả]
Trợ từ [ は] phát âm là [わ] (phát âm khác cách viết)

私は日本の料理が好きです。
Watashi wa Nihon no ryōri ga sukidesu."
Tôi thích món ăn Nhật

山田さんは日本語が上手です。
Yamada-san wa nihongo ga jōzudesu.
Anh Yamada giỏi tiếng Nhật

この家はドアが大きいです 。
Kono ie wa doa ga ōkii desu
Căn nhà này có cửa lớn

Kanji N5 103

Phiên bản 1.1 gồm có 103 chữ cho hán tự JLPT N5. Hi vọng các bạn sẽ có thể thi tốt kỳ thi năng lực tiếng Nhật N5 sắp tới.
⇒Xem và tải PDF từ Saromalang Slides
⇒Xem và tải PDF từ Saromalang Cloud


本表(ほんぴょう) BẢNG CHÍNH
#Hán tựÂm ON (âm)Âm KUN (nghĩa)VIỆTÝ nghĩa
1ANyasu(i)ANyên ổn, an toàn, rẻ
2ICHI, ITSUhito(tsu), hito-NHẤTmột, số một
3INno(mu)ẨMuống
4U, YUUmigiHỮUbên phải
5Uamemưa
6EKIDỊCHtrạm, ga tàu
7ENmaru(i)VIÊNtròn, vòng tròn, tiền Yen
8KAhiHỎAlửa
9KAhanaHOAbông hoa
10KA, GEshimo, sa(geru), o(rosu), ku(daru)HẠbên dưới
11KAnanicái gì
12KAIa(u)HỘIgặp gỡ, hội họp
13GAI, GEsoto, hoka, hazu(reru), hazu(su)NGOẠIbên ngoài, tháo ra
14GAKUmana(bu)HỌChọc tập, môn học
15KAN, KENaidaGIANtrong khoảng, ở giữa
16KI, KEKHÍtinh thần, yêu thích
17KYUU, KUkokono(tsu), kokono-CỬUchín, số chín
18KYUUyasu(mu)HƯUnghỉ ngơi
19GYOsakana, uoNGƯcon cá
20KINkaneKIMvàng, tiền, kim loại
21KUUsora, a(keru), karaKHÔNGkhông khí, bầu trời, rỗng
22GETSU, GATSUtsukiNGUYỆTtháng, mặt trăng
23KENmi(ru), mi(eru), mi(seru)KIẾNnhìn, xem
24GEN, GONi(u)NGÔNnói, ngôn ngữ
25KOfuru(i)CỔcũ, cổ, xưa
26GOitsu(tsu), itsu-NGŨnăm, số năm
27GO, KOUato, oku(reru), nochiHẬUsau, lúc sau, phía sau
28GONGỌtrưa, 12 giờ trưa
29GOkata(ru), kata(rau)NGỮtừ ngữ, kể chuyện
30KOUHIỆUtrường học
31KOU, KUkuchiKHẨUmiệng, cổng
32KOUi(ku), yu(ku), okona(u)HÀNH / HÀNGđi, thực hiện, dòng, ngân hàng
33KOUtaka(i), taka(maru), taka(meru)CAOcao, mắc, tăng, mức
34KOKUkuniQUỐCnước
35KONimaKIMbây giờ, nay
36SAhidariTẢbên trái
37SANmit(tsu), mi-TAMba, số ba
38SANyamaSƠNnúi, đống, gò
39SHIyo(ttsu), yu(tsu), yo-, yon-TỨbốn, số bốn
40SHIkoTỬđứa bé
41JImimiNHĨtai
42JItokiTHỜI (THÌ)thời gian, giờ
43SHICHInana(tsu), nana-, nano-THẤTbảy, số bảy
44SHAkurumaXAxe, xe hơi
45SHAcông ty, đền, xã hội
46SHUteTHỦtay, người
47SHUUCHUtuần (7 ngày)
48JUU, JItoo, to-THẬPmười, đủ
49SHUTSUda(su), de(ru)XUẤTđi ra, cho ra, tham dự
50SHOka(ku)THƯviết, giấy tờ
51JO, NYOonna, meNỮphụ nữ
52SHOUchii(sai), ko-, o-TIỂUnhỏ
53SHOUsuko(shi), suku(nai)THIỂU / THIẾUít, nhỏ tuổi
54JOUue, kami, a(geru), a(garu)THƯỢNGphía trên
55SHOKUta(beru), ku(ru), ku(rau)THỰCăn
56SHINatara(shii), ara(ta), nii-TÂNmới
57JIN, NINhitoNHÂNngười
58SUImizuTHỦYnước
59SEI, SHOUi(kiru), u(mu), ha(yasu), nama, kiSINHsống, sinh ra, tươi sống
60西SEI, SAInishiTÂYphía tây
61SENkawaXUYÊNsông
62SENchiTHIÊNmột ngàn, nhiều
63SENsakiTIÊNlúc trước, tương lai
64ZENmaeTIỀNphía trước
65SOKUashi, ta(riru), ta(su)TÚCchân, đầy đủ, cộng vào
66TAoo(i)ĐAnhiều
67DAI, TAIou(kii), oo(i)ĐẠIto, lớn
68DAN, NANotokoNAMnam, đàn ông
69CHUU, JUUnakaTRUNGbên trong
70CHOUnaga(i)TRƯỜNG / TRƯỞNGdài / người đứng đầu
71TEName, amaTHIÊNtrời, thời tiết
72TENmiseĐIẾMcửa hàng
73DENĐIỆNđiện
74DO, TOtsuchiTHỔđất
75TOUhigashiĐÔNGphía đông
76DOUmichiĐẠOcon đường
77DOKUyo(mu)ĐỘCđọc
78NANminamiNAMphía nam
79NIfuta(tsu), futa-NHỊhai, số hai
80NICHI, JITSUhi, -kaNHẬTngày, mặt trời, Nhật Bản
81NYUUhai(ru), i(ru), i(reru)NHẬPđi vào, cho vào
82NENtoshiNIÊNnăm
83BAIka(u)MÃImua
84HAKU, BYAKUshiro(i), shiroBẠCHmàu trắng
85HACHIyat(tsu), ya(tsu), ya-, you-BÁTtám, số tám
86HANnaka(ba)BÁNmột nửa
87HYAKUBÁCHmột trăm, nhiều
88FUchichiPHỤcha
89BUN, BU, FUNwa(keru), wa(kareru), wa(karu)PHÂN / PHẬNhiểu, phân chia, phút, phần
90BUN, MONki(ku), ki(koeru)VĂNnghe, nghe thấy, hỏi
91BOhahaMẪUmẹ
92HOKUkitaBẮCphía bắc
93BOKU, MOKUki, koMỘCcây, gỗ
94HONmotoBẢNsách, bản chất, đếm cây
95MAIMỖImỗi thứ, mỗi cái, ...
96MAN, BANVẠNvạn, mười ngàn, nhiều
97MEI, MYOUnaDANHtên tuổi
98MOKUmeMỤCmắt, mục kích
99YUUtomoHỮUbạn bè
100RAIku(ru), kita(ru), kita(su)LAItới, tới đây
101RITSUta(tsu), ta(teru)LẬPđứng, thành lập
102ROKUmutt(su), mu(tsu), mu, muiLỤCsáu, số sáu
103WAhanashi, hana(su)THOẠInói chuyện, câu chuyện

(C) Saromalang

Nguồn: Saroma Lang

Link: http://www.saromalang.com/p/kanji-n5-103.html

Học chữ kanji: Suy luận âm Hán Nhật On'yomi

SAROMA JCLASS xin chào các bạn!
Tiếng Việt của chúng ta có âm Hán Việt và âm thuần Việt, ví dụ:
"Thủy" là âm Hán Việt (nghĩa: nước)
"Nước" là âm thuần Việt
Tiếng Nhật cũng tương tự, có âm Hán Nhật (On'yomi 音読み) và âm thuần Nhật (Kun'yomi 訓読み), ví dụ:
水 すい "sui" là âm Hán Nhật, dùng trong từ ghép như 温水 (onsui, ôn thủy = nước nóng)
水 みず "mizu" là âm Nhật (kun'yomi)
Thực chất "mizu" là một từ thuần Nhật nhưng được viết bằng kanji cho dễ đọc.
Trong bài này SAROMA JCLASS sẽ chỉ cho các bạn cách suy luận từ âm Hán Việt ra âm Hán Nhật.
Các bạn thử suy luận âm Hán Nhật của các từ sau nhé:
Âm Hán Việt: Phát triển, Triển vọng, Quốc gia, Đào tẩu, Tổn thất, Phẩm chất
Âm Hán Nhật: ??
Ô đỏ:  東海道 五 = Tou Kai Dou  Go (Đông Hải Đạo - Ngũ)

Tuesday, October 20, 2015

Hướng dẫn thiết lập XCode để tự tăng số lần build cho ứng dụng trên iOS

Để tiện quản lý những bản build mình đã build ra để đưa cho khách hàng, bạn cần phải đánh số cho những bản build đó ngoài số version.

Thursday, October 15, 2015

(CI) Giới thiệu tổng quan về XCode server

Hiện tại mình dùng XCode 7 không để nào dùng tool Frankencover để generate ra code coverage được. Vì thế giải pháp hiện tại mình chuyển sang dùng XCode server để có thể thay thế Jenkins.
- Điểm mạnh của XCode server: là bạn có thể chạy test trên nhiều thiết bị và hệ điều hành khác nhau. Có thể analyze, code coverage, archive build. Có thể cài ứng dụng thông qua xcode server và OTA. Vừa build và chạy code ở local và cả trên server cùng thời điểm được.
- Điểm yếu: là vẫn chưa hỗ trợ những tool kiểm tra chất lượng code (code metric, duplicate code, checkstyle ...).

Để sử dụng được XCode Server bạn phải cài OS server để tạo máy chủ. Bạn có thể cài đặt OS server và XCode Server tại đây. Hướng dẫn cài của Apple rất chi tiết và dễ, các bạn hãy đọc và làm theo.
Hiện tại mình đang dùng bản Beta để sử dụng thử, bạn có thể mua ứng dụng này với giá 19.9$ tại app store.
Sau khi cài xong sẽ xuất hiện như những màn hình sau:

(CI) Quản lý chất lượng code của iOS trên Jenkins (CPD, PMD, CheckStyle, Code Coverage)

Jenkins có hỗ trợ những công cụ để kiểm tra chất lượng code của bạn như kiểm tra duplicated code, checkstyle, code coverage...


Wednesday, October 14, 2015

(Kinh nghiệm) Về static library và static framework trên iOS

Trước XCode 6 ra đời thì đa số mọi người muốn viết những code chung trong static library để có thể dùng cho nhiều project. Có những người tạo project là static library nhưng khi build thì tạo folder có đuôi là .framework để add những file header và static library vào. Nhưng thực chất nó cũng chỉ là static library. Vì khi bạn muốn tích hợp những static library khác vào project static library mà bạn đang làm thì sẽ gặp nhiều vấn đề xảy ra. Vì thế khi bạn làm project framework mà có tích hợp những static library khác vào thì nên khởi tạo project theo dạng framework (Cocoa Touch Framework) như sau:

Wednesday, October 7, 2015

(Code Coverage) Hướng dẫn bật tính năng Code Coverage trên XCode 7

Nếu bạn dùng XCode 7 bạn có thể sử dụng chức năng Code Coverage trên XCode 7. Mình cũng có bài hướng dẫn generate code coverage bằng XCode 6 tại đây. Hiện tại mình chạy code cũ từ XCode 6 qua XCode 7 có problem khi project của mình dùng static library mình có nêu vấn đề tại đây

Sau đây mình xin hướng dẫn cách bật chức năng code coverage trên XCode 7.

Bước 1: Kiểm tra thuộc tính Build Active Architecture Only trong Build Settings là YES:

(Code Coverage) Không thể chạy code coverage trên XCode 7 cho Static Library.

Hiện tại nếu project của bạn đang dùng static library (có thiết lập thuộc tính "Build Active Architecture Only" là YES) thì bạn chắc chắn sẽ không dùng được cơ chế generate code coverage của XCode 7.
Những thuộc tính (Generate Legacy Test Coverage Files, Instrument Program Flow) để là YES hay NO không ảnh hưởng đến việc generate code coverage trên XCode 7: 

Hiện tại mình đang thử tìm cách hướng giải quyết. Khi nào có mình sẽ update tài liệu này sau.

Nguồn tham khảo:
- https://forums.developer.apple.com/thread/5925
- https://github.com/CocoaPods/CocoaPods/issues/3706