Підготовка програми для iOS 9

9 вересня вийде новий реліз iOS і OS X. Часу залишається все менше, і багато розробники вже оптимізували свої додатки для роботи на нових ОС. Тим, хто цього ще не зробив, пропоную коротко розглянути, що необхідно для підтримки iOS 9.




App Transport Security
У iOS 9 з'явилася технологія App Transport Security, яка допомагає зробити передачу даних по мережі більш безпечною. Вона включена за замовчуванням, тому якщо ваш сервер не відповідає вимогам ATS, то з'єднання завершиться з помилкою

An SSL error has occurred and a secure connection to the server cannot be made.


Однак ATS можна налаштувати. Зрозуміти, які налаштування необхідно конфігурувати, допоможе команда
nscurl
. Наприклад, для Яндекса:

nscurl --ats-diagnostics ya.ru
<...>
Default ATS Secure Connection
— ATS Default Connection
2015-08-28 11:51:06.868 nscurl[7019:8960694] NSURLSession/
NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
Result: FAIL
— <...>
Configuring PFS exceptions for ya.ru
— Disabling Perfect Forward Secrecy
Result: PASS
— <...>

Видно, що успішно встановити з'єднання вдасться, тільки якщо вимкнути Perfect Forward Secrecy, тому в
Info.plist
файлі для домену ya.ru необхідно вказати
NSExceptionRequiresForwardSecrecy=NO
.

Розглянемо основні конфігурації ATS.

Відключити ATS
Повністю відключити ATS можна, вказавши прапор
NSAllowsArbitraryLoads=NO
. Така конфігурація рекомендується тільки для налагодження.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>


Відключити PFS для всіх піддоменів
<key>NSAppTransportSecurity</key>
<dict>
<key>NSExceptionDomains</key>
<dict>
<key>ya.ua</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
</dict>


Відключити ATS для всіх сполук крім одного
Для додатків, які відкривають зовнішні посилання у вбудованому браузері, необхідно відключити ATS для всіх сполук, крім сполук до API сервера.
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>ya.ua</key>
<dict>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
<key>NSExceptionAllowsInsecureHTTPLoads</key>
<false/>
</dict>
</dict>
</dict>


Биткод
У iOS 9 з'явилася техонология App Thinning, яка дозволяє оптимізувати розмір встановлюваного програми. Тепер в Xcode 7 під час компіляції генерується биткод для платформ, які підтримуються додатком. Це опція включена за замовчуванням. Однак деякі сторонні бібліотеки поки ще не скомпільовані з биткодом. Якщо ваш додаток використовує такі бібліотеки, то генерацію биткода необхідно відключити. Ставимо в проекті
ENABLE_BITCODE=NO
.


Переходи в сторонні додатки
У iOS 9 змінилася поведінка методу
canOpenURL:
. Тепер необхідно оголошувати список схем, які використовуються для переходу в сторонні додатки. Це робиться з допомогою ключа LSApplicationQueriesSchemes у файлі
Info.plist
. Наприклад, якщо ваш додаток відкриває Яндекс.Навігатор, то конфігурація буде виглядати так:
<key>LSApplicationQueriesSchemes</key>
<array>
<string>yandexnavi</string>
</array>


Facebook SDK
Якщо ваш додаток використовує Facebook SDK, то необхідно налаштувати ATS і список схем так, як рекомендує Facebook на сторінці Preparing Your Apps for iOS 9. Також варто звернути увагу на інші сторонні бібліотеки, які встановлюють з'єднання зі своїми серверами або відкривають сторонні додатки.

Підсумок
Коректна налаштування ATS, биткода і списку схем — це основне, що необхідно зробити для коректної роботи програми на iOS 9. Це нескладно, особливо якщо зрозуміти, для чого це потрібно і як правильно це робиться. Адже ці знання стануть в нагоді не тільки при переході з iOS 8 SDK, але і в майбутньому при створенні нових проектів.

Успіхів!

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.