ファイルから動的 iOS フレームワークを手動で構築しようとしてい.dylib
ます。バイナリは cmake と xcodebuild で作成され、2 つの.dylib
ファイル (1 つはとを含みarmv7
、もう1 つはとアーキテクチャ) を生成します。ライブラリはコンパイルされ、すべてが成功します。armv7s
arm64
x86_64
i386
-fembed-bitcode parameter
.dylib ファイルは、次のコマンドでマージされます。
lipo -create lib_arm.dylib lib_i386.dylib -output MyFramework
次に、lipo コマンドからの出力を次の場所にコピーして、フレームワークを作成します。
MyFramework.framework/MyFramework
ヘッダーとヘッダーInfo.plist
は手動で生成され、フレームワークに追加されます。
このフレームワークは、CocoaPods を介してアプリケーションに .xml としてインストールされますvendored_framework
。CocoaPods は、App Store で配布するために、ファット バイナリから i386/x86_64 ライブラリを削除することが知られています。
アプリケーションのビルド、実行、アーカイブ、および App Store へのアップロードが正常に行われます。
ただし、ビットコードが有効になっているため、App Store は .ipa を処理し、ビットコードで再コンパイルします。ここで失敗し、App Store から処理に失敗したというメールを受け取ります。指示に従って、アドホック配布用にエクスポートし、ビットコード用に再コンパイルして、ローカルでエラーを再現できます。私が受け取るエラーはこれです:
ipatool failed with an exception: #<Errno::ENOENT: No such file or directory - /lib_arm.dylib>\n
したがって、どうやら再コンパイル中に、参照またはどこかにまだありますがlib_arm.dylib
、それはファット dylib Mach-O ユニバーサル バイナリにマージされています (file
以下のマージされた dylib バイナリの出力)。
>> file MyFramework
MyFramework: Mach-O universal binary with 5 architectures: [x86_64: Mach-O 64-bit dynamically linked shared library x86_64] [i386] [arm_v7] [arm_v7s] [arm64]
MyFramework (for architecture x86_64): Mach-O 64-bit dynamically linked shared library x86_64
MyFramework (for architecture i386): Mach-O dynamically linked shared library i386
MyFramework (for architecture armv7): Mach-O dynamically linked shared library arm_v7
MyFramework (for architecture armv7s): Mach-O dynamically linked shared library arm_v7s
MyFramework (for architecture arm64): Mach-O 64-bit dynamically linked shared library arm64
これは、私のコンパイラ/リンカーの知識が範囲外になるところです。だから私の質問は:
これのどこが間違っているのですか?多分ビットコードは別の方法でコンパイルする必要がありますか? それともlipo
、間違った方法で使用していますか?
ありがとうございました!