将iOS .dylib合并到框架中,使用lipo打破bitcode重新编译

时间:2016-11-30 19:04:56

标签: ios frameworks dynamic-library bitcode lipo

我正在尝试从.dylib文件手动构建动态iOS框架。二进制文件是使用cmake和xcodebuild创建的,并生成两个armv7个文件,一个包含armv7sarm64x86_64,另一个包含i386-fembed-bitcode parameter架构。使用lipo -create lib_arm.dylib lib_i386.dylib -output MyFramework 编译库,一切都成功。

.dylib文件然后与下一个命令合并:

MyFramework.framework/MyFramework

然后通过将lipo命令的输出复制到:

来创建框架
Info.plist

手动生成标题和vendored_framework并将其添加到框架中。

然后通过CocoaPods将此框架作为ipatool failed with an exception: #<Errno::ENOENT: No such file or directory - /lib_arm.dylib>\n 安装到应用程序中。众所周知,CocoaPods将从任何胖二进制文件中删除i386 / x86_64库,用于App Store分发。

应用程序构建,运行,存档并成功上传到App Store。

但是,由于Bitcode已启用,App Store将处理.ipa,并使用bitcode重新编译,这是失败的地方,我收到来自App Store的电子邮件,处理失败。按照说明,我可以使用Exporting for Ad-Hoc Distribution重新生成错误并重新编译bitcode。我收到的错误是:

lib_arm.dylib

显然在重新编译期间,仍有一个引用或某处file,即使它已合并到下面合并的dylib二进制文件的胖dylib Mach-O通用二进制文件(>> 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

这几乎是我的编译器/链接器知识超出范围的地方。 所以我的问题是:

我在哪里错了?也许bitcode应该以不同的方式编译?或者我可能以错误的方式使用String dateStr = "Nov 30, 2016"; LocalDateTime ldt = LocalDateTime.parse(dateStr, DateTimeFormatter .ofLocalizedDate(FormatStyle.MEDIUM));

谢谢!

1 个答案:

答案 0 :(得分:2)

在使用otool -l命令检查创建的fat二进制文件的加载命令后,我意识到使用lipo本身不会更改二进制文件中的LC_ID_DYLIB,它将重用第一个文件中的install_name_tool提供图书馆。使用@rpath更改id以更正其中一个框架(包括iOS动态框架的install_name_tool -id @rpath/MyFramework.framework/MyFramework MyFramework )可修复错误。

.framework

确保包含二进制文件的完整路径以及POST /surveys/{id}/collectors POST /collectors/{id}/messages POST /collectors/{id}/messages/{id}/recipients/bulk POST /collectors/{id}/messages/{id}/send 目录。