iOS12 一些问题的解决方案

作者: DDY | 来源:发表于2018-10-18 10:04 被阅读52次
    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
    library not found for -l”stdc++.6.0.9

    原因:Xcode10去除了C++6.0.9的支持

    方案:

    • 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库,那就只能联系服务方修改了
    WebView播放视频返回后状态栏不见了

    原因:视频播放完成主window成为KeyWindow的时候仍隐藏着UIStatusBar

    方案:

    - (void)videoPlayerFinishedToShowStatusBar {
        if (@available(iOS 12.0, *)) {
            [[NSNotificationCenter defaultCenter] addObserverForName:UIWindowDidBecomeKeyNotification
                                                              object:self.window
                                                               queue:[NSOperationQueue mainQueue]
                                                          usingBlock:^(NSNotification * _Nonnull note) {
                                                              [[UIApplication sharedApplication] setStatusBarHidden:NO
                                                                                                      withAnimation:UIStatusBarAnimationNone];
                                                          }];
        }
    }
    
    wifi获取SSID(wifi名称)失败

    原因:需要加权限

    方案:

    • 开发者界面 在App IDs对应的bundleID中勾选Access WiFi Infomation

    • 然后在Xcode的Capabilities中,激活Access WiFi Infomation项。

    statusBar结构变化导致原来通过状态栏获取网络连接信息代码crash

    方案:

    + (NSString *)getIphoneXNetWorkStates {    
        UIApplication *app = [UIApplication sharedApplication];
        id statusBar = [[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"statusBar"];
        id one = [statusBar valueForKeyPath:@"regions"];
        id two = [one valueForKeyPath:@"trailing"];
        NSArray *three = [two valueForKeyPath:@"displayItems"];
        NSString *state = @"无网络";
        for (UIView *view in three) {
            //alert: iOS12.0 情况下identifier的变成了类"_UIStatusBarIdentifier"而不是NSString,所以会在调用“isEqualToString”方法时发生crash,
            //修改前
    //        NSString *identifier = [view valueForKeyPath:@"identifier"];
            //修改后
            NSString *identifier = [[view valueForKeyPath:@"identifier"] description];
            if ([identifier isEqualToString:@"_UIStatusBarWifiItem.signalStrengthDisplayIdentifier"]) {
                id item = [view valueForKeyPath:@"_item"];
    
                //alert: 这个问题和上边一样itemId是_UIStatusBarIdentifier 类型,不是string
                NSString *itemId = [[item valueForKeyPath:@"identifier"] description];
                if ([itemId isEqualToString:@"_UIStatusBarWifiItem"]) {
                    state = @"WIFI";
                }
                state = @"不确定";
    
            } else if ([identifier isEqualToString:@"_UIStatusBarCellularItem.typeDisplayIdentifier"]) {
                UIView *statusBarStringView = [view valueForKeyPath:@"_view"];
                // 4G/3G/E
                state = [statusBarStringView valueForKeyPath:@"text"];
            }
    
        }
    
        return state;
    }
    

    相关文章

      网友评论

        本文标题:iOS12 一些问题的解决方案

        本文链接:https://www.haomeiwen.com/subject/zwhjzftx.html