iOS 9 対応 として, 何をしたか (主に iOS 9 の新しい要素である App Transport Security や Multitasking, カスタムURLスキームでの外部アプリ起動ができなくなったこと について)を記録します.
- 準備: 実機購入
- 準備: iOS 9 入れたりセットアップ → Debug 機として使うために Apple Developer で端末登録, Provisioning Profile 作成
- Xamarin を iOS 9 対応版にする. (Xcode beta 7 と紐付けなど)
- App Transport Security 対策
- Multitasking(iPad向けマルチタスキング)対応
- デフォルトではカスタムURLスキームでの外部アプリ起動ができなくなった対策
- IPv6 only Network への対応
実機購入 → iOS 9 入れたりセットアップ
まず最初は, iOS 9 対応の前の, 準備について書きます.
実機については,
- iPhone 6 など iPhone
- iPad Air 2
を購入しました.
とくに iPad Air 2 OR iPad mini 4 は 外せないと思います.
なぜなら, 後から書きますが, iOS 9 から, iPad向けマルチタスキング機能が追加され,
さらに iPad Air 2 だけ Split View という特別な機能が使えるからです.
追記: 9/9 の Appleの発表で発表された, 新しい端末 iPad mini 4 でも Split View 対応しているようです!
↓ iOS 9 から追加された iPad 用 マルチタスキングは, slide over, picture in picture, split view の 3種類あるのですが,
それぞれの対応表
Device | Slide Over | Picture in Picture | Split View |
---|---|---|---|
iPad mini 2 | OK | OK | ーー |
iPad mini 3 | OK | OK | ーー |
iPad Air | OK | OK | ーー |
iPad Air 2 | OK | OK | OK |
追記: iPad mini 4 | OK | OK | OK |
なので, その動作確認のために, iPad Air 2 購入は不可欠だと思いました.
(2015/9/15 追記: 先週9/9のAppleにより発表された 新しい端末 iPad mini 4 でも split view 対応しているようです!)
Split View イメージ:
画像は iOS 9’s Split View for iPad is everything you hoped it would be | Cult of Mac より.
セットアップ → Debug 機として使うために Apple Developer で端末登録, Provisioning Profile 作成
購入した端末の到着後,
- Apple Developer から iOS 9 beta 5 をダウンロードします.
- 端末に iOS 9 インストール. やり方はこの記事参照 → iOS 9ベータ版をインストールする方法 | 携帯総合研究所
- その新しい端末で, アプリの Debug 実行ができるように, 『Certificates, Identifiers & Profiles | Apple Developer』の Devices > Register Device で登録.
- それら新しい端末を含む Provisioning Profiles 作成, ダウンロード, Xcode で インストール
Xamarin を iOS 9 対応版にする
3日前に書きました. こちら参照:
Xamarin iOS 9 対応 (シミュレータで立ち上がるまで) | ちょまど帳
App Transport Security 対策
なんかめっちゃ長くなったので, 別記事に分けました.
こちら参照のこと:
【iOS 9 対応】App Transport Security 対策
上の記事で詳しく書きましたが,
ざっくり言うと,
Apple は,
「ユーザに提供する通信は, セキュアなものしか許さないよ! セキュアじゃないものは全部シャットアウトするよ!」という内容の,
App Transport Security という名前の新しい基準を設けました.
iOS 9 以降からはすべてのアプリがこの基準の対象となります. (だからATSの要件を満たしていない(例えばHTTP通信で接続する) Webページは読み込まれず, WebView の中が真っ白になる)
この提示されている要件を満たすべきですが,
取り敢えず現在は,
以下の info.plist の追記で回避できます.
info.plist に 以下を追記:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> (既存の項目たち) <!-- ここから --> <key>NSAppTransportSecurity</key> <dict> <key>NSAllowsArbitraryLoads</key> <true/> <key>NSExceptionDomains</key> <dict> <key>example.com</key><!-- ここにHTTP通信を許可するドメイン --> <dict> <!-- サブドメインも含める --> <key>NSIncludesSubdomains</key> <true/> <!-- HTTP通信するの許してね--> <key>NSExceptionAllowsInsecureHTTPLoads</key> <true/> </dict> </dict> </dict> <!-- ここまで --> </dict> </plist>
Multitasking(iPad向けマルチタスキング)対応
Xamarin の iOS 9 対応版でビルドすれば勝手に対応されます.
(ただし iPad で 全向き許可している場合のみ)
↑ 全チェック必須
デフォルトではカスタムURLスキームでの外部アプリ起動ができなくなった対策
iOS9 から UIApplication.SharedApplication.CanOpenUrl() メソッドが使えません.
あと, info.plist で ホワイトリスト登録していない 外部アプリのカスタムURLスキームを開くこともできません.
これは, ユーザがインストールしているアプリの情報は丁重に扱うべきである, という, Appleの方針らしいです.
たとえば,
// Google Maps アプリを開く UIApplication.SharedApplication.OpenUrl(new NSUrl("comgooglemaps://"));
などやったら,
というエラーを吐いて, Google Maps アプリを 開いてくれません.
また, 今まで『該当のアプリがインストールされているかどうか』という判定に重宝していた CanOpenUrl() メソッドが使えなくなりました.
具体的には, 常に false を返すようになってしまいました.
たとえば, 次のようなコードでは, 常に else 句に入ることになります.
// Google Maps アプリが ユーザの端末に入っているかどうか判定 if (UIApplication.SharedApplication.CanOpenUrl(new NSUrl("comgooglemaps://")) { // Google Maps アプリが ユーザの端末に入っているので, Google Maps アプリで開く } else { // Google Maps アプリが ユーザの端末に入っていないので, // AppStore のインストールページへ飛ばす }
どうすればいいかというと,
何度か言及しましたが, info.plist に ホワイトリスト登録をします.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> (既存の項目たち) <!-- ここから --> <key>LSApplicationQueriesSchemes</key> <array> <string>comgooglemaps</string> <!-- 開くことを許したいURLスキーム --> </array> <!-- ここまで --> </dict> </plist>
ちなみに, Apple 純正のアプリ( Safari や AppStore など)は, わざわざこんなことしなくても普通に開いてくれます.
IPv6 only Network への対応
参照:
iOS9 で必要な IPv6 only Network への対応 | Qiita
終わりに
全部一人でやったのですが, 実作業の他に調べるのも含めて だいたい3日で全部終わりました.
[…] 他の iOS 9 対応でやったことについては 次の記事で書きました: 【iOS 9 対応】Working with New Features in iOS 9 […]
[…] いAPIの対応については, 次の記事で書きました: 【iOS 9 対応】Working with New Features in iOS 9 ーーーーーーー […]