ios - 如何为有条件地使用正确框架的设备和模拟器正确构建应用程序。(不是通用/胖框架)
问题描述
已经获得了设备和模拟器的单独框架,我想整合这些框架以实现所需的功能。我已将模拟器框架包含在我的迦太基框架项目中。当我编译我的框架时,我收到以下错误
为 iOS-armv7 构建,但尝试与为 iOS-arm64 构建的文件链接 架构 armv7 的未定义符号:“OBJCCLASS$...”,引用自:ViewController.o“OBJCCLASS$...”中的 objc-class-ref,引用自:DepedencyInjector.o 中的 objc-class-ref ViewController.o 中的 objc-class-ref ld:未找到架构 armv7 clang 的符号:错误:链接器命令失败,退出代码为 1(使用 -v 查看调用)
参考: https ://developer.apple.com/forums/thread/66978 https://developer.apple.com/forums/thread/66978?answerId=215100022#215100022
解决方案
如果您可以选择将两个框架链接在一起,您可以让编译器决定。在这种情况下,您将创建一个 FAT 二进制文件。这表示:
- 您将两个框架链接在一起
- 创建一个(FAT)框架
- 在 Xcode 中将此库链接到您的应用程序
- 让编译器决定正确的架构
创建 FAT 二进制文件的命令是:
lipo -create ./Simulator.framework/framework_binary ./Device.framework/framework_binary -output ./Universal
现在您必须复制文件夹Device.framework
并为其命名Universal.framework
。
将使用 lipo 创建的二进制文件复制到此文件夹中。
然后打开文件./Universal.framework/Info.plist
并将字符串添加 iPhoneSimulator
到CFBundleSupportedPlatforms
数组中。
现在从文件夹中复制x86_64.swiftdoc
并粘贴到
.x86_64.swiftmodule
Simulator.framework/Modules/framework_name.swiftmodule/
Universal.framework/Modules/framework_name.swiftmodule/
将创建的通用框架导入到目标Embedded Binries
部分的 Xcode 中,您应该能够编译您的项目。
推荐阅读
- vue.js - 如何在Vuetify中设计背景图片和标题具有相同的背景图片
- javascript - 如何使用 JavaScript 和 HTML 开发复选框表单?
- opencv - 我的 mser 实现没有正确检测到文本区域,我该怎么办?
- amazon-web-services - Elasticsearch - 按多个数组中的数组匹配分数排序
- android - 如何更改 DatePickerDialog 年份文本大小?
- java - Apache Ignite 中的内存指标
- go - 为什么 go-pg 中的插入时间会改变
- c# - 可以使用 C# 检索本地存储值吗
- spring-cloud-feign - Springcloud feign 客户端在 Hoxton.SR1 下以错误的方式解析参数
- python - mypy 在导入子模块时出错:模块没有属性