iOS13 適配總結

1. 暗黑模式

iOS13使用暗黑模式時,UIView默認背景色會變成暗黑色。適配暗黑模式的工作量較大,改爲強制使用正常模式。
處理方案:在plist文件中增加配置項UIUserInterfaceStyle,值爲Light。

2. 狀態欄樣式

在iOS13之前有兩種狀態:UIStatusBarStyleDefault(黑字)、UIStatusBarStyleLightContent(白字)。
在iOS13改爲三種狀態:UIStatusBarStyleDefault(自動選擇黑字or白字)、UIStatusBarStyleDarkContent(黑字)、UIStatusBarStyleLightContent(白字)
處理方案:使用黑字樣式時,低於iOS13的系統上使用default,iOS13之後使用darkContent。黑色樣式使用宏定義來處理

/// 黑色字體的狀態欄
#ifdef __IPHONE_13_0
    #define TLDStatusBarStyleDark   \
    ({\
    UIStatusBarStyle darkStyle = UIStatusBarStyleDefault;\
    if (@available(iOS 13, *)) {\
        darkStyle = UIStatusBarStyleDarkContent;\
    }\
    (darkStyle);\
    })
#else
    #define TLDStatusBarStyleDark (UIStatusBarStyleDefault)
#endif

3. 模態彈出默認樣式改變

在iOS上默認樣式由UIModalPresentationFullScreen 改爲UIModalPresentationAutomatic,對於大部分 UIViewController,會自動映射爲UIModalPresentationPageSheet
處理方案:

  • 在基類控制器初始化時指定modalPresentationStyleUIModalPresentationFullScreen,
  • 全局搜索presentViewController:animated:completion:方法,將未使用基類的控制器指定相應的style
  • 升級圖片選擇庫,修改圖片選擇庫中的modalPresentationStyle

4. 藍牙權限更新

上傳App Store時,如果引用了CoreBluetooth.framework,則需要添加描述配置NSBluetoothAlwaysUsageDescription,否則無法提交。舊版本的個推SDK引入時依賴CoreBluetooth,後續版本已修改不再依賴CoreBluetooth。
處理方案:檢查其他第三方庫並未依賴CoreBluetooth.framework,刪除對該庫的引用。

5. 徹底廢棄UISearchDisplayControllerMPMoviePlayerController

Xcode11編譯的安裝包使用UISearchDisplayController和MPMoviePlayerController時會崩潰
處理方案:
1、使用UISearchController替代UISearchDisplayController
2、檢查工程中並未使用MPMoviePlayerController

6. UIScrollView 滾動條異常偏移

iOS13上新增屬性automaticallyAdjustsScrollIndicatorInsets,默認值爲YES,會導致適配iPhone X時設置了偏移量的滾動條偏移兩倍
處理方案:在設置了滾動條偏移量的位置將新增屬性automaticallyAdjustsScrollIndicatorInsets設置爲NO

7. 廢棄UIWebview改爲WKWebView

暫時沒有強制修改,但是已經發郵件提示
處理方案:儘快替換一下

8. LaunchImage修改爲LaunchScreen

從2020年4月開始,所有支持 iOS 13 的 App 必須提供 LaunchScreen.storyboard,否則將無法提交到 App Store 進行審批。
處理方案:儘快替換一下

9. DeviceToken 無法通過description方法來獲取到了

處理方案:由個推SDK來兼容處理

10. KVC限制

在iOS13上通過KVC來修改系統API私有屬性時會報錯

*** Terminating app due to uncaught exception 'NSGenericException', reason: 'Access to xxx's _xxx ivar is prohibited. This is an application bug'

處理方案:
1、全局搜索KVC的使用方法,未發現使用KVC方式修改私有屬性的代碼
2、平時開發時注意KVC的使用

11. UIActivityIndicatorView 菊花loading的樣式類型修改

typedef NS_ENUM(NSInteger, UIActivityIndicatorViewStyle) {
    UIActivityIndicatorViewStyleMedium  API_AVAILABLE(ios(13.0), tvos(13.0)) = 100,
    UIActivityIndicatorViewStyleLarge   API_AVAILABLE(ios(13.0), tvos(13.0)) = 101,
    
    UIActivityIndicatorViewStyleWhiteLarge API_DEPRECATED_WITH_REPLACEMENT("UIActivityIndicatorViewStyleLarge", ios(2.0, 13.0), tvos(9.0, 13.0)) = 0,
    UIActivityIndicatorViewStyleWhite API_DEPRECATED_WITH_REPLACEMENT("UIActivityIndicatorViewStyleMedium", ios(2.0, 13.0), tvos(9.0, 13.0)) = 1,
    UIActivityIndicatorViewStyleGray API_DEPRECATED_WITH_REPLACEMENT("UIActivityIndicatorViewStyleMedium", ios(2.0, 13.0)) API_UNAVAILABLE(tvos) = 2,
};

如果使用iOS13上新增的樣式枚舉時,是通過color屬性來設置顏色,而且要注意在iOS12及以下的兼容處理。
處理方案:因爲app現在支持到iOS8,所以建議還是使用舊的枚舉值

12. 第三方登錄支持蘋果登錄(Sign In with Apple)

蘋果更新了審覈指南,要求所有專門使用第三方登錄的App,2020 年 4 月之前,都必須接入 Sign in with Apple。符合以下條件的App,可以不接入:

  • 使用自建賬戶和登錄系統;
  • 要求用戶使用現有的教育或企業賬戶登錄的教育、企業或商業類應用;
  • 使用政府或行業支持的公民身份識別系統或電子 ID 來驗證用戶;
  • 應用特定於第三方服務,用戶需要使用郵箱、社交媒體或其它第三方賬戶才能訪問其內容的應用;
    處理方案:暫不確定是否需要接入蘋果登錄,繼續跟蹤
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章