使用Xcode 7.3.1“无效的Swift支持 – 缺少SwiftSupport文件夹”
在使用Application Loader提交应用更新后,我收到了Apple的这封电子邮件:
我们发现您最近交付的“[App Name]”存在一个或多个问题。 要处理您的交付,必须纠正以下问题:
无效的Swift支持 – 缺少SwiftSupport文件夹。 使用当前公共(GM)版本的Xcode重建您的应用程序并重新提交。
一旦纠正了这些问题,您就可以重新更新已更正的二进制文件。
我已经确认这个二进制文件是使用最新的Xcode GM(7.3.1)构建的,所以这不是问题。 我已经在线看到了这个问题的各种各样的潜在修复,但希望通过提供进一步的细节,有人可能能够帮助我找出具体的解决方案。
- 使用Application Loader 3.5提交了一个IPA文件,没有任何问题。
- 该应用程序的先前版本不使用Swift,但此更新确实如此。
- “嵌入式内容包含Swift代码”构建设置设置为
NO
。 我的理解是,如果我们有一个纯粹的Objective-C目标依赖于Swift或混合目标,那么这应该只是YES
。 - 该项目使用CocoaPods,但我们的pod中没有任何更改用于此更新。
- 该应用程序的先前版本包括WatchKit应用程序和扩展程序,但此更新不包括。
- 在使用相同构建生成的
SwiftSupport
,SwiftSupport
文件夹就在那里。 它包含一个名为iphoneos
的子文件夹,其中包含几个Apple Swift库,如libswiftFoundation.dylib
。 - 如果我将
.ipa
文件重命名为.zip
并取消归档,则其app包不包含SwiftSupport
文件夹,但包含具有相同Swift dylib的Frameworks
文件夹。
这里的解决方案就是这个答案 。 我们需要在xcodebuild
使用新的-exportOptionsPlist
标志,而不是旧的-exportFormat
和-exportWithOriginalSigningIdentity
标志。 plist只需将method
键设置为app-store
。
您应该在创建ipa文件时选择“保存iOS App Store部署”而不是“保存为临时部署”选项。
这样做的根本原因是供应配置文件是临时的,它不会在ipa中创建SwiftSupport
目录。 该文件夹是使用app-store
作为导出方法创建的,因此当我将配置文件更新为app-store
时,它对我有用。
参考
在我的情况下,我只是将冗余的swift文件添加到项目中,它解决了问题。