【问题标题】:iOS builds / ipa creation no longer works from the command lineiOS 构建 / ipa 创建不再从命令行工作
【发布时间】:2020-07-04 00:10:36
【问题描述】:

概述

我们的命令行构建(用于构建和创建 .ipa)不再有效。

iTunesConnect 已开始拒绝使用 CODE_SIGN_RESOURCE_RULES_PATH 构建设置的构建。

如果我们在没有设置 PackageApplication 工具(我们用来创建签名的 .ipa)的情况下构建。

即使 CODE_SIGN_RESOURCE_RULES_PATH 构建设置被排除在外,PackageApplication 似乎也会使用资源规则参数调用 /usr/bin/codesign

我怀疑 PackageApplication 需要更新,以便在排除 CODE_SIGN_RESOURCE_RULES_PATH 构建设置时不会使用资源规则参数调用 /usr/bin/codesign。

有人找到解决办法了吗?

详情

我们像这样在命令行上构建我们的应用程序:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist'

我们像这样在命令行上创建签名的 .ipa:

xcrun -log -sdk iphoneos PackageApplication "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.app" -o "/Users/mpv/dev/myApp/build/AppStoreDistribution-iphoneos/myApp.ipa" -sign "iPhone Distribution: MyTeam (XXXXXXXXXX)" -embed /Users/mpv/Library/MobileDevice/Provisioning\ Profiles/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.mobileprovision

iTunesConnect 现在拒绝我们的构建并出现以下错误:

"此捆绑包无效。Info.plist 包含无效密钥 捆绑 myApp [myApp.app] 中的“CFBundleResourceSpecification”

如果我们从构建命令中删除'CODE_SIGN_RESOURCE_RULES_PATH=$(SDKROOT)/ResourceRules.plist' 位,那么应用程序将在没有CFBundleResourceSpecification plist 键的情况下构建(我认为这是我们想要的)。新的构建命令如下所示:

xcodebuild -workspace myApp.xcworkspace -scheme myApp -sdk iphoneos -configuration AppStoreDistribution OBJROOT=$PWD/build SYMROOT=$PWD/build ONLY_ACTIVE_ARCH=NO 

现在的问题是构建 .ipa 的命令失败并出现以下错误:

错误:/usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: MyTeam (XXXXXXXXXX) --resource-rules=/var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist --entitlements /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/entitlements_plistIUdGWLYe /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app 失败,错误 1。输出:警告:使用 --preserve-metadata 带有选项“resource-rules”(在 Mac OS X >= 10.10 中已弃用)!

警告:--resource-rules 已在 Mac OS X >= 10.10 中弃用! /var/folders/2b/7hylk7nn13dgrl9yyh2wp0lm0000gn/T/zDRRJMkKtQ/Payload/myApp.app/ResourceRules.plist: 无法读取资源

即使 CODE_SIGN_RESOURCE_RULES_PATH 参数/构建设置被排除在外,PackageApplication 似乎也会使用资源规则参数调用 /usr/bin/codesign。

我认为 PackageApplication 需要更新,以便在排除 CODE_SIGN_RESOURCE_RULES_PATH 参数/构建设置时,它不会使用资源规则参数调用 /usr/bin/codesign。

【问题讨论】:

  • 您好,关于完全相同的问题,我已经有一个未回答的问题:stackoverflow.com/questions/32720442/…
  • 嘿,我收到此错误“Ld /Users/confiz/Library/Developer/Xcode/DerivedData/CloudMessage-afevkkqtjcnmoddycvosdhbgoraa/Build/Intermediates/ArchiveIntermediates/LTDMessaging/IntermediateBuildFilesPath/CloudMessage.build/Release- iphoneos/LTDMessaging.build/Objects-normal/arm64/LTD\ Messaging normal arm64" 如果我​​尝试从命令行存档,但它在 Xcode 中工作正常。真不知道怎么解决。

标签: ios xcode xcodebuild


【解决方案1】:

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

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

所以我们现在应该:

  1. 使用xcodebuild archive 建立档案
  2. 使用xcodebuild -exportArchive 创建.ipa

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

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.xcarchivebuild/myApp.ipa

请注意,xcodebuild -exportArchive 需要一个指向具有导出选项的 .plist 文件的 -exportOptionsPlist 参数。有关可以放入该 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>

在 Xcode 9 中,您现在必须在 exportOptions.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>compileBitcode</key>
  <false/>
  <key>method</key>
  <string>ad-hoc</string>
  <key>provisioningProfiles</key>
  <dict>
    <key>my.bundle.identifier</key>
    <string>My Provisioning Profile Name</string>
  </dict>
  <key>signingCertificate</key>
  <string>iPhone Distribution</string>
  <key>signingStyle</key>
  <string>manual</string>
  <key>stripSwiftSymbols</key>
  <true/>
  <key>teamID</key>
  <string>YOURTEAMID</string>
  <key>thinning</key>
  <string>&lt;none&gt;</string>
</dict>
</plist> 

【讨论】:

  • 我能够xcodebuild -archive 而不指定选项plist -exportOptionsPlist
  • 如果您仔细查看输出,我相信它说明了不推荐使用 -archive 而不使用 -exportOptionsPlist 的效果。
  • 我可以给你送啤酒吗?
  • @HussamEddin xcodebuild -help 提供了一些文档。关于method 键,上面写着Available options: app-store, ad-hoc, package, enterprise, development, and developer-id. 我自己没有尝试过,但我认为其中之一就是您需要的。
  • @MikeVosseller,感谢您的回复。欣赏它。
【解决方案2】:

制作iPA Usig终端的步骤

清理项目:

发布

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration  ReleaseAdhoc  -alltargets

调试

xcodebuild clean -project ProjectPath/myApp.xcodeproj -configuration Debug -alltargets

存档项目:

调试

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp” -configuration Debug  -archivePath  pathForArchiveFolder/myApp.xcarchive

发布

xcodebuild archive -project  ProjectPath/myApp.xcodeproj  -scheme “myApp”  -archivePath  pathForArchiveFolder/myApp.xcarchive

导出国际音标

旧版本: 这可能会给出一个已签名的资源已被添加、修改或删除。错误

xcodebuild -exportArchive -archivePath  projectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportFormat ipa  -exportProvisioningProfile  “provisioning profile”

新版本:

xcodebuild -exportArchive -archivePath  ProjectPath/myapp.xcarchive  -exportPath  projectPath/myApp.ipa  -exportOptionsPlist  ProjectFolder/exportPlist.plist

【讨论】:

  • 那么 -exportoptionPlist option.plist 支持的键/值是什么?
【解决方案3】:

进入项目文件夹:

存档:

对于调试:

xcrun xcodebuild -scheme MyApp -configuration Debug archive -archivePath build/MyApp.xcarchive

发布:

xcrun xcodebuild -scheme MyApp -configuration Release archive -archivePath build/MyApp.xcarchive

获取 iPA:

xcrun xcodebuild -exportArchive -exportPath build/ -archivePath build/MyApp.xcarchive/

【讨论】:

    【解决方案4】:

    如果您需要创建 exportOptions.plist 文件作为构建过程的一部分(可能是 Jenkins),这里有一个快速提示。

    您可以使用plutil 工具将 JSON 转换为 plist。示例:

    echo "{\"method\":\"app-store\"}" | plutil -convert xml1 -o /tmp/exportOptions.plist -- -
    

    享受吧!

    【讨论】:

      【解决方案5】:

      我创建了一个名为 myFirstApp 的项目,该项目的位置是 Desktop/myFirstApp。 在Xcode8.3上测试

      第 1 步 -

      cd /Users/Ved/Desktop/myFirstApp/
      

      第 2 步 -

      xcodebuild -scheme myFirstApp archive \
      
      -archivePath /Users/Ved/Desktop/myFirstApp.xcarchive
      

      第 3 步 -

      xcodebuild -exportArchive -exportFormat ipa \
      
      -archivePath "/Users/Ved/Desktop/myFirstApp.xcarchive" \
      
      -exportPath "/Users/Ved/Desktop/myFirstApp.ipa" \
      
      -exportProvisioningProfile "myFirstAppDevProfile"
      

      【讨论】:

        猜你喜欢
        • 2012-01-21
        • 1970-01-01
        • 1970-01-01
        • 2012-10-15
        • 1970-01-01
        • 2012-11-24
        • 2014-06-11
        • 2019-02-11
        • 1970-01-01
        相关资源
        最近更新 更多