【问题标题】:Invalid Swift Support / The SwiftSupport folder is empty无效的 Swift 支持 / SwiftSupport 文件夹为空
【发布时间】:2015-09-14 07:22:45
【问题描述】:

环境:Xcode 7 GM

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

但是,在成功上传后,我立即收到了来自 Apple 的这封电子邮件,说明了这个错误:

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

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

一旦这些问题得到纠正,您就可以重新交付纠正后的二进制文件。

有人有解决这个问题的办法吗?

我已经确认了以下问题。

档案(.xcarchive 文件)中的“SwiftSupport/iphoneos/”库等同于“Products/Applications/myApp.ipa/Frameworks/”

我的“有效架构”设置是“$(ARCHS_STANDARD)”,显示“armv7k”。

Provisioning profile 设置为 Dev 和 Release,分别在 iTunes connect 中创建。

而且,在我的“编辑方案”中,存档中的测试目标未选中。

【问题讨论】:

    标签: objective-c swift ios9 xcode7


    【解决方案1】:

    重要提示:这只适用于使用 swift 的项目,请参阅下面的comment

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

    【讨论】:

    • 赞成。我在下一个提交过程中遇到了同样的情况,但这很好用。
    • 这不推荐用于使用 swift 文件的项目,对吧?我正在使用 swift 文件,我遇到了同样的问题..
    • 这发生在我直接从 Xcode 归档 Appcelerator 项目并且您的回答修复它之后。
    • 是否已重命名(8.2.1)?我只看到“始终嵌入 Swift 标准库”。我的设置为 NO,并没有帮助。
    • 我也有同样的问题,但这个解决方案对我不起作用,还有其他解决方案吗?
    【解决方案2】:

    当尝试在“Xcode->Product->Archive”之后导出时 您应该选择“保存为 ios 应用商店部署”选项

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

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

    【讨论】:

      【解决方案3】:

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

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

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

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

      • 有效载荷
      • swiftSupport
      • 符号

      那么你很好,但是如果你只看到其中的Payload 文件夹......那么你必须再试一次

      还有几个指针

      • 我尝试将“嵌入的内容包含 Swift 代码”设置为 NO,它只工作过一次,然后就停止工作了
      • 我已确保我没有 cocoapod 错误.. 这也无济于事
      • 我已尝试按照建议在存档中手动添加SwiftSupport 文件夹here.. 但后来我得到了各种副作用.. 没用

      结论

      我认为这是由于 xcode 的一些错误(使用 Xcode 8.0 build (8A218a) 编写的。所以请继续尝试你的运气,直到它工作为止。只是不要期望对此有可靠的解释

      【讨论】:

      • "那么你很好,但是如果你只看到其中的 Payload 文件夹..那么你必须再试一次",你能告诉我你说“那么你必须试试”是什么意思再次”?重试什么?我遇到了这个问题,请帮忙。
      • 那么真的没有办法解决这个问题吗?我现在正在使用 Xcode 8.2.1 并面临同样的问题。想知道您是如何解决这个问题的吗?我在 cocoapods 中同时使用了 swift 和 Objective C 代码
      • “再试一次”就像我说的那样,这个解决方案没有可靠的解决办法。我的帖子不是关于解决方案,而是关于验证您的尝试是否成功的方法或不之前你提交到应用商店
      • 也使用 XCode 8.2.1,但是如果您使用的是 Swift,此解决方案是否可行?我不想让可交付成果变得臃肿,因为我使用 Swift...另外,您是如何添加该文件夹的?
      【解决方案4】:

      五步解决方案:

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

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

      我浪费了很多时间,希望你会发现这对你有帮助;)

      【讨论】:

      • 导出为应用商店并从应用程序加载器上传对我有用,谢谢。
      【解决方案5】:

      如果您使用 xcodebuild 导出 IPA 而不指定 -exportOptionsPlist 选项,则会发生此错误

      请参阅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>
      

      【讨论】:

      • 这是否仅适用于将构建提交到应用商店时?如果我想提交内部测试飞行测试的构建怎么办?
      • 但在 iTunes 连接处理后在邮件中收到此错误 - 无效的文件权限 - 您必须对 /SwiftSupport/iphoneos/libswiftCore.dylib 中的文件具有读写权限。和所有其他 swift dylibs。
      • 如果我只是使用产品->存档如何应用?
      • @Joel 这些键与存档屏幕上的 Xcode UI 字段基本匹配,由 Xcode 自动应用。
      • 我在哪里把方法键..在哪个plist文件中请告诉我。
      【解决方案6】:

      我在这个问题上花了几乎一整天的时间,上述解决方案都没有奏效。我通过将目标 tvOS 从 13 降低到 11 来消除此错误;原来的地方。这恢复了 SwiftSupport 文件夹。仍有待回答的问题是,这是否是由于我们的规定不允许我们以 tvOS 13 为目标 - 或者 Apple Store 人员与 xCode 人员不一致,因为以 tvOS 13 为目标创建的应用程序是 14mb 而 tvOS 11 是44mb 和不同的应用程序文件夹结构。

      【讨论】:

      • 在尝试此之前,我尝试了几乎所有其他建议。回到对 iOS 12+ 的目标支持也对我有用。
      • 这是解决我问题的唯一方法。我将 iOS 目标移回 11.4,它工作正常。 (这是一个只有 Swift 的项目)
      • 您的回答暗示了我的情况。我不得不将我的目标从 11.0 提高到 13.0,因为我的应用正在使用 SceneDelegate。
      【解决方案7】:

      我为此努力了几个小时,这对我有用。

      在存档中,Xcode 没有将 swift 库复制到 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"

      然后提交应用。

      【讨论】:

      • 这个答案需要更详细。例如,您如何准确地进行复制/粘贴/存档?例如,我自己做了这个,我得到了像 .DS_store found in pathcouldn't find embedded.mobileprovision` 文件之类的错误,尽管它显然在那里.. 魔鬼在我朋友的细节中
      • 这对我有用,还有一个额外的警告:有一个 .dylib 不应该被复制,那就是 libswiftRemoteMirror.dylib。否则,您的应用将被拒绝并显示以下消息:文件 libswiftRemoteMirror.dylib 没有签名 ID。
      【解决方案8】:

      App Store 构建提交问题:

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

      解决方案:

      大多数情况下,我们发现这个问题是由于通过 App Loader 提交应用程序和我们通常的做法 将 ipa 设为 Organizer > App Archive > Show In Finder > Show Package Content > Products > Applications> OurProjectName.app 将此应用程序复制到 Payload 文件夹并将其压缩并制作 ipa 文件以使用 App Loader 在 App Store 上提交。这对于仅提交包含项目的目标 c 文件来说很好。

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

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

      参考截图如下:

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

      【讨论】:

        【解决方案9】:

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

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

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

        就是这样!

        【讨论】:

          【解决方案10】:

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

          【讨论】:

            【解决方案11】:

            "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.
            

            【讨论】:

            • 好吧,这种方法似乎对我不起作用,我知道会收到“超过 50mb 大小限制”错误。
            【解决方案12】:

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

            【讨论】:

            • 我可以为 TestFlight 构建使用“保存以供企业部署”选项吗?
            • @SureshDurishetti 我还没有尝试过,但很可能它不会工作。它应该只适用于特殊的企业开发程序。
            【解决方案13】:

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

            【讨论】:

              【解决方案14】:

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

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

              【讨论】:

                【解决方案15】:

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

                1. 确保“嵌入内容包含 Swift 代码”设置为:
                  • 是应用目标
                  • 不支持 WatchKit 扩展
                  • Watchkit 应用支持
                2. 归档后,我的 XCode 不会创建“[归档文件夹]/SwiftSupport/iphoneos”,但会创建并填写“[归档文件夹]/Products/Applications/[应用名称].app/Watch/\ WatchKit\ App.app/Frameworks”与 Swift dylibs。所以我创建了以下软链接:

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

                然后当我通过 XCode Organize 提交时,它被正确接受。

                如果您只是复制文件而不是链接它们,那么手表应用程序可能会超过 50MB 的限制。

                【讨论】:

                  【解决方案16】:

                  始终嵌入 Swift 标准库 设置为 Yes 仅对于链接到您自己的依赖于 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,它阐明了这个问题。

                  【讨论】:

                    【解决方案17】:

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

                    【讨论】:

                      【解决方案18】:

                      我为这个问题苦苦挣扎了一段时间,但上面没有任何效果。在最后一次绝望的尝试中,我刚刚从我的存档中删除了 SwiftSupport 文件夹。

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

                      【讨论】:

                        【解决方案19】:

                        我通过取消选中“Strip Swift symbols”选项来修复这个错误。

                        App Store Connect distribution options

                        【讨论】:

                          【解决方案20】:

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

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

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

                          【讨论】:

                            猜你喜欢
                            • 1970-01-01
                            • 1970-01-01
                            • 2016-06-19
                            • 1970-01-01
                            • 2016-12-23
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            相关资源
                            最近更新 更多