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 ーーーーーーー […]