好多人都更新了Xcode8 那么隨之而來的就是Xcode8的一些變化以及使用時的一些注意事項了违柏,我用了一段時間,做了一些總結(jié)現(xiàn)在分享給大家。
xcode8 使用總結(jié):
1罢缸、新建工程:在Xcode 創(chuàng)建項目的時候新增了iMessage 信息應用程序 和 sticker 表情包應用程序,并且將開發(fā)者賬號的管理提到 創(chuàng)建項目參數(shù)配置中
1.內(nèi)置表情包(Sticker Packs)
可以通過在Xcode中新建Sticker Pack Application來創(chuàng)建投队。這種方式可以簡單地通過添加圖片來在iMessage中添加表情包枫疆。添加的貼紙需要滿足一下條件圖片類型必須是 png、apng敷鸦、gif或者jpeg
文件大小必須 小于500K
具體如何實現(xiàn)可以查看這篇文章:http://codecloud.net/13065.html
2.iMessage應用(沒有具體研究過怎么用)
iMessage app使用完整的框架和Message app進行交互息楔。使用iMessage app能夠在消息應用內(nèi)呈現(xiàn)一個自定義的用戶交互界面。 使用MSMessagesAppViewController創(chuàng)建一個自定義或者動態(tài)的表情包瀏覽器扒披。使用 MSStickerBrowserViewController添加文本值依、表情、或者媒體文件到消息應用的文本輸入框碟案。使用 MSConversation創(chuàng)建帶有特定的應用數(shù)據(jù)交互的消息愿险。使用 MSMessage更新可以相互影響的消息(例如,創(chuàng)建游戲或者可以合作的應用)价说。
2辆亏、在Xcode general 配置中有比較大的變化
3风秤、Xcode8重新設計了Interface Builder 的畫布,不再有以前的大方框了扮叨,取而代之的是選擇不同設備,你可以在不同設備之間快速切換并看到一個完全實時的應用程序界面預覽
在底部設備欄(暫且這么叫)右邊你會看到一個 Vary for Traits按鈕 點開之后你可以選擇寬度和高度,當選中Width的時候左側(cè)會列出所有需要適配的屏幕類型,包括分屏,豎屏和橫屏.這樣你就會很容易的知道我的界面需要適配的所有寬度類型.
同理:當選中Height的時候左側(cè)會列出所有需要適配的屏幕類型,包括分屏,豎屏和橫屏.這樣你就會很容易的知道我的界面需要適配的所有高度類型.
4缤弦、關于Interface Builder版本問題
當用Xcode8打開之前創(chuàng)建的項目的xib的時候回跳出讓你選擇設備的界面,如果你選擇了那么再用Xcode8以下的版本就打不開了,也就是說Xcode7彻磁、Xcode6等等都無法使用碍沐。情況如下
Xcode7、Xcode6等等再次打開xib就會報錯
怎么解決呢兵迅,一種方法就是我們打開Xcode8的時候選擇cancel
如果不小心已經(jīng)選擇了choose怎么辦呢抢韭,別急,我們用另外一種方法恍箭,另一種方法可以選中xib右擊選擇Open As ->Source Code 然后在xml文件中你會看到這句話
只需要將這句話刪除就可以了
5刻恭、控制臺輸出Log問題
Xcode8會在控制臺打印一些額外信息(猜想是個BUG),如果這樣的話就太影響開發(fā)調(diào)試了,不過我們也可以關閉,但是關閉的話真機測試又沒有信息打印了扯夭,而且每一個項目我們都得這樣配置鳍贾,所以這是一個很蛋疼的問題。但是沒辦法交洗,目前還沒有找到好的解決辦法骑科,有的人可能出現(xiàn)配置了但是還是輸出這些亂七八糟的信息,這樣我們就得多試幾遍了构拳,確實沒有辦法,但是現(xiàn)在升級到xcode8.1版本的話蘋果就已經(jīng)解決了這個bug了.
如何配置呢:
1咆爽、快捷鍵 cmd + shift +, 或者使用下面的方法
2置森、選擇完或者執(zhí)行快捷鍵會出現(xiàn)下面的窗口斗埂,做如下配置OS_ACTIVITY_MODE -> Disable
6、添加注釋
雖然Xcode8禁用了所有的插件,如果想繼續(xù)使用插件請參考這篇文章:http://www.reibang.com/p/86dcccaec4c3/comments/4283432 凫海,不過Xcode8也內(nèi)部集成了一些插件使用,比如添加說明(注釋): Option + CMD + /,不過會遇到不啟動的情況
解決方案:
打開終端呛凶,命令運行: sudo /usr/libexec/xpccachectl
然后必須重啟電腦就大功告成了
如果這里是灰色的 說明你的添加注釋功能被禁用了
7、ios10 隱私權限設置
iOS 10 開始對隱私權限更加嚴格行贪,如果你不設置就會直接崩潰漾稀,現(xiàn)在很多遇到崩潰問題了,一般解決辦法都是在info.plist文件添加對應的Key-Value就可以了建瘫。
? 麥克風權限:Privacy - Microphone Usage Description 是否允許此App使用你的麥克風崭捍?
? 相機權限: Privacy - Camera Usage Description 是否允許此App使用你的相機?
? 相冊權限: Privacy - Photo Library Usage Description 是否允許此App訪問你的媒體資料庫啰脚?
? 通訊錄權限: Privacy - Contacts Usage Description 是否允許此App訪問你的通訊錄缕贡?
? 藍牙權限:Privacy - Bluetooth Peripheral Usage Description 是否許允此App使用藍牙?
? 語音轉(zhuǎn)文字權限:Privacy - Speech Recognition Usage Description 是否允許此App使用語音識別?
? 日歷權限:Privacy - Calendars Usage Description
? 定位權限:Privacy - Location When In Use Usage Description
? 定位權限: Privacy - Location Always Usage Description
? 位置權限:Privacy - Location Usage Description
? 媒體庫權限:Privacy - Media Library Usage Description
? 健康分享權限:Privacy - Health Share Usage Description
? 健康更新權限:Privacy - Health Update Usage Description
? 運動使用權限:Privacy - Motion Usage Description
? 音樂權限:Privacy - Music Usage Description
? 提醒使用權限:Privacy - Reminders Usage Description
? Siri使用權限:Privacy - Siri Usage Description
? 電視供應商使用權限:Privacy - TV Provider Usage Description
? 視頻用戶賬號使用權限:Privacy - Video Subscriber Account Usage Description
如果配置這些不起作用的話就需要打開后臺權限晾咪,拿定位來說的話如下圖
8收擦、推送問題
如果大家要使用推送請將這個打開,不然會出現(xiàn)問題的
9谍倦、iOS9 中默認非HTTPS的協(xié)議是被禁止的塞赂,解決方案是我們可以在info.plist文件中添加AppTransportSecuritySettings字典,將NSAllowsArbitraryLoads設置為YES來禁用ATS昼蛀。
iOS10?從2017年1月1日起蘋果提出所有新提交的App默認不允許使用NSAllowsArbitraryLoads來繞過ATS的限制宴猾,也就是說強制我們用HTTPS,如果不這樣的話提交App可能會被拒絕叼旋。
解決方案:我們可以通過NSExceptionDomains設置白名單的方式來針對特定的域名開放HTTP內(nèi)容來通過審核仇哆。可以簡單理解成夫植,把不支持https協(xié)議的接口設置成http的接口讹剔。
操作:
1)在項目info.plist中添加一個Key:App Transport Security Settings,類型為
Dictionary;
2)在其內(nèi)添加一個Key: Exception Domains详民,類型為Dictionary;
3)在Exception Domains內(nèi)添加要支持的域延欠,其中域作為Key,類型為Dictionary;
4)每個域下面需要設置3個屬性:類型為Boolean;
NSIncludesSubdomains ?YES
NSExceptionRequiresForwardSecrecy ?NO
NSExceptionAllowsInsecureHTTPLoads ?YES
注意:每個需添加的域都需要設置此三個屬性沈跨。如果請求的網(wǎng)絡圖片是HTTP由捎,也是需要設置的圖片的域。
10饿凛、系統(tǒng)判斷方法失效
在你的項目中,當需要判斷系統(tǒng)版本的話,不要使用下面的方法:
#define isiOS10 ([[[[UIDevice currentDevice] systemVersion] substringToIndex:1] intValue]>=10)
它會永遠返回NO,substringToIndex:1
在iOS 10 會被檢測成 iOS 1了,應該使用下面的這些方法:Objective-C 中這樣寫:
#define SYSTEM_VERSION_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedSame)
#define SYSTEM_VERSION_GREATER_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedDescending)
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)
#define SYSTEM_VERSION_LESS_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedDescending)
Swift中這樣寫:
if NSProcessInfo().isOperatingSystemAtLeastVersion(NSOperatingSystemVersion(majorVersion: 10, minorVersion: 0, patchVersion: 0)) { // 代碼塊}
11狞玛、蘋果針對內(nèi)存也做了優(yōu)化,Xcode8新增Runtime調(diào)試,界面可以展示運行時的問題,改善的界面調(diào)試對于調(diào)試不清晰或者不滿意的布局變的更簡單涧窒,我們可以利用debug模式下的Runtime來查看內(nèi)存为居,具體如何實現(xiàn)我也沒有做過實驗,可以參考一下這篇文章http://url.cn/40SBiZq
12杀狡、Swift3.0 and Swift2.3 隨意切換
Xcode8支持3.0語法和2.3語法隨意切換,默認創(chuàng)建出來是3.0語法, 如果想用2.3語法是可以切換的
語法轉(zhuǎn)換
當然Swift只能向上兼容,不能向下兼容,如果你的語法是2.3的可以轉(zhuǎn)換為3.0的,但是轉(zhuǎn)換不一定成功