2012-03-08 55 views
23

我试图让我的应用程序没有出现在Dock中,以便有登录时启动的选项。这很棘手,涉及创建第二个助手应用程序,您将其添加为启动项目。这个帮手应用程序只负责启动主应用程序,然后退出。具有多个目标的项目的代码签名问题

我按照说明herehere,它的作用就像一个魅力 - 问题当然是代码签名。我有两个目标;帮助程序目标在编译时被复制到主包的Contents/Library/LoginItems子目录中。每个包都有自己的包标识符和自己的部署配置的个人资料,但是当我确认我昔日的应用程序商店,我得到以下错误:

Invalid provisioning profile. The provisioning profile included in the bundle BUNDLE NAME [BUNDLE NAME.app] is invalid. For more information, visit the Mac OS Developer Portal. 

如果我从我的主要目标删除助手捆绑,也没有问题。它看起来像另一个配置文件的存在正在引发错误。

如何包含两个签名包并通过验证?

+0

我有完全相同的问题... – mirosval 2012-03-10 19:12:06

+0

现在,我禁用了沙盒。这是一个非常临时的“解决方案”,只有在Apple修复了Xcode或停止推迟沙箱期限之后才能起作用。 – 2012-03-10 19:22:48

+0

这不解决问题,我仍然不通过验证,如果我禁用权利,我会通过只有当我删除帮助程序本身... – mirosval 2012-03-10 21:43:52

回答

8

我终于可以通过同事的计算机上使用codesign来解决这一问题(必须已经与我的钥匙扣一些错误),并通过删除助手应用程序的embedded.provisionprofile文件添加以下运行脚本:

if [ -f "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/embedded.provisionprofile" ]; 
then 
    rm "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/embedded.provisionprofile" 
    echo "Removed embedded provisioning profile." 
else 
    echo "No profile found" 
fi 
3

您应该使用相同的Mac App Store生产证书来签署助手应用程序和主应用程序。我没有在Xcode中试过这个 - 我们有一个帮助器应用程序,它是一个bundle资源,但我们的代码签名是一个命令行脚本。我们对应用商店系统没有任何问题。

我不确定你为什么要在构建的产品中配置配置文件,我认为这不是应用商店提交所必需的。您可以尝试使用手动codesign

codesign -f -s "3rd Party Mac Developer Application: My Company" \ 
    -i "com.mycompany.loginitem" \ 
    --entitlements path/to/loginitem.entitlements" \ 
    path/to/appname.app/Contents/Library/LoginItems/loginitem.app 

codesign -f -s "3rd Party Mac Developer Application: My Company" \ 
    -i "com.mycompany.appname" \ 
    --entitlements path/to/app.entitlements" \ 
    path/to/appname.app 
+0

有两个问题:如果我查看包,我确实看到一个文件embedded.provisionprofile,如果我尝试使用'codesign',我得到以下错误:'对象文件格式无法识别,无效或不适合'。对此有何想法? – 2012-03-16 14:04:20

+0

我不认为我见过这个错误。你正在签署'.app'包还是只是一个可执行文件?我记得在尝试直接签署可执行文件时遇到问题,但似乎即使这对我也很好。应该不需要配置文件(至少我们没有任何问题) - 如果您删除它并尝试签名,会发生什么? – wbyoung 2012-03-17 02:07:59

+1

Ash Furrow - 你有没有解决这个问题? – tomtaylor 2012-05-20 15:14:59

0

我有同样的问题。我刚刚禁用了配置(配置文件:无),而不是从帮助程序应用程序中删除embedded.provisionprofile,而是留下了代码签名标识和权利。提交我的应用程序审查没有任何问题。

相关问题