我使用xcodebuild命令创建了一个签名的.xcarchive文件。
.xcarchive内部是.app文件。 .app内部是一个名为archived-expanded-entitlements.xcent的文件。这个文件是我问题的关键。
我运行了一个不同的xcodebuild命令,该命令从.xcarchive创建.IPA文件。
创建IPA失败,因为缺少archived-expanded-entitlements.xcent文件。问题是,xcodebuild正在创建一个临时目录,它通过我的.app文件进行复制,而在THAT .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进程(第一个运行的命令)期间创建的,并且在第二个命令运行期间无法复制到临时目录中。
这是确切的错误。谷歌和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
答案 0 :(得分:25)
这确实是xcodebuild的奇怪行为,但您仍然可以使用exportArchive命令并使用exportProvisioningProfile指定配置文件:
xcodebuild -exportArchive -exportFormat IPA \
-archivePath /Path/To/Archive/name.xcarchive \
-exportPath /Path/To/Archive/name.ipa \
-exportProvisioningProfile 'PROVISIONING_PROFILE_NAME'
这将重新启动应用程序中的配置文件,您实际上不需要再次指定代码签名标识,因为存档应该已经在归档过程中签名。
答案 1 :(得分:7)
我的回答将被视为一种解决方法,但它解决了这个问题。我不知道为什么一个文件没有被复制,但我找到了一种方式,所以它并不重要。
将第二个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,然后重新嵌入身份和配置文件,因此即使出现上述相同的错误仍然打印出来,带有代码签名标识和配置文件的“双击”使它毫无意义。我现在可以在设备上安装该应用程序。
对于询问心灵:我不仅仅是首先使用xcrun的原因是因为即使我指定了prov配置文件和签名身份,xcrun也会根据配置使用嵌入的配置文件并在项目中签名身份(我指定的Debug,AppStore,Release等)。 xcodebuild实际上将使用我提供的证书进行签名。
此操作的目标是消除CI系统从开发人员计算机所需配置配置文件证书的需要,从而能够使用AdHoc分发证书对“AppStore”配置进行测试,并在以后重新签署xcarchive使用实际的App Store分发证书。