博客> xcode 10 ,ios12适配踩得坑(实时更新)
xcode 10 ,ios12适配踩得坑(实时更新)
1小时前 评论:0 阅读:2621 lvhahaha
ios12适配 xcode10

一、 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++,那么抓紧联系厂商,需求版本升级。

最佳解决方法:

  1. TARGETS--Build Phases--Link Binary With Libraries,删除6.0.9依赖,需要的话对应添加libc++.tdb、libstdc++.tdb
  2. TARGETS--Build Settings--Other Linker Flags,删除 -l"stdc++.6.0.9"
  3. 如果是第三库引用了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。

收藏
3
sina weixin mail 回到顶部