考虑 OpenSSL,该项目本身有两个产品:libssl.a
和libcrypto.a
. 为简单起见,让我们使用存储在此存储库中的预编译库并仅考虑iphonesimulator
平台。
在查看存储库时,每个平台,例如,iphonesimulator
或iphoneos
将有一组静态库,用于所有需要的架构。
我的目标是创建一个捆绑这两个静态库的 XCFramework,以便将 Swift 包管理器作为单个包使用。
我绝对可以使用以下命令从静态库创建一个支持多个平台的 XCFramework:iOS Simulator ( i386
, x86_64
, arm64
), iOS ( arm64
, ...):arm7
xcodebuild -create-xcframework \
-library iphonesimulator/lib/libcrypto.a \
-headers iphonesimulator/include/ \
-library iphoneos/lib/libcrypto.a \
-headers iphoneos/include/ \
-output OpenSSL.xcframework
输出如下:
xcframework 成功写入:/Users/name/OSSL_test/OpenSSL.xcframework
框架的结构是正确的,它包含标题和libcrypto.a
. 当导入另一个 Xcode 项目时,此 XCFramework 会被识别并用于构建应用程序。
但是,当我也尝试添加时libssl.a
,我收到以下错误:
xcodebuild -create-xcframework \
-library iphonesimulator/lib/libcrypto.a \
-headers iphonesimulator/include/ \
-library iphonesimulator/lib/libssl.a \
-headers iphonesimulator/include/ \
-output OpenSSL.xcframework
具有标识符“ios-arm64_i386_x86_64-simulator”的库已经存在。
这是有道理的,因为两者libcrypto.a
都libssl.a
具有相同的架构。
所以,我的问题是,是否可以使用单个 XCFramework 将两个静态库捆绑在一起?或者我应该创建两个单独的 XCFrameworks,以便每个库都有自己的?
在上面提到的存储库中,静态库实际上在另一个构建阶段用作输入,.framework
为每个平台生成一个。构建逻辑在OpenSSL.xcodeproj
. 所以,我想,我要问的根本不可能?