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

Invalid Swift Support - The SwiftSupport folder is empty

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

苹果报告的问题 -

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

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

  1. https://forums.developer.apple.com/thread/125902
  2. “嵌入内容包含 Swift 代码”设置为是

我的查询的更新答案: 我已通过在 Swift 支持的 watchOS 文件夹中添加所需的框架来解决此问题。可能是它的 Xcode 问题,它正在为我的 watchOS 创建空文件夹。遵循以下步骤

  1. Copy watchOS lib swift file from this path "‎⁨ /Applications/Xcode.app/Contents/Developer/ToolChains/XcodeDefault.xctoolchain/usr/lib/swift/⁨watchos⁩" Or You can also get framework from your previous watch build which is successfully uploaded
  2. Paste the copied library in below location

2.1 Create Archive of your app -> Right click on selected build and select show in finder -> show package content -> Swiftsupport -> watchOS/"Paste here"

2.2 Paste those frame in framework folder also by following the below path Right click on selected build and select show in finder -> show package content -> Products -> Applications -> right click on ipa file -> show package content->Watch->Right click on your watch app -> show package content -> Frameworks/"Paste here"

  1. Set "Always embedded swift standard libraries" to yes in builsetting of you main app target and watchkitapp (Not in extension)

Optional step

if your SwiftSupport->iPhoneOS folder is also empty then just create new swift file to your objective c code it will ask for bridge rest it will do for all required things (No need to connect this file with any objective c just add it to project)

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

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

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

  1. 在Xcode -> Organizer window中,创建存档后,右键单击您的新文件 归档
  2. 按"Show in Finder"
  3. 右键单击 Finder 中的存档
  4. 按"Show Package Contents"
  5. 删除 'SwiftSupport' 文件夹

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

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

我尝试了很多最流行的解决方案,例如编辑构建设置和 none 对我有用的设置。

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

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

我在 React Native 项目 (0.66.4) 从 iOS 部署目标 中遇到问题=25=]11.0 到 13.0 Xcode (12.5)。该问题还存在于最新的 Xcode 13.2.1 中。我们的项目没有用到Swift,我们自己的native代码都是用Objective-C写的,但是我们用了一些实现在Swift.

的库

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

我已经在 Xcode 中创建并添加了 a Post-action 到我们应用方案的存档选项 以自动执行删除文件夹的过程。

代码如下:

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

外观如下: