Intelligent Technology's Technical Blog

株式会社インテリジェントテクノロジーの技術情報ブログです。

Xcode7の推奨ビルド設定

こんにちは間藤です。

iOS9がリリースされ、最近はXcode7を利用する機会も増えてきました。(今のところ状況に応じてXcode6と使い分けています)
ところで、既存のプロジェクトをXcode7で開くと、ビルド警告で推奨されるビルド設定を適用するように促されます。今回はこの警告に関して取り上げてみようと思います。

警告の内容

他の要素が入り込まないよう、まずXcode6でサンプルプロジェクトを新規に生成します。これに何の修正も加えないままそのプロジェクトをXcode7で開きます。すると以下のようなビルド警告が出ます。

f:id:IntelligentTechnology:20151001151858j:plain

これを選択すると、詳細を示すダイアログが表示されます。

f:id:IntelligentTechnology:20151001152012j:plain

最初の2つは、Bundle identifierの指定に関するものです。
3つ目の警告は、Swiftの単体テストに関する推奨設定のようです。

qiita.com

指摘に従って設定変更すると、ビルド設定が以下のように追加/変更されます。
Bundle identifierをconfiguration別に指定できるようになります。

f:id:IntelligentTechnology:20151002144951j:plain

また、Enable Testable設定がDebug configurationではYESに変更されます。

f:id:IntelligentTechnology:20151002145115j:plain

Bundle identifierの切り替え

これまでもBundle identifierの切り替えは可能でしたが、

d.hatena.ne.jp

今回ビルド設定にBundle identifierをconfiguration別に指定できるようになったので、わかりやすくなったのではないかと思います。
例えば、Staging環境用にconfigurationを追加し、

f:id:IntelligentTechnology:20151002150040j:plain

追加したconfigurationのBundle identifierを以下のように変更します。

f:id:IntelligentTechnology:20151002150025j:plain

さらに、Stagingスキーマを追加、

f:id:IntelligentTechnology:20151002153913j:plain

そして、以下のようなビルドスクリプトを用意して(エラーハンドリングは一切考慮してないのでご注意ください)、

SCHEME_NAME=$1
OUTPUT_PATH=~/build
ARCHIVE_PATH=${OUTPUT_PATH}/ExampleApp.xcarchive
IPA_PATH=${OUTPUT_PATH}

xcodebuild archive -scheme ${SCHEME_NAME} -archivePath ${ARCHIVE_PATH}
xcodebuild -exportArchive -archivePath "${ARCHIVE_PATH}" \
           -exportPath "${IPA_PATH}" \
           -exportOptionsPlist exportOptionsPlist.plist

ビルドを実行します。

$ ./build.sh Staging

念のため生成されたipaファイルを展開してplistの中身を確認します。

f:id:IntelligentTechnology:20151002154232j:plain

目論見通りになっているようです。
なお、上のスクリプトでは、新しく追加されたexportOptionsPlistオプションを使用しています。指定するplistに設定する内容は、

$ xcodebuild -h

で確認できます。iOS9で追加された「App Thinning」に関する項目などがあります。