我的应用程序中有很多框架。 App在adhoc / enterprise发布中运行良好。只有当我提交到应用程序商店进行testflight测试时,我才会收到来自apple的错误电子邮件:
亲爱的开发人员,
我们发现您最近交付的一个或多个问题"我的应用程序的名称在这里"。要处理您的交货,请执行以下操作 问题必须纠正:
无效的捆绑包 - 您的应用引用的一个或多个动态库不在dylib搜索路径中。
一旦纠正了这些问题,您就可以重新更新已更正的二进制文件。
此致
App Store团队
此处没有具体信息。我该怎么调试呢?
答案 0 :(得分:28)
Apple Developer Technical Support的回复表示这是苹果方面的一个错误。这是下面建议的解决方法,对我不起作用:
要诊断此问题,您应该导出要发送的IPA 来自Xcode的App Store。由于IPA是zip文件,你可以 通过右键单击并打开打开>解压缩它档案 效用。你应该在解压缩中找到你的主要可执行文件 文件夹结构并在命令行运行otool以查看库 清单:otool -L
您获得的路径列表应与您在路径中找到的路径相匹配 IPA。你的所有库都应该以@rpath开头。一个简单的 将此列表中的所有内容与解压缩的IPA文件夹进行比较 应该揭示遗漏的东西。
一旦您知道缺少什么,请转到Xcode构建阶段设置。 复制文件或嵌入应该有一个构建阶段 包含缺失库的框架 - 您应该只添加 库列表。如果您没有看到这些构建阶段, 您可以通过添加新的“复制文件”构建阶段来重新创建它 框架的目标,并将库添加到列表, 确保检查代码登录复制。
如果您的主二进制文件中没有找到任何遗漏,请务必 对你可能拥有的任何其他二进制文件执行相同的搜索,例如a watchOS应用程序或iOS应用程序扩展程序。
如果您发现所有框架都处于此构建阶段,请 看一下应用目标的嵌入式二进制文件部分 一般页面,如果您看到../ next的多个级别,请告诉我 你找到的二进制文件丢失了。
请告诉我它是否适合您!
答案 1 :(得分:12)
将应用程序支持的应用程序上传到应用程序商店时,我遇到了同样的问题。
我能够使用第一个答案中的提示解决它,使用otool -L
来分析ipa或xcarchive中的二进制文件。
但问题不在于我的框架(@rpath
),而是快速的lib。我注意到框架文件夹中缺少libswiftWatchKit.dylib
。
对我有用的解决方案就像在手表应用(或手表应用扩展程序,但不是两者)的构建设置中设置EMBEDDED_CONTENT_CONTAINS_SWIFT=YES
一样简单。之后,所有必要的swift库都被正确复制到存档中的监视应用程序路径,并上传到应用程序商店正常工作。
显然,如果您只在主应用程序的文件夹中提供必要的swift库,则监视应用程序可以正常工作并上传。
答案 2 :(得分:8)
将自定义 Swift框架添加到我的项目后,我将应用程序上传到 iTunes连接后收到了此电子邮件。
我从 iTunes商店
收到此电子邮件无效的捆绑包 - 您的应用引用的一个或多个动态库不在dylib搜索路径中。
此问题的修复很简单,
第1步:确保自定义框架已添加到目标常规标签中的嵌入式二进制文件 。
第2步:在构建设置下
为主项目目标设置Always Embed Swift Standard Libraries = Yes
。
为您的自定义框架目标设置Always Embed Swift Standard Libraries = No
。
这解决了我的问题,我能够将二进制文件上传到 iTunes连接。
答案 3 :(得分:2)
我的问题: 我在嵌入式框架中遇到了同样的错误。
为模拟器和设备构建的应用程序没有问题但Apple测试失败,返回“无效的捆绑包”。
我检查了包装,就像技术支持人员告诉Taha一样,所有内容都存在且正确无误!
我的解决方案: 我重新构建了项目,以便两个自定义框架并排放置,另一个不再嵌入另一个框架中。
这看起来是一个Apple验证问题,因为在设备和模拟器上一切正常,但解决方法很简单。
答案 4 :(得分:2)
在我的情况下,在构建设置中,当我将以下内容添加到库的构建设置时,这已得到修复:
DYLIB_INSTALL_NAME_BASE = @rpath
线索是一个链接器警告:'YourLibrary的安装名称以“/”开头,但它不是来自指定的SDK'
答案 5 :(得分:1)
我遇到了同样的问题,原因是应用程序包中的Frameworks
子文件夹中没有一个框架。
我通过添加复制字段构建阶段并在那里添加缺少的.framework文件来修复它。
答案 6 :(得分:1)
Apple技术说明TN2435中也解决了此错误消息 在应用程序中嵌入框架:https://developer.apple.com/library/archive/technotes/tn2435/_index.html
您可以在标题“ Missing Framework Bundle”下找到包含故障排除步骤的错误消息。
答案 7 :(得分:1)
尝试了以上所有解决方案,但对我不起作用。
我最近在Xcode 10.1中遇到了这个问题,并且我的所有框架均被正确引用(是否使用了otool -L,并且所有内容都已对齐)。
似乎Apple验证过程中发生了一些变化,可能是错误,可能不是苹果的终结,但是我以前的所有构建都已上载并通过了验证,并且此后我没有添加任何新框架。
将二进制文件上传到iTunesConnect时,会看到以下错误:
无效的捆绑包-由一个或多个动态库引用 您的应用程序不在dylib搜索路径中。
无效的捆绑包-该应用使用Swift,但是其中一个二进制文件无法 链接到它,因为找不到它。检查应用程序是否捆绑 使用“始终嵌入Swift”可以正确嵌入Swift标准库 标准库”的构建设置,以及每个使用的二进制文件 Swift拥有正确的嵌入式Swift标准搜索路径 使用“运行路径搜索路径”构建设置的库。
我的解决方案:
答案 8 :(得分:1)
我还从Apple收到了类似的邮件:
亲爱的开发人员,
我们确定了您的应用最近交付的一个或多个问题, “ ********。请更正以下问题,然后 再次上传。
ITMS-90562:无效的捆绑软件-一个或多个动态库 您的应用程序引用的内容不在dylib搜索路径中。
最诚挚的问候,
App Store团队
我为自己的手表应用程序使用了自己的框架。我通过在扩展目标中将框架选项更改为“无需签名嵌入”来解决了这个问题。默认选项是“不嵌入”。
答案 9 :(得分:0)
所以我在这方面挣扎了两天。结果是我在存档中检查了UITests for the Build for the Scheme for the archiving。
从存档中取消选中后,重新存档,验证它(尽管在总是通过之前验证它),以及"上传到AppStore"我没有收到Apple发来的电子邮件,告诉我无效的Swift支持。相反,我收到了一封电子邮件,表明它已被处理好了!
答案 10 :(得分:0)
有同样的问题。这是我发生的,因为我的框架目标之一已添加到“链接二进制文件与库”中的主要目标中,但未添加到“目标依赖项”和“嵌入式二进制文件”中。
答案 11 :(得分:-1)
我们遇到了同样的问题,即使经过all the steps(请参阅“缺少框架捆绑包”),唯一可行的方法是禁用位码。