具有多个目标的项目的代码签名问题

时间:2012-03-08 21:06:08

标签: objective-c xcode macos code-signing

我正在尝试让我的应用程序(在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.

如果我从主目标中删除帮助程序包,则没有问题。看起来另一个配置文件的存在正在引发错误。

如何添加两个已签名的捆绑包并通过验证?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

答案 2 :(得分:0)

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