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

Mik*_*ike 150 xcode itunesconnect ios

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

我在项目的任何地方都没有名为'Frameworks'的文件,所以我真的不确定这是什么意思.有没有人得到这个问题或有任何想法?这是错误的样子

Mik*_*ike 285

事实证明错误与使用Swift(应用程序和扩展程序都使用Swift)有关.

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

Embedded Content Contains Swift Code: YES
Run Code Online (Sandbox Code Playgroud)

并为扩展:

Embedded Content Contains Swift Code: NO
Run Code Online (Sandbox Code Playgroud)

Xcode 8和9

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

Always Embed Swift Standard Libraries: YES
Run Code Online (Sandbox Code Playgroud)

并为扩展:

Always Embed Swift Standard Libraries: NO
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记使用WatchKit扩展来确保Runpath搜索路径具有`@executable_path /../../ Frameworks` (8认同)
  • 你是我的救世主."嵌入"意味着捆绑中的扩展,并且由于扩展不包含更多扩展,因此它不包含快速代码. (6认同)
  • 这并不能解决我的问题.我也在使用CocoaPods.有没有人看到与此有关的问题?还有其他想法吗? (2认同)

Rom*_*man 115

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

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/"
if [[ -d "Frameworks" ]]; then 
    rm -fr Frameworks
fi
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述 资料来源:https://github.com/CocoaPods/CocoaPods/issues/4203

  • 我的应用程序不使用Swift,所以这是唯一对我有用的修复程序. (7认同)
  • 值得一提的是,这只需要添加到扩展名,而不是主要目标. (5认同)
  • 是我还是这种疯子? (3认同)
  • 这确实解决了这个问题,但它给出了另一个问题,即我无法在我的设备上运行我的应用程序.它给出了一个错误:`dyld:未加载库:...未找到图像`任何人都可以帮助我吗? (2认同)
  • 已修复验证 .ipa 但在安装时崩溃并显示错误消息:dyld:未加载库:@rpath/AFNetworking.framework/AFNetworking 引用自:/var/containers/Bundle/Application/...。原因:找不到图像 (2认同)

Vin*_*ong 43

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

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

  • 容器与扩展,我是 Xcode 的新手。那是哪里,是可可豆荚吗?或者这两件事在哪里? (2认同)
  • 这个效果非常好,但是 XCode 中的设置现在被命名为“始终嵌入 swift 标准库”,我花了一些时间才弄清楚:P (2认同)

Dan*_*ney 16

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

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

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

在此输入图像描述

  • 为我解决了!再一次,它的CocoaPods花费了我一个多小时的时间来试图弄清楚什么是错的.我对这个产品有着严肃的爱与恨关系. (7认同)
  • 将Cocoapods升级到`1.1.0.rc.2`为我解决了这个问题. (2认同)

Bar*_*zyk 11

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

另外:

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


Max*_*eod 11

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

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

选择该文件,然后选择"显示包内容".

在Products/Applications文件夹中选择.app,然后再次选择"Show Package Contents".

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

ERROR ITMS-90206: "Invalid Bundle. The bundle at 'MyApp.app/Frameworks/MyLib.framework' contains disallowed file 'Frameworks'."
Run Code Online (Sandbox Code Playgroud)

然后在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
Run Code Online (Sandbox Code Playgroud)

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

在Xcode中找到依赖模块并更新标志:

在此输入图像描述

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

Invalid Swift Support - The Watch OS application has Swift libraries at both...
Run Code Online (Sandbox Code Playgroud)

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


suz*_*omo 9

就我而言,有一个CocoaPod库"Blockly"为"Always Embed Swift Standard Libraries"指定了Yes.在为选项做出NO之后,它起作用了.在此输入图像描述


Pim*_*Pim 8

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


Ree*_*eng 7

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

请检查嵌入窗格框架是否位于另一个框架之前.如果没有,只需将罗马的脚本移到最后.


Guj*_*min 6

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


Nar*_*tty 5

上述答案对我不起作用。我做了以下事情。

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

请检查目标扩展程序的每个设置。