xcodebuild不从.app复制文件

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)

这将重新启动应用程序中的配置文件,您实际上不需要再次指定代码签名标识,因为存档应该在归档过程中已经签名.


use*_*911 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"
Run Code Online (Sandbox Code Playgroud)

这会使用xcarchive创建一个IPA,然后重新嵌入标识和配置文件,因此即使上面仍然出现相同的错误并打印出来,带有代码签名标识和配置文件的"双重"使其无意义.我现在可以在设备上安装该应用程序.

对于询问的思想:我不仅仅是首先使用xcrun的原因是因为即使我指定了prov配置文件和签名身份,xcrun也会根据配置使用嵌入的配置文件并在项目中签名身份(Debug,AppStore) ,我发布,等等.xcodebuild实际上会签署我提供的证书.

此操作的目标是消除CI系统从开发人员计算机所需配置配置文件证书的需要,使得能够测试"AppStore"配置是否使用AdHoc分发证书进行签名,并允许稍后重新签署xcarchive实际的App Store分发证书.