无效的Swift支持 - 文件与

时间:2015-09-11 15:01:56

标签: ios xcode swift

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

我在一段时间内遇到了“无效的快速支持”错误(which has other, related questions)...但是现在它变成了一些不同的东西。

Apple的错误现在说:

无效的快速支持

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

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

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

9 个答案:

答案 0 :(得分:79)

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

我刚刚找到了解决方法。

  1. 使用新版本号存档您的应用:(
  2. 从管理器中查找Finder中的存档(.xcarchive文件)“在Finder中显示”
  3. 打开包并找到Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/
  4. 等目录
  5. 将所有libswiftXxx.dylib个文件从SwiftSupport/iphoneos/复制<{strong>到Products/Applications/YourApp.ipa/Frameworks/并覆盖
  6. 现在,从Organizer上传到App Store
  7. 通过这个过程,我成功上传了我的版本。现在我在等待审查。

    注:

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

答案 1 :(得分:51)

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

作为@orkenstein mentionedPod-frameworks.sh通过在Pods/Target Support Files/Pods/Pods-frameworks.sh中注释掉一些代码来a simpler solution。我在这里提供了更多细节。

在Xcode项目目录中,打开# 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

=&GT;

Pods-frameworks.sh

保存public SampleFragmentPagerAdapter(FragmentManager fm, List<String> tabtitle, int count) { super(fm); PAGE_COUNT = count; tabTitles = tabtitle; } @Override public int getCount() { return PAGE_COUNT; } @Override public Fragment getItem(int position) { return TabFragment.newInstance(position); } @Override public CharSequence getPageTitle(int position) { // Generate title based on item position return tabTitles.get(position); } 你应该好好去!

答案 2 :(得分:16)

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

答案 3 :(得分:8)

我使用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

答案 4 :(得分:6)

GitHub上有一个不太复杂的解决方案:

  

我在 Pods-frameworks.sh 中查看并找到了一个部分   评论为:

     

嵌入链接的Swift运行时库
   评论复制这些库的代码块(和代码签名)似乎   修复了我的提交困境。我还没有深入探究是否   它只是复制它们导致问题或者它是什么   代码签名。我在那里得到了一些深度。

答案 5 :(得分:4)

  1. 将您的cocoapods更新为最新版本,在终端中输入sudo gem install cocoapods
  2. 在项目目录下运行pod update
  3. 请务必为所有广告连播的Debug选项设置启用Bitcode
  4. 固定
  5. 问题已解决,因为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
    

答案 6 :(得分:2)

我的解决方案:

我正在使用Cocoapods Reveal和Reveal需要禁用Bitcode。因此,我只为Debug进行了Reveal(适用于任何其他Framwork):

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

由于我的Reveal现在只配置为Debug,我只为Debug调试了Bitcode。

enter image description here

使用此设置一切正常,没有任何黑客......

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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