iOS12 XCode10 适配
1. libstdc++弃用 报错Undefined symbols
XCode10编译报错ndefined symbols for architecture XXX
,如果你的工程中有libstdc++依赖(可从Linked Frameworks and Libraries 项查看),那么就会出现这类错误。
因为苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是libstdc++已经标记为废弃有5年了,建议大家使用经过了llvm优化过并且全面支持C++11的libc++库。
libstdc++.dylib是C++98版本的标准库实现动态库,而libc++.dylib是C++11版本的标准库实现动态库。libc++是一个更加新的C++标准库实现,它完全支持C++11标准。因此苹果弃用了libstdc++.dylib,这符合苹果一贯的作风。
解决方法
最直接的是修改依赖库,支持libc++.dylib
临时方法
将libstdc++.dylib拷贝到 XCode中,共四个地方
1 | sudo cp CoreSimulator/* /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/CoreSimulator/Profiles/Runtimes/iOS.simruntime/Contents/Resources/RuntimeRoot/usr/lib/ |
2. UICollectionViewCell 高度计算不正确
更新 iOS12后,一定要检查所有用到UICollectionViewCell的界面,因为UICollectionViewCell可能出现高度计算不正确的现象。
iOS12对AutoLayout做出了性能优化,但是更新 iOS12后,发现一些UICollectionViewCell的高度不正确,一时间也调试不出什么问题,因此就采用手动计算高度暂时解决。
这里有一篇同样的问题,解决思路可供参考链接
解决方法
1. 手动计算高度
2. 忽略 contentView,直接把 subView 加到 cell 上
3. StatusBar 网络状态
如果app通过状态栏的网络状态指示器去判断手机当前联网状态,修改进行修改,因为iOS12 更改了StatusBar内部结构。
1 | + (NSString *)getIphoneXNetWorkStates { |
iOS12新功能
1. 刘海屏判断
1 | #define isNotchMobile ([UIScreen instancesRespondToSelector:@selector(currentMode)] ? (CGSizeEqualToSize(CGSizeMake(1125, 2436), [[UIScreen mainScreen] currentMode].size)||CGSizeEqualToSize(CGSizeMake(1242, 2688), [[UIScreen mainScreen] currentMode].size)||CGSizeEqualToSize(CGSizeMake(828, 1792), [[UIScreen mainScreen] currentMode].size)) : NO) |