ChatGPT解决这个技术问题 Extra ChatGPT

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

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

我在项目的任何地方都没有名为“Frameworks”的文件,所以我真的不确定这应该是什么意思。有没有人得到这个问题或有任何想法?

https://i.stack.imgur.com/YjRpt.png

由于下面列出的问题,存档验证失败。 iTunes Store 操作失败。无效的捆绑包。 ... 处的捆绑包包含不允许的文件“框架”。

一个名为 Frameworks 的文件夹怎么样?
项目中有一个名为 Frameworks 的“组”,但没有文件夹。我删除它,重新存档,我仍然得到同样的错误。

R
Rob Zombie

原来该错误与使用 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

你是我的救星。 “Embedded”是指 bundle 中的扩展,由于一个扩展不包含更多的扩展,所以它不包含 swift 代码。
这并没有为我解决问题。我也在使用 CocoaPods。有没有人看到与此相关的问题?还有其他想法吗?
不要忘记使用 WatchKit 扩展来确保运行路径搜索路径具有 @executable_path/../../Frameworks
@MrRogers 这就是在遵循答案后解决了我的问题。我有一个带有 swift watch 的 objC 应用程序。在不设置嵌入内容的情况下运行良好,但它被苹果拒绝了。正确设置嵌入的内容,破坏了应用程序。这个搜索路径是修复它的原因。
这对我不起作用,我需要做其他事情并且在有问题的目标扩展上,我在此之后删除了“[CP * Embed Pods Frameworks”上的脚本它可以正常工作!
j
johnnieb

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

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

https://i.stack.imgur.com/QHgrm.png


我的应用程序不使用 Swift,所以这也是唯一对我有用的修复程序。
值得一提的是,这只需要添加到扩展中,而不是主要目标。
这确实解决了这个问题,但它带来了另一个问题,即我既不能在我的设备上也不能在模拟器上运行我的应用程序。它给出了一个错误:dyld: Library not loaded: ... Image not found 任何人都可以帮助我吗?
只是我还是这种疯子?
修复了验证 .ipa 但在安装时崩溃并显示错误消息:dyld:未加载库:@rpath/AFNetworking.framework/AFNetworking 引用自:/var/containers/Bundle/Application/.... 原因:找不到图像
R
RawMean

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

容器应用程序:嵌入式内容包含 Swift 代码:是扩展:嵌入式内容包含 Swift 代码:否扩展:运行路径搜索路径 = @executable_path/../../Frameworks


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

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

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

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

https://i.stack.imgur.com/vO8pY.png


为我解决了!又是 CocoaPods 花了我一个多小时试图找出问题所在。我对那个产品有着严重的又爱又恨的关系。
将 Cocoapods 升级到 1.1.0.rc.2 为我解决了这个问题。
删除键盘扩展的构建阶段下的嵌入 Pods 框架对我有用!我正在使用 Xcode 8 和 CocoaPods v1.0.1。谢谢!
B
Bartłomiej Semańczyk

删除标题中包含 embed 字样的扩展程序的每个 Build Phase

此外:

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


M
Max MacLeod

以上答案都不适合我。这是因为错误不是由父应用程序或其扩展引起的。而是其中一个链接库有问题。

要确认,首先使用 Xcode 存档,然后使用 Organizer 选择条目并使用 Show in 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 中找到依赖模块并更新标志:

https://i.stack.imgur.com/cgnWP.png

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

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

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


s
suztomo

https://i.stack.imgur.com/USetc.png


P
Pim

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


C
Community

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

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


你太棒了@Reeence Zeng,拯救我的一天!
我应该将两个脚本都保留在那里还是只保留最后一部分? "${SRCROOT}/Pods/Target 支持文件/Pods-Orsys WatchKit Extension/Pods-Orsys WatchKit Extension-frameworks.sh" cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ] ];然后 rm -fr 框架 fi
@stack,您应该添加一个新的运行脚本阶段,并填写: ` cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ]];然后 rm -fr 框架 fi `
运行新脚本是什么意思?我们已经有一个脚本。好 ?替换旧脚本,我应该运行一次项目并替换您的文本。我需要在那里选择“安装程序时运行脚本”选项吗?
请帮我多一点。我收到了 wathckit 扩展的错误。在我的 watchkit 扩展项目中,我的项目中没有“修复 appex 包含不允许的...”选项/菜单/选项卡。我在哪里可以找到它?我只有“嵌入 pods 框架”和“复制 pods 框架”。请帮忙。
K
Kudit

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


N
Narasimha Nallamsetty

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

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

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


谢谢!这为我解决了。此解决方案可确保框架仅包含在应用程序包中一次。
K
Kurt J

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


Y
Yongxiang Ruan

Container App: Build Setting -> Embedded Content Contains Swift Code: YES Extension: Build Setting -> Embedded Content Contains Swift Code: NO Extension: Build Phase -> 在其中添加了以下运行脚本

cd "${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/" if [[ -d "Frameworks" ]];然后 rm -fr 框架 fi

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


“到最后”对我来说是重要的部分,谢谢。
Z
Zatman

我遇到了同样的错误,这是因为我将框架复制到扩展包中。事实证明,扩展使用的框架应该被复制到主应用程序包中,并且只在扩展构建设置中链接(而不是复制)。确保在扩展构建中有搜索路径“@executable_path/../../Frameworks”。我认为该路径是由 XCode 10 自动添加的。


T
Travis M.

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

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


A+ 我还有一个自定义框架,它与应用程序具有相同的依赖关系!
B
Belle B. Cooper

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

我正在创建一个具有 Intent 扩展(用于 Siri 快捷方式)的应用,并且按照 Apple 的建议,我正在使用一个框架来在扩展和我的应用之间共享代码。

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


J
Juan Sagasti

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

https://i.stack.imgur.com/pjv3h.png


В
Владимир Ефанов

对于 Unity3D

将 Unity-iPhone 目标的“始终嵌入 Swift 标准库”设置为 YES 删除 .xcodearchive (见图)档案路径中的框架文件夹 ~/Library/Developer/Xcode/Archives

https://i.stack.imgur.com/KdHtH.png

https://i.stack.imgur.com/3bPEE.png


a
andreacipriani

我第一次使用 XCode 7.1.1 时遇到了这个问题,我的应用程序有一个 Today Extension(我的项目中没有 Swift)。脚本 (https://github.com/CocoaPods/CocoaPods/issues/4203) 对我不起作用。

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


S
Stephen Rauch

我遇到了同样的错误,还有一个

不允许的嵌套包错误

我的问题出在 SquareReaderSDK.framework 上,但我必须按照他们的说明添加一个新的运行脚本:

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

M
Moran77

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


В
Владимир Ефанов

您必须将脚本添加到构建阶段的末尾

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

https://i.stack.imgur.com/l72Dw.png