无效的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了解决方法。
- 存档您的应用程序与新的编号:(
- 在pipe理器“查找器中显示”中查找Finder中的档案(.xcarchive文件)
- 打开软件包,find
Products/Applications/YourApp.ipa/Frameworks/
和SwiftSupport/iphoneos/
- 将所有
libswiftXxx.dylib
文件从SwiftSupport/iphoneos/
复制到Products/Applications/YourApp.ipa/Frameworks/
并覆盖 - 现在,从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运行时库
评论那些复制这些库的代码块(和代码签名)似乎已经解决了我的提交问题。 我还没有深入探讨,看看是否只是复制导致问题的代码或代码签名。 我在那里有点深刻。
- 更新你的cocoapods到最新版本,在terminalinput
sudo gem install cocoapods
。 - 在您的项目目录下运行
pod update
。 - 请记住为所有Pod设置启用位代码为“ 否 ”选项。
- 固定
该问题已得到解决,因为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上传到应用程序商店。