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

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

I wrestled with an "Invalid Swift Support" error for awhile (还有其他相关的问题) ... but now it's changed to something a little different.

苹果现在的错误是:

无效的迅速支持

这些文件与 libift 的 CoreLocation.dylib、 libift 的 CoreMedia.dylib、 libift 的 CoreData.dylib、 libift 的 AVFoundation.dylib 不匹配

/有效载荷/应用程序/框架/libSwift CoreLocation.dylib,/有效载荷/应用程序/框架/libSwift CoreMedia.dylib,/有效载荷/应用程序/框架/libSwift CoreData.dylib,/有效载荷/应用程序/框架/libSwift TAVFoundation.dylib

Make sure the files are correct (?), rebuild your app, and resubmit it.

Don’t apply post-processing to

/有效载荷/应用程序/框架/libSwift CoreLocation.dylib,/有效载荷/应用程序/框架/libSwift CoreMedia.dylib,/有效载荷/应用程序/框架/libSwift CoreData.dylib,/有效载荷/应用程序/框架/libSwift TAVFoundation.dylib。

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

有人知道我该怎么“确保文件正确无误”或者还有其他建议吗,谢谢。

17096 次浏览

在集成不支持位代码的库(比如当前稳定版的 NewRelic)时,我曾经看到过这个错误。解决方案是要么删除库,禁用位代码(并可能无法提交到存储) ,或等待更新的二进制文件,支持位代码从您的库供应商。

这里也有同样的问题。我认为这很可能是开发工具的一个错误,与比特码有关。

我刚找到了解决办法。

  1. 用新的构建编号存档你的应用程序: (
  2. 在 Finder 中查找来自组织者“ Show in Finder”的归档文件(. xcarchive 文件)
  3. 打开包并查找诸如 Products/Applications/YourApp.ipa/Frameworks/SwiftSupport/iphoneos/之类的目录
  4. Copy all libswiftXxx.dylib files from SwiftSupport/iphoneos/ into Products/Applications/YourApp.ipa/Frameworks/ and overwrite
  5. 现在,上传到应用程序商店从组织者

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

NOTE:

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

GitHub上还有一种不那么复杂的解决方案:

我在 Pods-frameworks.sh里找了一下,发现了一个部分 commented as:

嵌入链接的 Swift 运行时库
通过注释复制这些库的代码块(并对它们进行代码签名)似乎可以 已经解决了我的屈服问题。我还没有深入研究 只是复制它们导致了问题,或者 代码签名,我有点力不从心了。

我的解决方案:

我使用显示通过 Cocoapods 和显示需要禁用比特码。因此,我只在 Debug 中包含了 Reveel (应该适用于任何其他框架) :

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

由于现在只为 Debug 配置了 Revale,因此我只为 Debug 禁用了 Bitcode。

enter image description here

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

编辑: CocoaPods 0.39.0已经发布,解决了这个问题!

作为 @ Orkenstein 提到a 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和你应该是好去!

这个问题的修复程序已经合并,可以在最新的 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

  1. 更新您的 cocoapods 到最新版本,在终端键入 sudo gem install cocoapods
  2. 在项目目录下运行 pod update
  3. Remember to set Enable Bitcode to NO for Debug option for all your pods.
  4. 修好了

The problem is fixed because the following code in 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

我的错误是,我建立与 Adhoc 配置文件,而不是应用程序商店配置文件上传到应用程序商店的温泉。

我使用 Fastlane 健身房1.9.0来建立我的应用程序,它不断被苹果拒绝,因为文件不匹配,而如果我上传通过 XCode 8它被接受。我检查了 ipa 的快速支持文件夹和框架文件夹中的快速库,发现快速支持文件夹中的快速库是用于快速2.3的,而框架文件夹中的快速库是用于快速3的。因此,在我的健身文件中,我添加了工具链选项:

gym(
scheme: "CoCadre",
configuration: "Production Release",
clean: true,
use_legacy_build_api: false,
toolchain: "com.apple.dt.toolchain.Swift_2_3"
)

*Note that i had to change use_legacy_build_api to false to use the toolchain option

为了使用工具链选项,需要设置 use _ Heritage _ build _ api: false https://github.com/fastlane/fastlane/issues/6003#issuecomment-244792185