错误 ITMS-90206:无效的捆绑包含不允许的文件“Frameworks”。

19

我在使用 Xcode 将我的应用程序上传到商店时遇到了问题,具体是以下错误:

Invalid Bundle contains disallowed file frameworks

我看到了很多关于这个错误的帖子,但都在谈论我没有使用的 Extension App。

我正在使用自定义框架和 Cocoapods。

你可以在这里看到我的项目结构:

Tree Xcode Project Custom Framework

  • XXX 是我的应用程序名称
  • SharedXXX 是我的自定义框架
  • Pods 是由Cocoapods创建的项目

这是我的 Cocoapods 文件:

use_frameworks!
link_with 'XXX', 'SharedXXX'
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.1'


workspace 'XXX'

xcodeproj 'XXX/XXX.xcodeproj'
xcodeproj 'Shared/SharedXXX.xcodeproj'

def default_pods
    pod 'Reveal-iOS-SDK', :configurations => ['Debug']
    pod "SnapKit", '~> 0.17.0'
    pod "DKChainableAnimationKit", '~> 1.6.0'
    pod "AsyncSwift"
end

def shared_pods
    pod "Alamofire", '~> 3.0'
    pod 'SwiftyJSON', :git => 'https://github.com/SwiftyJSON/SwiftyJSON.git'
    pod 'ReachabilitySwift', :git => 'https://github.com/ashleymills/Reachability.swift'
end

target :XXX do
    xcodeproj 'XXX/XXX.xcodeproj'
    default_pods
    shared_pods
end

target :XXXDev do
    xcodeproj 'XXX/XXX.xcodeproj'
    default_pods
    shared_pods
end

target :SharedXXX do
    xcodeproj 'Shared/SharedXXXX.xcodeproj'
    shared_pods
end

构建自定义框架(SharedXXX)的设置:

Custom Framework build settings

我将嵌入属性设置为Yes

对于自定义框架(SharedXXX)的常规设置:

Custom Framework General Settings

Cocoapods提供的框架已被链接。

最后,

主项目(树形结构中称为XXX的应用程序项目)的常规设置

Main project:

有任何想法吗?


从错误信息来看,SharedXXX.frameworks本身包含一个名为“frameworks”的文件。显然苹果不喜欢这样。请检查是否有同名的文件。如果没有,请确保框架没有被错误地引用两次。如果所有其他方法都失败了,请谷歌一下错误代码。 - Sam B
我已经谷歌了错误代码,但所有的讨论都是关于“嵌入式Swift”属性... 我的项目中没有名为“Frameworks”的文件... 它可能是来自Cocoapods的文件吗? - Kevin Machado
请查看我的答案 - https://dev59.com/WYnda4cB1Zd3GeqPB6N8#40396491 - Vijay Sharma
2个回答

40

我解决了这个问题。

首先,进入构建设置(Build Settings)

  • 对于主项目(here XXX):将嵌入的内容包含Swift代码(Embedded Content Contains Swift Code)设置为YES

  • 自定义框架(SharedXXX):将嵌入的内容包含Swift代码(Embedded Content Contains Swift Code)设置为NO

  • 自定义框架(SharedXXX):将运行路径搜索(Runpath Search Path)设置为@executable_path/../../Frameworks

这帮助我解决了那个问题。


将自定义框架的“嵌入式内容包含Swift代码”设置为NO后,无法使用TestFlight安装应用程序。 应用程序已成功上传到iTunes,但在从TestFlight下载时,在下载80%后会出现“无法下载应用程序”的消息。 - Hardik Patel
在我的框架目标中将嵌入式内容包含Swift代码的设置改为NO,问题得到了解决。 - arango_86

16

当我尝试从Xcode 9.3上传时,我遇到了同样的问题。 这是因为我在我的OneSignal NotificationServiceExtension中添加了'use_frameworks'

enter image description here

在构建设置中找到的“始终嵌入Swift标准库”的值应仅针对主项目设置为“是”,而不是自定义框架或扩展。

2
我在 Xcode 10 中遇到了完全相同的问题。如果你查看错误信息中提到的路径 XXX.app/Frameworks/YYY.framework,你会发现罪魁祸首是 Frameworks 文件夹,其中包含了所有 Swift 标准库的重复!将 Always Embed Swift Standard Libraries 设置为 Yes 就可以完美解决这个问题。 - roxanneM
谢谢,@roxanneM!你应该将这个作为一个独立的解决方案发布! - Native_Mobile_Arch_Dev
@roxanneM,同样感谢你。这就是解决我的问题的方法。我有一个带有各种插件的Flutter项目。我的Xcode项目有主要的Runner目标和另一个OneSignalNotificationExtension目标。我将后者的“始终嵌入Swift标准库”设置为否,而将主要的Runner的设置保持为是,然后能够上传到商店而没有OP的错误。 - pilcrowpipe
我没有使用XCode或Mac来完成此操作;我试图使用CI流水线(Codemagic)进行构建,Codemagic上的构建成功了,但我得到了与这篇SO帖子讨论的相同错误。如果我搜索,我会在project.pbxproj中找到 ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;,但没有其他关于OneSignal的内容(我们也在使用它)。如果我使用简单的文本编辑器(VS Code),如何设置才能像上面描述的那样,以消除此错误?=) - Ted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接