OpenSSL について考えてみましょう。プロジェクト自体には、 と の 2 つの製品がlibssl.a
ありlibcrypto.a
ます。簡単にするために、このリポジトリiphonesimulator
に格納されているコンパイル済みのライブラリを使用し、プラットフォームだけを考えてみましょう。
リポジトリを見ると、各プラットフォームにはiphonesimulator
、iphoneos
必要なすべてのアーキテクチャ用の静的ライブラリのセットがあります。
私の目標は、これら 2 つの静的ライブラリをバンドルする XCFramework を作成して、Swift Package Manager を単一のパッケージとして使用すると便利になるようにすることです。
i386
次のコマンドを使用して、スタティック ライブラリから iOS シミュレータ ( 、x86_64
、arm64
)、iOS ( arm64
、arm7
...)など、複数のプラットフォームをサポートする 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
. だから、私が求めていることは単に不可能だと思いますか?