在其捆绑包中提交带有辅助应用程序的OSX应用程序

17

我真的被这个问题搞疯了!我有一个应用程序,其中包含一个简单的辅助应用程序,用于管理主应用程序的登录项。

当我尝试提交应用程序时,我会收到与配置文件和授权相关的错误。我确信问题与辅助应用程序有关,因为在添加它之前,提交没有任何问题。

目前,辅助应用程序已经签署代码并作为主应用程序沙盒化。

错误信息如下:

  • 无效的配置文件。捆绑包中包含的配置文件无效。

  • 无效的代码签名授权。您的应用程序捆绑包签名中的授权与包含在配置文件中的授权不匹配。捆绑包中包含一个未包含在配置文件“com.apple.application-identifier”中的密钥,在'myapp.app/Contents/Library/LoginItems/helper.app'中。

  • 无效的代码签名授权。您的应用程序捆绑包签名中的授权与包含在配置文件中的授权不匹配。捆绑包中包含一个未包含在配置文件“com.apple.application-identifier”中的密钥,在'myapp.app/Contents/MacOS/myapp'中。


你的应用程序中使用了iCloud存储吗? - Tim
但是那么你根本不需要预配配置文件吗?也许你(主/辅助)应用程序的目标摘要设置中的“iCloud容器”列表中有条目? - Tim
我通过终端进行代码签名来解决这个问题!我真的不太理解。 - MatterGoal
当我尝试验证我们的应用程序时,我收到了相同的错误消息。我甚至尝试验证之前成功提交的存档,但仍然收到了相同的错误。 - roustem
@roustem,请检查我的答案!希望能对你有所帮助。 - MatterGoal
我曾经遇到过同样的问题,我忘记在项目构建设置中的代码签名身份中设置“第三方Mac开发者应用程序”。 - Codler
4个回答

20

对于其他遇到这个问题的人,你不必对助手应用程序进行第二次代码签名,只需从xarchive中的助手应用程序中删除“embedded.provisionprofile”,然后就可以提交了。


4
这对我有用。主应用程序和辅助应用程序都被代码签名。主应用程序和辅助应用程序都具有独立的分发配置文件和不同的包标识符。我最初可以构建和存档,但在验证过程中遇到问题。存档后,我选择了该存档并在Finder中显示。然后,手动从存档深处的HELPER应用程序中删除embedded.provisionprofile文件。然后回到Xcode,重新验证并提交已清理的存档。 - Craig Otis
谢谢Sean,你刚刚解决了我的头疼问题! - Jorge Leandro Perez
哇!真是救命稻草!真是天赐之礼,真主保佑 :) - real 19
1
我按照这些步骤成功提交了应用程序,但几分钟后收到了苹果的一封电子邮件: “…… 无效签名-当您错误地签署应用程序安装程序时,会出现此错误。此过程需要两个证书: “第三方Mac开发人员应用程序”证书和“第三方Mac开发人员安装程序”证书。在签署软件包时,您需要确保使用Installer证书来签署软件包。通过Xcode组织者提交应用程序或从命令行运行productbuild时,请确保指定此证书....” - real 19

7
这个问题的唯一解决方案似乎是从Xcode中对助手应用程序进行代码签名和沙盒化,然后执行以下操作:
重新从终端对助手应用程序进行代码签名: codesign -f -s "第三方Mac开发者应用程序:" -i "com.bundle.YOUR.HELPER" --entitlements path/to/helper/entitlements YEOR-HELPER.app 从助手应用程序中删除配置文件,并将“运行脚本”添加到“生成阶段”。
rm"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/Contents/Library/LoginItems/YOUR-HELPER.app/Contents/embedded.provisionprofile"

通过这个解决方案,我们已经成功提交了我们的应用程序。


1
自动化两个命令怎么样?rm "${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/YOURHELPER.app/Contents/${EMBEDDED_PROFILE_NAME}"codesign -f -s "${CODE_SIGN_IDENTITY}" -i "com.identifier.YOURHELPER" --entitlements "${SOURCE_ROOT}/Path/To/YOURHELPER.entitlements" "${BUILT_PRODUCTS_DIR}/${CONTENTS_FOLDER_PATH}/Library/LoginItems/YOURHELPER.app" - Douwe Maan
1
你必须再次显式地对助手应用程序进行代码签名吗?我的助手应用程序有自己的BundleID,我没有为其准备生产配置文件。尽管如此,我可以归档主应用程序,并且它通过了iTC测试(状态更改为“等待审核”)。也许在Apple审核期间会被拒绝?:S - zavié
非常感谢,你让我的一天变得美好了。我已经在这些该死的符号错误上挣扎了整整一周了。如果可以的话,我会给你加100分的 :D - Vlad
最终我通过添加以下运行脚本来删除辅助应用中的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 "已删除嵌入式配置文件。" else echo "未找到配置文件。" fi - real 19

1

当我意外地将一些第三方 .a 文件包含在我的目标中时,我遇到了第三个错误。(它们需要用于非 App Store 分发,但我忘记在 App Store 构建中排除它们)。这个错误对于追踪问题并不是太有帮助!


0

最后我通过添加以下运行脚本,从助手应用程序中删除嵌入的 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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接