16

我正在尝试将我的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:exportOptionsPlist 键“方法”错误:预期 {} 之一,但找到了应用商店

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

4

7 回答 7

3

苹果给了我一个解决方案。从 Xcode 7 开始,我们应该使用 xcodebuild 而不是 PackageApplication 来生成.ipa文件。

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

所以我们现在应该:

  1. 使用 xcodebuild 归档构建归档

  2. .ipa使用 xcodebuild创建-exportArchive

我们现在像这样构建存档:

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>
于 2015-12-18T05:36:37.697 回答
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"

确保将“Foo”替换为您的架构名称,并将“iPhone Distribution: Foo Corporation”替换为您的签名身份。并且“/path/to/some/folder/”应该是某个构建文件夹。

于 2015-12-14T18:45:23.130 回答
0

我最近切换到使用 fastlanegym工具来构建和创建 ipa 文件......我遇到了一个问题,一个命令行用于进行临时构建,我需要一个不同的配置来构建应用商店并且无法解决它。fastlane 的东西几乎是开箱即用的。

https://github.com/fastlane/gym

于 2015-12-22T19:05:07.040 回答
0

pathfoo.xcarchive处的存档不是单包存档。

关于这个错误:

  1. 检查编辑方案 -> 构建
  2. 取消勾选其他目标,包括分析、测试、运行、配置文件、存档
  3. xcodebuild档案
  4. 再次导出存档
于 2016-11-30T09:20:38.813 回答
0

问题是我们的一个后期构建步骤在TARGET_BUILD_DIR. 这导致生成xcarchive的文件被格式化为可怕的通用存档。我在事实之后从其本身删除该文件夹的尝试xcarchive注定要失败,因为它在创建时xcarchive已被标记为通用Info.plist(如一些缺失的字段所证明的那样)。一旦我确定TARGET_BUILD_DIR只包含.app所有构建阶段之后,生成的文件xcarchive就会被正确格式化为iOS app archivexcarchive反过来,它很容易通过以下方式导出到适当的IPAxcodebuild -exportArchive -exportPlistOptions,这是官方支持的 Apple 建议,负责处理所有有问题的 SWIFT 支持文件夹等。

于 2016-01-01T11:06:05.200 回答
0

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

所以是这样的:

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

只要您.xcarchive完好无损并正确签名,那应该可以。这就是我在构建系统中使用的。

于 2015-12-17T20:31:02.483 回答
0

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

于 2015-12-17T20:38:24.197 回答