目前Pod跟SPM的兼容還沒作好,配置好SPM後,Pod不能進行正常更新,先配置好Pod再集成SPM則沒有問題html
Pod之後的更新可能會解決這個問題,也會有愈來愈多的庫支持SPMxcode
在此以前,本人想出一個比較省事的解決方案:微信
思路:Pod這個衝突主要針對工程,那麼建立兩個工程就行了,一個集成pod,另外一個集成spmasync
準備:先有一個集成pod的工程(這個也是咱們項目的主要工程,老項目也能夠)ide
步驟:字體
2. 在主項目WorkDemo中,引入SPM.frameworkspa
3. 到此基本結束,在主工程進行pod更新,在SPM工程進行Swift Packages集成,二者不會產生影響.net
原文連接:https://www.jianshu.com/p/f31f208313dd3d
內容很詳細不少,須要瞭解請跳轉原文。這裏只說若是App不支持黑暗模式須要進行下面處理code
override func viewDidLoad() { super.viewDidLoad() // Always adopt a light interface style. overrideUserInterfaceStyle = .light }
iOS13中經過KVC方式來獲取私有屬性,有Carsh風險,儘可能避免使用.好比咱們經常使用的UITextFiled和UISearchController等,在iOS 13的searchbar添加了一個- (void)set_cancelButtonText:(NSString *)text方法,這個方法專門用來命中kvc,一旦命中就Crash。
//修改textField的佔位符字體顏色 [textField setValue:[UIColor xxx] forKeyPath:@"_placeholderLabel.textColor"];
因爲在13中把SearchBar中的textField直接暴露給開發者使用,無需在經過kvc獲取。
- (UITextField *)sa_GetSearchTextFiled{ if ([[[UIDevice currentDevice]systemVersion] floatValue] >= 13.0) { return self.searchTextField; }else{ UITextField *searchTextField = [self valueForKey:@"_searchField"]; return searchTextField; } }
UITextField *textfield = [[UITextField alloc]init]; NSMutableAttributedString *arrStr = [[NSMutableAttributedString alloc]initWithString:textfield.placeholder attributes:@{NSForegroundColorAttributeName : [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:12]}]; textfield.attributedPlaceholder = arrStr;
if ([[[UIDevice currentDevice]systemVersion] floatValue] >= 13.0) { for(id cc in [self.searchBar subviews]) { for (id zz in [cc subviews]) { for (id gg in [zz subviews]) { if([gg isKindOfClass:[UIButton class]]){ UIButton *cancelButton = (UIButton *)gg; [cancelButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; } } } } }else{ UIButton*cancelButton = (UIButton *)[self.searchBar getVarWithName:@"_cancelButton"]; [cancelButton setTitleColor:[UIColor redColor] forState:UIControlStateNormal]; }
MPMoviePlayerController is no longer available. Use AVPlayerViewController in AVKit.
在iOS13中對於MPMoviePlayerController使用的廢棄,須要使用AVKit中的AVPlayerViewController來達到播放的目的。
當 Sign In with Apple 服務正式上線之後,全部已接入其它第三方登陸的 App,Sign In with Apple 將被要求做爲一種登陸選擇,不然有可能就不給過。若是 APP 支持三方登錄(Facbook、Google、微信、QQ、支付寶等),就必須支持蘋果登陸,且要放前邊。解決方法:將來上線以後,添加登陸入口便可。
從 iOS 8 的時候,蘋果就引入了 LaunchScreen,咱們能夠設置 LaunchScreen來做爲啓動頁。固然,如今你還可使用LaunchImage來設置啓動圖。不過使用LaunchImage的話,要求咱們必須提供各類屏幕尺寸的啓動圖,來適配各類設備,隨着蘋果設備尺寸愈來愈多,這種方式顯然不夠 Flexible。而使用 LaunchScreen的話,狀況會變的很簡單, LaunchScreen是支持AutoLayout+SizeClass的,因此適配各類屏幕都不在話下。⚠️從2020年4月開始,全部使⽤ iOS13 SDK的 App將必須提供 LaunchScreen,LaunchImage即將退出歷史舞臺。可使用Launch Storyboards來進行解決。
iOS 13 的 presentViewController 默認有視差效果,模態出來的界面如今默認都下滑返回。 一些頁面必需要點確認才能消失的,須要適配。若是項目中頁面高度所有是屏幕尺寸,那麼多出來的導航高度會出現問題。
// Swift self.modalPresentationStyle = .fullScreen // Objective-C self.modalPresentationStyle = UIModalPresentationFullScreen;
UIViewController 增長一個了屬性 isModalInPresentation,默認爲 false,當該屬性爲 false 時,用戶下拉能夠 dismiss 控制器,爲 true 時,下拉不能夠 dismiss控制器。
默認樣式變爲白底黑字,若是設置修改過顏色的話,頁面須要修改
CBCentralManager,iOS13之前,使用藍牙時能夠直接用,不會出現權限提示,iOS13後,再使用就會提示了。在info.plist裏增長NSBluetoothAlwaysUsageDescription 咱們要一直使用您的藍牙,具體作什麼別問我
在 iOS 8 以前,咱們在 UITableView 上添加搜索框須要使用 UISearchBar + UISearchDisplayController 的組合方式,而在 iOS 8 以後,蘋果就已經推出了 UISearchController 來代替這個組合方式。在 iOS 13 中,若是還繼續使用 UISearchDisplayController 會直接致使崩潰,
————————————————
版權聲明:本文爲CSDN博主「蠹囟狐狸」的原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處連接及本聲明。
原文連接:https://blog.csdn.net/qq_23091121/article/details/101023714
一、用presentViewController而非navigator,但在iOS13裏默認是可下拉摺疊的對話框,這樣帶來一個界面排版的高度並非屏幕高度,從而影響界面效果。能夠將viewcontroller.modalPresentationStyle設置爲UIModalPresentationFullScreen來回到原來的樣式。
二、要兼容iOS13的黑色主題色,就必須去識別當前的配色方案,能夠經過viewcontroller.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark來獲取,須要添加if (@available(iOS 12.0, *))以支持iOS12如下的系統。
三、可排序tableview的右側三條槓會隨着主題色改變色彩,並不會檢測你本身設置的屏幕底色。兩種方法,一、根據上面的方法來識別主題色從而給不一樣的底色來適配。二、強行更改三條槓爲其餘圖片。
for (UIView * view in self.subviews)
{
if ([NSStringFromClass([view class]) rangeOfString:@"Reorder"].location != NSNotFound)
{
for (UIView * subview in view.subviews)
{
if ([subview isKindOfClass: [UIImageView class]])
{
((UIImageView *)subview).image = .....;
}
}
}
}
四、在其餘queue裏不能直接建立viewcontroller,alloc都不行,不然會被阻塞。以往我都是先建立好controller,在present的時候再跑到dispatch_async(dispatch_get_main_queue()裏,但iOS13不行,建立controller時就須要在main queue裏。