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

Objective c 具有多个目标的项目的代码签名问题,objective-c,xcode,macos,code-signing,Objective C,Xcode,Macos,Code Signing,我正在尝试让我的应用程序(它没有出现在Dock中)有一个在登录时启动的选项。这很棘手,需要创建第二个助手应用程序,并将其作为启动项添加。此帮助程序应用程序仅负责启动主应用程序,然后退出 我遵循了说明,它就像一个符咒——问题当然是代码签名。我有两个目标,;helper应用程序目标在编译时复制到主捆绑包的Contents/Library/LoginItems子目录。每个bundle都有自己的bundle标识符和自己的部署配置文件,但当我为app store验证存档时,会出现以下错误: Invalid

我正在尝试让我的应用程序(它没有出现在Dock中)有一个在登录时启动的选项。这很棘手,需要创建第二个助手应用程序,并将其作为启动项添加。此帮助程序应用程序仅负责启动主应用程序,然后退出

我遵循了说明,它就像一个符咒——问题当然是代码签名。我有两个目标,;helper应用程序目标在编译时复制到主捆绑包的
Contents/Library/LoginItems
子目录。每个bundle都有自己的bundle标识符和自己的部署配置文件,但当我为app store验证存档时,会出现以下错误:

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.
如果我从主目标中删除helper包,就没有问题了。似乎存在另一个配置文件正在引发错误


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

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

我不知道你为什么会在构建的产品中设置配置文件,我认为提交应用商店时不需要这样做。您可以尝试手动使用
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

通过在同事的计算机上使用
codesign
(我的钥匙链一定出了问题),并通过添加以下运行脚本从helper应用程序中删除
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

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

我有完全相同的问题…目前,我已禁用沙箱。这是一个非常临时的“解决方案”,只有在苹果修复Xcode或停止推迟沙箱截止日期后才能生效。这并不能解决我的问题,如果我禁用授权,我仍然无法通过验证,只有在我删除helper应用程序本身时,我才能通过验证……真的吗?老实说,我根本没有尝试使用helper应用程序,因为没有沙盒,我可以切换回旧的、非沙盒的API。我能够在我的项目中使用现成的repo。是的,因此我删除了helper应用程序,将启动项创建更改为旧方式,删除了沙盒并成功提交到应用程序商店…两个问题:如果我查看捆绑包,我确实看到一个嵌入的文件
。ProvisionionProfile
,如果我尝试使用
codesign
,我收到以下错误:
对象文件格式无法识别、无效或不合适
。对此有什么想法吗?我想我没有看到那个错误。您是在签署一个
.app
捆绑包,还是只是一个可执行文件?我记得在尝试直接对可执行文件进行签名时遇到了问题,但这似乎对我来说也很好。不应该需要配置文件(至少我们没有任何问题)——如果删除它并尝试签名会发生什么?