コネヒト開発者ブログ

コネヒト開発者ブログ

Plistを操作するPlistBuddyでiOS9のApp Transport Securityの煩わしさから開放される

f:id:connehito:20151001111248j:plain

こんには!コネヒト所属のラブライバー兼エンジニアの田村(@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書いてるけどすげー便利だぜ」というのがある人は是非教えてください。

参考文献

PlistBuddy(8) Mac OS X Manual Page