1. Undefined symbols for architecture x86_64 / i386 /arm64 / armv7s / armv7 :
原因: 静态库的架构不对 真机/模拟器 没有架构
解决方法: 检查第三方类库的架构版本 真机/模拟器
2. Undefined symbols for architecture i386:
原因: 真机和模拟器也是区分多种架构的
模拟器架构:
i386 : 4S / 5 32位
x86_64 : 5S ---> 6S 64位
真机架构:
armv7: 4 / 4S
armv7s: 5 / 5C 最特殊的一代 默认已经不支持输出
arm64: 5S --> 6S
3. 怎么查看架构
lipo -info 静态库. a
4. 合成多个版本架构
需求: 合成模拟器所需要的全部架构 如果使用方式一合成5种架构: 执行4次
方式一: 使用合成命令lipo -create 静态库1.a 静态库2.a -output 新静态库.a
方式二: 设置编译当前架构为 NO (只针对模拟器/真机, 需要运行两次) 方式二合成简单: 执行1次
如果需要合并真机的所有架构 以及 模拟器的所有架构, 继续使用方式一合成
需求: 合成5种架构
(友盟5种架构 首先合成模拟器的2种架构, 再合成真机的3种架构 , 在将两个架构合成)
默认合成之后, 只有4种架构, 缺少 armv7s
armv7S 这个架构, 在2014年10月份的 Xcode 更新中, 取消了默认输出, 如果想要输出, 就需要配置手动添加
5. 是否需要合成静态库的真机/模拟器 (每一种架构都会占用一定的大小)
不合成通用文件: 百度 文件体积小 好处: 真机调试一定不用模拟器的架构
合成通用文件: 友盟 文件体积大 好处: 是调试时不用区分真机和模拟器
(如果开发遇到这种问题, 开发时, 先合并, 发布时,使用真机的架构版本)
6. Release 和 Debug 的区别
应该输出 Release 版本
Debug : 有丰富的调试语句和代码 当前模式下会输出(NSLog)
Release : 不会有丰富的调试语句和代码 文件体积会变小, 执行速度会变快 , 实际上体现不出太大区别(对用户来说无太大影响)
7. 图片资源包
如果静态库中的图像名称, 跟项目中资源中的图像名称, 如果发生重名, 可能就出现问题
应该使用 Bundle(文件夹)
8. Xcode7创建项目时, 默认会包含 Bitcode (YES)
如果使用之前项目创建的第三库(友盟), 真机运行会报错. 解决方式, Setting--> 搜索 Enable Bitcode --> 改为 NO
下面是合成架构