整理 iOS 9 適配中出現的坑(圖文)
宣告:本文轉載自http://www.cocoachina.com/ios/20151016/13715.html
本文主要是說一些iOS9適配中出現的坑,如果只是要單純的瞭解iOS9新特性可以看瞄神的開發者所需要知道的 iOS 9 SDK 新特性。9月17日凌晨,蘋果給使用者推送了iOS9正式版,隨著有使用者陸續升級iOS9,也就逐漸的衍生出了一系列的問題,筆者也在趕忙為自己維護的App做適配,本文寫的一些坑基本都是親身體驗了。
一、NSAppTransportSecurity
iOS9讓所有的HTTP預設使用了HTTPS,原來的HTTP協議傳輸都改成TLS1.2協議進行傳輸。直接造成的情況就是App發請求的時候彈出網路無法連線。解決辦法就是在專案的info.plist 檔案里加上如下節點:
NSAppTransportSecurity - NSAllowsArbitraryLoads
這個子節點的意思是:是否允許任性的載入?! 設為YES的話就將禁用了AppTransportSecurity轉而使用使用者自定義的設定,這個問題就解決了。
上面說是蘋果限制了HTTP協議,但是也並不是說所有的HTTPS都能完美適配iOS9了。
舉個栗子,從app內起webView載入https的網頁。新建個專案寫幾行起網頁的程式碼
1 2 3 4 5 6 7 8 9 10 11 12 |
- (void)loadView{
UIWebView *web = [[UIWebView alloc]initWithFrame:[UIScreen mainScreen].bounds]; self.view = web;
}
- (void)viewDidLoad {
[ super viewDidLoad];
UIWebView *web = (UIWebView *)self.view; //董鉑然
NSURL *url = [NSURL URLWithString:@ ];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[web loadRequest:request];
}
|
中間的url就是我們想要載入的https地址,用https://baidu.com/ 和 https://github.com/ 分別試一下,結果不同
github的網頁能開啟,百度的網頁打不開,下面列印了一行log
1 |
NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)
|
原因是蘋果的官方資料說首先必須要基於TLS 1.2版本協議。然後證書的加密的演算法還需要達到SHA256或者更高位的RSA金鑰或ECC金鑰,如果不符合,請求將被中斷並返回nil.
在瀏覽器中是可以直接檢視這個網站的加密演算法的,先點綠鎖再點證書資訊。
從右邊兩張圖可以看出,github帶RSA加密的SHA-256符合蘋果的要求,所以才可以展示。
針對百度的情況可以在info.plist中配置如下,如果網站引用的比較多應該是需要針對每個網站進行配置。
NSAppTransportSecurity,NSExceptionDomains,NSIncludesSubdomains,NSExceptionRequiresForwardSecrecy,NSExceptionAllowInsecureHTTPLoads 寫在下面便於複製。
其中的ForwardSecrecy理解為超前的密碼保護演算法,在官方資料裡有寫,一共是11種。配置完畢百度可以訪問。
二、Bitcode
bitcode的理解應該是把程式編譯成的一種過渡程式碼,然後蘋果再把這個過渡程式碼編譯成可執行的程式。bitcode也允許蘋果在後期重新優化我們程式的二進位制檔案,有類似於App瘦身的思想。
用了xcode7的編譯器編譯之前沒問題的專案可能會出現下列報錯。
1 |
XXXX’ does not contain bitcode. You must rebuild it with bitcode enabled (Xcode setting ENABLE_BITCODE), obtain an updated library from the vendor, or disable bitcode for this target. for architecture arm64
|
問題的原因是:某些第三方庫還不支援bitcode。要不然是等待庫的開發者升級了此項功能我們更新庫,要不就是把這個bitcode禁用。
禁用的方法就是找到如下配置,選為NO.(iOS中bitcode是預設YES,watchOS中bitcodes是不讓改的必須YES。)
三、設定信任
這一條只和企業級應用或inhose 有關,和AppStore渠道的應用無關。
在iOS8只是彈出一個窗問你是否需要讓手機信任這個應用,但是在iOS9卻直接禁止,如果真的想信任需要自己去手動開啟。類似於Mac系統從未知開發者處下載的dmg直接打不開,然後要到系統偏好設定的安全性與隱私手動開啟。 下圖展示左邊iOS8,右邊iOS9
使用者需要去 設定---》通用---》描述檔案 裡面自行新增信任。
這種問題的處理方法也就兩種:1.提前周知暫時不要升級iOS9 2.大多是公司員工使用的企業級應用,群發一個指導郵件。
四、字型
iOS8中,字型是Helvetica,中文的字型有點類似於“華文細黑”。只是蘋果手機自帶渲染,所以看上去可能比普通的華文細黑要美觀。iOS9中,中文系統字型變為了專為中國設計的“蘋方” 有點類似於一種word字型“幼圓”。字型有輕微的加粗效果,並且最關鍵的是字型間隙變大了!
所以很多原本寫死了width的label可能會出現“...”的情況。
iOS8
iOS9 蛋疼
上面這兩張圖也可以直觀的看出同一個介面,同一個label的變化。
所以為了在介面顯示上不出錯,就算是固定長度的文字也還是建議使用sizetofit 或者ios向上取整 ceilf() 或者提前計算
1 2 |
CGSize size = [title sizeWithAttributes:@{NSFontAttributeName: [UIFont systemFontOfSize:14.0f]}];
CGSize adjustedSize = CGSizeMake(ceilf(size.width), ceilf(size.height));
|
五、URL scheme
URL scheme一般使用的場景是應用程式有分享或跳其他平臺授權的功能,分享或授權後再跳回來。
在iOS8並沒有做過多限制,但是iOS9需要將你要在外部呼叫的URL scheme列為白名單,才可以完成跳轉
如果iOS9沒做適配 會報如下錯誤
1 |
canOpenURL: failed for URL : - error: "This app is not allowed to query for scheme mqzone"
|
具體的解決方案也是要在info.plist中設定 LSApplicationQueriesSchemes 型別為陣列,下面新增所有你用到的scheme
六、statusbar
這個還好只是報一個警告,如果就是不管他,也不會出現問題。
1 |
: CGContextSaveGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
|
以前我們為了能夠實時的控制頂部statusbar的樣式,可能會在喜歡使用
1 2 |
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent]
[[UIApplication sharedApplication]setStatusBarHidden:YES];
|
但是這麼做之前需要將 info.plist 裡面加上View controller-based status bar appearance BOOL值設為NO,就是把控制器控制狀態列的許可權給禁了,用UIApplication來控制。但是這種做法在iOS9不建議使用了,建議我們使用吧那個BOOL值設為YES,然後用控制器的方法來管理狀態列比如。
1 2 3 4 |
- (UIStatusBarStyle)preferredStatusBarStyle
{
return UIStatusBarStyleLightContent;
}
|
點進標頭檔案可以驗證剛才說法:
1 |
@property(readwrite, nonatomic,getter=isStatusBarHidden) BOOL statusBarHidden NS_DEPRECATED_IOS(2_0, 9_0, "Use -[UIViewController prefersStatusBarHidden]" );
|
七、didFinishLaunchingWithOptions
如果執行的時候報下列錯誤,那就是你的didFinishLaunchingWithOptions寫的不對了
相關推薦整理 iOS 9 適配中出現的坑(圖文)宣告:本文轉載自http://www.cocoachina.com/ios/20151016/13715.html 本文主要是說一些iOS9適配中出現的坑,如果只是要單純的瞭解iOS9新特性可以看瞄神的開發者所需要知道的 iOS 9 SDK 新特性。9月17日凌晨,蘋果 iOS 整理iOS9適配中出現的坑轉載 http://www.cocoachina.com/ios/20151016/13715.html =================================================== 作者:董鉑然 授權本站轉載。 本文主要是說一些iOS9適 iOS調用系統通訊錄(適配iOS9、iOS10)(轉載)tpi determine getc dispatch play bridge osi n) text2 由於系統的通訊錄在iOS9的時候提供了新的api,所以我們2種框架都使用。首先我們要導入框架: /// iOS 9前的框架 #import <Address Android8.0適配那點事(一)懸浮 新增功能 nta onstop config ges 保持 com dfa 1、通知渠道(Channeld) 當然,適配8.0的第一步自然是把targeSdk升級到26,在8.0中所有通知的實現都需要提供通知渠道,否則,所有通知在8.0系統上面都不能正常顯示; 下圖是 Android8.0適配那點事(二)滿足 ive 用戶 box str ati 隱式 分解 語音 小夥伴們,咱們今天咱繼續對Android8.0的適配進行分解,今天將針對啟動頁,版本適配和系統限制等進行“啃食”1、啟動頁適配近日,我無意中發現應用在8.0系統上面啟動頁崩潰,趕緊去找BUG,運行後發現如下異常: 為 xcode 7 和 iOS >= 9.0 配置無延遲 instruments(iwd)iOS >= 9.0 時,需要手動通過命令列傳遞二進位制檔案來配置無延遲的 instruments (在 xcode < 7 時 appium 會自動加上 ),參閱 iwd 在 xcode >= 7 時啟用 iwd : 在 <appium-in 關於如何寫UI及螢幕適配的一些技巧(上)因為公司開啟了一個新的iOS專案, 所以近期比較忙, 沒有更新部落格,今天打算總結一下關於UI佈局及螢幕適配的一些實戰技巧,尤其使用純程式碼,會對提升效率及程式碼易於維護等方面有明顯幫助,這裡提到的沒有使用任何Xib, 如果不是在外包公司,也推薦大家多使用甚至完全使用純程式碼佈 談一談Java開發中的坑(一) -- log4j2在SaaS專案中的應用背景介紹: 做server端開發有些年頭了,特別是開始做SaaS型別的專案時,深知log的重要性,特別是半夜三更使用者(大都是美國那邊的)遇到問題的電話打過來,這個時候沒有一個強大log,那只有抓瞎的份了。以前都是走的微軟系的開發工具,log的框架也是別人早就寫好的,所以 關於使用vw單位適配H5項目(二)建議 width 配方法 ostc 項目目錄 def 整除 sset sso 一些比較小的H5頁面,我覺得全沒有必要一定要使用框架的,比如vue和react之類的,我覺得原生的js,html5也可以寫好移動端。 最近剛好要趕10多個h5頁面,適配移動端的,各種手機型號都要適 iOS 11 適配以及Xcode 9小Tips定義 dst iscroll ets forms shu -c contents methods 網上適配iOS 11的文章很多,但還是有些坑不踩不知道,這裏總結一下自己在項目中適配iOS 11的遇到的問題。 UIScrollView以及子類frame整體下移問 我們來一探究竟 Android 7.0 適配中 FileProvider 部分rip 使用 star 過程 限制 需要 lock 目錄文件 support 本文標簽: Android7.0 FileProvider 由於 Android 7.0 或更高版本的系統在國內手機市場上的占比不是很高,很多 Android 開發人員並沒有做 7.0 適配工作, iOS 11 適配工具欄(UIToolbar)con width cti ios 11 區域 rain 適配 itoo 有時 在iOS11中,ToolBar 裏面的按鈕的矩形可觸模區域非常小,緊貼著圖片,所有有時候點著沒反應 在 UIButton 創建的時候,同時加一句這樣的代碼: [[button.width iOS 11 適配UIWebView,頁面下移20的問題tab launching eai ntb http 依然 del addition sets 方案1: AppDelegate文件 didFinishLaunchingWithOptions()中添加如下代碼 if (@available(iOS 11.0, 【整理】分塊在數論中的運用(初稿)(各位幫幫忙填下坑,裏面列的好多都不會)body element set max main lucas定理 們的 prev 成了 之前已經做過幾個分塊的水題,導致nmphy居然口出狂言:“高中學過,簡單”。(現在nmphy收回他的話,並且跪著寫下這篇總結) 前言: 由於數 iOS開發 UI庫中的坑製作UI庫中遇到編譯錯誤 file:///Users/lvshaohua/musicv/musicv/MVUPowerVUI/MVUPowerVUI/MVUCameraStoryboard.storyboard: error: IB Designa <iOS螢幕適配> iPhoneX SafeArea - 安全區域一. 前言 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px "PingFang SC"; color: #000000 } span.s1 { } span.s2 { font: 13.0px "Helvetica Neue" } 本文的出發點是對 ios 螢幕適配 心得重點內容 首先 UI設計一般是按照4.7的螢幕設計。 由於 iphone 5 以上 螢幕的比例 相似。只有 4s 螢幕比例比較特殊。 要適配全部機型。我一般都是 在4s上 寫一個scrollview,將螢幕 變成與5的大小相同。接下來就簡單了 這是一個UIView的類別 這是. iOS iPhoneX 適配1.導航欄高度 88 非非IPoneX手機為64 2.狀態列高度44 非IPoneX手機為20 3.tabar高度83 非IPhoneX手機為49 如下圖所示; 問題:push時tabbar向上移動導致一塊小黑螢幕 簡單描述一下,這就是一個蘋果官方開發人員的一個 iOS螢幕適配 iPhone X 、iPhone XR、iPhone XS 、iPhone XS Max隨著蘋果爸爸釋出了 超牛叉的iPhone、開發者的適配工作要開始了。 停,?。 如果app 適配過 iPhone X、新機子不用怎麼適配的了。 如果你之前的適配、都是寫死的。 建議你寫活吧。萬一,蘋果爸爸釋出全面屏的iPhone呢? 先看看新手機嘛 新手機和 iPhone X相同、都是劉海屏、 適配劉海 iOS開發 適配Xcode8以及iOS10-許可權問題現在在蘋果的官網上,我們已經可以下載到Xcode8的GM版本了,加上9.14日凌晨,蘋果正式推出iOS10系統的推送了,在此之際,iOS10的適配已經迫在眉睫啦,不知道Xcode8 beat版本,童鞋們有木有下載過來試試呢?就我的使用來說,總體覺得蘋果還是坑不斷,但是也在 |