我添加了一个共享框架来在app和watch扩展之间共享代码。后来我删除了共享框架,因为它会导致很多问题。我可以在iPhone和watch上构建和运行我的app。但是当我提交到app store时,我看到以下两个错误:ERROR ITMS-90205: "Invalid Bundle. The bundle at 'xxx WatchKit Extension.appex' contains disallowed nested bundles."
ERROR ITMS-90206: "Invalid Bundle. The bundle at 'xxx WatchKit Extension.appex' contains disallowed file 'Frameworks'."
我已经尝试了stackoverflow上提到的所有解决方案(this,this,this)没有一个对我有效。我如何修复错误?来自苹果的错误消息真的没有给予我一个线索。
8条答案
按热度按时间ippsafx71#
我仍然不完全明白是什么原因导致了这个问题,但我偶然发现了一个答案,终于为我解决了这个问题。
https://github.com/CocoaPods/CocoaPods/issues/4203
具体来说,2015年10月12日Mikehouse的帖子是问题的解决方案。
将以下运行脚本添加到所有嵌入的扩展目标中。在我的情况下,我必须将运行脚本作为构建阶段添加到我的Today扩展和Apple Watch应用扩展中。
zxlwwiss2#
“ITMS-90206”错误已在此帖子中解决:Validation Error: Invalid Bundle. The bundle at ... contains disallowed file 'Frameworks'
需要在WatchKit Extension的Build选项中将该设置从Yes更改为No:
bmvo0sr53#
上面的建议对我不起作用。
Embedded Content Contains Swift Code: NO
对我没什么帮助。
我在使用动态框架时遇到了这个问题。我的动态框架包含其他动态框架,因此可以使用:
Embedded Content Contains Swift Code: YES
而不是让其他动态框架将其设置为No。
Always Embed Swift Standard Libraries: NO
在“生成阶段”下。
将此设置为YES会生成
frameworks
文件夹,导致上载到ITC失败。w46czmvw4#
在主目标中添加:
问题是,在同一个项目的多个目标上添加SPM包会重复依赖项。此扩展上的框架可能在主目标上,因此这应该足够了。否则,请在主目标上使用下面的完整脚本,如果需要,它将通过将框架移动到应用程序来消除重复。
不要将此添加到您的扩展目标。它会尝试删除重复的框架,但没有效果,因为它在框架复制到扩展之前运行:
我在一个在主目标、框架和扩展中使用Rx作为SPM包的项目中遇到了这个问题。如果你有相同或类似的问题(例如Firebase),你可以在主目标中使用以下脚本来修复它:
此脚本的大部分来自www.example.com上的用户peweforums.swift.org:Swift packages in multiple targets results in duplication of library code。
wnavrhmk5#
我有一个框架,使用以下构建设置构建:
Always Embed Swift Standard Libraries: YES
Allow Non-Modular includes in Framework Modules: YES
因此,我将两者都改为
NO
并再次构建框架。Always Embed Swift Standard Libraries: NO
Allow Non-Modular includes in Framework Modules: NO
我在我的项目中添加了新的框架构建,因此它成功上传到iTunes Connect。
cnh2zyt36#
我在子项目和主项目中添加了一个swift包,它是动态库。当上传到TestFlight时,我也遇到了这个问题。
如图所示,我将子项目的
Embed & Sign
更改为Do Not Embed
,然后解决了这个问题。它为我的主项目保留了
Embed & Sign
,但在子项目中,我将它们更改为Do Not Embed
。pbpqsu0x7#
我有一个today扩展,它使用了我实现的自定义框架。
我尝试了所有的方法,但没有一个对我有效。
我只需要在today扩展中使用自定义框架,所以我只在today扩展中链接并嵌入了这个框架。
错误的意思是:
捆绑包包含不允许的框架
今天的扩展不应该嵌入任何框架,只应该链接到它。
因此,我从today扩展中删除了框架,并将其添加到父应用程序中。
注意:
父应用程序应该使用这个框架,因为它被添加到它,导入应该做的工作。
8fsztsew8#
请记住,不应该嵌入和签署嵌套框架
更改嵌入和签署不嵌入将解决问题,我已经解决了它,感谢AechoLiu的回答