亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

Xcode 8新特性的使用和遇到的坑

2020-07-26 03:07:39
字體:
來源:轉載
供稿:網友

目前還在用Xcode 7.3 一直沒有更新,畢竟可憐了我弄的那么多插件。。。言歸正傳,自己從Xcode 8問世就一直在關注,今天偶然看到一篇文章總結的不錯,隨手轉載過來順便再次整理了一下,在此感謝原著作者!

原文如下:

Xcode 8正式版在9月13日已經推送給開發者下載,我也在十一回來之后,就下載了新的Xcode。下載之后就出現了很多編譯錯誤,之前的插件也不能用了,但是發現Xcode8把好多不錯的插件功能整合到自身了,感覺這點也挺不錯。

每個版本Xcode都會帶來很多新特性,Xcode 8也不例外,這些新特性會給我們的開發帶來便利,也會帶來很多坑。所以今天打算寫一篇文章,詳細講一下Xcode8給我們帶來的新特性以及帶來的坑,以及我使用過程中遇到的一些問題,希望能幫助到其他朋友。

Xcode8 新特性

Interface Builder

隨著14年的iPhone6和6P出來之后,iPhone的屏幕尺寸也越來越多,屏幕適配是一個需要解決的問題,以后不一定蘋果又出什么尺寸的iPhone呢。

在iPhone6和6P發布的同一年,蘋果推出的Xcode6中在原有的Auto layout的基礎上,添加了Size Classes新特性,通過這個新特性可以使用一個XIB或者SB文件,適配不同的屏幕以及iPhone和iPad兩種設備。

在Xcode8中,蘋果推出了更加強大的可視化編輯工具預覽功能,可以在不運行App的情況下,預覽當前XIB或SB在不同屏幕尺寸下的顯示。(這個功能我記得之前Xcode就有,只是隱藏的比較深,蘋果現在給拿到外面了)
選擇一個XIB文件進去,點擊下面紅框的位置,會出現從3.5寸-5.5寸一系列屏幕尺寸的選項。直接點擊不同屏幕尺寸,以及橫豎屏選項,切換不同的屏幕顯示。在iPad上還可以選擇是否分屏,功能非常強大。

 

Interface Builder

在右邊有一個Vary for Traits選項,點擊這個選項就可以同時顯示所有可選的屏幕樣式,功能和上面圖片都一樣,只是顯示上看起來比較多。

 

Interface Builder

還有一點,新創建的XIB控件尺寸,不再是之前600*600的方塊了,而是默認是6s的長方形XIB文件,看起來舒服多了。

Target中General的變化

在Xcode8之前,都需要自己設置證書和描述文件。如果設置出現錯誤的情況下,還可以通過點擊Fix issue來修復這個錯誤。但這有個問題就在于,Fix issue選項并不是那么好用,有的時候設置是正確的這里也提示需要Fix issue。

可能蘋果也意識到這個問題的存在,在Xcode8中可以通過Automatically manage signing選項,讓蘋果為我們管理證書和配置文件,設置也都是由蘋果來完成的。在Xcode8中新建項目,這個選項默認是被勾選的。

 

Automatically manage signing

從上面圖中可以看到,蘋果幫我們自動管理了證書和配置文件。而且在之前的項目中,如果想要設置安裝后顯示在手機上的App名字,還需要自己到Info.plist文件中,修改Display Name字段,而現在直接在General中就可以做修改,這個修改和Info.plist是同步的。

但是,如果我想自己管理證書和描述文件呢?只需要去掉Automatically manage signing選項。

Automatically manage signing

如果自己到Build Settings中手動設置證書和描述文件,可以發現Provisioning Profile選項已經被標明為Deprecated,也就是蘋果并不推薦手動設置。

Xcode插件

升級Xcode8之后會發現,在Xcode8中所有第三方插件都失效了,并且連之前菜單欄的插件選項也不存在了。在之前很多iOS開發者,都是通過Alcatraz來管理插件的,現在Alcatraz也是不可用的。但是Xcode8自身也對編譯器進行了升級,將一些比較好的插件功能加入到Xcode中,例如單行高亮顯示等。

在Xcode8中支持了開發插件工程,并且為我們提供了一個插件模板,開發的插件可以上傳到App Store下載。蘋果這么做有一個原因在于,之前Xcode和插件是運行在同一個進程的,所以插件的崩潰也會導致Xcode崩潰。蘋果現在將插件作為一個單獨的應用程序,分開進程運行,不會對Xcode帶來其他影響。

 

Xcode Source Editor Extension

Runtime Issues

在開發過程中,因為語法或明顯的代碼錯誤(例如Retain Cycle),編譯器可以發現并報黃色或紅色警告。但是一些因為代碼邏輯導致的錯誤,編譯器并沒有辦法找到。例如下面的這句代碼,因為代碼邏輯的問題導致兩個數組相互引用,都不能釋放。

 

數組循環引用

這時候可以通過Xcode8提供的Runtime Issues新特性,查找到運行過程中出現的問題,并通過Graph的方式將問題可視化的展現給開發者。

 

Runtime Issues

Debug Memory Graph

在Xcode6中出現了Debug View Hierarchy新特性,可以通過其調試當前App的視圖層級,查找UI相關的bug非常方便。在Xcode8中蘋果為開發者提供了Debug Memory Graph特性,通過這個新特性,可以直接選擇一個對象,查看與其相關的內存關系。

 

Debug Memory Graph

Debug Memory Graph和Runtime Issues可以配合使用,通過Debug Memory Graph分析內存關系完成后,點擊Runtime Issues可以看到已經發現的內存問題。

Swift 3

Xcode8帶來了新版本的Swift3,新版本的Swift變化較大,如果舊版的Swift項目在Xcode8上編譯可能會失敗。對此,蘋果為開發者提供了Swift遷移工具,聽說不太好用(我沒用過這個工具)。

如果不想立刻就遷移到Swift3,可以在Builder Settings中進行設置,選擇Use Legacy Swift Language Version設置為YES,就可以繼續使用舊版本的Swift2.3。

 

Use Legacy Swift Language Version

其他更新

Xcode新版字體,SF Mono Regular字體。更新Xcode之后我比較喜歡這種字體,看起來代碼非常工整。

被編輯的行高亮顯示。之前Xcode有個插件就是這個功能,Xcode8把高亮功能集成進來了,使用起來很方便。

最新版的API文檔,展示樣式發生了很大的改變。

更方便的生成文檔(就是喵神寫的VVDocumenter),在Xcode8中可以將光標放在方法上面,通過option + command + /快捷鍵生成文檔注釋。

Xcode 8適配

XIB和Storeboard適配

在Xcode8之前,創建一個XIB或SB文件,都是一個600*600的方塊XIB文件。在Xcode8之后,創建的XIB文件默認是6s尺寸的大小。

但是Xcode8打開之前舊項目的XIB或SB文件時,會彈出下面的彈框, 這時候一般直接選擇Choose Device即可。

 

Choose an initial device view

但是這樣有個問題,如果Xcode8打開過這個XIB文件,并選擇Choose Device之后。其他的Xcode8以下版本的編譯器,將無法再打開這個文件,會報以下錯誤:

The document “ViewController.xib” requires Xcode 8.0 or later. This version does not support documents saved in the Xcode 8 format. Open this document with Xcode 8.0 or later.

有兩種方法解決這個問題:

你同時也升級Xcode8,比較推薦這種方式,應該迎接改變。

右擊XIB或SB文件 -> Open as -> Source Code,刪除xml文件中下面一行字段。

編譯錯誤

升級Xcode之后,Xcode8對之前的一些修飾符和語句不兼容,會導致一些編譯錯誤。這種錯誤導致的原因很多,這里大致列幾條,各位還是根據自身遇到的情況做修改吧。

之前一些泛型相關的修飾符,nullable之類的有的會報錯。

CAAnimation及其子類,設置代理屬性后,必須在@interface()遵守代理,否則報錯,等等。

權限適配

這應該算iOS10系統適配的范疇,最近這兩個都在弄,所以就直接和Xcode8適配一起寫出來了。

在iOS10之后需要在Info.plist中,添加新的字段獲取權限,否則在iOS10上運行會導致崩潰。下面是一些常用的字段,如果有缺

少的麻煩各位評論區補充一下。

參考資料:developer.apple

推送通知

蘋果的推送在之前iOS8和iOS9的時候就發生過大的更新,推送功能越來越強大。在iOS10之后蘋果推出了UserNotifications框架,可以通過這個框架更好的控制推送通知,可以更新、修改鎖屏頁面的推送消息,可以添加圖片等功能。

但是在用Xcode8打包后,并且不對代碼進行修改的情況下,會發現打包后蘋果發來了一封郵件。這封郵件大概意思是如果需要使用推送通知,需要對代碼做修改,否則將不能使用推送通知。

 

Push Notifications

這是因為在Xcode8之后,如果需要使用Push Notifications的功能,需要勾選Capabilities -> Push Notifications為YES,否則進行遠程推送就會有問題,并且會收到蘋果發來的這封郵件。

刪除系統log

升級Xcode8之后,在調試和運行過程中,發現控制臺打印了很多不認識的log,這些log是系統打印的,和開發者沒關系。但是

這么多log看著比較亂,怎么屏蔽掉呢?

subsystem: com.apple.UIKit, category: HIDEventFiltered, enable_level: 0, persist_level: 0, default_ttl: 0, info_ttl: 0, debug_ttl: 0, generate_symptoms: 0, enable_oversize: 1, privacy_setting: 2, enable_private_data: 0

在Target -> Edit Scheme -> Run -> Arguments中,添加OS_ACTIVITY_MODE字段,并設置為Disable即可。

 

OS_ACTIVITY_MODE

順便提一下,這兩天在設置log選項的時候,發現可以通過在Arguments中設置參數,打印出App加載的時長,包括整體加載時長,動態庫加載時長等。 

在Environment Variables中添加DYLD_PRINT_STATISTICS字段,并設置為YES,在控制臺就會打印加載時長。

控制臺打印信息

awakeFromNib報警告

老項目在Xcode8中,有些重寫awakeFromNib方法的地方,會報下面的錯誤。這是因為沒有調用super的方法導致的,還好我平時都是調用super的,代碼目前還沒出問題。

Method possibly missing a [super awakeFromNib] call

以上所述是小編給大家介紹的Xcode 8新特性的使用和遇到的坑,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
96pao国产成视频永久免费| 精品激情国产视频| 午夜美女久久久久爽久久| 亚洲午夜精品久久久久久性色| 欧美老女人性视频| 欧美片一区二区三区| 国产激情久久久久| 在线看国产精品| 国产精品日韩一区| 最近免费中文字幕视频2019| 日韩中文字幕在线看| 秋霞成人午夜鲁丝一区二区三区| 国产91ⅴ在线精品免费观看| 亚洲精品一区久久久久久| 国产一区二区久久精品| 午夜精品美女自拍福到在线| 一区二区三区视频在线| 日韩精品小视频| 精品久久久免费| 欧美精品免费看| 国产成人啪精品视频免费网| 91精品国产91久久久| 亚洲无av在线中文字幕| 亚洲欧美一区二区三区在线| 尤物精品国产第一福利三区| 久久婷婷国产麻豆91天堂| 国产精品扒开腿做爽爽爽男男| 日韩大片免费观看视频播放| 亚洲性xxxx| 欧美成人一区在线| 亚洲**2019国产| 亚洲美女视频网站| 欧美亚洲另类制服自拍| 亚洲性线免费观看视频成熟| 欧美一级视频免费在线观看| 国产精品精品视频一区二区三区| 91夜夜未满十八勿入爽爽影院| 欧美日韩在线免费| 欧美综合国产精品久久丁香| 日韩国产高清视频在线| 色偷偷av一区二区三区| 国模gogo一区二区大胆私拍| 亚洲精品电影在线| 欧美激情精品久久久久久黑人| 欧美精品免费在线观看| 久久久久国产精品免费| 国产精品精品视频一区二区三区| 黑人巨大精品欧美一区二区一视频| 中文字幕日韩欧美精品在线观看| 日韩电影中文字幕在线观看| 亚洲在线视频福利| 欧洲成人在线观看| 97视频com| 尤物精品国产第一福利三区| 国产91ⅴ在线精品免费观看| 日韩美女视频免费在线观看| 日韩电影在线观看中文字幕| 日产精品久久久一区二区福利| 亚洲另类图片色| zzijzzij亚洲日本成熟少妇| 91在线观看免费网站| 国模gogo一区二区大胆私拍| 国产原创欧美精品| 神马久久桃色视频| 97精品视频在线观看| 综合欧美国产视频二区| 国产精品第七影院| 国产视频亚洲视频| 中文字幕av一区二区三区谷原希美| 91精品视频免费观看| 青青草国产精品一区二区| 久久久久国产一区二区三区| 欧美激情精品久久久久| 国产91成人video| 宅男66日本亚洲欧美视频| 97久久精品国产| 懂色av一区二区三区| 欧美高清在线播放| 91九色在线视频| 成人久久一区二区三区| 国产偷亚洲偷欧美偷精品| 91精品久久久久久久久久另类| 在线电影av不卡网址| 亚洲色图偷窥自拍| 国产精品爽爽爽| 在线日韩精品视频| 欧美一区在线直播| 亚洲久久久久久久久久久| 亚洲伊人久久综合| 欧美午夜片欧美片在线观看| 国产精品www色诱视频| 国产精品av在线播放| 国产精品第一区| 成人黄色在线免费| 久久久av网站| 亚洲第一网中文字幕| 国产精品∨欧美精品v日韩精品| 久久久亚洲网站| 欧美性色19p| 在线看欧美日韩| 国产精品视频一| 国产精品私拍pans大尺度在线| 国产精品ⅴa在线观看h| 欧美国产在线电影| 久久久久久久久久久免费精品| 日韩激情视频在线播放| 91高潮精品免费porn| 国产一区二区三区三区在线观看| 成人av资源在线播放| 中文字幕亚洲图片| 日韩精品视频在线观看免费| 国内精品久久久久久影视8| 亚洲欧美综合图区| 亚洲精品二三区| 欧美一区深夜视频| 日韩精品在线观看一区二区| 17婷婷久久www| 97在线观看视频国产| 日韩av免费在线播放| 国产精品中文在线| 欧美精品videos| 97超碰国产精品女人人人爽| 国产区亚洲区欧美区| 欧美亚洲一区在线| 久久不射热爱视频精品| 97在线视频免费观看| 欧美亚洲在线播放| 亚洲一区二区三区乱码aⅴ| 亚洲日本中文字幕免费在线不卡| 美日韩在线视频| 亚洲偷熟乱区亚洲香蕉av| 久久久久在线观看| 亚洲在线免费观看| 亚洲第一区中文99精品| 日韩av网站导航| 国产精品欧美久久久| 欧美日韩在线观看视频小说| 91精品久久久久久久久久久久久| 91久久久久久久一区二区| 亚洲精品成人免费| 欧美理论片在线观看| 亚洲精品一区在线观看香蕉| 国产成人精品综合久久久| 国产精品日韩专区| 欧美洲成人男女午夜视频| 久久成人国产精品| 欧美大片网站在线观看| 77777亚洲午夜久久多人| xxxxx91麻豆| 国产欧洲精品视频| 在线激情影院一区| 青青草成人在线| 欧美成人免费全部| 欧美激情极品视频| 精品国产31久久久久久| 97视频在线观看亚洲| 久久夜色精品亚洲噜噜国产mv| 久久久久久久久久国产精品| 欧美成人精品激情在线观看| 日韩精品视频免费在线观看| 美日韩精品视频免费看| 国产精品久久久久久久久免费看| 日韩最新av在线| 尤物yw午夜国产精品视频|