xcodebuild不从.app复制文件

时间:2014-05-15 15:04:58

标签: ios xcode terminal xcodebuild

我使用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

2 个答案:

答案 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分发证书。