iOS 13適配-我遇到的坑

1. Dark Mode

暗黑模式是iOS13的重要更新之一绩衷,隨之而來的是我們能從系統(tǒng)設(shè)置中“顯示與亮度”中選擇“淺色”育瓜、“深色”兩種模式隅很,并且可以設(shè)置自動切換寄症,“控制中心”亮度調(diào)節(jié)中也可直接調(diào)節(jié)。UIKit 提供新的系統(tǒng)顏色和 api 來適配不同顏色模式憔披,xcassets 對素材適配也做了調(diào)整,具體適配可見: Implementing Dark Mode on iOS

如果不想適配深色模式,可以這樣設(shè)置

  • 1芬膝、直接在項目的 plist 文件中設(shè)置
<key>UIUserInterfaceStyle</key> 
<string>UIUserInterfaceStyleLight</string>
  • 2望门、在每個UIViewController或者BaseViewController中設(shè)置
if (@available(iOS 13.0, *)) {
    [self setOverrideUserInterfaceStyle:UIUserInterfaceStyleLight];
} else {
     // Fallback on earlier versions
}

2.私有方法 KVC 不允許使用

在 iOS 13 中不再允許使用 valueForKeysetValue:forKey: 等方法獲取或設(shè)置私有屬性锰霜,雖然編譯可以通過筹误,但是在運行時會直接崩潰

// 使用的私有方法
[textField setValue:UIColor_d2 forKeyPath:@"_placeholderLabel.textColor"];
textField.placeholder = placeholderStr;

崩潰信息:

// 崩潰提示信息
*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to UITextField's _placeholderLabel ivar is prohibited. This is an application bug'

解決方案:

NSMutableAttributedString *placeholderString = [[NSMutableAttributedString alloc] initWithString:placeholderStr
                                                                                      attributes:@{NSForegroundColorAttributeName:UIColor_d2}];
textField.attributedPlaceholder = placeholderString;

3.推送的 deviceToken 獲取到的格式發(fā)生變化

原本可以直接將 NSData 類型的 deviceToken 轉(zhuǎn)換成 NSString 字符串,然后替換掉多余的符號即可:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    NSString *token = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
    token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
    NSLog(@"deviceToken:%@", token);
}

在 iOS 13 中癣缅,這種方法已經(jīng)失效厨剪,NSData 類型的 deviceToken 轉(zhuǎn)換成的字符串變成了:

{length=32,bytes=0xd02daa63aade35488d1e24206f44037d...fd6b2fac80bddd2d}

需要進(jìn)行一次數(shù)據(jù)格式處理,參考友盟的做法友存,可以適配新舊系統(tǒng)祷膳,獲取方式如下:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    if (![deviceToken isKindOfClass:[NSData class]]) return;
    const unsigned *tokenBytes = [deviceToken bytes];
    NSString *token = [NSString stringWithFormat:@"%08x%08x%08x%08x%08x%08x%08x%08x",
                          ntohl(tokenBytes[0]), ntohl(tokenBytes[1]), ntohl(tokenBytes[2]),
                          ntohl(tokenBytes[3]), ntohl(tokenBytes[4]), ntohl(tokenBytes[5]),
                          ntohl(tokenBytes[6]), ntohl(tokenBytes[7])];
    NSLog(@"deviceToken:%@", token);
}

這樣就獲取到正確的 deviceToken 字符串

d02daa63aade35488d1e24206f44037dce9ece7f85adf6acfd6b2fac80bddd2d

4.控制器的 modalPresentationStyle 默認(rèn)值變了

在 iOS 13 UIModalPresentationStyle 枚舉的定義中,蘋果新加了一個枚舉值:

typedef NS_ENUM(NSInteger, UIModalPresentationStyle) {
    ...
    UIModalPresentationAutomatic API_AVAILABLE(ios(13.0)) = -2,
}; 

在 iOS 13 中此枚舉值直接成為了模態(tài)彈出的默認(rèn)值屡立,因此 presentViewController 方式打開視圖是下滑返回的視差效果直晨。如果你完全接受蘋果的這個默認(rèn)效果,那就不需要去修改任何代碼膨俐。如果你原來就比較細(xì)心勇皇,已經(jīng)設(shè)置了modalPresentationStyle 的值,那你也不會有這個影響焚刺。對于想要找回原來默認(rèn)交互的同學(xué)敛摘,直接設(shè)置如下即可:

self.modalPresentationStyle = UIModalPresentationOverFullScreen;

5.MPMoviePlayerController 被棄用

在 iOS 9 之前播放視頻可以使用 MediaPlayer.framework 中的MPMoviePlayerController類來完成,它支持本地視頻和網(wǎng)絡(luò)視頻播放乳愉。但是在 iOS 9 開始被棄用兄淫,如果在 iOS 13 中繼續(xù)使用的話會直接拋出異常:

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'MPMoviePlayerController is no longer available. Use AVPlayerViewController in AVKit.'

解決方案是使用 AVFoundation 里的 AVPlayer

6.藍(lán)牙權(quán)限描述

最近一次提審被拒情況匾委,被拒原因之一就是需要添加藍(lán)牙權(quán)限獲取描述拖叙,提交以后構(gòu)建顯示正在處理中,等幾分鐘會自動消失赂乐,構(gòu)建不成功薯鳍,Apple發(fā)送郵件提示:

ITMS-90683: Missing Purpose String in Info.plist - Your app's code references one or more APIs that access sensitive user data. The app's Info.plist file should contain a NSBluetoothAlwaysUsageDescription key with a user-facing purpose string explaining clearly and completely why your app needs the data. Starting Spring 2019, all apps submitted to the App Store that access user data are required to include a purpose string. If you're using external libraries or SDKs, they may reference APIs that require a purpose string. While your app might not use these APIs, a purpose string is still required. You can contact the developer of the library or SDK and request they release a version of their code that doesn't contain the APIs. Learn more (https://developer.apple.com/documentation/uikit/core_app/protecting_the_user_s_privacy).

原因是iOS13 將廢棄 NSBluetoothPeripheralUsageDescription 替換為NSBluetoothAlwaysUsageDescription

解決方法,在 info.plist 中添加新字段

<key> NSBluetoothAlwaysUsageDescription </key>
<string>App需要您的同意,才能訪問藍(lán)牙</string>

重新上傳即可

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挨措,一起剝皮案震驚了整個濱河市挖滤,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌浅役,老刑警劉巖斩松,帶你破解...
    沈念sama閱讀 211,743評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異觉既,居然都是意外死亡惧盹,警方通過查閱死者的電腦和手機(jī)乳幸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來钧椰,“玉大人粹断,你說我怎么就攤上這事〉障迹” “怎么了瓶埋?”我有些...
    開封第一講書人閱讀 157,285評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長诊沪。 經(jīng)常有香客問我养筒,道長,這世上最難降的妖魔是什么端姚? 我笑而不...
    開封第一講書人閱讀 56,485評論 1 283
  • 正文 為了忘掉前任晕粪,我火速辦了婚禮,結(jié)果婚禮上寄锐,老公的妹妹穿的比我還像新娘兵多。我一直安慰自己,他們只是感情好橄仆,可當(dāng)我...
    茶點故事閱讀 65,581評論 6 386
  • 文/花漫 我一把揭開白布剩膘。 她就那樣靜靜地躺著,像睡著了一般盆顾。 火紅的嫁衣襯著肌膚如雪怠褐。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評論 1 290
  • 那天您宪,我揣著相機(jī)與錄音奈懒,去河邊找鬼。 笑死宪巨,一個胖子當(dāng)著我的面吹牛磷杏,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捏卓,決...
    沈念sama閱讀 38,960評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼极祸,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了怠晴?” 一聲冷哼從身側(cè)響起遥金,我...
    開封第一講書人閱讀 37,719評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蒜田,沒想到半個月后稿械,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡冲粤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,516評論 2 327
  • 正文 我和宋清朗相戀三年美莫,在試婚紗的時候發(fā)現(xiàn)自己被綠了页眯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,650評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡茂嗓,死狀恐怖餐茵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情述吸,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布锣笨,位于F島的核電站蝌矛,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏错英。R本人自食惡果不足惜入撒,卻給世界環(huán)境...
    茶點故事閱讀 39,936評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望椭岩。 院中可真熱鬧茅逮,春花似錦、人聲如沸判哥。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽塌计。三九已至挺身,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锌仅,已是汗流浹背章钾。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留热芹,地道東北人贱傀。 一個月前我還...
    沈念sama閱讀 46,370評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像伊脓,于是被迫代替她去往敵國和親府寒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,527評論 2 349

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

  • App Programming Guide for iOS翻譯 https://developer.apple.c...
    鋼鉄俠閱讀 1,071評論 0 1
  • 妹子一直說丽旅,想讀書椰棘,卻沒讀成,為什么呢榄笙? 主要原因是沒行動邪狞,說歸說,沒有真的去說茅撞,說了也等于白說帆卓。 任何一件事巨朦,想...
    文子灣閱讀 148評論 0 1
  • 明月多情應(yīng)笑我糊啡,笑我如今。辜負(fù)春心吁津,獨自閑行獨自吟棚蓄。 近來怕說當(dāng)時事,結(jié)遍蘭襟碍脏。月淺燈深梭依,夢里云歸何處尋? 深夜的...
    3a87c8175f0a閱讀 648評論 1 4
  • 【shape】 definition: to influence the way that a person, i...
    Mia_m閱讀 239評論 0 0
  • 相信大家都聽說過吸引力法則典尾,用官方定義就是指:“同頻共振役拴,同質(zhì)相吸〖毓。”這八個字的意思是說:同樣頻率的東西會共振河闰,同...
    素說閱讀 1,115評論 0 1