Swift Packages
目前Pod跟SPM的兼容還沒做好,配置好SPM后,Pod不能進行正常更新,先配置好Pod再集成SPM則沒有問題
Pod以后的更新可能會解決這個問題,也會有越來越多的庫支持SPM
在此之前,本人想出一個比較省事的解決方案:
思路:Pod這個沖突主要針對工程,那么創建兩個工程就好了,一個集成pod,另一個集成spm
准備:先有一個集成pod的工程(這個也是我們項目的主要工程,老項目也可以)
步驟:
- 新建一個framework工程,這里叫SPM工程,目錄位置隨意,多個項目使用一個SPM工程也是可以的,建好后將SPM.xcodeproj拖入到主工程即可
2. 在主項目WorkDemo中,引入SPM.framework
3. 到此基本結束,在主工程進行pod更新,在SPM工程進行Swift Packages集成,兩者不會產生影響
iOS夜間模式開發探索(iOS13)
原文鏈接:https://www.jianshu.com/p/f31f208313dd
內容很詳細很多,需要了解請跳轉原文。這里只說如果App不支持黑暗模式需要進行下面處理
override func viewDidLoad() { super.viewDidLoad() // Always adopt a light interface style. overrideUserInterfaceStyle = .light }
1.私有API被封禁(KVC限制),禁止訪問.
iOS13中通過KVC方式來獲取私有屬性,有Carsh風險,盡量避免使用.比如我們常用的UITextFiled和UISearchController等,在iOS 13的searchbar添加了一個- (void)set_cancelButtonText:(NSString *)text方法,這個方法專門用來命中kvc,一旦命中就Crash。
//修改textField的占位符字體顏色 [textField setValue:[UIColor xxx] forKeyPath:@"_placeholderLabel.textColor"];
(1).獲取SearchBar的textField
由於在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; } }
(2).修改TextFiled的占位符字體大小以及顏色,在iOS13中不能通過KVC來進行修改,可以通過其屬性字符串來進行修改
UITextField *textfield = [[UITextField alloc]init]; NSMutableAttributedString *arrStr = [[NSMutableAttributedString alloc]initWithString:textfield.placeholder attributes:@{NSForegroundColorAttributeName : [UIColor redColor],NSFontAttributeName:[UIFont systemFontOfSize:12]}]; textfield.attributedPlaceholder = arrStr;
(3).獲取SearchBar的cancleButton,由於searcBar的層級發生變化以及對象的局部變量,因為無法通過kvc的方式來獲取
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]; }
2.MPMoviePlayerController在iOS13中廢棄
MPMoviePlayerController is no longer available. Use AVPlayerViewController in AVKit.
在iOS13中對於MPMoviePlayerController使用的廢棄,需要使用AVKit中的AVPlayerViewController來達到播放的目的。
3.Sign in with Apple 第三方登錄
當 Sign In with Apple 服務正式上線以后,所有已接入其它第三方登錄的 App,Sign In with Apple 將被要求作為一種登錄選擇,否則有可能就不給過。如果 APP 支持三方登陸(Facbook、Google、微信、QQ、支付寶等),就必須支持蘋果登錄,且要放前邊。解決方法:未來上線之后,添加登錄入口即可。
4.即將廢棄的 LaunchImage
從 iOS 8 的時候,蘋果就引入了 LaunchScreen,我們可以設置 LaunchScreen來作為啟動頁。當然,現在你還可以使用LaunchImage來設置啟動圖。不過使用LaunchImage的話,要求我們必須提供各種屏幕尺寸的啟動圖,來適配各種設備,隨着蘋果設備尺寸越來越多,這種方式顯然不夠 Flexible。而使用 LaunchScreen的話,情況會變的很簡單, LaunchScreen是支持AutoLayout+SizeClass的,所以適配各種屏幕都不在話下。⚠️從2020年4月開始,所有使⽤ iOS13 SDK的 App將必須提供 LaunchScreen,LaunchImage即將退出歷史舞台。可以使用Launch Storyboards來進行解決。
5.模態彈出默認交互改變
iOS 13 的 presentViewController 默認有視差效果,模態出來的界面現在默認都下滑返回。 一些頁面必須要點確認才能消失的,需要適配。如果項目中頁面高度全部是屏幕尺寸,那么多出來的導航高度會出現問題。
// Swift self.modalPresentationStyle = .fullScreen // Objective-C self.modalPresentationStyle = UIModalPresentationFullScreen;
UIViewController 增加一個了屬性 isModalInPresentation,默認為 false,當該屬性為 false 時,用戶下拉可以 dismiss 控制器,為 true 時,下拉不可以 dismiss控制器。
6.UISegmentedControl 默認樣式改變
默認樣式變為白底黑字,如果設置修改過顏色的話,頁面需要修改
7.增加一直使用藍牙的權限申請
CBCentralManager,iOS13以前,使用藍牙時可以直接用,不會出現權限提示,iOS13后,再使用就會提示了。在info.plist里增加NSBluetoothAlwaysUsageDescription 我們要一直使用您的藍牙,具體做什么別問我
8.廢棄 UISearchDisplayController
在 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
1、用presentViewController而非navigator,但在iOS13里默認是可下拉折疊的對話框,這樣帶來一個界面排版的高度並不是屏幕高度,從而影響界面效果。可以將viewcontroller.modalPresentationStyle設置為UIModalPresentationFullScreen來回到原來的樣式。
2、要兼容iOS13的黑色主題色,就必須去識別當前的配色方案,可以通過viewcontroller.traitCollection.userInterfaceStyle == UIUserInterfaceStyleDark來獲取,需要添加if (@available(iOS 12.0, *))以支持iOS12以下的系統。
3、可排序tableview的右側三條杠會隨着主題色改變色彩,並不會檢測你自己設置的屏幕底色。兩種方法,1、根據上面的方法來識別主題色從而給不同的底色來適配。2、強行更改三條杠為其他圖片。
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 = .....;
}
}
}
}
4、在其他queue里不能直接創建viewcontroller,alloc都不行,否則會被阻塞。以往我都是先創建好controller,在present的時候再跑到dispatch_async(dispatch_get_main_queue()里,但iOS13不行,創建controller時就需要在main queue里。
原文鏈接:https://www.cnblogs.com/MrXHong/p/11226200.html