Xcode 11 无法识别静态库的架构:MacCatalyst (aka UIKitForMac)
Posted
技术标签:
【中文标题】Xcode 11 无法识别静态库的架构:MacCatalyst (aka UIKitForMac)【英文标题】:Xcode 11 not recognizing static library's architecture: MacCatalyst (aka UIKitForMac) 【发布时间】:2019-10-22 02:44:25 【问题描述】:在对 2019 年的 WWDC 公告感到兴奋后,我尝试使用 Xcode 11.0 测试版针对 MacOS 编译我现有的 ios 应用程序。不幸的是,它没有按预期进行。
Xcode 说我的静态库是为
为 Mac 的 UIKit 构建,但链接库“libssl.a”是 为而建。您可能需要限制平台 此库应在目标编辑器中链接。
但是当我检查我的静态库时,我可以看到它们确实包含所需的架构 x86_64
:
我认为此问题可能与 Xcode Beta 错误有关。有人对此有想法吗?
【问题讨论】:
“Xcode 说我的静态库是为单行修复:
git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --archs="MacOSX_x86_64 i386 arm64 armv7s armv7"
解释:
根据 Apple 软件工程师 edford 的说法,我们需要为 iOS 平台构建二进制文件,目标为 MacOSX
并使用 CFLAG
-target x86_64-apple-ios13.0-macabi
。这里有一个非常有启发性的讨论:https://forums.developer.apple.com/message/362577。
我已经分叉了 OpenSSL-for-iPhone here 并在分支 feature/mac-catalyst
中实现了 MacCatalyst 支持。
您可以通过指定archs
或targets
为MacCatalyst
构建它:
选项--archs
,用于OpenSSL
git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --archs="MacOSX_x86_64 i386 arm64 armv7s armv7" --version="1.0.2l"
选项 --targets
用于 OpenSSL >= 1.1.0
git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --targets="ios-sim-cross-i386 ios64-cross-arm64 ios-cross-armv7s ios-cross-armv7 mac-catalyst-x86_64" --version="1.1.0"
git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --archs="MacOSX_x86_64 i386 arm64 armv7s armv7" --version="1.0.2l"
--targets
用于 OpenSSL >= 1.1.0git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --targets="ios-sim-cross-i386 ios64-cross-arm64 ios-cross-armv7s ios-cross-armv7 mac-catalyst-x86_64" --version="1.1.0"
【讨论】:
您能分享为 UIKitForMac 构建的 OpenSSL 库吗?在我的机器上构建它时遇到问题。 嘿@bmueller,我已经更新了上面的答案。您应该能够通过调用MacCatalyst
支持重建 OpenSSL:bash git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && cd OpenSSL-for-iPhone && ./build-libssl.sh --archs="MacOSX_x86_64 i386 arm64 armv7s armv7"
谢谢!该脚本适用于 1.0.2l 版本。出于某种原因,其他版本的 Open SSL 失败了。
@marcelosalloum 我第一次尝试了 1.0.1e 版本,但一直失败。这给了我一个升级到新版本的充分理由。再次感谢。你为我节省了很多时间。
@marcelosalloum 在“iPhoneSimulator13.2-x86_64.sdk”中搜索文件失败,这些文件现在位于“MacOSX10.15-x86_64.sdk”中。没有检查代码,但假设lipo
a fat lib 时会发生这种情况。 cp -r "MacOSX10.15-x86_64.sdk" "iPhoneSimulator13.2-x86_64.sdk"
解决了这个问题。【参考方案2】:
上述所有解决方案都不适用于我,所以我继续尝试为运行 Mac OSX 10.15.4 的系统修复它。
就我而言,这就是上述解决方案对我不起作用的地方:
no such sysroot directory: '/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.15.4.sdk' [-Wmissing-sysroot]
我通读了 build-libssl.sh 文件,发现 sdk 版本是由脚本使用代码获取的:
xcrun -sdk macosx --show-sdk-version
在我的系统上确实返回:
10.15.4
使用查找器导航到该位置:
'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/
确实告诉我确实没有 MacOSX10.15.4.sdk。但是有一个 MacOSX10.14.sdk。我确实利用这些知识提出了以下解决方案:
OpenSSL 版本
版本
git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --arch="MacOSX_x86_64 i386 arm64 armv7s armv7 tv_x86_64 tv_arm64" --macosx-sdk=10.15 --version="1.0.2l"
OpenSSL 版本 >= 1.1 (1.1.0) 目前无法正常运行
版本 >= 1.1 应该只使用 --target,而不是 --arch !
git clone git@github.com:marcelosalloum/OpenSSL-for-iPhone.git --branch feature/mac-catalyst && \
cd OpenSSL-for-iPhone && \
./build-libssl.sh --targets="mac-catalyst-x86_64 ios-sim-cross-i386 ios64-cross-arm64 ios-cross-armv7s ios-cross-armv7 tvos-sim-cross-x86_64 tvos64-cross-arm64" --macosx-sdk=10.15 --version="1.1.0" -v
【讨论】:
以上是关于Xcode 11 无法识别静态库的架构:MacCatalyst (aka UIKitForMac)的主要内容,如果未能解决你的问题,请参考以下文章
iOS, Xcode11,项目提示第三方库报错无法运行 bundle format unrecognized, invalid, or unsuitable