主頁 > 移動端開發 > WWDC2023 Session系列:探索XCode15新特性

WWDC2023 Session系列:探索XCode15新特性

2023-06-16 08:30:11 移動端開發

一、版本說明

XCode 15 beta 發布于 2023 年 6月5日, 可支持 macOS 13.3 或以上版本, 你可以按需下載需要的平臺,

二、新增特性

1.代碼智能提示 (Code completion)

?創建新的檔案在參考時的提示

首先創建一個新的檔案

然后,在參考的地方,輸入檔案首字母會立即自動彈出補全提示,

  • 函式呼叫時列出所有可能的引數排列

在沒有提示的情況下,呼叫函式時如何傳參往往是比較困難的,不知道可以傳哪些引數, 現在 XCode 將列出所有可供選擇的可能,你可以更輕松找到合適的引數串列并選擇它,

  • 自動分析代碼背景關系,并給出最合適的建議,

例如在 Text 組件呼叫中,輸入"點號" 后,在彈出的提示串列中的最上方會提示 font (此時 Text 還沒設定 font ),這是因為XCode分析了背景關系,“識別出” 這是一個 Text, 并且此時還沒有設定過字體,你可能需要它,因此將字體放在建議的最上方,

2.資產檔案作為變數參考 (Asset catalogs)

過去資產檔案如圖片是以 “字串” 作為圖片名稱在代碼中被參考,現在直接通過類似變數的識別符號去參考它,它可以接受編譯時的檢查,

  • 資產參考的編譯檢查

修改資產的名稱為 “MultipleClouds ” 后,參考處產生了編譯錯誤

這是因為此前資產的名稱是 "clouds", 現在,編譯器提示你修改它為 "MultipleClouds",

  • 代碼中參考圖片資產的智能推薦

編輯資產的名稱時,可以獲得XCode 的智能推薦,

3.本地化資源集中管理 (Localization)

  • 舊專案的本地化檔案遷移

XCode 設定中 選擇 Edit > Convert to string catalog, 此時 XCode 會自動掃描工程中的 storyboards、.strings、 以及 .stringsdict 型別的檔案,并將其列在下圖所示的串列中,你可以根據需要選擇部分或全部檔案進行遷移,

遷移完成后,所有的本地化翻譯將被整合到一個 Localization 目錄中,你還可以查看到不同語言翻譯的進度,

  • 追蹤代碼中的字串變化

每次構建時,XCode 會自動提取代碼中的所有字串,當添加新字串或洗掉某個字串時,本地化目錄會標記出受影響的地方,并給出 “陳舊” 和 “新增” 的標記進行凸顯,從而提示你去翻譯或者洗掉它,

4.檔案 (Documentation)

  • 新的檔案卡片樣式

  • 檔案小助手

選擇小助手,然后選擇檔案預覽,

左邊是代碼,右邊可以看到對應的檔案,你可以實時編輯和預覽,這看起來有點像 MD,

5.新增 Swift 宏 (Swift macros)

系統部分框架已經實作了宏,如 Swift standard library、foundation、 以及一個新的 Swift data framework.

  • 創建宏包 (macro package)

使用快捷鍵 Command-Shift-A, 然后在彈出的輸入框中輸入 New package 可以快速創建一個帶有樣例代碼的宏包,你可以修改并實作它,

然后選擇 Swift Macro

以下是一個已經實作的宏包 EnumHelper,而CaseDetection 被實作為一個宏,宏的代碼和一般的 swfit 代碼沒什么大的區別,

以下是參考了宏包 EnumHelper 中的宏 @CaseDetection,它默認會隱藏了宏實作,

  • 展開宏和斷點除錯

當你需要時,你可以選擇展開宏,通過 Editor > Expand Macro 可以展開它,

展開后,還可以使用斷點,如下圖所示:

6.運行時預覽 (Previews)

  • 基于宏快速創建一個預覽實體

使用宏 #Preview 快速創建一個預覽實體, 在右側邊欄可以看到預覽效果,

以下繼續添加了一個帶名稱的預覽實體,當有多個預覽實體時,可以在右側邊欄的左上角切換tab 預覽對應實體,

  • AppKit 及UIKit 的預覽支持

為了兼容非SwiftUI 的代碼,可支持對舊工程的 Appkit 及 UIKit 添加預覽,

  • Widget 預覽支持

7.書簽功能 (Bookmark)

  • 添加書簽

你可能經常會遇到忘記此前關注或使用的一些重要代碼,在你想要找到之前的那些代碼時,你發現沒有辦法快速找到它,現在,通過添加可命名的書簽來標記他們,

添加完成后,書簽被展示在左邊欄的書簽tab下,

  • 書簽分組

你可以將多個書簽打包成一個組,作為有關聯性的代碼,

你也可以設定一個組名,便于搜索和理解,

  • 設定為代辦或完成

你可以將書簽作為任務來管理,比如你可以將書簽設定為完成狀態,它將會在左側顯示一個對勾,

8.代碼版本控制 (Source Control Navigation)

  • 版本控制面板

在新的面板中,所有的版本改動將集中在一個檔案中一起預覽,通過上下滑動可以看到多個檔案的修改內容,從而避免來回切換修改的檔案,

修改的預覽是可互動的,你可以通過操作來擴大預覽區域,從而查看當前修改處的更多背景關系,

除了預覽,你還可以直接在當前界面下繼續編輯,編輯完成后,可以提交 commit,然后push,

可通過左側的豎條修改狀態,

小結:代碼修改的預覽、編輯、提交、推送都在同一頁面下,減少不必要的界面切換,操作更便捷,

9.測驗 (Testing)

  • 測驗面板

Apple 對新的測驗面板使用Swift 進行了重寫,提速了45%,下圖案例列出了測驗計劃中的測驗用例,

  • 查看測驗結果

測驗結果的整體統計資訊看起來簡明扼要,主要包括:

Top Insights: 分析測驗結果,給出一些問題分析的建議,包括錯誤的原因、分布、最耗時的測驗用例,

Tests: 展示測驗用的統計資料,包例成功率,按機型、語言分類,以及錯誤串列,

  • 可互動的測驗用例回放

測驗用例的詳情資訊可以被查看,它展示了自動化的測驗步驟,以及標出發生錯誤的節點,你可以通過以上資訊來幫助找出問題的原因,

10.除錯 (Debugging)

  • 控制臺引入 OSLog 的支持

OSLog 可用來很好的捕獲運行時資訊,它可定義及收集結構化的日志資訊,使日志看起來井井有條,接下來讓我們看看如何使用它,

首先,使用 OSLog 撰寫一段日志:

默認情況下,日志的元資訊是被隱藏的,僅顯示開發者輸入的日志資訊,控制臺中對不同嚴重程度(如 info、 notice 、error 等)的日志,標記為不同的顏色以示區分,

你可以選擇性的添加展示日志的分類,包括子系統類別等元資訊,

還可以過濾不同嚴重程式的日志,

最后,我們可以通過操作某條日志,跳轉到日志代碼定義處,

11.分發 (Distributing)

  • 新增 TestFlight 包的備注資訊

你可以給 TestFlight 的包添加一些附屬的備注資訊,例如需要測驗哪些內容的說明,這些資訊會被展示給獲取 TF包的測驗者,

  • 查看框架簽名

XCode 引入了XCFrameWork 可以對簽名的框架進行驗簽,從而顯示其來源,并保障其完整性不被破壞,從而建立框架的信任機制,

  • 隱私清單

框架作者可以給自己的框架添加隱私清單,來說明隱私的使用情況和如何保護敏感資料,隱私清單會與框架捆綁一起簽名,因此,隱私清單是可被信任的,

來看看下圖所示的隱私清單:

你可以使用XCode可以生成和查看完整的隱私報告

  • TestFlight 僅分發到內部測驗

當修復問題時,你不希望測驗包被真實用戶看見,這時你可以通過勾選 “僅分發給內部測驗” 然后只分發給自己公司或團隊的測驗者 ,這樣可以防止被誤發給共測用戶,

以下是另外一個操作內部測驗的路徑

三、總結

XCode15 在開發效率和性能、安全提升上主要表現為以下概括的內容:

更簡潔: 主要體現在宏、檔案、和日志上,

更智能: 提升自動補全代碼能力、提升測驗分析能力,

更便捷: 包拆分下載、代碼補全、書簽、git集中管理,本地化集中管理,

更安全: 圖片資產符號化管理, 通過對框架和隱私的處理,使得代碼更加安全,

作者:京東零售 王晰源

來源:京東云開發者社區

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/555311.html

標籤:其他

上一篇:Android RIL&IMS原始碼分析

下一篇:返回列表

標籤雲
其他(161090) Python(38230) JavaScript(25498) Java(18240) C(15237) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7254) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4598) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) 功能(1967) HtmlCss(1967) Web開發(1951) C++(1940) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【從零開始擼一個App】Dagger2

    Dagger2是一個IOC框架,一般用于Android平臺,第一次接觸的朋友,一定會被搞得暈頭轉向。它延續了Java平臺Spring框架代碼碎片化,注解滿天飛的傳統。嘗試將各處代碼片段串聯起來,理清思緒,真不是件容易的事。更不用說還有各版本細微的差別。 與Spring不同的是,Spring是通過反射 ......

    uj5u.com 2020-09-10 06:57:59 more
  • Flutter Weekly Issue 66

    新聞 Flutter 季度調研結果分享 教程 Flutter+FaaS一體化任務編排的思考與設計 詳解Dart中如何通過注解生成代碼 GitHub 用對了嗎?Flutter 團隊分享如何管理大型開源專案 插件 flutter-bubble-tab-indicator A Flutter librar ......

    uj5u.com 2020-09-10 06:58:52 more
  • Proguard 常用規則

    介紹 Proguard 入口,如何查看輸出,如何使用 keep 設定入口以及使用實體,如何配置壓縮,混淆,校驗等規則。

    ......

    uj5u.com 2020-09-10 06:59:00 more
  • Android 開發技術周報 Issue#292

    新聞 Android即將獲得類AirDrop功能:可向附近設備快速分享檔案 谷歌為安卓檔案管理應用引入可安全隱藏資料的Safe Folder功能 Android TV新主界面將顯示電影、電視節目和應用推薦內容 泄露的Android檔案暗示了傳說中的谷歌Pixel 5a與折疊屏新機 谷歌發布Andro ......

    uj5u.com 2020-09-10 07:00:37 more
  • AutoFitTextureView Error inflating class

    報錯: Binary XML file line #0: Binary XML file line #0: Error inflating class xxx.AutoFitTextureView 解決: <com.example.testy2.AutoFitTextureView android: ......

    uj5u.com 2020-09-10 07:00:41 more
  • 根據Uri,Cursor沒有獲取到對應的屬性

    Android: 背景:呼叫攝像頭,拍攝視頻,指定保存的地址,但是回傳的Cursor檔案,只有名稱和大小的屬性,沒有其他諸如時長,連ID屬性都沒有 使用 cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATIO ......

    uj5u.com 2020-09-10 07:00:44 more
  • Android連載29-持久化技術

    一、持久化技術 我們平時所使用的APP產生的資料,在記憶體中都是瞬時的,會隨著斷電、關機等丟失資料,因此android系統采用了持久化技術,用于存盤這些“瞬時”資料 持久化技術包括:檔案存盤、SharedPreference存盤以及資料庫存盤,還有更復雜的SD卡記憶體儲。 二、檔案存盤 最基本存盤方式, ......

    uj5u.com 2020-09-10 07:00:47 more
  • Android Camera2Video整合到自己專案里

    背景: Android專案里呼叫攝像頭拍攝視頻,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后來因專案需要,改成了camera2 1.Camera2Video 官方demo有點問題,下載后,不能直接整合到專案 問題1.多次拍攝視頻崩潰 問題2.雙擊record按鈕, ......

    uj5u.com 2020-09-10 07:00:50 more
  • Android 開發技術周報 Issue#293

    新聞 谷歌為Android TV開發者提供多種新功能 Android 11將自動填表功能整合到鍵盤輸入建議中 谷歌宣布Android Auto即將支持更多的導航和數字停車應用 谷歌Pixel 5只有XL版本 搭載驍龍765G且將比Pixel 4更便宜 [圖]Wear OS將迎來重磅更新:應用啟動時間 ......

    uj5u.com 2020-09-10 07:01:38 more
  • 海豚星空掃碼投屏 Android 接收端 SDK 集成 六步驟

    掃碼投屏,開放網路,獨占設備,不需要額外下載軟體,微信掃碼,發現設備。支持標準DLNA協議,支持倍速播放。視頻,音頻,圖片投屏。好點意思。還支持自定義基于 DLNA 擴展的操作動作。好像要收費,沒體驗。 這里簡單記錄一下集成程序。 一 跟目錄的build.gradle添加私有mevan倉庫 mave ......

    uj5u.com 2020-09-10 07:01:43 more
最新发布
  • WWDC2023 Session系列:探索XCode15新特性

    ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/44a0e0fd567c4421bc94be83e84f6dce~tplv-k3u1fbpfcp-zoom-1.image) ## 一、版本說明 XCode 15 beta 發布于 2023 ......

    uj5u.com 2023-06-16 08:30:11 more
  • Android RIL&IMS原始碼分析

    # 一、需求 1、了解IMS相關知識體系 2、RILD 與 RILJ、IMS回呼訊息的機制 # 二、相關概念 ## 2.1 IMS IMS全稱是IP Multimedia Subsystem,中文意義為IP多媒體子系統。IMS是一種基于IP基礎結構,能夠融合資料、話音和移動等網路技術的系統。 **I ......

    uj5u.com 2023-06-16 08:29:53 more
  • WWDC2023 Session系列:探索XCode15新特性

    ![](https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/44a0e0fd567c4421bc94be83e84f6dce~tplv-k3u1fbpfcp-zoom-1.image) ## 一、版本說明 XCode 15 beta 發布于 2023 ......

    uj5u.com 2023-06-16 08:29:31 more
  • 推送服務接入指導(HarmonyOS篇)

    訊息推送作為App運營日常使用的用戶促活和召回手段,是與用戶建立持續互動和連接的良好方式。[推送服務](https://developer.huawei.com/consumer/cn/hms/huawei-pushkit?ha_source=hms1)(Push Kit)是華為提供的訊息推送平臺, ......

    uj5u.com 2023-06-16 08:29:18 more
  • Kotlin協程-那些理不清亂不明的關系

    > Kotlin的協程自推出以來,受到了越來越多Android開發者的追捧。另一方面由于它龐大的API,也將相當一部分開發者拒之門外。本篇試圖從協程的幾個重要概念入手,在復雜API中還原出它本來的面目,以全新的角度帶讀者走進Kotlin協程世界。 ### 什么是協程 在很多有關協程的文章中,描述協程 ......

    uj5u.com 2023-06-16 08:29:14 more
  • 社交直播語聊場景解決方案(一)商業化探索

    在過去幾年的直播行業創業風口期中,直播的用戶關注度瘋狂增長,但用戶質量卻參差不齊。隨著用戶新鮮感一過,流失率變得相當嚴重,各大平臺都在竭盡全力防御。然而,留住“湊熱鬧”的非直播受眾用戶并不是最關鍵的問題,而是要找到適合真實直播受眾用戶的商業化道路,才能保證行業的穩定繁榮。因此,我們需要探索有效的商業... ......

    uj5u.com 2023-06-16 08:29:10 more
  • Android RIL&IMS原始碼分析

    # 一、需求 1、了解IMS相關知識體系 2、RILD 與 RILJ、IMS回呼訊息的機制 # 二、相關概念 ## 2.1 IMS IMS全稱是IP Multimedia Subsystem,中文意義為IP多媒體子系統。IMS是一種基于IP基礎結構,能夠融合資料、話音和移動等網路技術的系統。 **I ......

    uj5u.com 2023-06-16 08:28:52 more
  • 還在為618電商推送方案煩惱?我們幫你做好了!

    618是每年重要的電商大促活動,熱度高流量大,是電商App吸引新用戶,提高用戶轉化率(購買率)的最好時機。對電商App運營來說,訊息推送是不可忽略的流量來源之一,適當的訊息推送可以召回用戶,提高用戶復購率。如何利用訊息推送功能在618電商節幫助App獲取流量并提高轉化率是運營需要關注的問題。 在回答 ......

    uj5u.com 2023-06-15 08:45:16 more
  • 還在為618電商推送方案煩惱?我們幫你做好了!

    618是每年重要的電商大促活動,熱度高流量大,是電商App吸引新用戶,提高用戶轉化率(購買率)的最好時機。對電商App運營來說,訊息推送是不可忽略的流量來源之一,適當的訊息推送可以召回用戶,提高用戶復購率。如何利用訊息推送功能在618電商節幫助App獲取流量并提高轉化率是運營需要關注的問題。 在回答 ......

    uj5u.com 2023-06-15 08:43:32 more
  • 沉思篇-剖析Jetpack的ViewModel

    > ViewModel做為架構組件的三元老之一,是實作MVVM的有力武器。 ### ViewModel的設計目標 ViewModel的基本功能就是管理UI的資料。其實,從職責上來說,這又是對Activity和Fragment的一次功能拆分。以前存盤在它們內部的資料,需要它們自己處理創建,更新,存盤, ......

    uj5u.com 2023-06-14 10:17:31 more