こんには!コネヒト所属のラブライバー兼エンジニアの田村(@Utmrer)(26歳)です。 先日母にラブライブレードが見つかりこの世の地獄を味わいました。
さて、iOS Developerの皆さん、PlistBuddy使ってますか? PlistBuddyはMacに最初から入っているPlistを操作するコマンドで、弊社のiOS開発で活躍しまくりのコマンドです。 今回はPlistBuddyでiOS9から対応が必要になったApp Trasport Security(以下ATS)の煩わしさから開放される方法をご紹介します。
開発環境のドメインとATSの設定にかかる問題
先日iOS9がリリースされ、ATSの設定をしていたDeveloperの方も多いと思います。 サービスで使用しているドメインがすべてSSLに対応している場合は必要ありませんが、対応していない場合はNSExceptionDomainsにホワイトリストで指定しなければいけません。 しかし、問題になるのが開発環境のドメインをInfo.plistに追加するかどうかです。
開発環境のドメインを本番環境のサブドメインにしている場合はNSIncludesSubdomainsで大丈夫ですが、まったく違うドメインの場合はNSExceptionDomainsに追加する必要があります。 しかし、開発環境のドメインをNSExceptionDomainsに追加するのには抵抗があります。 なぜならInfo.plistはunzipすればすべての人が見ることが出来るので、開発環境のドメインを公開することは望ましくありません。
そこで活躍するのが複数のPlistをMergeして1つのPlistにするPlistBuddy Merge
コマンドです。
PlistBuddy Merge
で環境別にATS例外を設定する
開発環境のドメインを以下のようなPlistにしてInfo.plistとは別に用意しておきます。
そしてBuild Phases
に以下のようなScriptを追加することによってDebug
のConfigurationでビルドした時のみ、開発環境のドメインをInfo.plistに追加する事ができます。(Preprocess Info.plist FileをYesにする必要があります)
これでDebug
ビルドの時だけNSIncludesSubdomainsに追加するとか、間違えてRelease
ビルドに開発環境のドメインを含めてしまうなどのミスや煩わしさから開放されます。
atsPlist="${SRCROOT}/YourApp/development-ats.plist"
の所をatsPlist="${SRCROOT}/YourApp/${CONFIGURATION}.plist"
とすれば複数のConfigurationで別々のドメインを設定することだって出来ます。やったね!
おわりに
弊社のiOS開発では他にもPlistBuddy Set
でBundleVersionにcommit hashを含めたり、外部ライブラリのDebug Modeを切り替えたりしています。
「PlistBuddyでこんなScript書いてるけどすげー便利だぜ」というのがある人は是非教えてください。