我正在使用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
Run Code Online (Sandbox Code Playgroud)
我已经看过所有类似的问题和解决方案(其中一些没有任何意义,或适用于真正旧版本的工具).没有任何影响.
我还检查了3次验证是否正在使用"生产"证书,生成存档的代码签名步骤也是如此.我甚至把上面的输出变成了一个schell脚本,所以我可以手动尝试所有证书:每次都有相同的结果.
也许正在签名的.app文件真的不合适吗?
顺便提一下,codesign没有版本标志,但是手册页的日期是2006年6月1日.二进制文件的文件日期是2010年11月20日.
更新(第二天):
研究这个问题进一步发现了一个模糊的参考文献,说codeign需要以下环境变量集:
CODESIGN_ALLOCATE=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate
Run Code Online (Sandbox Code Playgroud)
使用失败的Validate运行的输出,我创建了一个shell脚本,它在失败的codesign --force步骤和中提琴之前导出了这个var!协同设计有效.
但这并没有真正帮助我准备上传代码.有没有办法将此包含在由管理器验证按钮运行的脚本中?
一点点,仍然是解决方案!:
根据理论,有一个脚本可以生成在管理器验证...运行期间运行的所有命令,我用grep和find进行了一些挖掘.该脚本确实存在,它的名字是:
/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication
Run Code Online (Sandbox Code Playgroud)
它只是Perl,修复是在开始时将所需的环境var添加到关联数组%ENV,比如第72行:
$ENV{CODESIGN_ALLOCATE} = '/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/codesign_allocate';
Run Code Online (Sandbox Code Playgroud)
这完全解决了这个问题. 我不知道网上所有其他海报谁认为他们通过删除证书,构建清理,关闭和重新启动Xcode等组合来修复它的方式来自哪里.我只是默默地断言这个修复偏爱科学而不是迷信,并且在Xcode 4.1 Build 4B110f及其相关的PackageApplication脚本下运行,在Snow Leopard 10.6.8下使用Perl 5.10.0运行
我不小心在xcode中删除了我的目标.
所以我创建了一个具有完全相同名称的新的.在目标设置中,我再次选择了正确的代码签名标识
但现在我不能再为设备编译了.一旦我想建立,我得到:
CodeSign build/Release-iphoneos/myApp.app
....somestuff....
/Volumes/XCodeProj/myApp/build/Release-iphoneos/myApp.app: object file format invalid or unsuitable
Connad /usr/bin/codesign failed with exit code 1
Run Code Online (Sandbox Code Playgroud)
我已经尝试过清理目标了.什么可能导致这个问题,以及如何解决它?
我使用Xcode 4.1为我的iPhone应用程序创建了一个临时分发版本.目标成功构建并生成我可以在管理器中看到的存档文件.然后我点击"分享",这样我就可以选择.ipa和我的分发资料.但是,在我点击"下一步"后,管理器会因以下错误而崩溃.错误日志似乎表明该错误与'ResourceRules.plist'有关?我正在使用CorePlot进行绘图,可能与此有关吗?
有关信息,我有一个有效的分发证书并导入了分发配置文件.对于临时分发,不再需要权利文件,因此我在项目中没有.我的所有其他应用程序都没有在"共享"阶段崩溃,所以它似乎不是Xcode的问题,只是这个特定的应用程序.
任何帮助非常感谢.
格兰特.
PackageApplication failed with exit code 1.
Packaging application: '/Users/gabt/Library/Developer/Xcode/Archives/2011-08-20/myApp 20-08-2011 14.11.xcarchive/Products/Applications/myApp.app'
Arguments: embed=/Users/gabt/Library/MobileDevice/Provisioning Profiles/FA16C6A9-603C-46A6-8B98-F367A6B056CD.mobileprovision verbose=1 output=/var/folders/jw/s5ky0r1n34322jt4pw3047m00000gn/T/670E174E-0BCA-4F18-AB8D-5ACF3D7E569A-8458-000005FCA81C6AE5/app.ipa sign=iPhone Distribution: Grant Abt
Environment variables:
HOME = /Users/gabt
LOGNAME = gabt
__CF_USER_TEXT_ENCODING = 0x1F5:0:0
DISPLAY = /tmp/launch-WoNf6c/org.x:0
COMMAND_MODE = unix2003
VERSIONER_PERL_PREFER_32_BIT = no
PATH = /Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin
SHELL = /bin/bash
SSH_AUTH_SOCK = /tmp/launch-hHkBrJ/Listeners
Apple_PubSub_Socket_Render = /tmp/launch-P0dtgN/Render
TMPDIR = /var/folders/jw/s5ky0r1n34322jt4pw3047m00000gn/T/
USER = gabt
VERSIONER_PERL_VERSION = 5.12
Output directory: '/var/folders/jw/s5ky0r1n34322jt4pw3047m00000gn/T/670E174E-0BCA-4F18-AB8D-5ACF3D7E569A-8458-000005FCA81C6AE5/app.ipa'
Temporary Directory: '/var/folders/jw/s5ky0r1n34322jt4pw3047m00000gn/T/y30BrfbtxS' (will NOT be deleted on exit when verbose …Run Code Online (Sandbox Code Playgroud)