一、 libstdc++ 库 和 libc++
xcode10中 项目用到了c++,依赖了libstdc++.tbd和libstdc++.6.0.9.tbd,导致整个工程编译不通过,报出Undefined symbols,C++ 的 List 找不到了,原因是苹果在XCode10和iOS12中移除了libstdc++这个库,由libc++这个库取而代之,苹果的解释是lib转载自斗玩网stdc++已经标记为废弃有5年了,建议大家使用经过了llvm优化过并且全面支持C++11的libc++库。
网上有兄台给出了就;临时的解决方案讲xcode9中 libstdc++ 库导入到xcode10中:
cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/libstdc++. /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/usr/lib/cp /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/libstdc++. /Applications/Xcode-beta.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator.sdk/usr/lib/
你就可以在新XCode10下面看到libstdc++了,放心的添加到工程里。
但这只是临时的解决方案,如果你自己的业务模块使用了libstdc++,那么就把模块代码重新调整为依赖libc++,然后重新检查是否存在问题,重新编译
如果你引用的第三方厂商提供的sdk中依赖了libstdc++,那么抓紧联系厂商,需求版本升级。
最佳解决方法:
- TARGETS--Build Phases--Link Binary With Libraries,删除6.0.9依赖,需要的话对应添加libc++.tdb、libstdc++.tdb
- TARGETS--Build Settings--Other Linker Flags,删除 -l"stdc++.6.0.9"
- 如果是第三库引用了C++6.0.9库,那就只能联系服务方修改了
二 . UIWebView、WKWebView播放视频UIStatusBar问题
iOS12 上UIWebView、WKWebView含有视频,使用系统自带播放器全屏播放返回后,会存在 UIStatusBar 隐藏不见的问题。
解决方式: 注册UIWindowDidBecomeKeyNotification通知,视频播放完成主window成为KeyWindow的时候重新显示UIStatusBar。
//兼容iOS12 播放视频返回UIStatusBar的隐藏问题
if (@available(iOS 12.0, *)) {
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(videoFinished:)
name:UIWindowDidBecomeKeyNotification
object:self.window];
}
//重新显示UIStatusBar
- (void)videoFinished:(NSNotification *)notification {
[[UIApplication sharedApplication]setStatusBarHidden:NO withAnimation:UIStatusBarAnimationNone];
}
三. info.plist文件重复
Xcode10编译提示Multiple commands produce 'xxx/Info.plist',这是由于项目中存在重复命名的info.plist文件。
解决方式:
.xcworkspace项目: Xcode--File--Workspace Settings--Build System--Legacy Build System
.xcodeproj项目:Xcode--File--Project Settings--Build System--Legacy Build System
四. cocoapods问题
cocoapods 在 macOS升级情况下失效(提示pod: Undefined error: 0 或者 command not found)
打开终端
先升级 gem update --system
2.升级cocoapods (brew 安装的 :brew upgrade cocoapods)
3.执行 sudo gem install -n /usr/local/bin cocoapods
五 [UIImage imageNamed:]不能正常加载Assets中的图片
解决: 将图片放到bundle中 使用一下方式加载即可
NSString *path = [[NSBundle mainBundle] pathForResource:@"bg_login" ofType:@"png"];
_backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageWithContentsOfFile:path]];
这个不能正常加载的情况只出现在个别的地方,目前找到的共性是加载的图片偏大.
六. MobileVLCKit 在build项目时引起Mac卡死
发现build到即将完成的时候就不动了,然后整个系统卡死。。 后面打开活动监视器发现,build进度条到80%左右的时候就卡住了,内存就开始一直涨,直到到达机器内存最大然后卡死(这个没有自己验证,看网上其他水友说的)
解决: Targets - Build Settings - Debug Information Format 设置成DWARF。