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

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

我有一段时间( 有其他相关的问题 )与“无效的迅速支持”错误摔跤…但现在它改变了一点点不同。

现在苹果的错误说:

无效的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

确保文件正确 (?),重build你的应用程序,并重新提交。

不要应用后期处理

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

通过search“不应用后期处理”,“确保文件正确,重新生成应用程序并重新提交”等,我找不到类似的错误。

有谁知道我怎么能“确保文件是正确的” – 或者 – 有任何其他的build议? 谢谢。

这里同样的问题。 我认为这很可能是与Bitcode相关的开发工具的一个bug。

我刚刚find了解决方法。

  1. 存档您的应用程序与新的编号:(
  2. 在pipe理器“查找器中显示”中查找Finder中的档案(.xcarchive文件)
  3. 打开软件包,findProducts/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/
  4. 所有libswiftXxx.dylib文件从SwiftSupport/iphoneos/ 复制Products/Applications/YourApp.ipa/Frameworks/并覆盖
  5. 现在,从pipe理器上传到App Store

有了这个过程,我成功地上传了我的版本。 现在我正在等待审查。

注意:

我使用的是CocoaPods,而ENABLE_BITCODE选项是NO。

编辑: CocoaPods 0.39.0已经发布修复这个问题!

正如@orkenstein所提到的 ,通过在Pod-frameworks.sh注释掉一些代码,有一个更简单的解决scheme 。 我在这里包括更多的细节。

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

这个问题的修复已经被合并,并在最新的CocoaPods版本0.39.0.beta.5

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

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

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

一旦你有最新版本的CocoaPods,再次运行pod install

我使用fastlane健身房1.9.0来build立我的应用程序,它不断被苹果拒绝,因为文件不匹配,而如果我通过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

在GitHub上find一个稍微不复杂的解决scheme:

我在Pods-frameworks.sh中看了一下,发现一个部分是:

embedded链接的Swift运行时库
评论那些复制这些库的代码块(和代码签名)似乎已经解决了我的提交问题。 我还没有深入探讨,看看是否只是复制导致问题的代码或代码签名。 我在那里有点深刻。

  1. 更新你的cocoapods到最新版本,在terminalinputsudo gem install cocoapods
  2. 在您的项目目录下运行pod update
  3. 请记住为所有Pod设置启用位代码为“ ”选项。
  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 

我的解决scheme:

我通过Cocoapods使用Reveal,而Reveal需要禁用Bitcode。 所以我包括显示(只适用于任何其他Framwork)只为debugging:

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

因为我的Reveal现在只configuration为Debug,所以我只禁用了Bitcode来debugging。

在这里输入图像描述

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

我看到当集成不支持位代码的库时(例如New Relic的当前稳定版本),会发生此错误。 解决scheme是删除库,禁用位码(并可能无法提交到商店),或者等待更新的二进制文件支持来自库厂商的位码。

我的错误是,我使用Adhocconfiguration文件而不是App Storeconfiguration文件来将Spa上传到应用程序商店。