iOS12適配及兼容問題解決

1、Multiple commands produce 'xxx/Info.plist'
2苔严、iOS 12系統(tǒng)WiFi獲取SSID(wifi名稱)和BSSID(mac地址)失敗
3菇存、Xcode 10#import的時(shí)候閃退或?qū)腩^文件不提示
4、[Xcode 10] library not found for -lstdc++.6.0.9
5邦蜜、[iOS 12.1] 二級頁面返回時(shí)tabbar圖標(biāo)和文字位置偏移
6、webView播放視頻返回后狀態(tài)欄消失
7亥至、[iPhone X]StatusBar內(nèi)部結(jié)構(gòu)改變導(dǎo)致crash

  • 1悼沈、Multiple commands produce 'xxx/Info.plist'
    升級Xcode 10之后贱迟,編譯之前的項(xiàng)目,發(fā)生編譯錯(cuò)誤:Multiple commands produce 'xxx/Info.plist'絮供,項(xiàng)目中存在重復(fù)命名的info.plist文件衣吠。
    解決方案:
    (I)標(biāo)準(zhǔn)方案:刪除所有重復(fù)命名的文件。
    (II)臨時(shí)方案:
    xcworkspace項(xiàng)目:Xcode菜單欄File -> Workspace Settings -> Build System -> Legacy Build System壤靶;
    xcodeprj項(xiàng)目:Xcode菜單欄File -> Project Settings -> Build System -> Legacy Build System缚俏。

  • 2、iOS 12系統(tǒng)WiFi獲取SSID(wifi名稱)和BSSID(mac地址)失敗
    iOS 12系統(tǒng)之后贮乳,蘋果提升了獲取WiFi名稱和mac地址的權(quán)限控制忧换,要獲取這些信息,需要手動(dòng)為應(yīng)用打開獲取WiFi信息的權(quán)限向拆。具體操作可以參考《獲取iOS設(shè)備WiFi名字和mac地址+iOS12系統(tǒng)獲取失敗解決》亚茬。
    解決方案:
    在開發(fā)者賬號中,勾選項(xiàng)目的App IDAccess WiFi Infomation選項(xiàng)浓恳;
    在Xcode的Capabilities中刹缝,勾選項(xiàng)目的Access WiFi Infomation選項(xiàng)。

  • 3颈将、Xcode 10#import的時(shí)候閃退或?qū)腩^文件不提示
    Xcode 10中出現(xiàn)輸入#import引入文件/類庫頭文件的時(shí)候Xcode閃退梢夯。或者輸入#import導(dǎo)入頭文件時(shí)不提示晴圾。
    解決方案:
    xcworkspace項(xiàng)目:Xcode菜單欄File -> Workspace Settings -> Build System -> Legacy Build System颂砸;
    xcodeprj項(xiàng)目:Xcode菜單欄File -> Project Settings -> Build System -> Legacy Build System

  • 4疑务、[Xcode 10] library not found for -lstdc++.6.0.9
    蘋果在Xcode 10iOS 12中移除了libstdc++庫沾凄,由libc++這個(gè)庫取而代之,蘋果的解釋是libstdc++已經(jīng)標(biāo)記為廢棄有5年了知允,建議大家使用經(jīng)過了llvm優(yōu)化過并且全面支持C++11的libc++庫撒蟀。所以Xcode 10中l(wèi)ibstdc++相關(guān)的3個(gè)庫(libstdc++libstdc++.6温鸽、libstdc++6.0.9)都已被移除保屯,不可再使用。
    解決方案:
    (I)調(diào)整代碼為依賴libc++
    更改c++庫文件涤垫,TARGETS -> Build Phases -> Link Binary With Libraries姑尺,刪除stdc++.6.0.9依賴,添加libc++.tdb蝠猬;TARGETS -> Build Settings -> Other Linker Flags切蟋,刪除-l "stdc++.6.0.9"。修改代碼為依賴libc++榆芦。
    (II)從Xcode 9中導(dǎo)入libstdc++Xcode 10中柄粹。
    找到Xcode 9中的libstdc++庫文件copy到Xcode 10lib文件夾下喘鸟。參考路徑方法如下,分別是真機(jī)和模擬器的運(yùn)行庫文件導(dǎo)入:

    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/
    
  • 5驻右、[iOS 12.1] 二級頁面返回時(shí)tabbar圖標(biāo)和文字位置偏移
    iOS 12.1系統(tǒng)中UINavigationController+UITabBarController什黑,UITabBar為磨砂,并且pushViewController的時(shí)候使用hidesBottomBarWhenPushed = YES堪夭,則在使用popViewController:animated返回愕把,或者手勢返回的時(shí)候,就會出現(xiàn)tabbar布局錯(cuò)亂森爽,圖標(biāo)和文字位置偏移的問題恨豁。出現(xiàn)這個(gè)問題的直接原因是UITabBar為磨砂的情況下,返回頁面時(shí)tabBar內(nèi)的按鈕UITabBarButton被設(shè)置了錯(cuò)誤的frame拗秘,frame.size變?yōu)榱?(0, 0) 圣絮。
    最簡單的解決方案是:

    [[UITabBar appearance].translucent = NO;
    
  • 6、webView播放視頻返回后狀態(tài)欄消失
    視頻播放完成主window成為KeyWindow的時(shí)候仍隱藏著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];
                                                        }];
        }
    }
    
  • 7、[iPhone X]StatusBar內(nèi)部結(jié)構(gòu)改變導(dǎo)致crash
    蘋果17年底推出全面屏劉海手機(jī)之后民晒,應(yīng)用頂部StatusBar內(nèi)部結(jié)構(gòu)發(fā)生改變,如果項(xiàng)目中使用狀態(tài)欄中圖標(biāo)獲取手機(jī)狀態(tài)信息(如:獲取當(dāng)前網(wǎng)絡(luò)的狀態(tài))棒搜,則在iPhone X (Xs,Xs Max,XR)手機(jī)上會發(fā)生崩潰。
    注意:發(fā)生崩潰的機(jī)型是有劉海的手機(jī)iPhone X (Xs,Xs Max,XR)活箕。
    例如獲取當(dāng)前網(wǎng)絡(luò)狀態(tài)力麸。

    crash log:
    *** Terminating app due to uncaught exception 'NSUnknownKeyException',
    reason: '[<UIStatusBar_Modern 0x7ffbf2c05670> valueForUndefinedKey:]:
    this class is not key value coding-compliant for the key foregroundView.'
    

    導(dǎo)致上面崩潰的代碼如下:

    - (NSString *)getiPhoneNetWorkStates
    {
        UIApplication *app = [UIApplication sharedApplication];
        NSString *states = @"UnKnow";
        NSArray *subViews = [[[app valueForKeyPath:@"statusBar"] valueForKeyPath:@"foregroundView"] subviews];
        for (id child in subViews) {
            if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
                int networkType = [[child valueForKeyPath:@"dataNetworkType"] intValue];
                NSString *networkStatus = @"UnKnow";
                switch (networkType) {
                    case 0:
                        networkStatus = @"UnKnow";
                        break;
                    case 1:
                        networkStatus = @"2G";
                        break;
                    case 2:
                        networkStatus = @"3G";
                        break;
                    case 3:
                        networkStatus = @"4G";
                        break;
                    case 4:
                        networkStatus = @"LTE";
                        break;
                    case 5:
                        networkStatus = @"WiFi";
                        break;
                    default:
                        break;
                }
            }
        }
        return states;
    }
    

    導(dǎo)致崩潰的原因是:StatusBar內(nèi)部結(jié)構(gòu)發(fā)生變化,在上面代碼第5行獲取foregroundView的時(shí)候育韩,foregroundView不存在克蚂。
    解決方案:
    iPhone X上通過StatusBar只能獲取到網(wǎng)絡(luò)是WiFi還是蜂窩網(wǎng),當(dāng)網(wǎng)絡(luò)為蜂窩網(wǎng)的時(shí)候筋讨,無法獲取到具體的網(wǎng)絡(luò)狀態(tài)埃叭。要獲取更具體的網(wǎng)絡(luò)狀況,建議使用官方提供的Reachability悉罕。

    - (NSString *)getiPhoneNetWorkStates
    {
        UIApplication *app = [UIApplication sharedApplication];
        NSString *states = @"UnKnow";
        id statusBar = [app valueForKeyPath:@"statusBar"];
        if ([self checkDeviceIsiPhoneX]) {
            if ([statusBar isKindOfClass:NSClassFromString(@"UIStatusBar_Modern")]) {
                id curData = [statusBar valueForKeyPath:@"statusBar.currentData"];
                BOOL wifiEnable = [[curData valueForKeyPath:@"_wifiEntry.isEnabled"] boolValue];
                BOOL cellEnable = [[curData valueForKeyPath:@"_cellularEntry.isEnabled"] boolValue];
                // iPhone X上通過StatusBar只能獲取到網(wǎng)絡(luò)是WiFi還是蜂窩網(wǎng)
                // 當(dāng)網(wǎng)絡(luò)為蜂窩網(wǎng)的時(shí)候赤屋,無法獲取到具體的網(wǎng)絡(luò)狀態(tài)
                if (wifiEnable) {
                    states = @"WiFi";
                } else if (cellEnable) {
                    states = @"Cellular";
                }
            }
        } else {
            NSArray *subViews = [[statusBar valueForKeyPath:@"foregroundView"] subviews];
            for (id child in subViews) {
                if ([child isKindOfClass:NSClassFromString(@"UIStatusBarDataNetworkItemView")]) {
                    int networkType = [[child valueForKeyPath:@"dataNetworkType"] intValue];
                    switch (networkType) {
                        case 0:
                            states = @"UnKnow";
                            break;
                        case 1:
                            states = @"2G";
                            break;
                        case 2:
                            states = @"3G";
                            break;
                        case 3:
                            states = @"4G";
                            break;
                        case 4:
                            states = @"LTE";
                            break;
                        case 5:
                            states = @"WiFi";
                            break;
                        default:
                            break;
                    }
                }
            }
        }
        return states;
    }
    
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市壁袄,隨后出現(xiàn)的幾起案子类早,更是在濱河造成了極大的恐慌,老刑警劉巖嗜逻,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件涩僻,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)逆日,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門恼琼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人屏富,你說我怎么就攤上這事⊥苈保” “怎么了狠半?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長颤难。 經(jīng)常有香客問我神年,道長,這世上最難降的妖魔是什么行嗤? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任已日,我火速辦了婚禮,結(jié)果婚禮上栅屏,老公的妹妹穿的比我還像新娘飘千。我一直安慰自己,他們只是感情好栈雳,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布护奈。 她就那樣靜靜地躺著,像睡著了一般哥纫。 火紅的嫁衣襯著肌膚如雪霉旗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天蛀骇,我揣著相機(jī)與錄音厌秒,去河邊找鬼。 笑死擅憔,一個(gè)胖子當(dāng)著我的面吹牛鸵闪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播雕欺,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼岛马,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了屠列?” 一聲冷哼從身側(cè)響起啦逆,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笛洛,沒想到半個(gè)月后夏志,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年沟蔑,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湿诊。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡瘦材,死狀恐怖厅须,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情食棕,我是刑警寧澤朗和,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站簿晓,受9級特大地震影響眶拉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜憔儿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一忆植、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧谒臼,春花似錦朝刊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至劫樟,卻和暖如春痪枫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背叠艳。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工奶陈, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人附较。 一個(gè)月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像拒课,于是被迫代替她去往敵國和親早像。 傳聞我的和親對象是個(gè)殘疾皇子僻肖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容