web-dev-qa-db-ja.com

xcodebuildが.appからファイルをコピーしない

Xcodebuildコマンドを使用して署名付き.xcarchiveファイルを作成しました。

.xcarchive内には、.appファイルがあります。 .app内には、archived-expanded-entitlements.xcentというファイルがあります。このファイルは私の問題の鍵です。

.xcarchiveから.IPAファイルを作成する別のxcodebuildコマンドを実行します。

Archived-expanded-entitlements.xcentファイルがないため、IPAの作成は失敗します。問題は、xcodebuildが一時ディレクトリを作成していて、そこに.appファイルをコピーし、その.appファイル内にarchived-expanded-entitlements.xcentファイルがないことです。

これを除いて、他のすべてのファイルがそこにあります。

私が実行するコマンドは以下のとおりです。

これにより、xcarchiveが作成されます。

xcodebuild -project diplomat.xcodeproj -scheme schemeName archive -archivePath /Path/To/Archive/name.xcarchive -configuration AppStore CODE_SIGN_IDENTITY="identity" PROVISIONING_PROFILE=provProfile

これにより、IPAが作成されます。

xcodebuild -exportArchive -exportFormat IPA -archivePath /Path/To/Archive/name.xcarchive -exportPath /Path/To/Archive/name.ipa

.xcarchiveの場所を指定しているにもかかわらず、一時ディレクトリが作成され、重要なファイルは含まれていません。 archived-expanded-entitlements.xcentファイルは.xcarchiveプロセス(実行される最初のコマンド)中に作成され、2番目のコマンドの実行中に一時ディレクトリへのコピーに失敗することに注意してください。

これは正確なエラーです。 GoogleとStackOverflowで同様のエラーが発生しましたが、この実際の問題には何もありません。

Checking original app

     + /usr/bin/codesign --verify -vvvv    /var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-  42128-00007ED35037747A/name.app

Program /usr/bin/codesign returned 1 : 

     [/var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app: a sealed resource is missing or invalid

file missing: 

     /private/var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app/archived-expanded-entitlements.xcent
]

Codesign check fails :

      /var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app: a sealed resource is missing or invalid

file missing: 

      /private/var/folders/sl/_wdkd56d5pb05snr559cmcww0000gn/T/D2133E2C-DC66-427C-A3C5-903A88DD0541-42128-00007ED35037747A/name.app/archived-expanded-entitlements.xcent

Done checking the original app
26
user1366911

これは確かにxcodebuildの奇妙な動作ですが、exportArchiveコマンドを使用し、exportProvisioningProfileを使用してプロビジョニングプロファイルを指定することはできます。

xcodebuild -exportArchive -exportFormat IPA \
  -archivePath /Path/To/Archive/name.xcarchive \
  -exportPath /Path/To/Archive/name.ipa \
  -exportProvisioningProfile 'PROVISIONING_PROFILE_NAME'

これにより、アプリ内のプロビジョニングプロファイルが再埋め込まれ、アーカイブはアーカイブプロセス中に既に署名されている必要があるため、コード署名IDを再度指定する必要はありません。

25
Yossi Shmueli

私の答えは回避策と見なされますが、問題は解決しました。 1つのファイルがコピーされなかった理由はわかりませんが、方法を見つけたので、それは重要ではありませんでした。

2番目のxcodebuildコマンドをこれに置き換えます。これはxcrunを利用します。

/usr/bin/xcrun -sdk iphoneos PackageApplication -v /Path/To/Archive/name.xcarchive/Products/Applications/name.app -o /Path/To/Archive/DiplomatStaples.ipa --sign "identity" - -embed "provProfile"

これにより、xcarchiveを使用してIPAが作成され、IDとプロビジョニングプロファイルが再埋め込まれるため、上記と同じエラーが発生して出力されても、コード署名IDとプロビジョニングプロファイルの「ダブルディップ」によって意味がなくなります。 。これで、アプリをデバイスにインストールできます。

心を尋ねるために:私が最初にxcrunを使用していない理由は、provプロファイルと署名IDを指定しても、xcrunは構成(デバッグ、AppStore)に基づいてプロジェクトに埋め込まれたプロファイルと署名IDを使用するためです、リリースなど)私が指定します。 xcodebuildは、私が提供する証明書で実際に署名します。

この操作の目的は、CIシステムが開発者のマシンから必要とするプロファイル証明書をプロビジョニングする必要をなくし、AdHoc配布証明書で署名される「AppStore」構成のテストを可能にし、後でxcarchiveの再署名を可能にすることでした。実際のAppStore配布証明書。

7
user1366911