升級xcode11&ios13的坑


Swift Packages

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

Pod以后的更新可能會解決這個問題,也會有越來越多的庫支持SPM

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

思路:Pod這個沖突主要針對工程,那么創建兩個工程就好了,一個集成pod,另一個集成spm

准備:先有一個集成pod的工程(這個也是我們項目的主要工程,老項目也可以)

步驟:

  1. 新建一個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


 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM