将xcarchive转换为IPA的错误 - 单束存档+缺少plist方法值

Oha*_*der 16 xcodebuild plist ios ipa xcarchive

我正在尝试将我的xcarchive转换为IPA(XCode 7.1.1).以下命令

xcodebuild 
    -exportArchive -archivePath foo.xcarchive -exportPath . -exportFormat IPA
Run Code Online (Sandbox Code Playgroud)

失败了

路径'foo.xcarchive'中的存档不是单包存档

由于上面的命令在技术上已弃用,我还尝试了新的表单:

xcodebuild 
    -exportArchive -archivePath foo.xcarchive -exportPath . 
    -exportOptionsPlist ipa.plist
Run Code Online (Sandbox Code Playgroud)

ipa.plist如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)

然后导致错误:

错误:exportArchive:关键'方法'的exportOptionsPlist错误:预期{}之一,但找到了app-store

现在,尝试调试这个我打开了xcarchive文件夹并检查了它的结构.我注意到我在同一级别上有一个文件夹,Products\Applications\foo.app因此我将其删除并再次尝试无效(相同的结果).然后我继续从foo.app中删除文件,直到我只剩下DWARF二进制文件 - 仍然没有雪茄(相同的结果),尽管这可能是因为我通过手动删除文件搞砸了应用程序签名.

Oha*_*der 0

问题是我们的构建后步骤之一在TARGET_BUILD_DIR. 这导致生成的文件xcarchive被格式化为可怕的通用存档。我尝试在事后删除文件夹本身的尝试xcarchive注定会失败,因为该文件夹在创建时xcarchive已被标记为通用Info.plist(一些缺失字段证明了这一点)。一旦我确保TARGET_BUILD_DIR只包含.app在所有构建阶段都说完和完成之后,生成的文件xcarchive就会被正确格式化为iOS 应用程序存档。反过来xcarchive,可以通过 轻松导出到正确的 IPA xcodebuild -exportArchive -exportPlistOptions,这是官方支持的 Apple 建议,可处理所有有问题的 SWIFT 支持文件夹等。