无效的Swift支持/ SwiftSupport文件夹为空

时间:2015-09-14 07:22:45

标签: objective-c swift ios9 xcode7

环境:Xcode 7 GM

我使用Xcode成功上传了iOS应用,没有错误。这个应用程序是用Objective-C和Swift编写的。

然而,在成功上传后,我收到Apple发来的这封电子邮件,说明了这个错误:

  

无效的快速支持 - 我们发现您最近为XXXXX(我的应用名称)投放了一个或多个问题。要处理您的交付,必须纠正以下问题:

     

无效的Swift支持 - SwiftSupport文件夹为空。使用当前公共(GM)版本的Xcode重建您的应用程序并重新提交。

     

一旦纠正了这些问题,您就可以重新更新已更正的二进制文件。

任何人都有解决这个问题的方法吗?

我已经确认了以下问题。

" SwiftSupport /的iPhoneOS /"档案馆中的库(.xcarchive文件)等同于" Products / Applications / myApp.ipa / Frameworks /"

我的"有效架构"设置为" $(ARCHS_STANDARD)"显示" armv7k"。

配置文件分别设置为已在iTunes连接中创建的开发和发布。

并且,在我的"编辑计划"中,在归档时取消选中测试目标。

19 个答案:

答案 0 :(得分:14)

在“Xcode-> Product-> Archive”之后尝试导出时 你应该选择“为ios app store部署保存”选项

同样的问题困扰了我几天, 以上设置可以解决这个问题。

无论“嵌入内容包含swift代码”是肯定还是否。

答案 1 :(得分:14)

此页面上有许多相互矛盾的答案..对我来说有用的是here,它只是为iOS应用商店部署选项选择了一个保存(我实际上对应用商店不感兴趣)发布..我想简单推送一个testflight内部测试版本)..

话虽如此,我有办法在提交之前验证您的ipa是否会获得批准:

  • 将.ipa文件拖到新文件夹中(称之为分析)
  • 右键单击ipa文件并将其重命名为.zip(确认对话框使用.zip)
  • 双击zip文件

如果你得到一个文件夹(与.ipa文件同名),其中包含以下子文件夹:

  • 有效载荷
  • swiftSupport
  • 符号

enter image description here

然后你很高兴,但如果你只看到Payload文件夹,那么你必须再试一次

也有几个指针

  • 我尝试将“嵌入式内容包含Swift代码”设置为NO,它只运行一次然后停止工作
  • 我确保我没有cocoapod错误..这也没有任何帮助
  • 我尝试按照建议的here手动添加档案中的SwiftSupport文件夹..但后来我得到了各种各样的副作用..无法正常工作

结论

我认为这是由于xcode的一些错误(用Xcode 8.0 build(8A218a)写这个...所以继续尝试你的运气,直到它工作..只是不要指望它的一些可靠的解释

答案 2 :(得分:10)

五步解决方案:

  1. 转到构建设置并制作标记嵌入内容包含Swift代码 - > ,如果您的代码包含部分快速代码或完全由Swift制作
  2. 使用 Xcode->产品 - >存档
  3. 存档您的版本
  4. 导出存档构建您将突然看到差异构建大小将超过40 MB这是因为XCode添加了缺少的SwiftSupport文件夹
  5. 现在使用Application loader
  6. 上传此版本
  7. 如果这不起作用,请检查您的系统上是否有多个XCode goto Xcode->偏好设置 - >位置 - >命令 线条工具具有相同的最新或相同的Xcode,您选择的是下拉列表,您已完成编码&挥之不去。
  8. 这有点不足,因为swift携带行李并且必须与早期版本和Objective C代码兼容。

    我浪费了很多时间希望你会发现这很有用;)

答案 3 :(得分:3)

我在这里努力了几个小时,这对我有用。

在存档中,Xcode没有将快速库复制到 SwiftSupport / iphoneos 中,即使我的项目有" Embedded Content Contains Swift Code"对所有目标设置为yes。它也没有将swift库复制到" AppName.app/Frameworks" 。所以我必须在提交前手动在档案中执行此操作:

"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/iphoneos/lib*" 复制到 "Archive_folder/Products/Applications/AppName.app/Frameworks" and "SwiftSupport/iphoneos"

如果您的应用还有手表应用

复制

"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/swift/watchos" into "Archive_folder/SwiftSupport/watchos" "Archive_folder/Products/Applications/AppName.app/Watch/AppName WatchKit App.app/Frameworks"

然后提交应用。

答案 4 :(得分:2)

使用Save for iOS App Store Deployment代替Save for Ad Hoc Deployment Xcode导出选项为我解决了这个问题。与直觉相反,即使对于TestFlight构建,也应该使用第一个选项。

答案 5 :(得分:1)

“嵌入内容包含Swift代码”设置为$(inherited)为我工作。 执行CocoaPods命令pod install后的警告帮助我找到了这个。

[!] The `applewatch Extension [Debug]` target overrides the `EMBEDDED_CONTENT_CONTAINS_SWIFT` build setting defined in `Pods/Target Support Files/Pods-applewatch Extension/Pods-applewatch Extension.debug.xcconfig'. This can lead to problems with the CocoaPods installation
- Use the `$(inherited)` flag, or  <--------------
- Remove the build settings from the target.

答案 6 :(得分:1)

这是我更改项目设置后发生的事情。 转到“文件”>“项目设置...”(或在某些情况下为“工作区设置...”),然后从“构建系统”下拉列表中选择“使用共享设置”。

答案 7 :(得分:1)

在通过 Transporter 应用程序将.ipa文件上传到App Store Connect之后,我收到了同一封电子邮件。以下是我出错的地方:我使用临时分发应用程序。

以下步骤是解决我的错误的方法:

  1. 存档应用
  2. 在TestFlight和App Store上分发
  3. 导出
  4. 在导出中新创建的文件夹中打开ExportOptions.plist
  5. 如果您像我一样上载到App Store Connect / TestFlight,请确保method属性的值为app-store
  6. 将导出的.ipa文件拖放到 Transporter
  7. 交付您的应用以上传它。

就是这样!

答案 8 :(得分:1)

我在这个问题上花了整整一整天,以上解决方案均无效。通过将目标tvOS从13降低到11,我摆脱了这个错误。原来的位置。那恢复了SwiftSupport文件夹。尚待解决的问题是这是由于我们的规定不允许我们以tvOS 13为目标-还是因为以tvOS 13为目标而创建的应用程序是14mb,而tvOS 11是44mb和不同的应用程序文件夹结构。

答案 9 :(得分:0)

要从 SwiftSupport 中删除 .ipa 文件夹,我使用了以下脚本

ipa_path="${DIR_ON_CI}/ipa_name.ipa"
zip -d "${ipa_path}" "SwiftSupport*"

您需要设置正确的 ipa_path。在我的情况下似乎没有其他任何工作,并且该应用程序构建在 CI 上,我可以在导出存档后访问 .ipa

答案 10 :(得分:0)

在尝试了所有这些解决方案之后,我以幸运的方式通过了它。但我认为这个链接对你有用Invalid Swift Support / invalid implementation of swift。我按照这些步骤重新启动我的MAC,现在一切正常:)

答案 11 :(得分:0)

在2020年8月使用Xcode 11.6对该解决方案进行了尝试,并且有效。

  1. 选择档案>在Finder中显示
  2. 显示包装内容
  3. 删除文件夹SwiftSupport
  4. 返回档案>分发应用

答案 12 :(得分:0)

我设法通过取消选中“ Strip Swift符号”选项来解决此错误。

App Store Connect distribution options

答案 13 :(得分:0)

我在这个问题上苦苦挣扎了一段时间,但上述方法均无效。在最后一次绝望的尝试中,我从存档中删除了SwiftSupport文件夹。

令我惊讶的是,它成功上传并完成了处理。希望这对某人有帮助。

答案 14 :(得分:0)

我的问题是我使用adhoc配置文件提交给TestFlight(必须是分发配置文件)。 Apple错误消息!

答案 15 :(得分:0)

App Store构建提交问题:

无效的Swift支持 - 缺少SwiftSupport文件夹。使用当前公共(GM)版本的Xcode重建您的应用程序并重新提交。

<强>解决方案:

大多数情况下,我们发现此问题是由于通过App Loader提交申请以及我们通常的做法使ipa成为管理器&gt; App Archive&gt;在Finder中显示&gt;显示包装内容&gt;产品&gt;应用程序&GT; OurProjectName.app将此应用程序复制到Payload文件夹并压缩并使用App Loader使ipa 文件在App Store上提交。这对于仅提交包含项目的客观c文件很方便。

但是如果你的项目包含任何swift类和它的用法,那么会有一些变化。如果您的项目包含带有Objective C项目的swift类,则IPA内容结构与附加的屏幕截图略有不同。

enter image description here

enter image description here

要修复此问题,请直接从Xcode [OR] 提交应用程序,如果您想通过App Loader提交应用程序,而不是首先使用Xcode管理器的导出选项导出ipa并提交这些ipa文件通过App Loader应用商店。

参见参考屏幕截图如下:

enter image description here

Hurrey !!!你的问题将被修复:) :) :)

答案 16 :(得分:0)

当您将ipa设置为export_method而不是ad-hoc的{​​{1}}上传{I}时,您也会收到此错误...

答案 17 :(得分:0)

始终嵌入Swift标准库设置为仅对于与您自己的依赖于Swift的框架链接的Objective-C目标是必需的。如果您没有链接(即使用)依赖于Swift的内部框架,Xcode将在您的存档中嵌入Swift标准库,只要至少有一次导入Swift文件中的Swift标准库,它是构建目标的一部分。

换句话说,如果你的目标有一个不导入任何Swift标准库的Swift文件 - 例如通过“import Foundation” - 那么 Xcode不会将Swift标准库复制到存档中

此问题的解决方法是为了确保目标中至少有一个Swift文件导入swift标准库(例如“import Foundation”)。

Daniel Jalkut有一个very informative post about Swift dependencies,可以解释这个问题。

答案 18 :(得分:0)

以上是我现在正在做的解决这个问题,因为上面的方法停止了工作。请记住,我的代码的主要应用程序是Obj-C,我的手表应用程序是Swift。

  1. 确保“嵌入的内容包含Swift代码”设置为:
    • 是针对应用目标
    • NO for WatchKit Extension
    • 适用于Watchkit App
  2. 归档后,我的XCode不会创建“[archive folder] / SwiftSupport / iphoneos”,但会创建并填充“[archive folder] / Products / Applications / [app name] .app / Watch / \ WatchKit \ App.app/Frameworks“与Swift dylibs。所以我创建了以下软链接:

    ln -s“[存档文件夹] /Products/Applications/.app/Watch/ \ WatchKit \ App.app/Frameworks”“[存档文件夹] / SwiftSupport / iphoneos”

  3. 然后当我通过XCode Organize提交时,它会毫无错误地被接受。

    如果您只是复制文件而不是链接它们,那么您将面临超过50MB限制的监视应用程序的风险。