【问题标题】:Invalid Swift Support - The SwiftSupport folder is empty无效的 Swift 支持 - SwiftSupport 文件夹为空
【发布时间】:2020-01-14 06:17:08
【问题描述】:

我的构建已成功上传,但由于苹果发送的以下问题,未在 testflight 上显示。
应用程序详细信息:我在 React Native 中有 iPhone 应用程序,在 swift 语言中有 watchOS 应用程序。 Xcode 版本:11.3

苹果报告的问题 -

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

我搜索并尝试了很多东西,但没有任何效果。也试过下面的链接

  1. The SwiftSupport folder is missing. Rebuild your app using the current public (GM) version of Xcode and resubmit it
  2. https://forums.developer.apple.com/thread/125902
  3. “嵌入内容包含 Swift 代码”设置为是

我的查询的更新答案: 我通过在 Swift Support 的 watchOS 文件夹中添加所需的框架解决了这个问题。可能是它的 Xcode 问题,它正在为我的 watchOS 创建空文件夹。按照以下步骤进行

  1. 从此路径“/Applications/Xcode.app/Contents/Developer/ToolChains/XcodeDefault.xctoolchain/usr/lib/swift/watchos”复制watchOS lib swift文件 或者您也可以从之前的手表构建中获取框架,即 上传成功
  2. 将复制的库粘贴到以下位置

2.1 创建应用程序存档 -> 右键单击​​选定的构建并选择在 finder 中显示 -> 显示包内容 -> Swiftsupport -> watchOS/“粘贴到这里”

2.2 也可以按照以下路径将这些框架粘贴到框架文件夹中 右键单击选定的构建并选择在查找器中显示 -> 显示包内容 -> 产品 -> 应用程序 -> 右键单击​​ ipa 文件 -> 显示包 内容->观看->右键单击您的手表应用->显示包内容 -> 框架/“在此处粘贴”

  1. 在构建主应用目标和 watchkitapp 时将“始终嵌入 swift 标准库”设置为 yes(不在扩展中)

可选步骤

如果您的 SwiftSupport->iPhoneOS 文件夹也是空的,那么 只需为它会要求的目标 c 代码创建新的 swift 文件 桥接休息它将为所有必需的事情做(无需连接 此文件具有任何目标 c 只需将其添加到项目中)

【问题讨论】:

    标签: swift react-native watchkit testflight watchos


    【解决方案1】:

    我对这个问题的解决方法是:

    1. 在 Xcode -> Organizer 窗口中,创建存档后,右键单击新的 存档
    2. 按“在 Finder 中显示”
    3. 在 Finder 中右键单击存档
    4. 按“显示包装内容”
    5. 删除“SwiftSupport”文件夹

    现在您可以提交而不会出现该错误。

    我在一个 React Native 项目中遇到了这个问题。

    我尝试了很多最流行的解决方案,例如编辑构建设置,但这些都不适合我。

    【讨论】:

    • 这是唯一对我有用的东西。将部署目标设置为相同数字的公认解决方案没有。知道 Apple 审阅者是否介意您提交应用以在商店中销售?
    【解决方案2】:

    这是一个非常烦人的问题,每当您使用第三方工具而不是 Xcode 来制作应用程序时都会发生这种情况。要解决这个问题首先要冷静,需要按照这些步骤进行,我遇到了同样的情况,然后我自己写了一些脚本来解决这个问题。

    1. 从 XCode 获取您的 .app 文件。
    2. 识别正在使用 swift 的第三方 SDK。
    3. 使用您的应用名称创建一个文件夹。
    4. 在该文件夹中创建两个名为“Payload”和“SwifSupport”的文件夹
    5. 将您的 .app 文件放入 Payload 中
    6. 在“SwiftSupport”下创建另一个“iphonesos”文件夹
    7. 将 swift .dylib 文件复制到该文件夹​​。确保该 swift .dylib 的代码设计不应与您的证书一起使用,只需从以下路径复制即可。 "/Applications/Xcode.app/Contents/Developer/ToolChains/XcodeDefault.xctoolchain/usr/lib/swift"
    8. 确保您的第三方库应使用您自己的证书进行签名。
    9. 之后,只需制作 .ipa 并上传到 AppStore 即可。 干杯,如果你遇到问题,你可以在这里写信给我。 mshauket.developer@gmail.com

    【讨论】:

    • 感谢您的解释。目前我面临同样的问题,.app/Frameworks 中没有 SwiftSuport 文件夹。我在 .app 中创建了 SwiftSupport/iphoneos 并从您提到的路径中复制了 swift dylib 文件。但它们是 190 MB,这是不希望的。我需要复制所有的 swift dylib 吗?提前致谢。
    • 你不需要复制所有的.dylib文件,你能检查一下使用swift文件的框架吗?只需通过该框架并查看他们使用的是哪个 .dylib。您需要放入 swiftsupport 的相同 .dylib
    • 确保 swiftsupport 文件夹和 frameworkd 文件夹的代码符号应该不同。
    • 发现了我的问题。看起来第三方 dylib 文件不允许在框架中使用,需要将它们更改为 .framework,然后在框架中复制。所以这就是我得到这个错误缺少 SwiftSupport 的原因。无论如何谢谢你@ShauketSheikh
    • @peco,你能得到 Xcode 自动生成的 swift 文件夹文件,而不是 empty 。如果是的话,你能详细说明一下吗?你是怎么做到的?
    【解决方案3】:

    已通过将项目中添加的所有扩展的部署目标设置为相同来解决此问题。

    最初的 RN 项目具有 11.0 部署目标,而新添加的 watch 具有最新的 13.0,因此不会自动创建 swift 文件夹。全部修改为12.0后自动运行,无需手动操作。

    【讨论】:

      【解决方案4】:

      在将 iOS 部署目标11.0 提升到 13.0 后,我在 React Native 项目 (0.66.4) 中遇到了问题 在 Xcode (12.5) 中。最新的 Xcode 13.2.1 也存在这个问题。我们的项目没有使用 Swift,我们自己的原生代码都是用 Objective-C 编写的,但是我们使用了一些用 Swift 实现的库。

      我花了几天时间尝试了所有我能找到的解决方案。 @RC Whim 的解决方案对我有用。但是,我们有一个由多人组成的分布式开发团队,配置了 CI/CD 和自动化流程。我们不能依靠手动操作来删除每个构建的文件夹。

      我在 Xcode 中为我们的应用方案创建并添加了一个 Post-action to Archive 选项,以自动化删除文件夹的过程。

      代码如下:

      ARCHIVES_PATH="/Users/$USER/Library/Developer/Xcode/Archives"
      ARCHIVE_DIR=
      
      for file in "$ARCHIVES_PATH"/* ; do
          [[ -L $file || ! -d $file ]] && continue
          [[ -z $ARCHIVE_DIR || $file -nt $ARCHIVE_DIR ]] && ARCHIVE_DIR=$file
      done
      
      if [ ! -d "${ARCHIVE_DIR}" ]; then
          echo "No archive directory found!"
          exit 1
      fi
      
      ARCHIVE=$(ls -t ${ARCHIVE_DIR} | head -n 1)
      
      XCARCHIVE_PATH="${ARCHIVE_DIR}/${ARCHIVE}"
      # APP="${XCARCHIVE_PATH}/Products/Applications/moonlightreact.app"
      
      SWIFT_SUPPORT_DIR="${XCARCHIVE_PATH}/SwiftSupport"
      
      if find "${SWIFT_SUPPORT_DIR}/iphoneos" -mindepth 1 -maxdepth 1 | read; then
         echo "SwiftSupport folder is not empty."
         exit 1
      fi
      
      rm -r "${SWIFT_SUPPORT_DIR}"
      
      if [[ $? != 0 ]]; then
          echo "rm command failed."
      else
          echo "SwiftSupport folder was removed."
      fi
      

      这是它的外观:

      【讨论】:

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