.dylib
ファイルから動的なiOSフレームワークを手動で構築しようとしています。バイナリはcmakeとxcodebuildで作成され、2つの.dylib
ファイル(1つはarmv7
,armv7s
およびarm64
、もう1つはx86_64
およびi386
のアーキテクチャを含む)を生成します。ライブラリは-fembed-bitcode parameter
でコンパイルされ、すべて成功します。iOS .dylibをlipo breaksのフレームワークにマージするビットコード再コンパイル
MyFramework.framework/MyFramework
ヘッダとInfo.plist
を手動で生成され、に追加されます。
lipo -create lib_arm.dylib lib_i386.dylib -output MyFramework
Frameworkは、その後にリポコマンドの出力をコピーして作成されます。
は.dylibファイルは、次のコマンドを使用してマージされます枠組み。
このフレームワークは、vendored_framework
としてアプリケーションにCocoaPods経由でインストールされます。 CocoaPodsは、App Storeの配布用に、どのバイナリからでもi386/x86_64ライブラリを削除することが知られています。
アプリケーションはApp Storeに正常にビルド、実行、アーカイブ、アップロードを行います。
しかし、ビットコードが有効なので、App Storeは.ipaを処理し、ビットコードで再コンパイルします。これが失敗し、App Storeから処理に失敗したというメールが届きます。指示に従い、Ad-Hoc Distributionのエクスポートとビットコードの再コンパイルを使用してエラーをローカルで再現できます。私は、受信エラーがこれです:
ipatool failed with an exception: #<Errno::ENOENT: No such file or directory - /lib_arm.dylib>\n
だから、明らかに再コンパイル時に、どこかlib_arm.dylib
への参照や、それがマージされたの脂肪dylibマッハ-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
を間違った方法で使用していますか?
ありがとうございました!