百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术流 > 正文

不可能不爱的 XCODE 9:最新功能详尽介绍

citgpt 2024-08-08 12:45 8 浏览 0 评论

WWDC17 带来许多令人兴奋的好消息,iOS 11, Swift 4 和 Xcode 9,每个都有非常大的进步。但对 App 开发者来说,马上可以派上用场的莫过于 Xcode,毕竟我们开发的 App,可能不需要 iOS 11 的 AR 和 machine learning 功能,程式码也不见得会用到 Swift 4 的功能。因此,接下来的时间,我们就把时间交给 Xcode 9,看它大显神威吧。

如何下载 Xcode 9 beta

不可能不爱的 XCODE 9:最新功能详尽介绍

你可连到 XCODE 9 BETA 的下载页面下载。 注意,只有付给 APPLE 年费的尊贵开发者才能看到 BETA 版的 XCODE 9

没付费的一般开发帐号只能看到正式版的 Xcode 8.3.3。

接着,就让我们启动 Xcode 9,瞧瞧它的全新功能 !

1. 更棒的模拟器

模拟器终于有外框跟 home 键了

此外框可不是华而不实的装饰品,上面的按键都可以按呢! 按了 home 键会回到桌面,右上的睡眠/唤醒键会将 iPhone 荧幕打开或关闭, 左上的按扭则可切换静音和调整音量。

模拟器大小任你调

将滑鼠游标放在模拟器的右上(或是左上,左下,右下)后,即可自由拖曳调整模拟器的大小。

同时启动多个模拟器

从前我们一次只能跑一个模拟器,现在终于可以同时启动多个模拟器,享受钱很多,有很多 iPhone的感觉。启动多个模拟器的方法有以下两种:

  1. 从 Xcode 选择不同的模拟器,启动新的模拟器。

2.從模擬器 menu 上的 Hardware > Device,選擇新的模擬器啟動。

2. WiFi 无线安装 App

从前从前,有个人爱妳很久。哦,不是啦,彼得潘要说的是,从前从前,我们在开发 App 时得将iPhoen 麻烦地接线连到 Mac,然后再从 Xcode 将 App 安装到 iPhone。而且现在新的 Macbook 插孔愈来愈少,也许有一天,Apple 会推出无插孔的 Macbook,那我们岂不完全无法测试 App,只能转行卖鸡排 ?

为了未来的无插孔 Macbook 大计,Xcode 9 正式推出 WiFi 无线安装 App 功能,不需接线就可安装! 不过它有以下几个小小的限制。

  1. 你需要Mac要安装 Xcode 9 以上而 iOS装置要运行 iOS 11 以上的版本才能享用。

  2. Mac 和 iPhone 需连到同一个 WiFi 网路。

为了将 App 无线安装到 iPhone,此 iPhone 需要先接线到 Mac 做设定,如此 Mac 才能认得这支iPhone,未来才能无线安装。操作的步骤如下:

  1. 接线连接 iPhone。

  2. 点选 Xcode menu 的 Window > Devices and Simulators。

3.勾選 Connect via network,從網路連線到 iPhone。如果連線順利,iPhone 旁將出現網路圖示,如下圖所示。

之后当我们拔掉线后,即可成为远距离高手,自由地无线安装。不过如果刚刚没有出现网路图示,或是拔线后,iPhone 就像断了线的风筝不理我们,在 Devices and Simulators 视窗显示Disconnected。此时 Xcode 找不到 iPhone,也就无法顺利安装 App。

别担心,我们还有一招大绝招,在 Devices and Simulators 视窗上选择 iPhone 后,从右键选单点选Connect via IP Address,输入 iPhone 的 IP 后,点选 Connect 连线。

至于 iPhone 的 IP Address,则可从 iPhone 设定 App 的 WiFi 页面查询。

3. 神乎其技的程式编辑器

更清楚的警告错误讯息和更方便的问题修正

在旧版的 Xcode,当有警告错误时,它只能一行显示,所以当讯息内容太多时,它无法完整显示,结尾将变成 …。

虽然有贴心的 Fix-it 功能帮我们修正问题,不过也是挺麻烦的,必须先点选错误的红色圆圈后,才会出现 Fix-it 提示。

这一切,在 Xcode 9 都变得更简单了。现在不只错误可以多行显示,连 Fix 也会贴心地自动出现,点选即可修正问题。

點選 Fix 後,自動幫我們修正問題,幫 url 補上!

程式碼的放大縮小

按住 command 加 + 可將程式碼放大,command 加 - 可將程式碼縮小。

聰明的範圍標示

將游標移到 { } 、( ) 或是 class、func、if、for 等關鍵字時,按住 command 鍵,Xcode 將聰明地標示對應的 class、function、if、for 區塊。

游標移到 func 上按 command 鍵:

游標移到 for 上按 command 鍵:

貼心的提示選單

跟剛剛一樣,將游標移到程式碼的某個目標上,按住 command 鍵,然後再用我們的一陽指輕輕點擊,即可出現貼心的提示選單。

比方如圖所示,游標停在 if 上,按住 command 鍵點擊後提示選單出現 Add “else” Statement 和 Add “else if” Statement,Extract Method 等選項。選擇 add “else” Statement 後,自動完成 else { } 的輸入。

值得注意的,在舊版 Xcode,按住 command 鍵再點擊其實是 Jump To Definition,比方跳到類別,function 的定義。現在 Jump To Definition 變成提示選單的一個選項。如果想利用快速鍵跳到定義,請按住 command + control 再點擊。

4. SWIFT 程式重構(REFACTORING)

重新命名(RENAME)

為了寫出更好的程式,我們時常需要將變數,類別,function 改名。很可惜,這看似簡單的小小心願,在舊版的 Xcode 卻只做半套,它支援 Objective-C,卻不支援 Swift。而在 Xcode 9,Swift 程式碼也可以改名了。

比方以下例子,我們想將 struct Movie 改成 NewMovie。

  1. 將游標移到 Movie 上,按住 cmd 鍵再點擊,從提示選單中選擇 Rename。

  2. 神奇的事發生了 ! Xcode 畫面上列出專案裡所有 Movie 出現的地方,橫跨多個檔案。

  3. 當我們將 Movie 改名為 NewMovie 時,更神奇的事發生了。所有的 Movie 同步變成 NewMovie,最後按下右上角的 Rename 即大功告成 !

自動加入需要定義的 PROTOCOL FUNCTION

Swift 的 protocol 是個很龜毛的人,一旦遵從它,就得把它一定要定義的 function 一一實現。尤其當你對遵從的 protocol 不熟時,還得研究一番才能摸清哪些 function 要定義。

在 Xcode 9,這些麻煩事都成過往雲煙了,讓我們看看以下例子:

ViewController class 遵從 UITableViewDataSource protocol,此時尚未定義相關 function,因此出現紅色錯誤。

點選 Fix,自動幫我們輸入 UITableViewDataSource 一定要定義的 2 個 function。

將程式碼變成 METHOD (EXTRACT METHOD)

在整理程式碼時,我們往往會發現一些可以獨立出來,變成 function 來呼叫的一段程式。從前我們只能土法煉鋼,使用複製貼上大法。現在不用這麼麻煩了,Extract Method 可以幫我們將一段程式碼變成 function,例如以下例子:

  1. 選取下載圖片的程式碼段落後,從右鍵選單點選 Extract Method。

  2. 整段程式碼變成 function extractedFunc,此時你還可利用 Rename 將 function 取個更好的名字。

程式碼重構轉換 OPEN SOURCE !

是不是覺得剛剛提到的這些功能很棒呀 ? 這只是起點而已,Apple 將 Xcode 的程式碼重構轉換 open source。換句話說,未來將有更多的英雄好漢一同來開發,發明更多幫助我們重構和轉換程式的酷炫功能。

5. 全面進化的版本管理

SOURCE CONTROL NAVIGATOR

左邊的 Navigator 區塊多了一個 source control navigator 分頁,現在可以更清楚地查詢和控制專案的版本管理。

建立 TAG 和 BRANCH

在新版的 Xcode,建立 tag 和 branch 變得像呼吸一樣簡單,例如以下例子:

  1. 在 source control navigator 頁面,從想指定 tag 的 commit 叫出右鍵選單,然後選擇 Tag “c197e26″。c197e26 為 git commit id 的結尾字串。

  2. 輸入 tag 名稱 v1.0,然後按 Create。

  3. tag v1.0 成功生成,畫面上以粉紫色圖案顯示。

回到過去,切換到某個 COMMIT 版本

  1. 在 source control navigator 頁面,選擇第一個藍色 icon,可看到目前專案處在 second commit 的版本。

  1. 選擇 Initial Commit,從右鍵選單點選 Checkout,回到 Initial Commit 的版本。

雖然現實世界裡,時光機還沒發明,但在 Xcode 的世界,我們已經可以回到過去,專案變成 Initial Commit 的版本 !

深度整合 GITHUB

Xcode 和 GitHub 深度整合,現在從 Preferences 視窗的 Accounts 頁面即可設定專案連結的 GitHub 帳號。

  1. 在 Accounts 頁面按 +,選擇 GitHub。

  2. 輸入 GitHub 的帳號密碼。

  3. 設定成功後,在 Source Control Accounts 下可看到 GitHub 帳號。

  1. 將 XCODE 的專案建立上傳到 GITHUB

    為了將 Xcode 專案上傳到 GitHub,從前我們得先在 GitHub 網站建好 Repository,然後再從 Xcode 將專案的 Remote 設為 GitHub 的 Repository,最後再執行 push 上傳。

    在 Xcode 9,我們只要在 Xcode 操作即可實現剛剛的所有動作,步驟如下:

  1. 在 source control navigator 頁面,選擇第一個藍色 icon 後,從右鍵選單觸發 Create “Demo” Remote on GitHub。(Demo 是專案名稱)

  2. 填寫專案的相關資訊後,點選右下角的 Create 建立。

    複製(CLONE)下載 GITHUB 帳號的專案

  1. 1.從 Xcode 的 menu 點選 Source Control > Clone

    2.從 GitHub 帳號的專案清單視窗選擇有興趣的對象複製(clone)下載。

    6. 更多的樣版

    iOS App 多了製作 AR 特效的 Argumented Reality App 樣版和文件 App 的 Document Based App 樣版。

Playground 也可以選樣版了,有多達四種可以選。

7. 顏色也有名字

Assets.xcassets 現在除了加入圖片,還可以加入有名字的顏色,方便我們之後在 Storyboard 或程式裡使用,例如以下例子:

  1. 在 Assets.xcassets 頁面,從右鍵選單選擇 New Color Set 新增顏色。

  2. 編輯顏色的名稱和內容,可從右半邊的 Attributes Inspector 指定顏色,如圖所示,我們加入傳說中讓人一見鍾情的顏色 – 「Vergil的浪漫藍」。

  3. 在 Storyboard 指定元件顏色時,可在 Named Colors 下看到我們取的顏色名字。

  1. 我們也可從程式利用顏色名字生成 UIColor 物件。

8. DEBUG VIEW HIERARCHY 可以看到 CONTROLLER

Debug View Hierarchy 是個很棒的 debug 工具,方便我們在 App 執行時研究畫面的元件。可惜從前它少了顯示一個十分重要的角色,控制畫面的 controller。如以下例子,在 Xcode 8,我們只能看到 controller 的 view。

在 Xcode 9,控制畫面的大神 controller,終於可以現身,不再害羞隱藏,例如以下例子裡的 yayatrueLoveViewController。

9. 顯示 MARKDOWN 檔案

Xcode 支援漂亮地顯示 markdown 檔案,呈現對應的文字大小,而且還能理解檔案內容的階層,方便我們點選 jump bar 選單跳到檔案的某個段落

10. 支援 SWIFT 4 和 SWIFT 3.2

Xcode 9 預設搭配最新的 Swift 4,然而它也同時支援 Swift 3.2。更棒的是,當你的專案包含多個 target 時(比方搭配一些第三方套件),你可以部分 target 的程式是 Swift 4,部分 target 的程式是 Swift 3。

總結

以上介紹的,只是 Xcode 9 一些比較特別,比較重要常用的新功能,其實還有許多沒提到的新功能值得我們去發掘研究,比方幫助我們 Debug 的 Undefined Behavior Sanitizer 和 Main Thread Checker,方便 Continuous integration 測試的 Xcode Server。想要更深入認識 Xcode 9 的朋友,可直接從 Xcode menu 的 Help 查詢。

以下 Apple 官方網頁,也有更多關於 Xcode 9 的完整介紹。

1 What’s New in Xcode 9

2 Xcode 9 beta Release Note (需登入付費開發帳號才能看到)

相关推荐

js中arguments详解

一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...

firewall-cmd 常用命令

目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...

epel-release 是什么

EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...

FullGC详解  什么是 JVM 的 GC
FullGC详解 什么是 JVM 的 GC

前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...

2024-10-26 08:50 citgpt

使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
  • 使用Spire.Doc组件利用模板导出Word文档
跨域(CrossOrigin)

1.介绍  1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。    通俗讲...

微服务架构和分布式架构的区别

1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...

深入理解与应用CSS clip-path 属性
深入理解与应用CSS clip-path 属性

clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...

2024-10-25 11:51 citgpt

HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
  • HCNP Routing&Switching之OSPF LSA类型(二)
Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
  • Redis和Memcached的区别详解
Request.ServerVariables 大全

Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...

python操作Kafka

目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...

Runtime.getRuntime().exec详解

Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...

promise.all详解 promise.all是干什么的
promise.all详解 promise.all是干什么的

promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...

2024-10-24 16:21 citgpt

Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解
  • Content-Length和Transfer-Encoding详解

取消回复欢迎 发表评论: