验证错误:无效的捆绑包。在...包含不允许的文件'框架'

时间:2014-09-11 02:12:14

标签: ios xcode itunesconnect

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

我在项目的任何地方都没有名为'Frameworks'的文件,所以我真的不确定这是什么意思。有没有人得到这个问题或有任何想法?here's what the error looks like

20 个答案:

答案 0 :(得分:271)

原来这个错误与使用Swift有关(应用程序和扩展程序都使用Swift)。

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

Embedded Content Contains Swift Code: YES

和扩展名:

Embedded Content Contains Swift Code: NO

Xcode 8和9

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

Always Embed Swift Standard Libraries: YES

和扩展名:

Always Embed Swift Standard Libraries: NO

答案 1 :(得分:114)

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

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

enter image description here 来源:https://github.com/CocoaPods/CocoaPods/issues/4203

答案 2 :(得分:40)

从构建设置

修复此问题的3个步骤
  1. 容器应用:Embedded Content Contains Swift Code: YES
  2. 扩展名:Embedded Content Contains Swift Code: NO
  3. 扩展名:运行路径搜索路径= @executable_path/../../Frameworks

答案 3 :(得分:16)

在我的情况下,我刚刚升级到CocoaPods 1.0.1,这似乎是一个新的bug。

Pod更新将一个运行脚本添加到我的Extension目标,该目标创建了Frameworks文件夹。我找到了它,因为我要添加@ Roman的运行脚本来删除它。

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

enter image description here

答案 4 :(得分:11)

删除标题中包含embed字词的扩展程序的每个构建阶段

此外:

  • 必须将扩展目标的嵌入内容包含Swift代码设置为Yes

答案 5 :(得分:11)

上述答案都不适合我。这是因为错误不是由父应用程序或它的扩展引起的。相反,其中一个链接库是错误的。

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

选择该文件并选择"显示包装内容"。

在Products / Applications文件夹中选择.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中找到依赖模块并更新标志:

enter image description here

请注意,在克服此问题后,应用程序仍可能会被iTunes Store中的解释性电子邮件拒绝:

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

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

答案 6 :(得分:8)

在我的情况下,解决方案是从我的扩展程序的嵌入式二进制文件中删除我的框架,并将其添加到我的扩展程序的链接框架和库中。 (两者都可以在扩展程序的常规选项卡中找到。)

答案 7 :(得分:8)

就我而言,有一个CocoaPod库“Blockly”为“Always Embed Swift Standard Libraries”指定了Yes。在为选项取消后,它有效。enter image description here

答案 8 :(得分:7)

如果嵌入窗格框架脚本和See a live version of this都存在于同一目标中。

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

答案 9 :(得分:6)

我无法找到Embedded Content Contains Swift Code的任何设置,但我能够找到设置Always Embed Swift Standard Libraries并将此设置为NO,因为我的框架确实解决了这个问题。

答案 10 :(得分:4)

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

    cd“$ {CONFIGURATION_BUILD_DIR} / $ {UNLOCALIZED_RESOURCES_FOLDER_PATH} /” if [[-d“Frameworks”]];然后 rm -fr框架 网络

    1. (重要)扩展:构建阶段 - >将运行脚本移至最后(在嵌入窗格框架脚本之后)

答案 11 :(得分:3)

以上答案对我不起作用。我已经做了下面的事情。

  1. 复制了团队中其他开发人员的扩展目标设置
  2. 容器应用程序:嵌入式内容包含Swift代码:是
  3. 扩展名:嵌入式内容包含Swift代码:NO

请从目标服务器检查扩展的所有设置。

答案 12 :(得分:2)

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

答案 13 :(得分:1)

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

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

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

答案 14 :(得分:1)

就我而言,Firebase SPM 是罪魁祸首。由于框架文件夹,我有一个 ShareExtension 未能通过 AppStore 验证。我用架构中的归档后脚本修复了这个问题:

Scheme script

答案 15 :(得分:0)

我第一次使用XCode 7.1.1为我的应用程序设置了今天扩展(我的项目中没有Swift)。 脚本(https://github.com/CocoaPods/CocoaPods/issues/4203)对我没用。

将cocoapods降级到版本0.39.0.beta.3,运行pod install,然后重新归档解决了问题。

答案 16 :(得分:0)

我也遇到了同样的错误,

  

不允许嵌套的包错误

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

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

答案 17 :(得分:0)

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

似乎我的主应用程序和我的一个自定义框架在这两个框架中都具有相同的框架依赖关系,这似乎是不行,但是将其在我的主应用程序中从“嵌入式”区域移动到“链接”区域允许我上传应用成功,没有错误。

答案 18 :(得分:0)

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

答案 19 :(得分:0)

您应该从所有 pod 和扩展程序中删除嵌入式框架,如:https://stackoverflow.com/a/40396491/2559850