我試圖從.dylib
文件手動構建一個動態iOS框架。使用cmake和xcodebuild創建二進制文件,並生成兩個.dylib
文件,一個文件包含armv7
,armv7s
和arm64
,另一個x86_64
和i386
體系結構。庫編譯爲-fembed-bitcode parameter
,一切都成功了。將iOS .dylib合併到lipo中重新編碼bitcode
MyFramework.framework/MyFramework
頁眉和Info.plist
是手動生成的,並添加到:
lipo -create lib_arm.dylib lib_i386.dylib -output MyFramework
框架然後,通過從脂命令的輸出複製到創建的:
名爲.dylib文件然後與下一個命令合併該框架。
然後通過CocoaPods將該框架作爲vendored_framework
安裝到應用程序中。據瞭解,CocoaPods將從任何胖二進制文件中剝離i386/x86_64庫,用於App Store分發。
應用程序構建,運行,歸檔併成功上傳到App Store。
但是,由於啓用了Bitcode,App Store將處理.ipa文件,並用bitcode進行重新編譯,這就是它失敗的地方,我收到來自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的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
這是我的編譯器/鏈接器知識超出範圍的地方。 所以我的問題是:
我在哪裏出錯了?也許bitcode應該以不同的方式編譯?或者,也許我錯誤地使用了lipo
?
謝謝!