iOS12 踩坑持续更新

iOS12很快就要发布,项目的坑都填好了吗?没有!那还不赶紧填……

info.plist文件重复

Xcode10编译提示Multiple commands produce 'xxx/Info.plist',这是由于项目中存在重复命名的info.plist文件。

解决方式:

.xcworkspace项目:

1
Xcode--File--Workspace Settings--Build System--Legacy Build System

.xcodeproj项目:

1
Xcode--File--Project Settings--Build System--Legacy Build System

info文件重复.png

library not found for -l”stdc++.6.0.9”

提示library not found for -l”stdc++.6.0.9”、-l”stdc++.6”、-l”stdc++”等,因为Xcode10不再支持libstdc++,相关的库文件libstdc++.6.0.9.dylib、libstdc++.6.dylib、libstdc++.dylib、libstdc++.6.0.9.tbd、libstdc++.6.tbd、libstdc++.tbd已从Xcode10中删除。

解决方式:

1
2
3
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库,那就只能联系服务方修改了

如果你的项目必须依赖C++的相关库,那么可以把Xcode9中的libstdc++相关库文件复制到Xcode10中,这里推荐一篇大神写的干货:
解决Xcode10 library not found for -lstdc++ 找不到问题

UIWebView、WKWebView播放视频

iOS12 上UIWebView、WKWebView含有视频,使用系统自带播放器全屏播放返回后,会存在 UIStatusBar 隐藏不见的问题。
解决方式:

注册UIWindowDidBecomeKeyNotification通知,视频播放完成主window成为KeyWindow的时候重新显示UIStatusBar。

1
2
3
4
5
6
7
8
9
10
11
//兼容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];
}

CNCopyCurrentNetworkInfo

使用CNCopyCurrentNetworkInfo获取Wi-Fi名称:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
+ (id)wifiSSID {
id value = @"";
NSArray *ifs = (__bridge_transfer id)CNCopySupportedInterfaces();
for (NSString *ifnam in ifs) {
NSDictionary *info = (__bridge_transfer id)CNCopyCurrentNetworkInfo((__bridge CFStringRef)ifnam);
if (info[@"SSID"]) {
value = info[@"SSID"];
}
}
if (!value || [value length]==0) {
NSLog(@"get WiFi SSID Error!!");
}
return value;
}

iOS12之后获取Wi-Fi信息,需要另外申请证书配置
https://developer.apple.com/documentation/systemconfiguration/1614126-cncopycurrentnetworkinfo
CNCopyCurrentNetworkInfo.png

申请步骤请看关键字 NEHotspotHelper,或者自行搜索更多信息,这里提供一篇网文
iOS 无法获取 WiFi 列表?一定是因为你不知道这个框架