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

Invalid Swift Support / The SwiftSupport folder is empty

环境:Xcode 7 GM

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

编写的

然而,在成功上传后,我立即收到 Apple 发来的电子邮件,指出此错误:

Invalid Swift Support - We have discovered one or more issues with your recent delivery for XXXXX(my app name). To process your delivery, the following issues must be corrected:

Invalid Swift Support - The SwiftSupport folder is empty. Rebuild your app using the current public (GM) version of Xcode and resubmit it.

Once these issues have been corrected, you can then redeliver the corrected binary.

有人解决这个问题吗?

我已经确认了以下问题。

"SwiftSupport/iphoneos/" 档案库(.xcarchive 文件)等于 "Products/Applications/myApp.ipa/Frameworks/"

我的 "Valid Architectures" 设置是“$(ARCHS_STANDARD)”,显示 "armv7k"。

Provisioning profile 设置为已在 iTunes connect 中创建的 Dev 和 Release。

而且,在我的 "Edit scheme" 中,测试目标在存档中未选中。

重要说明:这仅适用于使用swift的项目,请参阅下面的

我刚遇到同样的问题并通过进行以下更改解决了它 - 如果您的项目中曾经有 Swift 个文件,但后来删除了它们,您只需要在 Build Options 中将 "Embedded Content Contains Swift Code" 设置为 NO 即可。

"Embedded Content Contains Swift Code" 设置为 $(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.

五步解决方案:

  1. 转到构建设置并标记 Embedded Content Contains Swift Code -> YES,如果您的代码包含部分内容swift 代码或完全由 Swift
  2. 制作
  3. 使用 Xcode->Product->Archive
  4. 存档您的构建
  5. 导出存档构建你会突然发现不同的构建大小将超过 40 MB,这是因为 XCode 添加了 Swift 缺少的支持文件夹
  6. 现在使用应用程序加载器上传此构建
  7. 如果这不起作用,请检查您的系统上是否有多个 XCode 转到 Xcode->Preferences->Location->Command Lines Tools 具有相同的最新或相同的 Xcode from drop向下选择您已完成编码的内容并完成。

这是一个小缺点,因为 swift 带有包袱并且必须与早期版本和 Objective C 代码兼容。

我浪费了很多时间希望这对您有帮助;)

我为此苦苦挣扎了几个小时,这对我有用。

在存档中,Xcode 没有将 swift 库复制到 SwiftSupport/iphoneos,即使我的项目有“Embedded Content Contains Swift Code " 为所有目标设置为是。它也没有将 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"

然后提交应用。

如果您在没有指定 -exportOptionsPlist 选项的情况下使用 xcodebuild 导出 IPA,就会发生此错误

请参阅 xcodebuild -help 了解可用的键,但您可能需要一个至少将方法键设置为 "app-store" 的 plist,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>method</key>
    <string>app-store</string>
</dict>
</plist>

在 "Xcode->Product->Archive" 之后尝试导出时 你应该选择 "save for ios app store deployment" 选项

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

无论"embedded content contains swift code"是或否

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

  1. 确保 "embedded Content Contains Swift Code" 设置为:
    • 应用目标是
    • WatchKit 扩展否
    • 对于 Watchkit 应用程序是的
  2. 存档后,我的 XCode 不会创建“[存档文件夹]/SwiftSupport/iphoneos”,但会创建并填充“[存档文件夹]/Products/Applications” /[app name].app/Watch/\ WatchKit\ App.app/Frameworks" 和 Swift 动态库。所以我创建了以下软 link:

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

然后当我通过 XCode Organize 提交时,它被无误地接受了。

如果您只是简单地复制文件而不是 link 处理它们,那么手表应用可能会超过 50MB 的限制。

此页面上有许多相互矛盾的答案。对我有用的是提到的 ,它只是 select iOS 应用程序商店部署选项的保存(我实际上对应用商店发布不感兴趣..我只想简单地推送一个用于 testflight 内部测试的发布)..

也就是说,我有办法在提交之前验证您的 ipa 是否会被批准:

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

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

  • 有效载荷
  • swiftSupport
  • 符号

那你就可以开始了,但是如果你只看到 Payload 文件夹......那么你得再试一次

还有一些建议

  • 我试过将 "Embedded Content Contains Swift Code" 设置为 NO,它只工作了一次,然后就停止工作了
  • 我已经确保我没有 cocoapod 错误..这也没有帮助
  • 我试过按照建议在存档中手动添加 SwiftSupport 文件夹 .. 但后来我遇到了各种副作用.. 没用

结论

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

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

始终嵌入Swift标准库设置为仅对Objective-C目标link 反对你自己的依赖于 Swift 的框架。如果您不 link 反对(即使用)依赖于 Swift 的内部框架,Xcode 将在您的档案中嵌入 Swift 标准库 只要在作为构建目标一部分的Swift文件中至少出现一次导入Swift标准库的事件。

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

此问题的修复 是为了确保目标中的至少一个 Swift 文件正在导入 swift 标准库(例如, "import Foundation").

Daniel Jalkut 的 very informative post about Swift dependencies 阐明了这个问题。

当您将 ipaexport_method 设置为 ad-hoc 而不是 app-store 的 plist 上传到 iTunes 时,您也会遇到此错误 ...

App Store 构建提交问题:

无效 Swift 支持 - Swift支持文件夹丢失。使用 Xcode 的当前 public (GM) 版本重建您的应用并重新提交。

解法:

大多数情况下,我们发现此问题是由于通过 App Loader 提交应用程序和我们通常的做法将 ipa 作为管理器 > App Archive > Show In Finder > 显示包内容 > 产品 > 应用程序> OurProjectName.app 将此应用程序复制到 Payload 文件夹并将其压缩并制作 ipa 文件以使用 App Loader 提交到 App Store。这对于仅提交 objective c 个包含项目的文件来说很好。

但是,如果您的项目包含任何 swift 类 及其用法,则会发生一些变化。如果您的项目包含 swift 类 和 Objective C 项目,IPA 内容结构与随附的屏幕截图略有不同。

要解决此问题,请直接从 Xcode 提交应用 [或] 如果您想通过 App Loader 提交应用而不是先导出 ipa使用 Xcode 组织者的导出选项并通过 App Loader 将这些 ipa 文件提交到应用商店。

参考截图如下:

快点!!!您的问题将得到解决 :) :) :)

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

我在这个问题上花了将近一整天的时间,none 以上解决方案有效。我通过将目标 tvOS 从 13 降低回 11 来摆脱这个错误;它原来在哪里。这恢复了 SwiftSupport 文件夹。仍有待回答的问题是,这是否是由于我们的规定不允许我们以 tvOS 13 为目标 - 或者 Apple Store 人员不与 xCode 人员保持一致,因为以 tvOS 13 为目标创建的应用程序大小为 14mb tvOS 11 是 44mb 和不同的应用程序文件夹结构。

我为这个问题苦苦思索了一段时间,但以上都没有奏效。在最后一次孤注一掷的尝试中,我只是 从我的存档中删除了 SwiftSupport 文件夹。

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

我通过取消选中选项 "Strip Swift symbols" 设法修复了这个错误。

App Store Connect distribution options

我在通过 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. 交付您的应用以上传它。

就是这样!

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

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

  1. Select 归档 > 在 Finder 中显示
  2. 显示包装内容
  3. 删除文件夹SwiftSupport
  4. 返回存档 > 分发应用程序

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

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

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