【问题标题】:Codesign returned 1 (object ifile format invalid or unsuitable) bugCodesign 返回 1(对象 ifile 格式无效或不合适)错误
【发布时间】:2011-11-17 13:23:12
【问题描述】:

我正在使用 Xcode 4.1 build 4B110f 尝试让我的 iOS 应用程序准备好上传。它通过了 Product|Archive 步骤,没有任何错误,两次请求允许签署某些东西。但是当我尝试从组织者验证存档时,它失败了:

### Codesigning '/Users/uqrchern/Library/MobileDevice/Provisioning Profiles/70D2381D-3733-4F5D-88B2-4729572C2864.mobileprovision' with 'iPhone Distribution: Ron Chernich'
+ /usr/bin/codesign --force --preserve-metadata --sign iPhone Distribution: Ron Chernich --resource-rules=/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app/ResourceRules.plist --entitlements /var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/entitlements_plistrZ1Vwko6 /var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app
Program /usr/bin/codesign returned 1 : [/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app: replacing existing signature
/var/folders/ul/ula1AHKnGpqQ9ftDnUL-l++++TM/-Tmp-/rybczU3EBd/Payload/ABRA-D.app: object file format invalid or unsuitable
]
error: codesign failed with error 1

我查看了所有类似的问题和解决方案(其中一些毫无意义,或者适用于真正旧版本的工具)。没有人有丝毫不同。

我还检查了 3 次验证是否使用“生产”证书,生成存档的协同设计步骤也是如此。我什至把上面的输出变成了一个 schell 脚本,这样我就可以手动尝试所有的证书:每次都得到相同的结果。

也许正在签名的 .app 文件真的不合适?

顺便说一句,codesign 没有版本标志,但手册页的日期为 2006 年 6 月 1 日。二进制文件的文件日期为 2010 年 11 月 20 日。

更新(次日):

进一步研究该问题发现了一个晦涩的参考,说 codesign 需要以下环境变量集:

CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate

使用验证运行失败的输出,我创建了一个 shell 脚本,该脚本在失败的 codesign --force 步骤和 viola 之前导出了这个 var!代码设计有效。

但这并不能真正帮助我准备上传代码。有没有办法将它包含在由 Organizer Validate 按钮运行的脚本中??

稍后,解决方案! :

在理论上,有一个脚本在某个地方生成了在 Organizer Validate... 运行期间运行的所有命令,我用 grep 和 find 进行了一些挖掘。该脚本确实存在,其名称为:

/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

这只是 Perl,解决方法是在开始时将所需的环境变量添加到关联数组 %ENV,比如在第 72 行:

$ENV{CODESIGN_ALLOCATE} = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';

这完全解决了问题。 我不知道网络上所有其他认为他们通过删除证书、构建干净、关闭和重新启动的组合来解决问题的发帖者在哪里Xcode 等等等都来自。我只是悄悄地断言,这个修复有利于科学而不是迷信,并且在 Xcode 4.1 Build 4B110f 及其相关的 PackageApplication 脚本下对我有用,在带有 Perl 5.10.0 的 Snow Leopard 10.6.8 下运行

【问题讨论】:

  • 救了我的夜人!我怀疑它与我机器上的 ios 5 (XCode 4.2) 测试版有关。你的机器上只有 XCode 4.1 还是 4.2?
  • 你说得对,我之前安装了 4.2 测试版并怀疑这是问题的根源,因为我在安装 4.1 之前没有运行 4.2 卸载(当我 twigged 并运行它时,它找不到几件事,因为我在安装 4.1 之前重命名了 4.2 Developer 目录)。
  • 谢谢!你为我节省了很多时间和痛苦。
  • 我非常感谢你。你为我节省了很多时间。

标签: ios xcode codesign


【解决方案1】:

只是这样可以将其从未答复列表中删除。如您所说,您需要将CODESIGN_ALLOCATE 添加到$ENV 数组中:

$ENV{CODESIGN_ALLOCATE} = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';

如果这里大家都同意的话,我想这个问题终于可以结束了。

当使用更新版本的 Xcode 时,默认位置是:

$ENV{CODESIGN_ALLOCATE} = '/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';

【讨论】:

  • 我在 XCode 5 中构建 OS X 应用程序时遇到了同样的问题。在这种情况下,将 CODESIGN_ALLOCATE 设置为的路径是 /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault。 xctoolchain/usr/bin/codesign_allocate
  • 我在 XCode 5.0.2 上并且可以确认我需要翻转到 CuriousKea 指定的路径。我已经成功地使用了旧版本 XCode 的所有先前路径,但 5.0.2 需要再次更改。
【解决方案2】:

如果你在最新版本的 Xcode 上得到这个,你真正想要的是在 shell 中:

export CODESIGN_ALLOCATE=`xcode-select -print-path`/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate

它将使用您正在使用的 Xcode 版本中的 codesign_allocate。

您可以通过运行 xcode-select -switch 来更新命令行工具使用的 Xcode 版本

【讨论】:

    【解决方案3】:

    这个解决方法我已经使用了很长时间,但是在使用 iOS 5.1 SDK 升级到 Xcode 4.3 后,我的签名脚本(调用 codesign)停止工作并出现 cannot find code object on disk 错误:

    output/Enterprise/Payload/MyProduct.app/MyProduct: replacing invalid existing signature    
    output/Enterprise/Payload/MyProduct.app/MyProduct: cannot find code object on disk     
    Code signing failed, not creating .ipa file    
    

    对于使用 Xcode 4.3 构建的二进制文件,似乎不需要这种解决方法。为了解决这个问题,我更新了我的 bash 脚本以在导出之前检查该位置是否存在:

      # Only export the environment variable if the location exists,
      # otherwise it breaks the signing process!
      if [ -f "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate" ]
      then
        echo Export environment variable for codesign_allocate location
        export CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
      fi
    

    【讨论】:

      猜你喜欢
      • 2013-09-26
      • 1970-01-01
      • 2013-06-13
      • 2011-03-18
      • 2015-05-30
      • 1970-01-01
      • 1970-01-01
      • 2017-08-27
      • 1970-01-01
      相关资源
      最近更新 更多