升級xcode11&ios13的坑

Swift Packages

目前Pod跟SPM的兼容還沒作好,配置好SPM後,Pod不能進行正常更新,先配置好Pod再集成SPM則沒有問題html

Pod之後的更新可能會解決這個問題,也會有愈來愈多的庫支持SPMxcode

在此以前,本人想出一個比較省事的解決方案:微信

思路:Pod這個衝突主要針對工程,那麼建立兩個工程就行了,一個集成pod,另外一個集成spmasync

準備:先有一個集成pod的工程(這個也是咱們項目的主要工程,老項目也能夠)ide

步驟:字體

  1. 新建一個framework工程,這裏叫SPM工程,目錄位置隨意,多個項目使用一個SPM工程也是能夠的,建好後將SPM.xcodeproj拖入到主工程便可

  

  

  

  2. 在主項目WorkDemo中,引入SPM.frameworkspa

  

  3. 到此基本結束,在主工程進行pod更新,在SPM工程進行Swift Packages集成,二者不會產生影響.net

  


 

iOS夜間模式開發探索(iOS13)

原文連接:https://www.jianshu.com/p/f31f208313dd3d

內容很詳細不少,須要瞭解請跳轉原文。這裏只說若是App不支持黑暗模式須要進行下面處理code

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


 

 

一、用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裏。

原文連接:http://www.javashuo.com/article/p-djarfnev-dg.html

相關文章
相關標籤/搜索