使用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应用程序和扩展程序,但此更新不包括。
  • 在使用相同构建生成的SwiftSupportSwiftSupport文件夹就在那里。 它包含一个名为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文件添加到项目中,它解决了问题。