私のXcodeプロジェクトには、電話にインストールされるアプリのバンドルIDを変更する4つの異なるスキーム(prod、dev、staging、staging2)があります。そうすれば、 このテクニック のように、4つのバージョンすべてを並べてインストールできます。
現在、iOS8用のTodayExtensionを構築しています。これは、独自のバンドル識別子を必要とする新しいターゲットです。
拡張機能のバンドル識別子の前に親アプリのバンドル識別子を付ける必要があります。そうしないと、警告がスローされます。
error: Embedded binary's bundle identifier is not prefixed with the parent app's bundle identifier.
Embedded Binary Bundle Identifier: com.company.app.TodayExtension
Parent App Bundle Identifier: com.company.app.staging
この場合、Embedded Binary BundleIdentifierはcom.company.app.staging.TodayExtension
である必要があります。
最初に親ターゲットのバンドル識別子を確認して、バンドル識別子を設定するようにToday Extensionターゲットを構成する方法はありますか?おそらく、カスタムのスクリプト実行実行フェーズを介してですか?
ターゲットのビルド設定は、他のターゲットでは使用できません。ただし、PROJECTのビルド設定は使用できます。
したがって、プロジェクトにユーザー定義のビルド設定を追加し、それをPARENT_APP_BUNDLE_IDENTIFIERと呼び、すべてのスキームに正しいバンドルIDを設定できます。
次に、アプリ拡張ターゲットの情報タブで、バンドルIDをに設定します
$(PARENT_APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME:rfc1034identifier)
それは私にとって完全にうまくいきました。
Siri拡張機能と複数のターゲットがあるので、すべてのターゲットの拡張機能が重複しないように、ビルド前に拡張機能IDを変更するすべてのスキームに事前アクションを追加しました。
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier
YourDesiredId" "$PROJECT_DIR/YourExtensionFolder/Info.plist"
そしてそれは魅力のように機能します!スキームごとに構成する必要があります。