web-dev-qa-db-ja.com

別のターゲットからバンドルIDを取得する

私の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ターゲットを構成する方法はありますか?おそらく、カスタムのスクリプト実行実行フェーズを介してですか?

20
djibouti33

ターゲットのビルド設定は、他のターゲットでは使用できません。ただし、PROJECTのビルド設定は使用できます。

したがって、プロジェクトにユーザー定義のビルド設定を追加し、それをPARENT_APP_BUNDLE_IDENTIFIERと呼び、すべてのスキームに正しいバンドルIDを設定できます。

次に、アプリ拡張ターゲットの情報タブで、バンドルIDをに設定します

$(PARENT_APP_BUNDLE_IDENTIFIER).$(PRODUCT_NAME:rfc1034identifier)

それは私にとって完全にうまくいきました。

24
Alexis

Siri拡張機能と複数のターゲットがあるので、すべてのターゲットの拡張機能が重複しないように、ビルド前に拡張機能IDを変更するすべてのスキームに事前アクションを追加しました。

  1. [スキームの編集]を選択します
  2. 「ビルド」の近くの三角形をクリックします
  3. 「事前アクション」を選択します
  4. 「+」をクリックし、「新規実行スクリプトアクション」を選択します
  5. ビルド設定を提供するターゲットを選択します
  6. スクリプトフィールドに、IDと拡張フォルダを続けて貼り付けます
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier 
YourDesiredId" "$PROJECT_DIR/YourExtensionFolder/Info.plist"

そしてそれは魅力のように機能します!スキームごとに構成する必要があります。

0
Mike Makhovyk