最近在处理iOS问题时遇到了好几个坑,这里做个总结,也希望能帮助到遇到同样问题的同学。
更新到 Xcode 10 后无法编译问题
Apple 软件的更新真是让人头痛,今天提示你Xcode要更新,明天提示你 iPhoneOS要更新,但更新后,就遇到了各种问题。
我们的工程从 Xcode9.4.1更新到 Xcode10之后,就出现了编译错误,原因是在新的 SDK (/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr
)这个目录下本该有的一些库和头文件的,结果在新的Xcode中都给去掉了。谁能给个解释,这是为什么呢?
没办法只好再切回到 Xcode 老版本。但又出现了新的问题,由于我的iPhoneOS已经更新到了 iOS12,所以老版本 Xcode 编出来的包无法与高版本的 iPhone 手机联调。
老版本Xcode支持新版本的 iPhone 手机真机调试
为了让老版本的Xcode与新版 iPhone 手机可以联调,解决办法是增加 Xcode 的设备支持。具体做法是,将新 iOS 对应的设备加到 DeviceSupport(/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport
)目录中。
具体该如何做呢?可以安装一个最新版本的 Xcode, 然后从最新的 Xcode的 DeviceSupport目录中拷贝相应的文件到老版本的 Xcode中。
无法找到函数符号
无法找到函数符号这类问题其实很常见,解决的办法也很简单。无法找到符号的根本原因是无法找到相关的库或头文件,或者库不对等,所以只要将对应的库和头文件加载正确就好了。
而我这次遇到的,可以肯定库和头文件是对的,但Xcode还是报错,非常奇怪。
后经过反复测试发现,这个问题的原因是由于在 Xcode里有编译缓存,必须手工将缓存清除掉,让Xcode重新生成缓存才行,真是坑爹呀!
具体办法:
- 进入到
~/Library/Developer/Xcode/DerivedData
目录下 - 删除对应的目录
升级到 Xcode10 编译出的包放在老系统上Crash
还发现一个问题,Xcode升级到 10后,编译出的包在 iOS11 甚至更老的系统中会Crash.
解决办法是将 Xcode10 降回到 Xcode 9。
具体做法如下:
- 到 Apple上使用自己的开发者帐号登陆。
- 从软件列表中下载 X9.4.1版本
- 安装
- 可以将老的 Xcode更名或删除掉
- 拷贝 Xcode.app 到 /Applications 目录下。
无法安装问题
在iOS开发过程中无法安装的问题有很多,我这里遇到了一种,提示信息如下:
其原因是,之前在这台手机上安装的软件使用的签名信息与现在要装的签名信息不一致导致的。
解决办法是将手机上已经安装的软件先卸载掉,然后再安装就OK了。