Xcode 14 新特性一览

知识小集

共 5606字,需浏览 12分钟

 · 2022-06-15

每年的 WWDC,除了发布最新的 iOS、iPadOS、watchOS、macOS 外,苹果同样会更新 Xcode。新版的 Xcode 带来了很有新特性,来适配各个新系统,同时提供更加便利的工具来提高我们的开发效率。还有一个比较重要的是,Xcode 14 初始包大小现在已经降低到 7G+,相比 Xcode 13 的 10G+,减少了 30%,当然,安装后还是挺大的,所以 128G 的 mac 电影还是不够用的。

通常 Xcode Release Note 都是长长的一篇,除了新特性,还有各种已知的问题、已解决的问题等各种信息。我们这里把一些重要的更新梳理出来,供开发者们参考。

通用

Xcode 14 支持单个 target 多平台,并有条件地包含特定平台的依赖项、代码、资源和构建设置。

Xcode 14 现在支持为 iPadOS 开发 DriverKit 驱动程序。

Xcode 14 包含一个新的 watchOS 应用程序默认模板,它将 WatchKit 应用程序和 WatchKit 应用程序扩展目标组合到一个单一的 Watch 应用程序目标中,从而简化了代码、资产和本地化管理。目前可以将单目标 watchOS 应用程序部署到 watchOS 7 及更高版本。

Apple Clang 编译器

在 Xcode 中创建的新 C++ 项目默认使用 C++20。 

资产目录

使用一个 1024x1024 的图像来简化应用程序图标,该图像会针对其目标自动调整大小。在资产目录中应用程序图标的属性检查器中选择单一大小选项。不过仍然可以使用“所有尺寸”选项覆盖单个尺寸。

现在可以将 Finder 中的复制图像直接粘贴到资产目录大纲中。

现在可以双击图像槽以显示打开的文件面板并选择替换资产。

可以为资产目录中的自定义符号指定默认呈现模式。将“渲染为”属性设置为自动、模板、多色或分层。然后系统使用符号的默认渲染模式,除非您明确覆盖它。

构建系统

Xcode 为构建日志提供了一个新的辅助编辑器,专注于并行性以帮助识别构建性能问题。此可视化将事件显示为彩色块网格,其中垂直轴表示并行度,水平轴表示时间。

Xcode 14 现在可以与它们的 Swift 目标依赖项并行编译目标。

Swift 驱动程序是编排 Swift 前端调用的组件,现在已集成到 Xcode 的构建系统中,允许对其他构建系统任务和显式调度的细粒度依赖。

在 Build Phases 窗格中,现在可以在多选表视图中批量编辑文件。当编辑该表的平台过滤器列时,系统会将更改应用到选择中的所有文件。

仅 Swift 的框架和动态库目标可以使用 EAGER_LINKING 构建设置选择新的构建系统优化。启用此功能后,Xcode 会在 Swift 编译期间发出额外的工件,这允许 Xcode 更早地取消阻止下游目标的链接,从而增加构建中的并行性。

调试

内存图调试器现在显示内存图中的所有传入和传出引用。可以调整新弹出框中的可见节点集。

LLDB 现在在 Xcode 和命令行中显示进度更新以进行长时间运行的操作。

现在可以使用 xcrun crashlog 调用 LLDB 的崩溃日志脚本。 

调试应用程序时,线程性能检查器会在问题导航器和源代码编辑器中显示运行时性能问题。在应用程序目标的运行方案中选中线程性能检查器复选框以启用此功能。

Xcode 现在在 Report navigator 中显示一个新的启动日志。该日志指示 Xcode 安装、启动和调试所采取的操作。

文档

Xcode 中的 Swift-DocC 现在支持为 Objective-C 和 C API 构建文档。

Xcode 14 生成的 Swift-DocC 文档网站包括一个新的导航侧边栏,用于浏览和过滤文档。

默认情况下,Xcode 14 生成的 Swift-DocC 文档现在与大多数托管托管服务兼容,包括 GitHub Pages。

Instruments

现在,在时间过滤器处于活动状态时,在时间间隔上运行的聚合函数可以更准确地计算其结果,仅基于与当前时间过滤器相交的总间隔部分。

详细信息过滤器现在允许您在查看列表视图时将过滤器应用于特定列。您可以通过在显示的值上使用上下文菜单或通过输入标记然后选择标记类型来添加这些类型的过滤器。

Instruments 现在包括一个新的 Swift Concurrency 模板,用于跟踪 Swift 并发原语的使用和行为。该模板包含:

  • 一种新的 Swift Tasks 工具,可显示随时间变化的任务状态、总结任务状态、提供详细的任务叙述、说明结构化并发关系并构建任务创建调用堆栈的调用树。

  • 一种新的 Swift Actors 工具,用于跨参与者跟踪任务行为,显示每个参与者的任务队列,并帮助诊断参与者隔离代码和争用的问题。

这些工具需要 Swift 并发运行时中的工具,该运行时首先在 macOS 13、iOS 16、tvOS 16 和 watchOS 9 或更高版本中可用。

Instruments 有一个新的 Hang Tracing 工具,可以显示应用程序的主线程何时无法长时间处理传入事件,从而可能导致 UI 挂起。此外,Time Profiler 和 CPU Profiler 仪器也显示潜在的挂起。

Instruments 中提供了一个新的 Core ML 模板。此模板包括新的 Core ML 和神经引擎仪器以及 GPU 和时间分析器工具。使用此模板可帮助分析 Core ML 的使用情况并了解您的模型如何在设备上运行。结合来自 Core ML、神经引擎和 GPU 仪器的信息可以帮助跟踪在加速硬件上执行的操作。每个事件、模型和子模型都有汇总的时序数据。

Instruments 有一个新的 Runloop 工具,它显示了 runloop 的使用和单独的迭代,并在视觉上区分了进程中所有 runloop 的 runloop 睡眠和繁忙间隔。

Interface Builder

UISplitViewController 现在支持使用 Mac Catalyst 构建的 Mac 应用程序中的侧边栏。要启用侧边栏,请在拆分视图控制器的属性检查器中设置主要样式。

Interface Builder 现在可以异步更新 scene。

WKWebView 上会出现一个新复选框,以启用标准查找和替换 UI。

现在可以通过控件的图像检查器选择符号,使用 NSButton 和 NSImageView 编辑 SF 符号的默认配置(包括字体、比例和粗细)。

支持 iOS 的 UIPasteControl 以允许通过单击粘贴内容而无需粘贴通知或警报。该控件可以针对任何符合 UIPasteConfigurationSupporting 的对象(例如,UIResponder)来接收粘贴的内容。

通过符号库选项卡访问和搜索 SF 符号。打开库(Xcode > View > Show Library)并单击 Symbols 选项卡。可以将符号拖到源代码编辑器中。

本地化

现在可以导出本地 Swift 包进行本地化。Xcode 为项目或工作区中包含的所有项目和 Swift 包生成单个本地化目录。还可以使用 xcodebuild -importLocalizations 和 xcodebuild -exportLocalizations 来导出或导入 Swift 包。

Organizer

Xcode Organizer 中的挂起报告提供有关应用程序挂起的诊断报告,以帮助提高响应能力。为单个应用程序版本生成报告并按严重性排序。它们包括可用于调试的主线程上发生的挂起的示例日志,以及报告中受影响设备和 iOS 版本的统计信息。

预览

Xcode Previews 现在可以在物理设备上运行,而无需包含应用程序,从而可以轻松地在设备上预览框架和 Swift 包。Xcode 会自动为您的默认签名身份准备适当的签名应用程序来托管预览。

Xcode Previews 现在可以在决定使用哪个应用程序来托管预览时使用该方案的可运行文件。例如,在一个应用程序的完整版和 beta 版都共享一个框架的项目中,Xcode Previews 会根据方案中的选择自动选择要启动的应用程序进行预览。

Xcode 现在在其自己的专用页面上显示每个预览,其中包括允许您更改常用设置(如配色方案、方向或动态字体大小)而无需编写任何代码的新控件。

Xcode 预览现在默认是交互式的。

重构

添加了重构操作以添加显式 Codable 实现。

签署和分发

开发签名的 DriverKit 驱动程序现在支持自动签名。分发仍需要获得 Apple 的批准,并在 Apple Developer 网站上手动配置附加功能。

模拟器

模拟器现在支持在具有 Apple silicon 或 T2 处理器的 Mac 计算机上的 macOS 13 中运行时,iOS 16 中的远程通知。模拟器支持 Apple Push Notification Service Sandbox 环境。您的服务器可以通过连接到 APNS 沙箱 (api.sandbox.push.apple.com) 向在该模拟器中运行的应用程序发送远程通知。每个模拟器都会生成该模拟器和运行它的 Mac 硬件组合所特有的注册令牌。

设备注册令牌的长度可变。模拟器中的令牌可能大于当前的物理设备令牌。不要为这些令牌硬编码任何特定的长度或格式。

simctl 现在支持控制模拟位置,包括运行场景和在航点列表之间进行插值。

除了现有的运行时捆绑格式外,模拟器现在还支持运行时磁盘映像。磁盘映像被添加到受系统完整性保护保护的系统管理存储位置,并安装在系统管理的安装点。

源代码编辑器

现在,当滚动浏览文档时,Xcode 将代码结构的元素固定到编辑器的顶部。

Swift 文件中的错误现在为添加缺失的导入提供了修复。

添加了对 Swift 正则表达式的语法高亮和编辑支持。您现在可以使用 Editor > Refactoring > Convert to Regex Builder 将正则表达式文字转换为其等效的正则表达式构建器。在正则表达式文字内移动插入点时,正则表达式的封闭子结构会突出显示。(82540073)

Xcode 现在提供了一个文件模板,用于为您的 iOS 应用程序选择触控替代方案。您可以使用触控替代方法在带有 Apple 芯片的 Mac 上与您的应用程序交互 - 例如,按住 Option 键可将触控板用作虚拟触摸屏。要启用,请选择 File > New File > iOS > Resource > Touch Alternatives,然后配置新添加的 com.apple.uikit.inputalternatives.plist 文件来为您的应用选择触控替代品。(84271952)

Swift 中的代码完成现在提供了成员初始化程序片段。

Swift 中的代码完成现在提供了 if case 语句的片段。

StoreKit

Xcode 现在能够将 App Store Connect 中的应用内购买产品同步到 StoreKit 配置文件中,以便在 Xcode 设置中更快地测试 StoreKit。还有一个更新的事务管理器,带有过滤和事务检查器。

Swift Packages

由于具有相同名称而发生冲突的模块现在可以通过别名来消除歧义。包清单引入了一个新参数“moduleAliases”;它允许用户为冲突的模块定义唯一的名称,并以新名称构建它们,而无需更改任何源代码。

现在可以在 Xcode 中使用 Swift Package 命令插件,方法是使用 File > Packages 菜单或 Xcode 文件导航器中的上下文菜单。包的依赖项提供的任何命令插件都可用。可以选择将命令应用到包的哪些目标,并且可以将自定义参数传递给插件。报告导航器显示运行命令的结果。如果命令指示它需要写入包的源文件,Xcode 会请求许可并让您在运行插件之前检查插件的源代码。

Xcode 现在为 Swift Package 插件提供了 XcodeProjectPlugin API,该 API 扩展了 Swift Package Manager 的 PackagePlugin API。使用这个 API,插件可以获得 Xcode 项目结构的简化描述。这让在 Xcode 中运行的适配插件可以在 Xcode 项目中使用这个 API。您仍然可以通过 Xcode 中的 Swift 包使用尚未适应支持 Xcode 项目的包。

测试

XCTAssertThrows() 和相关宏现在在捕获除 NSException 以外的抛出异常(包括 C++ 异常)时提供更丰富的诊断信息。

XCTest 包括一个新的 Swift-only 期望类型 XCTKeyPathExpectation,可以使用它代替 XCTKVOExpectation 来观察对 Swift 键路径的更改。

在活动方案或测试计划中启用了并行化的测试目标现在彼此并行执行。以前,每个目标都是串行执行的,每个目标中的测试类是并行执行的。现在,Xcode 并行执行目标和其中的类,更喜欢首先跨目标扇出。对于具有大量目标的套件,这可能会导致显着加速(结果因硬件和套件组成而异)。未启用并行化的测试目标继续相对于其他目标单独执行。

一旦测试完成并遇到错误或故障,XCTest 将捕获系统诊断。此行为可通过测试计划或 xcodebuild 命令行界面进行控制。


浏览 80
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报