我正在尝试让我的应用程序(在Dock中没有出现)可以选择在登录时启动。这很棘手,并且涉及创建第二个辅助应用程序,您将其添加为启动项。此帮助应用程序仅负责启动主应用程序然后退出。
我按照here和here的说明操作,它就像一个魅力 - 问题当然是代码签名。我有两个目标;帮助应用程序目标在编译时被复制到主包的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 :(得分: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,而是禁用了配置(配置文件:无),保留了代码签名标识和权利。提交我的应用以供审核,没有任何问题。