web-dev-qa-db-ja.com

xcodebuildターゲット依存関係の異なるプロビジョニングプロファイル

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を使用してプロジェクトをビルドする方法を知っている人はいますか?

28
Rey Gonzales

今日、私はこれに非常に長い時間を費やしました。答えが私を襲ったとき、私は寝る途中でした:

各ターゲットのビルド設定で、プロファイル名に$VARIABLEを設定する必要があります。これを行うには、プロファイルのリストの下部から「その他」を選択しました。これを行うと、テキストフィールドが開きます。ターゲットごとに異なる$VARIABLEを選択します。たとえば、コンテナアプリターゲットに$APP_PROFILEを選択し、Today拡張ターゲットに$EXTENSION_PROFILEを選択しました

Adding a build variable variable...

これにより、次のような結果になります。

Profiles

最後に、xcodebuildでビルドする場合、PROVISIONING_PROFILEで行ったようにプロファイルUUIDを指定します。

xcodebuild ... APP_PROFILE="85b6f019-d5e5-43a7-9e8f-e3aaed64a7e4" EXTENSION_PROFILE="e50cf605-ab63-40ad-8329-2758359ea748"

XCode内からのビルドは影響を受けないようです-XCodeがデフォルトのプロファイルを選択していると言えば(「自動」モードのように)

理論的には、これは複数の拡張機能もサポートします。

XCode 6.3で動作します:)

49
Max Chuquimia

変数のないソリューション

アプリケーションと拡張機能/ウィジェットのプロビジョニングプロファイルは異なる場合がありますが、アプリケーションと拡張機能の署名IDは同じであると想定されるため、オプション_-exportSigningIdentity_があります。

たとえば、あなたはそれを見るでしょう、

  • TargetApp->ビルド設定->「コード署名ID(id)」(リリース)
  • TargetExtension->ビルド設定->「コード署名ID(id)」(リリース)

本質的に同じ文字列です。この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

2

数か月後... 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はそうしています。

1
Max Chuquimia

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.

すべてのターゲットに対して同じことを繰り返します。

ビルドを生成できます。

0
Pebby