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
。
處理方案:
- 在基類控制器初始化時指定
modalPresentationStyle
爲UIModalPresentationFullScreen
, - 全局搜索
presentViewController:animated:completion:
方法,將未使用基類的控制器指定相應的style - 升級圖片選擇庫,修改圖片選擇庫中的
modalPresentationStyle
4. 藍牙權限更新
上傳App Store時,如果引用了CoreBluetooth.framework,則需要添加描述配置NSBluetoothAlwaysUsageDescription
,否則無法提交。舊版本的個推SDK引入時依賴CoreBluetooth,後續版本已修改不再依賴CoreBluetooth。
處理方案:檢查其他第三方庫並未依賴CoreBluetooth.framework,刪除對該庫的引用。
5. 徹底廢棄UISearchDisplayController
、MPMoviePlayerController
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 來驗證用戶;
- 應用特定於第三方服務,用戶需要使用郵箱、社交媒體或其它第三方賬戶才能訪問其內容的應用;
處理方案:暫不確定是否需要接入蘋果登錄,繼續跟蹤