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


116

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

我花了一段时间解决“无效的Swift支持”错误(还有其他相关问题)……但是现在它变成了一些不同的东西。

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/libswiftCoreData.dylib、/Payload/App.app/Frame.s dylib

确保文件正确(?),重新构建您的应用,然后重新提交。

不要对

/Payload/App.app/Frameworks/libswiftCoreLocation.dylib、/Payload/App.app/Frameworks/libswiftCoreMedia.dylib、/Payload/App.app/Frameworks/libswiftCoreData.dylib、/Payload/App.app/Frameworks/libswiftCoreData.dylib、/Payload/App.app/Frame.s dylib。

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

有谁知道我如何“确保文件正确”-或-有其他建议吗?谢谢。


我有完全一样的问题。有什么办法吗?
Beny Boariu 2015年

您要退出此应用吗?这是从Xcode直接上传吗?
安迪2015年

@Andy存档后立即从Xcode直接上传。
2015年

Answers:


82

这里同样的问题。我认为这很可能是开发人员工具中与位码有关的错误。

我刚刚找到了解决方法。

  1. 使用新的内部版本号存档您的应用程序:(
  2. 在管理器“在Finder中显示”中的Finder中找到档案(.xcarchive文件)
  3. 打开包装,发现类似的目录Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/
  4. 复制所有libswiftXxx.dylib文件从SwiftSupport/iphoneos/进入Products/Applications/YourApp.ipa/Frameworks/和覆盖
  5. 现在,从管理器上传到App Store

通过此过程,我成功上传了我的构建。现在我正在等待审查。

注意:

我正在使用CocoaPods,但ENABLE_BITCODE选项为“否”。


您定位到哪个iOS SDK?我以为您不能在禁用位码的情况下提交商店。
2015年

3
就我而言,SwiftSupport / iphoneos /为空。
Lim Thye Chean 2015年

2
对我而言,验证成功完成了,但在ProcessingiTunes Connect的“预发行版”部分中,构建仍然需要约12小时。
ldiqual

2
嘿,谢谢!我仍然收到有关API分析文件太大cl.ly/image/0s0N0s441s0X的警告-但重要的是它仍然通过并能够进入TestFlight。
2015年

1
如果.ipa中没有文件夹SwiftSupport / iphoneos /,该怎么办?
亚历山大·雅科夫列夫2015年

51

编辑:CocoaPods 0.39.0已发布,可以解决此问题!

正如@orkenstein所提到的,有一个更为简单的解决方案,它注释了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,您应该就可以开始了!


4
这对我有用。请注意,如果您运行pod-install或pod-update,则可能不得不再次评论!
Max Alexander


更新了cocoaPods 0.39.0,但无法为我解决此问题
nwales 2015年

@DJ Tarazona谢谢你的食谱!即使我确实将cocopods宝石更新到最新版本,它也完全为我解决了问题
Jorge Vicente Mendoza

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再次运行。


这是赚钱的人
tommybananas 2015年

眼泪来了。谢谢!
MQLN

该错误与CocoaPods无关;我们遇到同样的问题,请勿使用CocoaPods。
devios1

8

我使用的是fastlane gym 1.9.0来构建我的应用程序,但由于文件不匹配,它一直被苹果拒绝,但是如果我通过XCode 8上传,它将被接受。我检查了ipa的swift support文件夹和Frameworks文件夹中的swift库,发现swift support文件夹中的库为swift 2.3,而在Frameworks文件夹中的库为swift3。因此,在我的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,因此可以解决此问题。
Eystein Bye

谢谢,这也有助于修复使用Gym时的问题。请注意,我仍然可以通过use_legacy_build_api使用此解决方案:true
Viktor Malyi

6

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

我在Pods-frameworks.sh浏览了一下,发现有一段注释为:

嵌入链接的Swift运行时库
注释掉复制这些库的代码块(并对其进行代码签名)似乎已经解决了我的提交问题。我还没有深入研究导致问题的原因仅仅是它们的复制还是代码签名。我在那儿的深度不够。


4
  1. 将您的cocoapods更新到最新版本,输入sudo gem install cocoapods终端。
  2. pod update在您的项目目录下运行。
  3. 请记住,将所有吊舱的“ 启用位码”设置为“ 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

2

我对此的解决方案:

我正在通过Cocoapods使用Reveal,Reveal需要禁用Bitcode。所以我只为调试添加了Reveal(应该对任何其他Framwork都起作用):

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

由于我的Reveal现在仅配置为调试,因此我仅对调试禁用了位码。

在此处输入图片说明

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


0

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


0

对我来说,错误是我使用Adhoc个人资料而非App Store个人资料构建的,用于将Spa上传到App Store。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.