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

时间:2015-12-14 17:03:08

标签: ios plist xcodebuild ipa xcarchive

我试图将 xcarchive 转换为IPA(XCode 7.1.1)。以下命令

xcodebuild 
    -exportArchive -archivePath foo.xcarchive -exportPath . -exportFormat IPA

失败并显示错误

  

路径' foo.xcarchive'不是单捆存档

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

xcodebuild 
    -exportArchive -archivePath foo.xcarchive -exportPath . 
    -exportOptionsPlist ipa.plist

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>

然后导致错误:

  

错误:exportArchive:关键&#39;方法的exportOptionsPlist错误&#39;:   期待{}之一,但找到了app-store

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

7 个答案:

答案 0 :(得分:2)

Apple通过解决方案回复了我。从Xcode 7开始,我们应该使用xcodebuild而不是PackageApplication来生成.ipa文件。

xcodebuild有一个新的-exportArchive选项来创建一个更像Xcode Organizer的.ipa

所以我们现在应该:

  1. 使用xcodebuild存档构建存档

  2. 使用xcodebuild创建.ipa -exportArchive

  3. 我们现在建立这样的档案:

    xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution archive -archivePath $PWD/build/myApp.xcarchive
    

    我们现在像这样导出.ipa:

    xcodebuild -exportArchive -archivePath $PWD/build/myApp.xcarchive -exportOptionsPlist exportOptions.plist -exportPath $PWD/build
    

    这两个命令创建文件build / myApp.xcarchive和build / myApp.ipa

    请注意,xcodebuild -exportArchive需要一个-exportOptionsPlist参数,该参数指向带有导出选项的.plist文件。有关可以放入该plist的完整列表,请运行xcodebuild -help。该文件的最小内容如下所示:

    <?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>
        <key>teamID</key>
        <string>YOUR_TEN_CHARACTER_TEAM_ID</string>
    </dict>
    </plist>
    

答案 1 :(得分:1)

由于您不建议使用创建IPA的方式,因此您应该执行以下操作:

xcodebuild -scheme "Foo" -configuration Release clean build CODE_SIGN_IDENTITY="iPhone Distribution: Foo Corporation" -derivedDataPath "/path/to/some/folder/"

xcrun -sdk iphoneos PackageApplication "/path/to/some/folder/Build/Products/Release-iphoneos/foo.app" -o "/path/to/some/folder/foo.ipa"

确保替换&#34; Foo&#34;使用您的架构名称和&#34; iPhone发行版:Foo Corporation&#34;与您的签名身份。和&#34; / path / to / some / folder /&#34;应该是一些构建文件夹。

答案 2 :(得分:0)

尝试使用绝对路径作为xcodebuild选项的参数,而不是相对路径。

这样的事情:

xcodebuild -exportArchive -archivePath "$PWD/foo.xcarchive" \
-exportPath "$PWD" -exportOptionsPlist "$PWD/ipa.plist"

只要您的.xcarchive完好无损且签名正确,即可。这就是我在构建系统中使用的内容。

答案 3 :(得分:0)

在命令行上为模拟器构建时,我从XCode 7.2得到了一些类似的奇怪错误。您可以尝试将-sdk iphoneos添加到xcodebuild命令(以跳过模拟器构建),或者如果您正在为模拟器构建,则添加-destination 'platform=iOS Simulator,name=iPhone 6,OS=latest'之类的内容。

答案 4 :(得分:0)

我最近切换到使用fastlane gym工具来构建和创建ipa文件...我遇到了一个问题,其中一个命令行用于制作ad-hoc构建,我需要一个不同的配置来制作应用商店建立并无法解决它。快速通道的东西几乎开箱即用。

https://github.com/fastlane/gym

答案 5 :(得分:0)

问题是我们的一个构建后步骤在TARGET_BUILD_DIR中留下了一个迷路文件夹。这导致生成的xcarchive被格式化为可怕的通用存档。我在xcarchive本身之后删除文件夹的尝试注定要失败,因为xcarchive在创建时被标记为 generic (如某些人所证明的那样)缺少Info.plist个字段)。在完成所有构建阶段后,我确保TARGET_BUILD_DIR仅包含.app,生成的xcarchive已正确格式化为 iOS应用归档。反过来,xcarchive可以通过xcodebuild -exportArchive -exportPlistOptions轻松导出到正确的IPA,这是官方支持的Apple建议,负责处理所有有问题的SWIFT支持文件夹等。

答案 6 :(得分:0)

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

关于此错误:

  1. 检查编辑方案 - &gt;构建
  2. 取消其他目标,包括分析,测试,运行,个人资料,存档
  3. xcodebuild存档
  4. 再次导出存档