0

IOS9 Và những điều cần ghi nhớ

Cuối tháng rồi! Lại ngồi vắt óc suy nghĩ viết báo cáo cho qua ngày đoạn tháng. Apple mới ra iPhone 6s và 6S plus nhưng ko có tiền mua nên viết tạm 1 vài điểm mới trong ios9 để coi như mình đã mua ai phôn 6s vậy. Trong bài viết này mình sẽ nói về 2 phần. Phần 1 nói qua về các feature mới trong ios9 và phần policy and your app.

1. What news

1.1 3D touch
	 Đây là cái khá là hay mà apple muốn giới thiệu nhưng nó chỉ đc tích hợp trên 6s và 6s Plus. Theo nhận định của mình thì hiện tại chưa có gì nổi bật nhưng xu thế về sau áp dụng cho game thì sẽ khá phổ biến. Nhưng nó cũng chỉ dành cho các game đc đầu tư kĩ lưỡng về chất lượng, còn các game đơn giản thì ứng dụng cũng ko có gì hay ho cả. Phần 3D touch gồm 3 phần:
     - Pressure Sensitivity: Cái này rất phù hợp với những ứng dụng để vẽ, cùng với cây bút mới của apple sẽ tạo cho các design nguồn cảm hứng mới
     - Peek and Pop: Cho phép người dùng xem trước tất cả các loại nội dung thậm chí là cả hành động của nó  mà ko cần phải thực sự mở nó.
     - Quick Actions: Đây là phần mình thấy khá thú vị cho phép người dùng truy cập nhanh vào những mục họ thường xuyên sử dụng.

Link video về 3D Touch : http://www.apple.com/iphone-6s/3d-touch/
1.2 Multitasking
Đây sẽ là một hỗ trợ mạnh mẽ cho ipad, giúp cho người dùng thao tác và tận dụng tối đa độ lớn của màn hình. Giờ đây trên ipad có thể chạy song song 2 app cùng lúc. Các app này cần phải sử dụng size class để có thể tận dụng được các control như split view, picture ...
1.3 Build even more amazing games.
- GameplayKit: đây là 1 tooltool dành cho dev để dễ dàng thao tác với game
- ReplayKit: Bạn có thể dùng ReplayKit để ghi lại video của bạn và cho phép người dùng edit video trong ứng dụng và có thể share online.
- Model I/O:  Cung cấp mô hình vậy lí cơ bản, ánh sáng cho sceneKit cho các trò chơi của bạn.
1.4: MapKit
Cung cấp cho các ứng dụng của bạn một cảm giác mới với bản đồ và thông tin địa điểm. Bản đồ hiện với custom annotations, highlighted regions, and overlays. Cung cấp người dùng của bạn kiểm soát đầy đủ để xoay, xoay, zoom, và di chuyển bản đồ xung quanh trong không gian 3D, và chương trình người sử dụng vị trí hiện tại của họ hoặc hướng dẫn họ đến địa điểm tiếp theo của họ bằng cách sử dụng hướng API
1.5 Safari and Web Content
Apple đã cho mở reader mode cho phép autofill và truy cập vào browsing history. App có thể dyung cấp các extension cho safari block các link.
1.6 News Publisher
Phần này chưa thấy đc nói nhiều nhưng có 1 tin tức quan trọng là khj bạn sử dụng iads bạn sẽ đc 70%. em chưa sài cái thàng này bao giờ lên cũng ko quan tâm lắm.

**2. Policy **

2.1 Url Scheme
Đây là 1 thay đổi khá quan trọng với những app dùng url scheme để open các app khác từ app của mình. Trước đây với apple đưa ra 2 method là  canOpenURL và openURL để kiểm tra và open app khác từ app của mình. Nhưng trên IOS9 bạn cần phải khai báo ra whitelist các url scheme bạn sẽ dùng trong app.
Với Xcode7 và ios9 khi bạn gọi hàm canOpenURL với url chưa đc khai báo trong whitelist thì nó sẽ trả về cho bạn là NO mặc dù app đó đã được cài đặt trên máy của bạn. Nó sẽ bắn ra đoạn log như sau: "This app is not allowed to query for scheme xxx".
Nếu bạn gọi hàm "openURL" với url ko nằm trong whitelist nó sẽ chẳng làm gì cả và sẽ bắn ra đoạn log sau: "This app is not allowed to query for scheme xxx".
Để đăng kí whitelist ta cần làm như sau:
	- Vào file plist tạo new row đặt tên là LSApplicationQueriesSchemes
    - Tạo các sub item với giá trị là các url scheme cần thiết
    VD :
<key>LSApplicationQueriesSchemes</key>
<array>
 <string>urlscheme</string>
 <string>urlscheme2</string>
 <string>urlscheme3</string>
 <string>urlscheme4</string>
</array>
2.2 App Transport Security
Một policy của Apple sẽ được áp dụng từ iOS 9, đó là “App Transport Security”. Nói đơn giản là tất cả giao thức kết nối mạng sẽ phải trở thành HTTPS. Hồi iOS 9 beta vừa mới ra lò, ATS vẫn active trên những app build bằng iOS 8 nhưng từ beta5 trở đi thì chỉ active trên những app build bằng iOS 9 mà thôi. Việc này quả thật là dở vì ảnh hưởng đến hầu hết các app đã release.
Cách khắc phục: Đơn giản là bạn bắt thằng server chuyển hết sang https là xong, client của bạn chẳng cần phải làm gì cả. Nhưng nhớ nhắc nó là phải dùng cái  TLSv1.2 trở lên nhé.
Nhưng nếu thằng server nó chưa kịp sửa thì bạn vẫn còn 1 cách để khắc phục nhưng ko đc thằng appke khuyến khích cho lắm. Chắc 1 thời gian nữa bạn dùng cách này chắc là bị apple nó reject thẳng tay.  Bạn cần enable cái http lên nhé, đơn giản thế này thôi:
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

alt Để hiểu hơn về vấn đề này bạn cần tham khảo link sau:

https://developer.apple.com/library/prerelease/ios/technotes/App-Transport-Security-Technote/index.html
Bạn cũng có thể dùng full đoạn dùng cho ATS bên dưới:
```XML

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSExceptionDomains</key>
    <dict>
        <key>testdomain.com</key>
        <dict>
            <key>NSIncludesSubdomains</key>
            <false/>
            <key>NSExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSThirdPartyExceptionAllowsInsecureHTTPLoads</key>
            <false/>
            <key>NSThirdPartyExceptionRequiresForwardSecrecy</key>
            <true/>
            <key>NSThirdPartyExceptionMinimumTLSVersion</key>
            <string>TLSv1.2</string>
            <key>NSRequiresCertificateTransparency</key>
            <false/>
        </dict>
    </dict>
</dict>


1 đoạn note đáng lưu ý khi bạn khi dùng nó nhé:
Setting NSAllowsArbitraryLoads to true will allow it to work, but Apple was very clear in that they intend to reject apps who use this flag without a specific reason. The main reason to use NSAllowsArbitraryLoads I can think of would be user created content (link sharing, custom web browser, etc). And in this case, Apple still expects you to include exceptions that enforce the ATS for the URLs you are in control of.

If you do need access to specific URLs that are not served over TLS 1.2, you need to write specific exceptions for those domains, not use NSAllowsArbitraryLoads set to yes. You can find more info in the NSURLSesssion WWDC session.

Please be careful in sharing the NSAllowsArbitraryLoads solution. It is not the recommended fix from Apple.

All Rights Reserved

Viblo
Let's register a Viblo Account to get more interesting posts.