IOS 8では、新しい拡張機能を作成するときに、それがアタッチされるターゲットを決定する必要があります。拡張機能は、ターゲットと同じバンドルIDのプレフィックスを持ちます。
これは私のセットアップです。3つのターゲット(本番、ステージング、ローカル)と、3回複製したくない拡張ターゲットがあります。
Neo Chen の答えを明確にするために、親ターゲットのスキームをそれぞれ編集します。
ビルド>プレアクション>新しいスクリプト実行アクション>(親スキーム)からビルド設定を提供します。
これを拡張子ごとに貼り付けます。
#!/bin/bash
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
extId="notification-service"
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.$extId" "${SRCROOT}/${extId}/Info.plist"
最初のビルドに取り組むようです。
独自のInfo.plistを使用して、Extensionターゲットを複製するだけで、それ以外は複製できないようです。
ただし、拡張機能を作成すると、以下に示すように、Xcodeが「Embed App Extensions」をアプリのターゲットのビルドフェーズに追加します。これを行うためのUIはまだありません。
それでも、2番目のターゲットの拡張子を作成し、.plistを除くすべてのファイルを削除して、修正する必要があるものを修正できます。手順は次のとおりです。
この要件をサポートする実行スクリプトを作成しました
#!/bin/sh
buildNumber=$(/usr/libexec/PlistBuddy -c "Print CFBundleVersion" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $buildNumber" "${SRCROOT}/ImagePush/Info.plist"
buildVersion=$(/usr/libexec/PlistBuddy -c "Print CFBundleShortVersionString" "$INFOPLIST_FILE")
/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $buildVersion" "${SRCROOT}/ImagePush/Info.plist"
buildID=${PRODUCT_BUNDLE_IDENTIFIER}
/usr/libexec/PlistBuddy -c "Set :CFBundleIdentifier $buildID.ImagePush" "${SRCROOT}/ImagePush/Info.plist"
ImagePushは私の拡張機能です
ターゲットに必要なものを追加し、ビルドフェーズの拡張設定の前にこのスクリプトが実行されることを確認してください。その後、ビルドアクションを2回実行する必要があります(PS:最初に失敗したとき、改善しようとします)。複数のターゲットをサポート
IDごとに複数の拡張機能を作成する必要がありますが、動的フレームワークを作成して、それを各拡張機能にリンクするだけです。その後、コードを複製する必要はありません。