我正在使用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需要以下环境var集:
CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate

使用失败的Validate运行的输出,我创建了一个Shell脚本,该脚本在失败的codesign --force步骤和中提琴之前输出了此var!代码签名有效。

但这并不能真正帮助我准备要上传的代码。有没有办法将其包含在管理器验证按钮运行的脚本中?

稍后解决方案! :

根据理论,有一个脚本可以生成在Organizer Validate ...运行期间运行的所有命令,我用grep进行了一些挖掘并找到了。该脚本确实存在,其名称为:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication

只是Perl,解决方法是在开始时将所需的环境var添加到关联数组%ENV中,例如在第72行:
$ENV{CODESIGN_ALLOCATE} = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';

这完全可以解决问题。 我不知道网络上其他所有认为通过删除证书,构建清理文件,关闭和重新启动Xcode等组合修复了问题的海报来自何处。我只是悄悄地断言,此修补程序优先于科学而不是迷信,并且可以在Xcode 4.1 Build 4B110f及其关联的PackageApplication脚本下运行,该脚本在Snow Leopard 10.6.8和Perl 5.10.0下运行

最佳答案

只是为了可以将其从未答复列表中删除。就像您说的那样,您需要将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';

关于ios - Codesign返回1(对象ifile格式无效或不合适)错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7425840/

10-09 04:51