xcodebuild不从.app复制文件

我使用xcodebuild命令创build了一个签名的.xcarchive文件。

.xcarchive里面是一个.app文件。 .app内部是一个名为archived-expanded-entitlements.xcent的文件。 这个文件是我的问题的关键。

我运行一个不同的xcodebuild命令,从.xcarchive创build一个.IPA文件。

创buildIPA失败,因为archived-expanded-entitlements.xcent文件丢失。 问题是,xcodebuild正在创build一个临时目录,将其复制到我的.app文件中,而在.AT文件中没有archived-expanded-entitlements.xcent文件。

所有其他文件都在这里,除了这一个。

我运行的命令如下:

这创build了xcarchive:

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

这创build了IPA:

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

尽pipe指定了.xcarchive的位置,但它会创build一个临时目录,但不包含重要的文件。 请注意,archived-expanded-entitlements.xcent文件是在.xcarchive进程(运行的第一个命令)期间创build的,在第二个命令运行期间无法将其复制到临时目录中。

这是确切的错误。 谷歌和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 

这实际上是xcodebuild的一个奇怪行为,但仍可以使用exportArchive命令并使用exportProvisioningProfile指定供应configuration文件:

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

这将在应用程序中重新设置configuration文件,因此您不需要再次指定代码签名标识,因为归档过程中应该已经对该存档进行了签名。

我的答案将被视为解决方法,但它解决了这个问题。 我不知道为什么一个文件没有被复制,但我find了一个方法,所以这不是重要的。

用这个replace第二个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创build一个IPA,然后重新embedded身份和供应configuration文件,因此即使仍然出现上述错误并将其打印出来,使用代码签名身份和供应configuration文件的“双倍下降”使其无意义。 我现在可以在设备上安装应用程序。

查询头脑:我不是首先使用xcrun的原因是因为即使我指定了一个provconfiguration文件和签名标识,xcrun会根据configuration使用embedded的configuration文件和签名标识(Debug,AppStore ,发布等),我指定。 xcodebuild实际上会签署我提供的证书。

此操作的目标是取消configurationconfiguration文件证书的必要性,即CI系统需要从开发人员机器启用,从而可以testing“AppStore”configuration是否使用AdHoc分发证书进行签名,以及稍后是否可以重新签署xcarchive实际的App Store发行证书。