如何调试"无效的捆绑"仅在提交到应用商店

时间:2016-07-29 21:06:47

标签: ios testflight appstore-approval

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

  

亲爱的开发人员,

     

我们发现您最近交付的一个或多个问题"我的应用程序的名称在这里"。要处理您的交货,请执行以下操作   问题必须纠正:

     

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

     

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

     

此致

     

App Store团队

此处没有具体信息。我该怎么调试呢?

12 个答案:

答案 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步:确保自定义框架已添加到目标常规标签中的嵌入式二进制文件enter image description here

第2步:在构建设置下

主项目目标设置Always Embed Swift Standard Libraries = Yes

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

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

Ref

答案 3 :(得分:2)

我的问题: 我在嵌入式框架中遇到了同样的错误。

  1. App项目具有自定义框架项目
  2. Custom Framework项目内部是另一个Custom Framework项目
  3. 为模拟器和设备构建的应用程序没有问题但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标准搜索路径   使用“运行路径搜索路径”构建设置的库。

我的解决方案:

  • 经过几天的调试,对我有用的是从Xcode组织者上载档案后禁用“包括iOS内容的位码” 。似乎此选项修改了导致验证程序失败的二进制文件。

enter image description here

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

答案 8 :(得分:1)

我还从Apple收到了类似的邮件:

  

亲爱的开发人员,

     

我们确定了您的应用最近交付的一个或多个问题,   “ ********。请更正以下问题,然后   再次上传。

     

ITMS-90562:无效的捆绑软件-一个或多个动态库   您的应用程序引用的内容不在dylib搜索路径中。

     

最诚挚的问候,

     

App Store团队

我为自己的手表应用程序使用了自己的框架。我通过在扩展目标中将框架选项更改为“无需签名嵌入”来解决了这个问题。默认选项是“不嵌入”。

enter image description here

答案 9 :(得分:0)

所以我在这方面挣扎了两天。结果是我在存档中检查了UITests for the Build for the Scheme for the archiving。

从存档中取消选中后,重新存档,验证它(尽管在总是通过之前验证它),以及"上传到AppStore"我没有收到Apple发来的电子邮件,告诉我无效的Swift支持。相反,我收到了一封电子邮件,表明它已被处理好了!

答案 10 :(得分:0)

有同样的问题。这是我发生的,因为我的框架目标之一已添加到“链接二进制文件与库”中的主要目标中,但未添加到“目标依赖项”和“嵌入式二进制文件”中。

答案 11 :(得分:-1)

我们遇到了同样的问题,即使经过all the steps(请参阅“缺少框架捆绑包”),唯一可行的方法是禁用位码