use*_*911 26 terminal xcode xcodebuild ios
我使用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
Run Code Online (Sandbox Code Playgroud)
这创造了IPA:
xcodebuild -exportArchive -exportFormat IPA -archivePath /Path/To/Archive/name.xcarchive -exportPath /Path/To/Archive/name.ipa
Run Code Online (Sandbox Code Playgroud)
尽管指定了.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
Run Code Online (Sandbox Code Playgroud)
Yos*_*eli 25
这确实是xcodebuild的一种奇怪行为,但您仍然可以使用exportArchive命令并使用exportProvisioningProfile指定配置文件:
xcodebuild -exportArchive -exportFormat IPA \
-archivePath /Path/To/Archive/name.xcarchive \
-exportPath /Path/To/Archive/name.ipa \
-exportProvisioningProfile 'PROVISIONING_PROFILE_NAME'
Run Code Online (Sandbox Code Playgroud)
这将重新启动应用程序中的配置文件,您实际上不需要再次指定代码签名标识,因为存档应该在归档过程中已经签名.
我的答案将被视为一种解决方法,但它解决了这个问题.我不知道为什么一个文件没有被复制,但我找到了一种方式,所以它并不重要.
用这个替换第二个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"
Run Code Online (Sandbox Code Playgroud)
这会使用xcarchive创建一个IPA,然后重新嵌入标识和配置文件,因此即使上面仍然出现相同的错误并打印出来,带有代码签名标识和配置文件的"双重"使其无意义.我现在可以在设备上安装该应用程序.
对于询问的思想:我不仅仅是首先使用xcrun的原因是因为即使我指定了prov配置文件和签名身份,xcrun也会根据配置使用嵌入的配置文件并在项目中签名身份(Debug,AppStore) ,我发布,等等.xcodebuild实际上会签署我提供的证书.
此操作的目标是消除CI系统从开发人员计算机所需配置配置文件证书的需要,使得能够测试"AppStore"配置是否使用AdHoc分发证书进行签名,并允许稍后重新签署xcarchive实际的App Store分发证书.