验证错误:无效的捆绑包。…处的捆绑包包含不允许的文件“ Frameworks”


164

我正在尝试使用Xcode6 GM提交应用程序,但在验证时遇到此错误。该应用程序具有操作扩展和在扩展程序和应用程序本身之间共享的动态框架。

我在项目的任何地方都没有一个名为“ Frameworks”的文件,因此我真的不确定这意味着什么。有没有人遇到这个问题或有任何想法?这是错误的样子


名为Frameworks的文件夹怎么样?
borrrden 2014年

项目中有一个名为“框架”的“组”,但没有文件夹。我将其删除并重新存档,但仍然遇到相同的错误。
2014年

Answers:


307

原来该错误与使用Swift相关(应用程序和扩展都使用Swift)。

对于该应用程序,我必须设置:

Embedded Content Contains Swift Code: YES

对于扩展:

Embedded Content Contains Swift Code: NO

Xcode 8和9

看起来这已Always Embed Swift Standard Libraries在Xcode 8和9中重命名为。因此,对于该应用程序:

Always Embed Swift Standard Libraries: YES

对于扩展:

Always Embed Swift Standard Libraries: NO

7
你是我的救星。“嵌入”表示捆绑中的扩展,并且由于扩展不包含更多扩展,因此不包含快速代码。
克里斯·杜鲁门

2
这对我来说没有解决问题。我也在使用CocoaPods。有没有人看到与此有关的问题?还有其他想法吗?
timschmitz 2015年

8
不要忘记使用WatchKit扩展,以确保运行路径搜索路径具有@executable_path/../../Frameworks
Rogers先生

1
@MrRogers这是在回答之后解决了我的问题的原因。我有一个带有快速监视功能的objC应用程序。在不设置嵌入内容的情况下可以很好地运行,但是遭到了苹果的拒绝。正确设置嵌入内容会破坏应用程序。此搜索路径可以解决此问题。
新秀(Beau Nouvelle)2015年

1
这对我不起作用,我需要做其他事情,并且在有问题的目标扩展上,在此之后,我删除了“ [CP * Embed Pod Frameworks”上的脚本。
A. Trejo

122

对我而言唯一有效的解决方案是将此运行脚本添加到App Extension目标中:

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi

在此处输入图片说明 资料来源:https : //github.com/CocoaPods/CocoaPods/issues/4203


7
我的应用程序未使用Swift,因此这也是唯一对我有用的修复程序。
丹·拉尼

6
值得一提的是,这仅需要添加到扩展中,而不是主要目标。
theDuncs

3
这确实解决了问题,但又带来了另一个问题,就是我无法在设备上的模拟器上运行我的应用程序。出现错误:dyld: Library not loaded: ... Image not found有人可以帮助我吗?
Subkhan Sarif

4
是我还是这种疯子?
bkbeachlabs

1
修复了验证.ipa的问题,但在安装时崩溃并出现错误消息:dyld:库未加载:@ rpath / AFNetworking.framework / AFNetworking引用自:/ var / containers / Bundle / Application /...。原因:找不到图像
Aleem

45

因此,从构建设置中修复此问题的3个步骤

  1. 容器应用: Embedded Content Contains Swift Code: YES
  2. 延期: Embedded Content Contains Swift Code: NO
  3. 扩展:运行路径搜索路径= @executable_path/../../Frameworks

2
容器与扩展,我是Xcode的新手。可可豆荚在哪里?或这两件事在哪里?
Serge Pedroza 2015年

16

就我而言,我刚刚升级到CocoaPods 1.0.1,这似乎是一个新错误。

Pod更新将运行脚本添加到我的扩展程序的目标中,该脚本创建了Frameworks文件夹。我在添加@Roman的运行脚本以将其删除时找到了它。

解决方案是从我的扩展程序的构建阶段删除此脚本。这是需要去的那个...

在此处输入图片说明


7
为我解决了!再一次的是,CocoaPods花了我一个多小时来尝试找出问题所在。我对该产品有认真的爱恨交加的关系。
fguchelaar

2
升级Cocoapods可以1.1.0.rc.2为我解决问题。
奥塔维奥

1
删除Keyboard扩展的Build Phases下的Embed Pod框架对我有用!我正在使用Xcode 8和CocoaPods v1.0.1。谢谢!
风暴工厂


11

上面的答案对我都不起作用。这是因为错误不是由父应用程序或其扩展引起的。而是链接的库之一出错了。

要确认,请先使用Xcode存档,然后使用管理器选择条目,然后使用在Finder中显示定位。这将显示.xcarchive文件。

选择该文件,然后选择“显示包内容”。

在“产品/应用程序”文件夹中选择.app,然后再次选择“显示软件包内容”。

在Frameworks文件夹中找到有问题的模块。例如,如果错误是:

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."

然后在Frameworks/MyLib.framework以下内容中将可能可见:

../Frameworks/libswiftContacts.dylib
../Frameworks/libswiftCore.dylib
../Frameworks/libswiftCoreData.dylib
../Frameworks/libswiftCoreGraphics.dylib
../Frameworks/libswiftCoreImage.dylib
../Frameworks/libswiftCoreLocation.dylib
../Frameworks/libswiftDarwin.dylib
../Frameworks/libswiftDispatch.dylib
../Frameworks/libswiftFoundation.dylib
../Frameworks/libswiftLocalAuthentication.dylib
../Frameworks/libswiftObjectiveC.dylib
../Frameworks/libswiftPassKit.dylib
../Frameworks/libswiftUIKit.dylib
../Frameworks/libswiftWebKit.dylib

存在这些是因为父应用程序包括的链接库(或模块)具有 EMBEDDED_CONTENT_CONTAINS_SWIFT = YES;

在Xcode中找到从属模块并更新标志:

在此处输入图片说明

请注意,克服了这个问题后,该应用仍可能会被iTunes Store拒绝,并附上一封说明性电子邮件:

Invalid Swift Support - The Watch OS application has Swift libraries at both...

再次回到EMBEDDED_CONTENT_CONTAINS_SWIFT标志。确保只有父应用程序将此设置为YES。WatchKit应用程序和扩展程序都必须将此标志设置为NO。如上面@Mike的答案中所述。


10

在我的案例中,有一个CocoaPod库“ Blockly”为“始终嵌入Swift标准库”指定“是”。在为该选项选择“否”后,它起作用了。在此处输入图片说明


9

就我而言,解决方案是从扩展程序的“嵌入式二进制文件”中删除我的框架,并将其添加到扩展程序的“链接框架和库”中。(两者都可以在扩展程序的“常规”标签中找到。)


7

如果Embed Pods Frameworks脚本和Roman脚本都存在于同一目标中。

请检查Embed Pods Frameworks是否位于另一个框架之前。如果没有,只需将Roman的脚本移到最后。


你太厉害了@Reeonce Zeng,保存我的一天!
mgyky

我应该将两个脚本都保留在那里还是仅保留最后一部分?“ $ {SRCROOT} / Pods /目标支持文件/ Pods-Orsys WatchKit扩展/ Pods-Orsys WatchKit扩展-frameworks.sh” cd“ $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /”如果为[[--d“ Frameworks”] ]; 然后rm -fr Frameworks fi

@stack,您应该添加一个新的运行脚本阶段,并填充:`cd“ $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /”如果是[[-d“ Frameworks”]]; 那么RM -fr框架网络连接`
Reeonce曾

您运行新脚本是什么意思?我们已经有一个脚本了。好 ?替换旧脚本,我应该在替换项目后运行一次项目。我是否需要在此处选择“安装程序时运行脚本”选项?

请帮助我更多。我收到了wathckit扩展的错误。在我的watchkit扩展项目中,我的项目中没有“修复appex包含不允许的...”选项/菜单/选项卡。在哪里可以找到它?我只有“嵌入式Pod框架”和“复制Pod框架”。请帮忙。

6

我找不到任何设置,Embedded Content Contains Swift Code但是我能够找到一个设置Always Embed Swift Standard Libraries并将其设置为NO(对于我的框架)确实解决了此问题。


4
  1. 容器应用程序:构建设置->嵌入式内容包含Swift代码:
  2. 扩展:构建设置->嵌入式内容包含Swift代码:NO
  3. 扩展:构建阶段- >添加了以下运行脚本

cd如果[[-d“框架”]],则显示“ $ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /”;然后rm -fr Frameworks fi

  1. (重要)扩展:构建阶段->将运行脚本移到最后(在Embed Pods Frameworks脚本之后)

对我来说,“到最后”是重要的一环。
安迪·奥布塞克

3

如果您使用的是CocoaPods,我会考虑删除有问题的目标(扩展名)上的Embed框架构建阶段,这对我来说已经解决了问题。


2

我遇到了同样的错误,这是因为我正在将框架复制到扩展包中。事实证明,应该将扩展使用的框架复制到Main App捆绑包中,并且仅在扩展构建设置中链接(不复制)。确保扩展版本中具有搜索路径'@executable_path /../../ Frameworks'。我认为该路径是XCode 10自动添加的。


1

我发现了很多这样的问题,没有一个可以帮助我解决问题,因此希望这可以对某人有所帮助。

我正在创建一个具有Intent扩展名(用于Siri快捷方式)的应用程序,并且我正在使用一个框架,用于扩展名和我的应用程序之间的代码共享(如Apple所推荐)。

我已经在目标的“常规”设置的“框架和库”部分的扩展中添加了框架。在此处添加框架时,将有两列。一个说框架的名称,另一个说“嵌入”。“嵌入”列中没有任何显示,因此我认为还可以,但是我必须为我的框架的该列明确选择“不嵌入”选项。当我这样做并存档到Xcode中时,我可以在验证过程中看到该框架不再在我的ipa内容中的每个目标下列出了,只是一次,验证终于成功了。



0

我遇到了同样的错误,以及

不允许嵌套包错误

我的问题是SquareReaderSDK.framework专门的,但我必须按照他们的说明添加新的运行脚本:

FRAMEWORKS="${BUILT_PRODUCTS_DIR}/${FRAMEWORKS_FOLDER_PATH}"
"${FRAMEWORKS}/SquareReaderSDK.framework/setup"

0

此处列出的“构建设置”都没有为我解决此问题。但是,在将某些框架从“嵌入式二进制文件”移动到“链接的框架和库”之后,确实可以使它工作。

看来我的主应用程序和我的一个自定义框架在这两个框架中都具有相同的框架依赖关系,这似乎不行,但是将其从嵌入区域移至链接区域后,我可以成功上传应用程序了。没有错误。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.