7

在对 2019 年的 WWDC 公告感到兴奋之后,我尝试使用 Xcode 11.0 测试版针对 MacOS 编译我现有的 iOS 应用程序。不幸的是,它没有按预期进行。

Xcode 说我的静态库是为 <unknown> 架构构建的:

为 Mac 的 UIKit 构建,但链接库“libssl.a”是为 <unknown> 构建的。您可能需要在目标编辑器中限制应链接此库的平台。

Xcode 截图

但是当我检查我的静态库时,我可以看到它们确实包含所需的架构x86_64在此处输入图像描述

我相信这个问题可能与 Xcode Beta 错误有关。有人对此有想法吗?

4

2 回答 2

7

单行修复:

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并在分支中实现了 MacCatalyst 支持feature/mac-catalyst

MacCatalyst您可以通过指定archs或构建它targets

选项--archs,对于 OpenSSL <= 1.0.2:

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"

--targetsOpenSSL >= 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"
于 2019-07-02T21:23:02.733 回答
1

以上所有解决方案都对我不起作用,所以我继续尝试为运行 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

使用 finder 导航到该位置:

'/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

确实告诉我确实没有MacOSX10.15.4.sdk。但是有一个 MacOSX10.14.sdk。我确实利用这些知识提出了以下解决方案:

OpenSSL 版本 <= 1.0 (1.0.2l)

版本 <= 1.0 应该只使用 --arch,而不是 --target !

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
于 2020-04-16T20:39:45.087 回答