无效的 Swift 支持 - 文件不匹配

Posted

技术标签:

【中文标题】无效的 Swift 支持 - 文件不匹配【英文标题】:Invalid Swift Support - Files don’t match 【发布时间】:2015-09-11 15:01:55 【问题描述】:

我刚刚在 Swift 2 中重新编写了一个应用程序。我正在尝试将应用程序上传到 iTunesConnect(通过 Xcode 7 GM)进行内部测试。

我为“无效的 Swift 支持”错误苦苦挣扎了一阵子 (which has other, related questions)……但现在它变得有点不同了。

Apple 的错误现在说:

无效的 Swift 支持

文件 libswiftCoreLocation.dylib、libswiftCoreMedia.dylib、libswiftCoreData.dylib、libswiftAVFoundation.dylib 不匹配

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks /libswiftAVFoundation.dylib

确保文件正确 (?),重新构建您的应用,然后重新提交。

不要对

应用后处理

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib, /Payload/App.app/Frameworks/libswiftCoreMedia.dylib, /Payload/App.app/Frameworks/libswiftCoreData.dylib, /Payload/App.app/Frameworks /libswiftAVFoundation.dylib.

通过搜索“不应用后处理”、“确保文件正确,重新构建您的应用,然后重新提交”等,我一直无法找到类似的错误。

有谁知道我如何“确保文件正确”--或者-- 还有其他建议吗?谢谢。

【问题讨论】:

我也有同样的问题。有什么解决办法吗? 你要退出这个应用程序吗?这是从 Xcode 直接上传的吗? @Andy 在归档后立即从 Xcode 直接上传。 【参考方案1】:

同样的问题。我认为这很可能是与 Bitcode 相关的开发工具的错误。

我刚刚找到了解决方法。

    使用新的内部版本号归档您的应用 :( 从管理器“在 Finder 中显示”在 Finder 中查找存档(.xcarchive 文件) 打开包,找到像Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/这样的目录 复制所有libswiftXxx.dylib文件从SwiftSupport/iphoneos/Products/Applications/YourApp.ipa/Frameworks/并覆盖 现在,从 Organizer 上传到 App Store

通过这个过程,我成功上传了我的构建。现在我正在等待审核。

注意:

我正在使用 CocoaPods,ENABLE_BITCODE 选项为 NO。

【讨论】:

您的目标是什么 ios SDK?我以为你不能在禁用位码的情况下提交到商店。 在我的例子中,SwiftSupport/iphoneos/ 是空的。 验证成功,但在 iTunes Connect 的 Prerelease 部分约 12 小时后,构建仍然是 Processing 嘿,谢谢!我仍然收到关于 API 分析文件太大的警告 cl.ly/image/0s0N0s441s0X - 但重要的是它仍然通过并且能够进入 TestFlight。 我的.ipa里面没有SwiftSupport/iphoneos/文件夹怎么办?【参考方案2】:

编辑:CocoaPods 0.39.0 已发布,修复了此问题!

作为@orkenstein mentioned,通过注释掉Pod-frameworks.sh 中的一些代码,就有a simpler solution。我在这里包含更多细节。

在你的 Xcode 项目目录中,打开Pods/Target Support Files/Pods/Pods-frameworks.sh

注释掉以下几行:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit $PIPESTATUS[0])"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "$CONFIGURATION_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH/$basename.framework/$basename" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit $PIPESTATUS[0])
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"$SWIFT_STDLIB_PATH/$lib\" \"$destination\""
  rsync -auv "$SWIFT_STDLIB_PATH/$lib" "$destination"
  code_sign_if_enabled "$destination/$lib"
done

=>

# Embed linked Swift runtime libraries
# local basename
# basename="$(basename "$1" | sed -E s/\\..+// && exit $PIPESTATUS[0])"
# local swift_runtime_libs
# swift_runtime_libs=$(xcrun otool -LX "$CONFIGURATION_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH/$basename.framework/$basename" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit $PIPESTATUS[0])
# for lib in $swift_runtime_libs; do
#   echo "rsync -auv \"$SWIFT_STDLIB_PATH/$lib\" \"$destination\""
#   rsync -auv "$SWIFT_STDLIB_PATH/$lib" "$destination"
#   code_sign_if_enabled "$destination/$lib"
# done

保存Pods-frameworks.sh,您应该一切顺利!

【讨论】:

这对我有用。请注意,如果您运行 pod-install 或 pod-update,您可能需要再次评论! Cocoapods 问题在这里:github.com/CocoaPods/CocoaPods/issues/4188,你可以试试这个 PR:github.com/CocoaPods/CocoaPods/pull/4221 与这些说明:guides.cocoapods.org/using/unreleased-features 更新了 cocoaPods 0.39.0 并没有为我解决这个问题 @DJ Tarazona 谢谢你的食谱!!它完全对我有用,即使我确实将 cocopods gem 更新到最新版本【参考方案3】:

此问题的修复已合并,可在最新的 CocoaPods 版本0.39.0.beta.5上使用

https://github.com/CocoaPods/CocoaPods/pull/4268

要获取最新版本的 CocoaPods,请运行 gem install cocoapods --pre

或者,按照说明运行未发布的功能: http://guides.cocoapods.org/using/unreleased-features

获得最新版本的 CocoaPods 后,再次运行 pod install

【讨论】:

这是赚钱的人 眼泪要来了。谢谢! 该错误与 CocoaPods 无关;我们遇到了同样的问题,不要使用 CocoaPods。【参考方案4】:

我正在使用 fastlane gym 1.9.0 构建我的应用程序,但由于文件不匹配,它一直被苹果拒绝,而如果我通过 XCode 8 上传,它被接受了。我检查了 ipa 的 swift support 文件夹和 Frameworks 文件夹中的 swift 库,我发现 swift 支持文件夹中的库用于 swift 2.3,而在 Frameworks 文件夹中它是 swift 3。所以在我的 Gym 文件中,我添加了工具链选项:

gym(
  scheme: "CoCadre", 
  configuration: "Production Release",
  clean: true,
  use_legacy_build_api: false,
  toolchain: "com.apple.dt.toolchain.Swift_2_3"
)

*请注意,我必须将 use_legacy_build_api 更改为 false 才能使用工具链选项

为了使用工具链选项,需要设置use_legacy_build_api: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185

【讨论】:

谢谢!我也在使用 Fastlane 和 Gym,这解决了这个问题。 谢谢,这也有助于解决使用 Gym 时的问题。请注意,我仍然可以通过 use_legacy_build_api 使用此解决方案:true【参考方案5】:

在GitHub 上找到了一个不太复杂的解决方案:

我浏览了 Pods-frameworks.sh 并找到了一个部分 评论为:

嵌入链接的 Swift 运行时库 评论复制这些库(并对其进行代码签名)的代码块似乎 解决了我的提交问题。我还没有深入研究,看看是否 只是它们的复制导致了问题,或者如果它是 代码签名。我在这方面有点不知所措。

【讨论】:

【参考方案6】:
    将您的 cocoapods 更新到最新版本,在终端中输入 sudo gem install cocoapods。 在您的项目目录下运行pod update。 请记住将 Enable Bitcode 设置为 NO,以便为您的所有 pod 设置 Debug 选项。 已修复

问题已解决,因为Pods-frameworks.sh中的以下代码:

# Embed linked Swift runtime libraries
local basename
basename="$(basename "$1" | sed -E s/\\..+// && exit $PIPESTATUS[0])"
local swift_runtime_libs
swift_runtime_libs=$(xcrun otool -LX "$CONFIGURATION_BUILD_DIR/$FRAMEWORKS_FOLDER_PATH/$basename.framework/$basename" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit $PIPESTATUS[0])
for lib in $swift_runtime_libs; do
  echo "rsync -auv \"$SWIFT_STDLIB_PATH/$lib\" \"$destination\""
  rsync -auv "$SWIFT_STDLIB_PATH/$lib" "$destination"
  code_sign_if_enabled "$destination/$lib"
done

改为:

# Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
if [ "$XCODE_VERSION_MAJOR" -lt 7 ]; then
    local swift_runtime_libs
    swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u  && exit $PIPESTATUS[0])
  for lib in $swift_runtime_libs; do
    echo "rsync -auv \"$SWIFT_STDLIB_PATH/$lib\" \"$destination\""
    rsync -auv "$SWIFT_STDLIB_PATH/$lib" "$destination"
    code_sign_if_enabled "$destination/$lib"
  done
fi

【讨论】:

【参考方案7】:

我的解决方案:

我正在通过 Cocoapods 使用 Reveal,而 Reveal 需要禁用 Bitcode。所以我只为调试包括了 Reveal(应该适用于任何其他框架):

pod 'Reveal-iOS-SDK', :configurations => ['Debug']

由于我的 Reveal 现在仅配置为 Debug,因此我禁用了 Bitcode 仅用于 Debug。

有了这个设置,一切正常,没有任何黑客......

【讨论】:

【参考方案8】:

我已经看到在集成不支持位码的库(例如当前稳定版本的 New Relic)时出现此错误。解决方案是删除库、禁用位码(可能无法提交到商店),或者等待库供应商提供支持位码的更新二进制文件。

【讨论】:

【参考方案9】:

对我来说,错误是我使用 Adhoc 配置文件而不是 App Store 配置文件将水疗中心上传到应用商店。

【讨论】:

以上是关于无效的 Swift 支持 - 文件不匹配的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.iOS - 发布应用程序 - 无效的 Swift 支持 - 文件......不匹配

无效的二进制或无效的 Swift 支持

无效的 Swift 支持 - 文件 libswiftCore.dylib 没有正确的代码签名

Xcode 7.2 无效的 Swift 支持 - 缺少 SwiftSupport 文件夹

提交应用程序时无效的 Swift 支持

您能否在应用程序提交状态“无效二进制”中出现错误“无效的 Swift 支持”和“缺少所需的图标文件”提供帮助?