如何调试"Invalid Bundle"错误,该错误仅在提交到app store后发生

Tah*_*bek 33 appstore-approval ios testflight

我的应用程序中有很多框架.App在adhoc/enterprise发布中运行良好.只有当我提交到应用程序商店进行testflight测试时,我才会收到来自apple的错误电子邮件:

亲爱的开发者,

我们发现您最近发送的"我的应用名称"中存在一个或多个问题.要处理您的交付,必须纠正以下问题:

无效的捆绑包 - 您的应用程序引用的一个或多个动态库不在dylib搜索路径中.

一旦纠正了这些问题,您就可以重新更新已更正的二进制文件.

问候,

App Store团队

这里没有具体的信息.我该怎么调试呢?

Tah*_*bek 33

得到了Apple开发者技术支持部门的回答,该支持称这是苹果方面的一个漏洞.这是下面建议的解决方法,对我来说不起作用:

要诊断此问题,您应该从Xcode将要发送的IPA导出到App Store.由于IPA是zip文件,您可以通过右键单击并打开打开方式>存档实用程序来解压缩它.您应该在解压缩的文件夹结构中找到主要可执行文件,并在命令行运行otool以查看库列表:otool -L

您获得的路径列表应与您在IPA中找到的路径列表相匹配.你的所有库都应该以@rpath开头.将此列表中的所有内容与解压缩的IPA文件夹进行简单比较,可以揭示缺少的内容.

一旦知道缺少什么,请转到Xcode构建阶段设置.复制文件或嵌入框架应该有一个构建阶段,其中包含缺少的库 - 您应该只将库添加到列表中.如果您没有看到这些构建阶段中的任何一个,则可以通过添加新的"复制文件"构建阶段,将"目标"设置为"框架"以及将库添加到列表来重新创建它,从而确保选中"代码签名复制".

如果您在主二进制文件中没有找到任何遗漏,请确保对您可能拥有的任何其他二进制文件执行相同的搜索,例如watchOS应用程序或iOS应用程序扩展.

如果您发现所有框架都处于此构建阶段,请查看应用程序目标的"常规"页面的"嵌入式二进制文件"部分,如果您在找到的二进制文件旁边看到多个级别的../,请告诉我们.不见了.

如果它适合您,请告诉我!

  • @Taha Selim Bebek 你在哪里找到 ipa 文件? (2认同)

Mar*_*lak 14

将带有监视支持的应用程序上传到应用商店时,我遇到了同样的问题.

我能够用第一个答案的提示来解决它,otool -L用来分析ipa或xcarchive中的二进制文件.但是,问题不在于我的框架(at @rpath),而是一个快速的lib.我注意到libswiftWatchKit.dylib框架文件夹中缺少了.

对我有用的解决方案就像设置EMBEDDED_CONTENT_CONTAINS_SWIFT=YES在手表应用程序(或手表应用程序扩展程序,但不是两者)的构建设置一样简单.之后,所有必要的swift库都被正确复制到存档中的监视应用程序路径,并上传到应用程序商店正常工作.

显然,如果您只在主应用程序的文件夹中提供必要的swift库,则监视应用程序可以工作并上传过程.

  • 在Xcode 8它已经改变为'ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES` (4认同)
  • 我有同样的问题,但设置`EMBEDDED_CONTENT_CONTAINS_SWIFT`对我没有任何作用.我在这里发布:http://stackoverflow.com/questions/39481174/xcode-8-or-cocoapods-not-embedding-enough-swift-dylibs-for-watch-appex (2认同)

Zai*_*han 11

将自定义Swift框架添加到我的项目后,我将应用程序上传到iTunes连接后收到了此电子邮件.

我从iTunes商店收到这封电子邮件,

无效的捆绑包 - 您的应用程序引用的一个或多个动态库不在dylib搜索路径中.

对于这个问题,修复很简单,

第1步:确保您的自定义框架添加到嵌入式二进制文件常规选项卡中你的目标的. 在此输入图像描述

第2步:在构建设置下,

设置Always Embed Swift Standard Libraries = Yes为您的主项目的目标.

Always Embed Swift Standard Libraries = No为您的自定义框架目标设置.

这解决了我的问题,我能够将二进制文件上传到iTunes连接.

参考


Ale*_*yen 8

尝试了上述所有解决方案,但对我不起作用。

我最近在 Xcode 10.1 中遇到了这个问题,我所有的框架都被正确引用(otool -L 和所有东西都排好了)。

似乎苹果验证过程中发生了一些变化,可能是一个错误,可能不是苹果的最终版本,但我之前的所有构建都上传并验证得很好——从那以后我没有添加任何新框架。

将二进制文件上传到 iTunesConnect 后,我​​会看到以下错误:

Invalid Bundle - dylib 搜索路径中不存在您的应用程序引用的一个或多个动态库。

无效的捆绑包- 应用程序使用 Swift,但其中一个二进制文件无法链接到它,因为找不到它。使用“始终嵌入 Swift 标准库”构建设置检查应用程序包是否正确嵌入了 Swift 标准库,并且使用“运行路径搜索路径”构建设置检查每个使用 Swift 的二进制文件都具有到嵌入式 Swift 标准库的正确搜索路径。

我的解决方案:

  • 经过几天的调试,对我有用的是在从 Xcode 管理器上传档案时禁用“包含 iOS 内容的位码”。似乎此选项修改了导致验证器失败的二进制文件。

在此处输入图片说明

  • 或者您可以在构建设置中禁用位码

  • 这不是一个解决方案,而是一个远非完美的解决方法。省略位码会增加应用程序的整体大小。 (3认同)
  • 当位码禁用时,Firebase Crashlytics 将不起作用 (2认同)