公司做SDK开发难免遇到用户使用SDK遇到各种各样的原因,固然使用文档说明排除的大部分,但难免会有用户自己的工程报其他错而怀疑是SDK的问题,不得不一一去协助解决,下面关于arm64指令集不支持的错误总计:
部分报错内容
Undefined symbols for architecture arm64:
"_OBJC_CLASS_$_WBAuthorizeResponse", referenced from:objc-class-ref in Payment(MCHApi.o)
"_OBJC_CLASS_$_WBAuthorizeRequest", referenced from:
objc-class-ref in Payment(MCHLoginView.o)
"_OBJC_CLASS_$_WeiboSDK", referenced from:
objc-class-ref in Payment(MCHApi.o)
objc-class-ref in Payment(MCHLoginView.o)
"_OBJC_CLASS_$_BaiduOAuthSDK", referenced from:
objc-class-ref in Payment(MCHApi.o)
objc-class-ref in Payment(MCHLoginView.o)
先说一下关于指令集的详细内容,不用指令集代表不同的设备
对于iOS设备来说iOS的指令集有armv6、armv7、armv7s、arm64
这样四种,不同型号的iOS设备使用不同的指令集,下面是各自的区别:
armv6
- iPhone、iPhone 3G
- iPod 1G、iPod 2G
armv7
- iPhone 3GS、iPhone 4
- iPod 3G、iPod 4G、iPod 5G
- iPad、iPad 2、iPad 3、iPad Mini
armv7s
- iPhone 5、iPhone 5C
- iPad 4
arm64
- iPhone 5S iPhone 6 iPhone 6Plus
- iPad Air, Retina iPad Mini
关于报错总结一下几点原因:
1.build setting里面的 Architectures设置问题
Architectures 设置所支持的指令集
Build Active Architectures Only YES的时候是针对所测试的设备去生成所对应的二进制包(例如此刻是iPhone6 ,那么就只会生成一套arm64指令集的二进制),NO的时候回生成所有支持指令集的二进制包,当然这样会消耗资源。
比如,你的Valid Architectures设置的支持arm指令集版本有:armv7/armv7s/arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。
2.是所用的静态库有的可能不支持arm64等指令集,那么就需要我们去重新获取一份支持arm64的静态库文件
3.就是用到SVN版本控制器的时候,默认忽略几种类型的文件的,例如.a .o
1.在finder需要去查找cornerstone的文件 ,com+shift+G ,或者点开finder-前往-前往文件夹, 把该路径 ~/.subversion/config 粘贴到上面,点击 前往
2、打开config文件,在里面搜索 global-ignores ,你会看到下面这行,
#global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .a .pyc .pyo # .rej ~ ## .#* .*.swp .DS_Store
将其修改为
global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .pyc .pyo# .rej ~ ## .# .*.swp .DS_Store
保存后,再打开svn进行上传就不会丢失.a文件了
PS:上传图片不知道怎么回事出现的都是❓不显示,很烦躁,还有一些原因暂时没遇到过,先不写了