我正在尝试从.dylib
文件手动构建动态iOS框架。二进制文件是使用cmake和xcodebuild创建的,并生成两个armv7
个文件,一个包含armv7s
,arm64
和x86_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));
?
谢谢!
答案 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
目录。