首页 文章

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

提问于
浏览
110

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

我暂时与"Invalid Swift Support"错误搏斗(which has other, related questions)......但现在它变成了一些不同的东西 .

Apple的错误现在说:

Invalid Swift Support

文件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

Make sure the files are correct (?),重建您的应用,然后重新提交 .

不要对后处理进行处理

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

通过搜索“不要应用后期处理”,“确保文件正确,重建您的应用程序,然后重新提交”等,我无法找到类似的错误 .

Does anyone know how I can "Make sure the files are correct" --or-- have any other recommendations? Thank you.

9 回答

  • 51

    同样的问题在这里我认为这很可能是开发人员工具中与Bitcode相关的错误 .

    我刚刚找到了解决方法 .

    • 使用新版本号存档您的应用:(

    • 从管理器中查找Finder中的存档(.xcarchive文件)“在Finder中显示”

    • 打开包并找到 Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/ 等目录

    • Copy 所有 libswiftXxx.dylib 文件从 SwiftSupport/iphoneos/ 进入 Products/Applications/YourApp.ipa/Frameworks/ 并覆盖

    • 现在,从Organizer上传到App Store

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

    注意:

    我正在使用CocoaPods, ENABLE_BITCODE 选项是NO .

  • 6

    Edit: CocoaPods 0.39.0 has been released which fixes this issue!

    作为@orkenstein mentioneda simpler solution通过在 Pod-frameworks.sh 中注释掉一些代码 . 我在这里提供了更多细节 .

    在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 ,你应该好好去!

  • 0

    此问题的修复程序已合并,并且可在最新的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 .

  • 0

    我使用fastlane gym 1.9.0来构建我的应用程序并且它一直被苹果拒绝,因为文件不匹配,而如果我通过XCode 8上传则被接受 . 我检查了ipa的swift支持文件夹和Frameworks文件夹中的swift库,我发现swift支持文件夹中的库是swift 2.3,而在Frameworks文件夹中它是swift 3.所以在我的健身房文件中我添加了工具链选项:

    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

  • 8

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

    我在Pods-frameworks.sh中查看并发现一个部分评论为:嵌入链接的Swift运行时库注释复制这些库的代码块(以及代码签名)似乎修复了我的提交问题 . 我还没有深入研究是否只是复制它们导致问题或是否是代码签名 . 我在那里有点偏离我的深度 .

  • 4
    • 将您的cocoapods更新到最新版本,在终端中输入 sudo gem install cocoapods .

    • 在项目目录下运行 pod update .

    • 切记为所有pod设置 Enable BitcodeNO 选项 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
    
  • 16

    我的解决方案:

    我正在通过Cocoapods和Reveal使用Reveal来禁用Bitcode . 所以我只为Debug调整了Reveal(适用于任何其他Framwork):

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

    因为我的Reveal现在只配置为Debug,所以我只为Debug调整了Bitcode .

    enter image description here

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

  • 2

    我已经看到在集成不支持bitcode的库(例如当前稳定版本的New Relic)时会发生此错误 . 解决方案是要么删除库,禁用bitcode(可能无法提交到商店),或等待从您的图书馆供应商支持bitcode的更新二进制文件 .

  • 79

    我的错误是我用Adhoc配置文件而不是App Store配置文件构建,用于将spa上传到应用商店 .

相关问题