无效的 Swift 支持 - 文件不匹配
Posted
技术标签:
【中文标题】无效的 Swift 支持 - 文件不匹配【英文标题】:Invalid Swift Support - Files don’t match 【发布时间】:2015-09-11 15:01:55 【问题描述】:我刚刚在 Swift 2 中重新编写了一个应用程序。我正在尝试将应用程序上传到 iTunesConnect(通过 Xcode 7 GM)进行内部测试。
我为“无效的 Swift 支持”错误苦苦挣扎了一阵子 (which has other, related questions)……但现在它变得有点不同了。
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 /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.
通过搜索“不应用后处理”、“确保文件正确,重新构建您的应用,然后重新提交”等,我一直无法找到类似的错误。
有谁知道我如何“确保文件正确”--或者-- 还有其他建议吗?谢谢。
【问题讨论】:
我也有同样的问题。有什么解决办法吗? 你要退出这个应用程序吗?这是从 Xcode 直接上传的吗? @Andy 在归档后立即从 Xcode 直接上传。 【参考方案1】:同样的问题。我认为这很可能是与 Bitcode 相关的开发工具的错误。
我刚刚找到了解决方法。
-
使用新的内部版本号归档您的应用 :(
从管理器“在 Finder 中显示”在 Finder 中查找存档(.xcarchive 文件)
打开包,找到像
Products/Applications/YourApp.ipa/Frameworks/
和SwiftSupport/iphoneos/
这样的目录
复制所有libswiftXxx.dylib
文件从SwiftSupport/iphoneos/
到Products/Applications/YourApp.ipa/Frameworks/
并覆盖
现在,从 Organizer 上传到 App Store
通过这个过程,我成功上传了我的构建。现在我正在等待审核。
注意:
我正在使用 CocoaPods,ENABLE_BITCODE
选项为 NO。
【讨论】:
您的目标是什么 ios SDK?我以为你不能在禁用位码的情况下提交到商店。 在我的例子中,SwiftSupport/iphoneos/ 是空的。 验证成功,但在 iTunes Connect 的 Prerelease 部分约 12 小时后,构建仍然是Processing
。
嘿,谢谢!我仍然收到关于 API 分析文件太大的警告 cl.ly/image/0s0N0s441s0X - 但重要的是它仍然通过并且能够进入 TestFlight。
我的.ipa里面没有SwiftSupport/iphoneos/文件夹怎么办?【参考方案2】:
编辑:CocoaPods 0.39.0 已发布,修复了此问题!
作为@orkenstein mentioned,通过注释掉Pod-frameworks.sh
中的一些代码,就有a simpler solution。我在这里包含更多细节。
在你的 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
,您应该一切顺利!
【讨论】:
这对我有用。请注意,如果您运行 pod-install 或 pod-update,您可能需要再次评论! Cocoapods 问题在这里:github.com/CocoaPods/CocoaPods/issues/4188,你可以试试这个 PR:github.com/CocoaPods/CocoaPods/pull/4221 与这些说明:guides.cocoapods.org/using/unreleased-features 更新了 cocoaPods 0.39.0 并没有为我解决这个问题 @DJ Tarazona 谢谢你的食谱!!它完全对我有用,即使我确实将 cocopods gem 更新到最新版本【参考方案3】:此问题的修复已合并,可在最新的 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
。
【讨论】:
这是赚钱的人 眼泪要来了。谢谢! 该错误与 CocoaPods 无关;我们遇到了同样的问题,不要使用 CocoaPods。【参考方案4】:我正在使用 fastlane gym 1.9.0 构建我的应用程序,但由于文件不匹配,它一直被苹果拒绝,而如果我通过 XCode 8 上传,它被接受了。我检查了 ipa 的 swift support 文件夹和 Frameworks 文件夹中的 swift 库,我发现 swift 支持文件夹中的库用于 swift 2.3,而在 Frameworks 文件夹中它是 swift 3。所以在我的 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,这解决了这个问题。 谢谢,这也有助于解决使用 Gym 时的问题。请注意,我仍然可以通过 use_legacy_build_api 使用此解决方案:true【参考方案5】:在GitHub 上找到了一个不太复杂的解决方案:
我浏览了 Pods-frameworks.sh 并找到了一个部分 评论为:
嵌入链接的 Swift 运行时库 评论复制这些库(并对其进行代码签名)的代码块似乎 解决了我的提交问题。我还没有深入研究,看看是否 只是它们的复制导致了问题,或者如果它是 代码签名。我在这方面有点不知所措。
【讨论】:
【参考方案6】:-
将您的 cocoapods 更新到最新版本,在终端中输入
sudo gem install cocoapods
。
在您的项目目录下运行pod update
。
请记住将 Enable Bitcode 设置为 NO,以便为您的所有 pod 设置 Debug
选项。
已修复
问题已解决,因为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
【讨论】:
【参考方案7】:我的解决方案:
我正在通过 Cocoapods 使用 Reveal,而 Reveal 需要禁用 Bitcode。所以我只为调试包括了 Reveal(应该适用于任何其他框架):
pod 'Reveal-iOS-SDK', :configurations => ['Debug']
由于我的 Reveal 现在仅配置为 Debug,因此我禁用了 Bitcode 仅用于 Debug。
有了这个设置,一切正常,没有任何黑客......
【讨论】:
【参考方案8】:我已经看到在集成不支持位码的库(例如当前稳定版本的 New Relic)时出现此错误。解决方案是删除库、禁用位码(可能无法提交到商店),或者等待库供应商提供支持位码的更新二进制文件。
【讨论】:
【参考方案9】:对我来说,错误是我使用 Adhoc 配置文件而不是 App Store 配置文件将水疗中心上传到应用商店。
【讨论】:
以上是关于无效的 Swift 支持 - 文件不匹配的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.iOS - 发布应用程序 - 无效的 Swift 支持 - 文件......不匹配
无效的 Swift 支持 - 文件 libswiftCore.dylib 没有正确的代码签名