2

OpenSSL について考えてみましょう。プロジェクト自体には、 と の 2 つの製品がlibssl.aありlibcrypto.aます。簡単にするために、このリポジトリiphonesimulatorに格納されているコンパイル済みのライブラリを使用し、プラットフォームだけを考えてみましょう。

リポジトリを見ると、各プラットフォームにはiphonesimulatoriphoneos必要なすべてのアーキテクチャ用の静的ライブラリのセットがあります。

私の目標は、これら 2 つの静的ライブラリをバンドルする XCFramework を作成して、Swift Package Manager を単一のパッケージとして使用すると便利になるようにすることです。

i386次のコマンドを使用して、スタティック ライブラリから iOS シミュレータ ( 、x86_64arm64)、iOS ( arm64arm7...)など、複数のプラットフォームをサポートする XCFramework を確実に作成できます。

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/OSSSL_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 を使用して 2 つの静的ライブラリを一緒にバンドルすることは可能ですか? または、各ライブラリが独自のものを持つように、2 つの別個の XCFrameworks を作成する必要がありますか?

上記のリポジトリでは、.framework各プラットフォームごとに を生成する入力として別のビルド フェーズで実際に使用された静的ライブラリ。ビルド ロジックはOpenSSL.xcodeproj. だから、私が求めていることは単に不可能だと思いますか?

4

1 に答える 1