Xcodebuildでアプリをビルドしようとしています。
xcodebuild -workspace "RG.xcworkspace" -scheme "Production" -configuration "Release" build CONFIGURATION_BUILD_DIR="${TEMP_DIR}" PROVISIONING_PROFILE="1234-5678-9098-7654-3210"
私のスキームには2つのターゲットがあります。 1つのターゲットはアプリで、もう1つのターゲットはアプリ拡張機能です(Safariの拡張機能を作成しました)。アプリ拡張機能はターゲットの依存関係です。各ターゲットには、個別のプロビジョニングプロファイルが必要です。依存関係にPROVISIONING_PROFILEを指定する方法がわかりません。予想どおり、このエラーが発生しています。
CodeSign error: code signing is required for product type 'App Extension' in SDK 'iOS 8.1'
StackOverflowとxcodebuildのmanページには何も出てこないようです。 2つのプロビジョニングプロファイルに依存するxcodebuildを使用してプロジェクトをビルドする方法を知っている人はいますか?
今日、私はこれに非常に長い時間を費やしました。答えが私を襲ったとき、私は寝る途中でした:
各ターゲットのビルド設定で、プロファイル名に$VARIABLE
を設定する必要があります。これを行うには、プロファイルのリストの下部から「その他」を選択しました。これを行うと、テキストフィールドが開きます。ターゲットごとに異なる$VARIABLE
を選択します。たとえば、コンテナアプリターゲットに$APP_PROFILE
を選択し、Today拡張ターゲットに$EXTENSION_PROFILE
を選択しました
これにより、次のような結果になります。
最後に、xcodebuild
でビルドする場合、PROVISIONING_PROFILE
で行ったようにプロファイルUUIDを指定します。
xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"
XCode内からのビルドは影響を受けないようです-XCodeがデフォルトのプロファイルを選択していると言えば(「自動」モードのように)
理論的には、これは複数の拡張機能もサポートします。
XCode 6.3で動作します:)
アプリケーションと拡張機能/ウィジェットのプロビジョニングプロファイルは異なる場合がありますが、アプリケーションと拡張機能の署名IDは同じであると想定されるため、オプション_-exportSigningIdentity
_があります。
たとえば、あなたはそれを見るでしょう、
本質的に同じ文字列です。このIDは "Code Signing Identity(id)"としましょう。アーカイブを構築してエクスポートするには、実行できるものは単純に、
_xcodebuild clean -workspace HelloWorld.xcworkspace -scheme HelloWorld
_
_xcodebuild -workspace HelloWorld.xcworkspace -scheme HelloWorld archive -archivePath ~/output/HelloWorld.xcarchive
_
xcodebuild -exportArchive -exportFormat ipa -archivePath ~/output/HelloWorld.xcarchive -exportPath "HelloWorld.ipa" -exportSigningIdentity "Code Signing Identity (id)"
リファレンス: xcodebuild documentation
数か月後... Xcode内の設定値を含まないソリューションを見つけました: sigh
内に、ipaを再署名できる script があります指定されたプロファイルのファイル。以下は私のために働く:
bash resign.sh Experiments-AdHocProd.ipa "iPhone Distribution: Company Pty Ltd" output.ipa -p com.company.experiments.AudioPlugin=Experiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision -p com.company.experiments=Experiments-AdHocProd.mobileprovision --verbose
どこ:
Experiments-AdHocProd.ipa
は既存のIPAですcom.company.experiments.AudioPlugin
は拡張バンドルIDですExperiments-AdHocProd_com.company.experiments.AudioPlugin.mobileprovision
は拡張プロファイルですcom.company.experiments
はメインのアプリバンドル識別子ですExperiments-AdHocProd.mobileprovision
はメインアプリプロファイルです各プロファイルのバンドル識別子は、署名するアプリのバンドル識別子と一致する必要があります。
私が見つけたのは、重要なことです、バンドル識別子にワイルドカードがある場合(私の場合はExperiments-AdHocProd.mobileprovision
がある)、明示的なIDは最初に-p
に渡す必要があります。
または、sigh
を使用して辞任を実行することもできます。残念ながら、sigh --help
は拡張子付きのバイナリの再署名については何も言っていませんが、sigh resign --help
はそうしています。
Swiftでは、Podファイルフレームワークは個別にパッケージ化されます。次の手順で問題を解決しました。
1. Select pods
2. Targets
3. General
4. Edit bundle id
5. Build Settings
6. Code Signing
7. Provisioning profile -> select the valid profile
8. Code Signing Identity -> Select the respective identity from
profile.
すべてのターゲットに対して同じことを繰り返します。
ビルドを生成できます。