【问题标题】:Invalid Swift Support - Files don’t match无效的 Swift 支持 - 文件不匹配
【发布时间】: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 直接上传。

标签: ios xcode swift


【解决方案1】:

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

我刚刚找到了解决方法。

  1. 使用新的内部版本号归档您的应用 :(
  2. 从管理器“在 Finder 中显示”在 Finder 中查找存档(.xcarchive 文件)
  3. 打开包,找到像Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/这样的目录
  4. 复制所有libswiftXxx.dylib文件从SwiftSupport/iphoneos/Products/Applications/YourApp.ipa/Frameworks/并覆盖
  5. 现在,从 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,您应该一切顺利!

【讨论】:

【解决方案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】:
    1. 将您的 cocoapods 更新到最新版本,在终端中输入 sudo gem install cocoapods
    2. 在您的项目目录下运行pod update
    3. 请记住将 Enable Bitcode 设置为 NO,以便为您的所有 pod 设置 Debug 选项。
    4. 已修复

    问题已解决,因为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 配置文件将水疗中心上传到应用商店。

          【讨论】:

            猜你喜欢
            • 2019-04-12
            • 1970-01-01
            • 1970-01-01
            • 2021-04-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多