Tuesday, September 29, 2015

iOS9 - Một số điểm mới khi phát triển và upload lên AppStore

iOS9 đã được chính thức phát hành, và như thường lệ, rất nhiều người dùng đã nâng cấp phần mềm cho chiếc iPhone của mình. Lúc này cũng là lúc mà các lập trình viên phải vất vả để nâng cấp app của mình sao cho tương thích với iOS9. Dưới đây là một số điểm mới cần chú ý khi phát triển app cũng như là khi upload app lên AppStore.


Lỗi xuất hiện do thay đổi của iOS9


App Transport Security Policy Error

Failed to load resource: The resource could not be loaded because the App Transport Security policy requires the use of a secure connection.

Apple đã siết chặt thêm tính bảo mật ở iOS 9, và họ ngăn chặn các kết nối không an toàn. Điều này là rất tốt, nhưng nếu bạn, có cần có những kết nối không an toàn này trong app, thì bạn phải làm thêm một số bước trick để tạm vượt qua được hạn chế này bằng cách add đoạn code bên dưới vào trong file AppName-info.plist.


<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true>
</true></dict>


-canOpenURL: failed for URL


-canOpenURL: failed for URL: "://" - error: "This app is not allowed to query for scheme "
-canOpenURL: failed for URL: "about:blank" - error: "This app is not allowed to query for scheme about"



App của bạn có nhúng webview, và trong webview đó có thực hiện thao tác để mở một trang web? App của bạn sử dụng custom URL?
Thế thì khả năng cao bạn sẽ dính phải lỗi này.
Nguyên do là Apple đã thay đổi cách hoạt động của API canOpenURL trong iOS 9 bằng cách thêm 1 khoá là LSApplicationQueriesSchemes được cài đặt trong file Info.plist.

Giải pháp là bạn cần phải đặt URL Scheme vào danh sách Whitelist mà app có thể mở được.

Mở file Info.plist bằng Source Code view và thêm các schemes cần thiết cho app vào ví dụ:


<key>LSApplicationQueriesSchemes</key>
<array>
<string>twitter</string>
<string>whatsapp</string>
<string>fb</string>
</array>


Các thư viện của bên thứ 3 bị lỗi


Nếu app của bạn dùng thư viện 3rd party, bạn cũng cần check lại cẩn thận vì có thể một số hàm hoặc Categories trong các thư viện đó bị lỗi khi build bằng XCode 7 hoặc chạy trên iOS9.
Ví dụ JSONKit,...


Bàn phím ảo mới



Apple đã cải tiến lại bàn phím ảo cho iOS 9 mà họ gọi là "best keyboard yet" (chưa bao giờ tuyệt vời như thế) kế thừa các tính năng từ iOS 8 QuickType.

Bạn có thể đã gặp phải trường hợp khi mình gõ sai text, sau đó bạn phải nhấn và giữ ngón tay trên 1 con chuột hình thanh dọc nhấp nháy nhỏ xíu để di chuyển nó đến chỗ sai khi sửa đổi.
Con trỏ (cursor) khi edit text bây giờ có thể điều khiển 1 cách dễ dàng bằng cơ chế trượt 2 ngón tay trên bàn phím ảo. Với cải tiến này, iPad QuickType keyboard biến thành 1 trackpad như là trên các máy Mac. Với cải tiến đáng giá này, bạn sẽ dễ dàng hơn rất rất nhiều trong việc di chuyển con trỏ tiến lui lên xuống đến vị trí mong muốn khi edit text.


Hơn thế nữa, iOS 9 bây giờ cũng hỗ trợ các shortcuts để nếu bạn có sử dụng bàn phím wireless thì bạn cũng thực hiện các thao tác được nhanh và dễ dàng hơn thông qua built-in shortcut keys. Nhấn giữ các nút Command, Options hoặc Control sẽ hiển thị ra danh sách các shortcut.

Và là lập trình viên, bạn cũng cần biết được điều này để update app của mình sao cho tiện lợi cho người dùng nhất.


New San Francisco Font


Đây có lẽ là phần đau đầu nhất đối với việc update app. Có lẽ bạn đã quen với việc set các text or label của mình bằng font mặc định. Ở iOS8 trở về trước, HelveticaNeue là FontFamily cho system. Font HelveticaNeue được nhận định là không thích hợp cho các thiết bị có màn hình nhỏ như Apple Watch, do khi hiển thị các text có size nhỏ thì font này có thể làm cho text bị nhoè, khó đọc.
Do đó Apple đã quyết định thiết kế bộ Font mới là San Francisco cho iOS9 làm font system mặc định.
Điều này sẽ gây ra việc các label, button, có thể bị nhảy size do kích cỡ text cần hiển thị bị thay đổi. Nhất là đối với những app sử dụng cách tính size của text dựa trên font, hoặc không sử dụng Autolayout khi code giao diện, bạn sẽ nhanh chóng phải sửa lỗi này.


Swift2 được ra mắt

Nếu app của bạn được code bằng Swift thì Apple đã nâng cấp Swift lên phiên bản 2. Bạn có thể kiểm tra lại để nâng cấp app của mình.

Tham khảo

Ngoài những điểm hay gặp ở trên, Apple cũng cho biết các điểm thay đổi mà developer cần chú ý gồm:

  • OCR accessory setup
  • Search extensibility
  • Audio unit extension
  • VPN plug-in extension
  • Swift 2
  • Map customization
  • Direct document
  • UI testing in Xcode
  • Notification actions
  • Third party notifications
  • Sensor profile
  • App thinning
  • Motorized windows profile
  • New Health data types
  • Flyover and Walkthrough
  • Code Coverage
  • Gaming APIs
  • Layout guide
  • Shortcut bar
  • Automated shades profile
  • Object-oriented Contacts
  • New HomeKit profiles
  • iCloud open in place
  • Home security profile
  • Storyboard references
  • App transport security API
  • Stack view
  • Wireless CarPlay
  • HomeKit iCloud remote access

Một số chi tiết thay đổi khác bạn có thể tham khảo thêm ở đây: https://developer.apple.com/library/prerelease/ios/releasenotes/General/WhatsNewIniOS/Articles/iOS9.html#//apple_ref/doc/uid/TP40016198-SW1



Upload lên AppStore


Kết nối account itunesconnect vào XCode 7

Apple đã có một số thay đổi ở bản XCode7 so với bản cũ. Khi build và sign app của mình, bạn phải kết nối account itunesconnect vào mục XCode > Settings > Accounts. Nếu bạn là personal, ko sử dụng account team, có thể bạn không cần quan tâm do khi đó account itunesconnect và account developer của bạn sử dụng chung email. Tuy nhiên, khi bạn làm team, account itunesconnect có thể bị khác với account developer, lúc đó bạn sẽ phải làm thêm việc này.


Gặp lỗi khi upload: Invalid Bundle. iPad Multitasking support requires launch story board in bundle



Như bạn đã biết là Apple release iOS9, và trong cùng sự kiện đó là ra mắt iPad Pro. Và đây là cài đặt dành riêng cho iPad Pro, giúp thiết bị này nhận biết và xử lý khi app của bạn có sử dụng tính năng split-view/multitasking.

Bạn sẽ gặp lỗi này nếu app của bạn không chỉ ra cách mà iPad sẽ xử lý như nào để support multitask.

Một số nguyên nhân có thể là: Không sử dụng Storyboard để gán Launch screen; nhất là app của bạn sử dụng tính năng split screen. Nếu app của bạn không support multitasking, để khắc phục, bạn chỉ cần đơn giản check vào 'Requires full screen' trong tab General Options của target trong Xcode.

Thursday, September 10, 2015

Mac OS X - Chia sẻ một số APP hữu ích mà bạn nên có - Part 1


Sau thời gian dài sử dụng Mac OS X cho công việc (developer) cũng như là cho giải trí, tôi cũng rút ra được danh sách 1 số các app có cả free, cả có fee (hầu hết là FREE) mà luôn sử dụng một cách tiện lợi cho Mac OS X. Nhân đây cùng chia sẻ với các bạn.

1. Các app về hệ thống


Các apps về hệ thống có thể là plugin có thể là app độc lập, nhằm giúp cho bạn sử dụng các thành phần có sẵn trong Mac OS X được nhanh gọn, thuận tiện hơn.

1.1 XtraFinder

Đây là một app miễn phí do Trần Kỳ Nam phát triển. Nó mang lại rất nhiều tính năng gắn vào tool Finder quen thuộc, mà bạn sẽ rất cần có trên Mac OS X. Thật tuyệt vời khi app này là của một người Việt viết ra. Với app nhỏ này, các tính năng mới sau đây được thêm vào:

• Tabs & Dual Panel.
• Arrange folders on top. - Sắp xếp folder lên trên các files.
• Cut & Paste. Copy queue. - Thêm tính năng Cut & Paste vào Finder.
• Global hotkeys. - Cho phép cài đặt 1 số phím nóng (phím tắt) để làm một tác vụ gì đó.
• "Copy Path", "Show Hidden Items", "Hide Desktop", "Refresh", "New File", "Copy to", "Move to", "New Terminal Here", "Make Symbolic Link", "Contents", "Attributes", … . Thêm các tính năng mới như: Copy đường dẫn của thư mục, file; Hiển thị các thứ đã bị ẩn đi; Refresh; Copy to; Tạo symbolic link;... quá hữu ích
• Legacy label for OSX 10.9 & 10.10. Light text on dark background. Transparent window.
• Colorful icons in Sidebar.
• Size of selected items in Status Bar. - Hiển thị file size ở status bar.
• Automatically adjust width of columns. - Tự động điều chỉnh bề rộng của các cột nếu duyệt file theo layout cột.
• Press Enter or Return to open selection. - Thay đổi tính năng của nút Return (Enter) thay vì đổi tên thành mở file đã chọn.
• Display folder item count in List view. - Hiển thị số items con có trong 1 thư mục.
• Middle-click to open folder in new window or new tab. - Nhấn vào nút giữa (con lăn) của chuột ngoài để mở Folder ở cửa sổ mới hoặc tab mới.
• Much more.

Bạn có thể nhanh chóng tải bản cài đặt "chính chủ" cũng như là tìm hiểu thêm ở website của anh ấy tại đây: http://www.trankynam.com/xtrafinder/


Thêm một lựa chọn khác: Nếu bạn có điều kiện và sẵn sàng chi tiền, hãy thử phần mềm Path Finder.

1.2 Lịch trên menu bar

Một phần mềm cực kỳ nhanh gọn nhẹ cho bạn để thay thế cho calendar của Apple trên menu bar, phần mềm khá nổi tiếng, đó là Itsycal for Mac. Bạn có thể download free (open source) ở đây:
https://www.mowglii.com/itsycal/



Một phần mềm quá nhẹ và tiện dụng cho nhu cầu của mình. Và suggest bạn đây là một phần mềm cần có và nên cài vào mày của mình để xài nhé.



Update: App Day-O hiện không còn được phát triển nữa.


Đây vốn là 1 ứng dụng cực kỳ đơn giản dùng để thay thế cho cái lịch còn đơn giản hơn nữa của Apple có sẵn ở trên status bar. Chức năng đơn thuần của nó là hiển thị 1 bộ lịch đầy đủ, và không kết nối đến iCal, hoặc Reminder nào khác. Và do đó dung lượng bộ nhớ khi chạy thường trực của nó cũng rất chi là nhỏ: 11MB. Bạn có thể download ở đây: http://shauninman.com/assets/downloads/Day-O.zip

Nếu bạn muốn một ứng dụng tương tự, nhưng bóng bẩy hơn, có tích hợp với iCal & Reminder, bạn nên sử dụng app Calendar, bù lại app này cũng tốn bộ nhớ hơn, khoảng 100MB.



1.3 Plugin QuickLook cho Finder


Trong Mac OS X có chức năng khá hay với Finder, khi bạn focus vào một file/folder, nếu nhấn phím cách (space) bạn sẽ có một cửa sổ dạng popup nhảy ra gọi là Quicklook giúp ta có thể xem nhanh nội dung hoặc thông tin. Và có rất nhiều plugins có các chức năng khác nhau giúp ta view trước được nhiều loại files khác nhau.

Các file plugin cho QuickLook này được cài đặt rất dễ dàng bằng cách copy file XXX..qlgenerator vào thư mục ~/Library/QuickLook/ (hoặc thư mục /Library/QuickLook/) là được.
Sau khi copy, nếu plugin không tự khởi động và được apply ngay, hãy mở terminal và gõ vào dòng lệnh: qlmanage -r


QuickLook JSON

Bạn là developer thì chắc hẳn là không thể thiếu được plugin này rồi: http://www.sagtau.com/quicklookjson.html
Plugin này giúp bạn xem nhanh được file JSON một cách có format đẹp và rõ ràng.



QLStephen để view text file

Đôi khi có những file README, và bạn ko cần thiết phải run TextEdit lên chỉ để đọc nó, bạn hãy dùng plugin QLStephen này.
Nó giúp bạn xem nhanh được nội dung của các textfile thường gặp như: README INSTALL CHANGELOG Makefile Rakefile CapFile


QLMarkdown để xem nhanh nội dung các file .md

Đây là plugin giúp bạn xem nhanh nội dung file .md ở dạng đã compile một cách đẹp đẽ, chứ không còn là nội dung text nữa QLMarkdown này.


IMLTotalImagesQL Xem nhanh info của file image

Đây là plugin giúp bạn xem được một số info của file ảnh: size width x height; kích thước file. Bạn có thể download ở đây: IMLTotalImagesQL này.


IMLTotalImagesQL Xem nhanh info của file image

Đây là plugin giúp bạn xem được một số info của file ảnh: size width x height; kích thước file. Bạn có thể download ở đây: IMLTotalImagesQL này.


BetterZipQL Xem nhanh nội dung file zip

Plugin giúp bạn xem trước được nội dung các loại file: ZIP, RAR, 7-Zip, TAR, TGZ, TBZ, TXZ, GZip, BZip2, ARJ, LZH, ISO, CHM, CAB, CPIO, DEB, RPM, StuffIt's SIT, BinHex, MacBinary, Apple Disk Images (DMG) và winmail.dat! Bạn có thể download ở đây: BetterZipQL , hoặc ở trang gốc (bây giờ plugin này đươc tích hợp vào app BetterZip): http://macitbetter.com/BetterZip-Quick-Look-Generator/.



Note: Ngoài ra còn có 1 kho các plugin khác cho bạn cần tìm hiểu và sử dụng thêm nếu muốn ở đây: http://www.quicklookplugins.com


1.4 Color Picker plugins


Bạn là (web) developer tôi chắc chắn rằng bạn sẽ thấy tiện lợi hơn nhiều lần sau khi bạn đã cài những plugin được tôi chia sẻ ở đây: https://drive.google.com/open?id=0B1A6O4kvkB1UNGhZLU9FbG1uVVE

Tương tự với cách cài đặt QuickLook plugin ở trên, bạn cài plugin cho color picker vào thư mục: ~/Library/ColorPickers (hoặc /Library/ColorPickers)