【问题标题】:PackageApplication stopped working with OS X 10.10 (Yosemite) todayPackageApplication 今天停止使用 OS X 10.10 (Yosemite)
【发布时间】:2015-06-11 18:20:45
【问题描述】:

更新: 正确答案大概是这个:Xcode 6.1 error while building IPA

几年前就开始使用 Jenkins 从存储库构建 iOS 项目。今天突然发生了一个新错误,停止了构建。

我想我大部分的设置都是基于本教程的:

http://www.raywenderlich.com/22816/beginning-automated-testing-with-xcode-part-22

这一步导致错误:

# 4
echo "*** Post build step 4"
/usr/bin/xcrun -sdk iphoneos PackageApplication \
-o "${IPA_DIR}/${PROJECT}.ipa" \
-verbose "${APP}" \
-sign "${SIGNING_IDENTITY}" \
--embed "${PROVISIONING_PROFILE}"

查看发生错误的日​​志有点棘手,但这里是:

### Codesigning '/Users/Shared/Jenkins/Home/jobs/myapp/workspace/myapp_adhoc_7.mobileprovision' with 'iPhone Distribution: mycompany Inc.'
+ /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: mycompany Inc. --resource-rules=/var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/Payload/myapp.app/ResourceRules.plist --entitlements /var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/entitlements_plistYdluSmqT /var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/Payload/myapp.app
Program /usr/bin/codesign returned 1 : [Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!
/var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/Payload/myapp.app/ResourceRules.plist: cannot read resources
]
error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign iPhone Distribution: mycompany Inc. --resource-rules=/var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/Payload/myapp.app/ResourceRules.plist --entitlements /var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/entitlements_plistYdluSmqT /var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/Payload/myapp.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)!
Warning: --resource-rules has been deprecated in Mac OS X >= 10.10!
/var/folders/y1/4hrpc2851b7dxn9bhlkhbrnr00007q/T/ipIxOjxE2z/Payload/myapp.app/ResourceRules.plist: cannot read resources

我会尝试自己解决这个问题,稍后在此处添加解决方案,但如果有人比我快,请继续。

  • 我没有在任何设置中指定--resource-rules。我猜 xcrun 自己使用这个设置,即使它已被弃用。

【问题讨论】:

    标签: ios jenkins continuous-integration osx-yosemite


    【解决方案1】:

    您可以使用xcodebuild 创建存档,然后再次运行xcodebuild 来创建IPA 文件,而不是使用xcrun

    # Create an archive
    xcodebuild -alltargets -configuration "${CONFIGURATION}" -scheme "${SCHEME}" -archivePath "${APP_PATH}/${PROJECT}.xcarchive" archive
    
    # Create the IPA file from the archive
    xcodebuild -exportProvisioningProfile "${PROVISIONING_PROFILE_NAME}" -exportArchive -exportFormat IPA -archivePath "${APP_PATH}/${PROJECT}.xcarchive" -exportPath "${IPA_DIR}/${PROJECT}.ipa" CODE_SIGN_IDENTITY="${SIGNING_IDENTITY}"
    

    请注意,${PROVISIONING_PROFILE_NAME} 应包含临时配置文件的名称,而不是文件本身的路径。

    【讨论】:

      【解决方案2】:

      找到答案了。

      现在发生的问题是“xcrun PackageApplication”某事。我不得不删除“-sign some profile”参数,然后事情又开始工作了。

      也就是说我不知道​​为什么以前需要签名,为什么现在不需要,所以不知道这是否会在以后引起一些问题。

      【讨论】:

      • 如果您分发您的应用程序,简单地删除签名不是一个好主意。由于 xcrun 使用了不推荐使用的参数 --resource-rules,您的 xcrun PackageApplication 失败。 Apple 不久前就让它过时了,但没有更新 xcrun 以简单地省略它。这就是为什么如果 ResourceRules.plist 不存在,从这里开始代码设计就会失败的原因
      • 那你有什么建议,你有更好的答案吗?
      • 这个:*.com/a/26499526/129202 有很多赞成票,可能是正确的。
      • 确实 *.com/questions/26497863/… 是“正确”的答案,至少它对我有用,还有很多其他人......
      • *.com/questions/26497863/... 也为我工作。谢谢!