我有一个带有三个Swift自定义框架的Swift项目。该应用程序构建并成功运行但当我尝试使用Application Loader上传到iTunes Connect时,我得到以下三个框架的错误:
错误ITMS-90206:“无效的捆绑包.'XX.app.Frameworks/YYY.framework'的捆绑包含不允许的文件'框架'。”
如this SO answer中所述,我在框架中将'嵌入内容包含Swift代码'设置为NO,在应用程序中设置为YES,但此错误仍然存在。
三个框架都是我自己的(我正在认真考虑重新设计项目以完全避免框架,但这是我现在想要避免的一项苦差事。)
我没有使用cocoapods。
有关如何解决此错误的任何想法?
答案 0 :(得分:3)
除了ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES=NO
之外,为我解决此问题的关键还是在所有目标的构建设置中设置EMBEDDED_CONTENT_CONTAINS_SWIFT=NO
,除了主应用目标。不得不清除派生数据,但之后一切都很顺利。
答案 1 :(得分:0)
所以这不是一个好的答案,但这是我解决它的方法:
我创建了一个新项目并复制到我的所有文件中 - 在没有框架的平面结构中,编辑只是为了删除相关的import语句。它现在上传很好。因此,框架结构是问题的根源。不确定Swift嵌入式自定义库的想法是否已经破坏,或者我做错了什么,所以仍然在寻找更好的答案......
答案 2 :(得分:0)
在the Xcode 8.3 Release note的(SE-0133)中,有EMBEDDED_CONTENT_CONTAINS_SWIFT
设置的说明:
新构建设置ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES替换了已弃用的EMBEDDED_CONTENT_CONTAINS_SWIFT设置。这个新设置表明Xcode应该始终将Swift标准库嵌入到已设置的目标中,无论目标是否包含Swift代码。使用此设置的典型方案是目标直接使用或嵌入包含Swift代码的其他产品。 (26158130)
表示ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
已替换EMBEDDED_CONTENT_CONTAINS_SWIFT
,因此您需要将前一个(ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES
)更改为扩展目标中的NO
。