Xcode 13 正式版发布,来看看有什么新特性

知识小集

共 9491字,需浏览 19分钟

 ·

2021-09-25 23:10


Xcode 13 包括适用于 iOS 15、iPadOS 15、tvOS 15、watchOS 8 和 macOS Big Sur 11.3 的 SDK。Xcode 13 Release Candidate 支持 iOS 9 及更高版本、tvOS 9 及更高版本以及 watchOS 2 及更高版本的设备上调试。Xcode 13 需要运行 macOS 11.3 或更高版本的 Mac。


通用

  • Xcode 13 包括对 Swift 并发编程的原生支持、对 Xcode Cloud 持续集成和交付的支持、对 Git 拉取请求的集成支持、使用 DocC 在 Swift 框架中创建和查看文档的能力、Vim 键绑定支持、Swift 包集合;

  • 可以在命令行上使用 cktool 与 CloudKit 数据库架构和记录进行交互;

  • 可以在命令行上使用 TextureConverter 将纹理压缩为所有 Metal 压缩纹理格式;

  • 对于相同的内容,Xcode 13 的 XIP 存档现在大约小 15%。


Clang 编译器

  • 为了支持新的 Swift 并发模型,clang 现在可以在您多次调用完成处理程序或执行路径没有完成处理程序调用时发出警告;

  • 新的 -fobjc-constant-literals 标志允许您声明全局常量文字,并对其在 Objective-C 代码中支持的其他文字执行优化;

  • 可以在 Xcode 的构建设置中配置 C++20 和 GNU++20 C++;

  • 支持 C++20 似然属性 [[likely]] 和 [[unlikely]]


资产目录

  • 应用程序现在可以使用其资产目录中的 iOS 应用程序图标资产作为备用应用程序图标;

  • 允许选择适用于所有平台(包括 watchOS)的通用系统颜色;


构建系统

  • .xcconfig 文件现在支持使用 \ 跨多行拆分长列表;

HEADER_SEARCH_PATHS = $(SRCROOT)/include \
$(SRCROOT)/include/component1 \
$(SRCROOT)/include/component2
  • 当使用 -xcconfig 命令行标志和 XCODE_XCCONFIG_FILE 环境变量将 xcconfig 文件传递给 xcodebuild 时,Xcode 会使用 New Build System 语义解析它们,该语义也支持条件参数。

  • 通过将 SUPPORTED_PLATFORMS 构建设置设置为您支持的平台列表并将 ALLOW_TARGET_PLATFORM_SPECIALIZATION 设置为 YES,将框架配置为在单个构建操作中为多个平台构建;

  • 可以在构建阶段使用平台过滤器,并为所有支持的平台定位依赖项。

  • 当发生构建失败时,xcodebuild 现在会在构建日志末尾的摘要中显示每个失败命令的目标和项目名称;

  • 当脚本阶段或自定义构建规则声明不属于构建输入的一部分,且未声明为构建中任何其他任务的输出依赖项的输入依赖项时,构建系统会发出警告;

  • 构建选项表现在包括一个依赖顺序选项,它取代了并行构建选项。


Core Data

  • 使用 Core Data 模型编辑器的属性检查器中的 Allows Cloud Encryption 复选框来支持 CloudKit 加密记录字段功能。


Core ML

  • Xcode 的 Core ML 模型编辑器现在支持新的 Core ML 包格式 .mlpackage,以及对其元数据和描述的直接编辑。

  • 当部署目标是 macOS 12、iOS 15、tvOS 15 或 watchOS 8 时,Swift 为 Core ML 模型生成的接口现在包括通过强类型 MLShapedArray 属性访问多维输入和输出。


Create ML

  • 两个新模板:Hand Pose Classification 和 Hand Action Classification,可用于训练模型来解释手部姿势;

  • Sound Classification 模板的新 Audio Feature Print 选项能够以更高的准确度、更低的延迟和更小的模型尺寸更快地训练声音分类器模型。


调试

  • Xcode 的控制台现在支持通过 Editor > Wrap Lines 菜单项切换换行;

  • 要在一行上设置列断点,请按住 Command 键并单击表达式,然后从 Actions 菜单中选择 Set Column Breakpoint;

  • 如果调试器尚未解析断点,则断点的图标将更改为占位符字形;


文档

  • Xcode 可以根据 Swift 代码中的注释以及随附的文章生成文档;

  • 当编写项目文档时,Code completion 会提供建议。它在源文件中编写文档注释和在 .docc 目录中编写标记文件时提供建议。

  • Quick Help 现在使用 DocC 来呈现项目文档并在文档窗口中呈现指向项目文档的链接;


索引

  • Xcode 索引宏名称。它们现在出现在 Open Quickly 中。


Instruments

  • Instruments 中的调用树视图和扩展详细信息视图现在用“[inlined]”标记指示内联函数。

  • 通过详细视图导航栏更容易发现不同的视图。现在可以通过快捷方式(Command-1、Command-2 等)访问详细视图。

  • 在命令行上使用 xctrace export 从包含Allocations, Leaks, 和 VM Tracker instruments 的跟踪中导出表数据。

  • Instruments 扩展详细信息视图,现在在选择关联的详细信息视图行时显示 os_log 和 os_signpost 消息和回溯。

  • Run Information 视图现在出现在 Instruments 工具栏的活动视图区域中。

  • CPU Counters 模板现在更加可靠并且具有更好的性能;

  • leaks 命令具有三种新模式:-referenceTree-autoreleasePools和 -debug

  • Network 模板现在包含一个用于捕获和分析 HTTP 流量的新工具

  • Instruments 时间线视图现在使用基于 Metal 的渲染器以获得更流畅的体验,包括对时间线可用性的整体改进;

  • os_signpost 工具的记录设置现在支持在记录期间为 dynamicTracing 和 dynamicStackTracing 日志记录类别指定 os_signpost 子系统。

  • 新的 CPU Profiler 模板允许使用基于周期的性能监控中断 (PMI) 分析 CPU 工作负载

  • 为了支持在 macOS Monterey 和 iOS 15 中生成的新 JSON 格式的崩溃日志,Instruments 包含了一个新的 CrashSymbolicator.py 脚本。


Interface Builder

  • 您现在可以在大纲视图中手动重新排序 Storyboard 场景。

  • macOS 的 Storyboard 和 XIB 使用 UINIbEncoder 进行编译,以减少文件大小并提高运行时性能;

  • 现在可以使用键盘选择和导航大纲视图组,例如 Constraints;

  • Interface Builder 有一个重新设计的画布底部栏,带有用于更改设备和布局的弹出窗口,以及用于更改设备外观和方向的开关。

  • 添加了对 UIButton 和 UIBarButtonItem 上的 changesSelectionAsPrimaryAction 属性的支持;

  • 支持从对象库中创作和拖动 iOS Core Location Buttons

  • 添加了对用于静态表格视图中表格视图单元格的新内容配置样式的支持

  • UITabBar 和 UIToolbar 检查器现在支持配置 scrollEdgeAppearance

  • Interface Builder 现在支持 UIButton.menu

  • 编辑启动 storyboards 时,如果总图像资源大小超过运行时阈值限制,Xcode 会发出设计时警告。 

  • Watch Storyboards 的预览窗格现在显示画布样式的边。 

  • 现在可以在 Interface Builder 场景中预览以下辅助功能设置:动态类型、粗体文本、按钮形状、开/关标签、增加对比度和降低透明度。

  • 现在可以启用 UILabel 的 showsExpansionTextWhenTruncated 属性以在标签被截断时显示工具提示扩展。

  • 从文档检查器 > 模拟指标 > 场景大小自定义 Mac Catalyst 模拟场景大小

  • 通过属性检查器为使用 Mac Catalyst 构建的应用程序指定 UIControl 对象上的工具提示。 

  • Interface Builder 现在支持 UIBarButtonItem.menu

  • Interface Builder 现在支持新的 UITextContentType 属性,包括:shippingTrackingNumber、flightNumber 和 dateTime。

  • iOS、iPadOS、macOS 和 tvOS 场景支持两种新的 SF Symbol 渲染模式:分层和调色板。 

  • Interface Builder 现在支持使用 UIButtonConfiguration 样式创作按钮,包括普通、灰色、着色和填充。

  • UINavigationBar、UITabBar 和 UIToolbar 检查器现在支持配置 UIBarAppearance 实例。 

  • UIButton 和 UISlider 支持为使用 Mac Catalyst 构建的应用程序选择首选的行为风格。 

  • 在视图控制器的大小检查器中使用 Freeform 模拟度量的 Storyboard 场景现在可以直接在画布中使用调整大小旋钮调整大小。

  • NSButton 斜角类型在 macOS 12 中支持斜角颜色。

  • 在适用于 macOS 12 的应用程序中,您可以使用属性检查器中的 localize 属性在非系统 NSMenuItem 上配置本地化的等效键选项。

  • 在 iOS 15 的应用程序中,可以使用属性检查器中的 localize 属性在非系统 UI 菜单命令上配置本地化的等效键选项。


链接

  • dyld 共享缓存已拆分为多个文件

  • 使用 macOS 12 或 iOS 15 或更高版本的部署目标构建的所有程序和 dylib 现在都使用链式修复格式

  • 统一 dyld2 和 dyld3。现在所有平台上只有一个 dyld。

  • DriverKit 运行时现在有一个 dyld 共享缓存。

  • 如果 DYLD_PRINT_SEARCHING 环境变量在启动时设置为 1,则 dyld 会打印出它搜索的所有位置的路径,以找到要加载的 dylib。


本地化

  • Xcode 现在可以打开 Xcode 本地化目录 (.xcloc) 以查看和编辑字符串和其他本地化资产的翻译。

  • 新的 Use Compiler to Extract Swift Strings 构建设置调用 Swift 编译器从 Text()、String(localized:)、AttributedString(localized:) 初始值设定项、SwiftUI 的 LocalizedStringKey 和 Foundation 的 StringLocalizationKey 中准确地提取字符串插值和字符串文字。

  • 添加了对 genstrings 和本地化导入和导出的支持,以提取在 Objective-C 代码中使用新 NSLocalizedAttributedString 宏的字符串。 

  • 导出本地化时,多个本地化中的错误现在会聚合到一个警报对话框中。 

  • 在导出以进行本地化时,Xcode 会自动从 Info.plist 文件中提取 NSGKFriendListUsageDescription、NSLocationTemporaryUsageDescriptionDictionary 和 NSFallDetectionUsageDescription。


Metal

  • Metal Debugger 现在支持 Selective Shader Debugging,它允许您限制大型 Compute 着色器的调试范围。这导致更快的着色器调试器会话创建和迭代时间。

  • Metal Debugger 中的新捕获控件可让您精确控制来决定捕获 Metal 工作负载的哪个部分,以及捕获多个帧或范围的选项。

  • Metal Debugger 现在支持导入 metallibsym 文件,这使您可以在应用程序中进行 Metal 着色器调试和分析,而无需在您的 metallib 中嵌入着色器源。

  • Metal Debugger 中的 Apple GPU 可以使用 GPU 时间线。使用此时间线可视化和检查 Metal GPU 命令的并行执行以及一组精选的 GPU 计数器。

  • Metal 管道状态对象现在在 Metal Debugger 中表示为资源,包括一个全新的 Metal Pipeline States 和 Metal Libraries 查看器,以及 Metal Debugger 的 Memory Viewer 中的 Metal Pipeline 状态的 GPU 内存。

  • Instruments 的 Metal System Trace、Xcode 中的 Metal Debugger 以及全新的 Condition Inducer 中提供了新的一致 GPU 性能状态分析工作流。

  • 现在可以在 Metal System Trace 模板的记录选项中覆盖 GPU 性能状态。

  • Metal Debugger 现在支持 Metal 光线追踪以及新的高级加速结构查看器。

  • Metal 应用程序录制设置现在特定于正在配置的设备。


Organizer

  • Xcode 现在可以近乎实时地提供崩溃报告,数据保留时间更长。

  • Xcode 现在提供具有更多过滤功能和更多统计信息的崩溃报告。

  • 现在可以通过 URL 共享崩溃报告

  • Xcode 现在会显示您的崩溃问题的 TestFlight 反馈,以便更好地了解问题所在

  • 现在可以根据任何特定的历史应用程序版本、任何特定的历史应用程序版本、产品类型(如 App Clip、应用程序扩展或主应用程序)以及 TestFlight 或 App Store 的发布历史记录过滤 Energy 报告列表。

  • Xcode Organizer 中的新 Scroll Hitch Goals 使分析应用程序版本的滚动体验变得容易

  • 当您查看应用的指标时,您现在可以选择查看应用的 App Clip 的指标

  • Xcode Organizer 中新的 Terminations 指标显示前景和背景终止,按原因细分

  • Xcode Organizer 中的历史数据现在可以为每个指标图表显示最多 16 个应用程序的最新版本,提供应用程序在更大时间窗口内的性能趋势。

  • 现在,当您查看指标时,检查器会显示您应用的发布日期信息。

  • Xcode Organizer 中 Disk Write Reports 的 Qualitative Insights 在检查器中显示称为 Insights 的新信息

  • 现在 Xcode Organizer 中提供了 Smart Insights,可帮助您比以前更快地发现应用程序的功能和性能回归


预览

预览现在支持在预览视图时检查视图的辅助功能元素


Project Navigator

  • 当 Products 组位于默认位置时,项目导航器会隐藏它

  • Move Focus to Editor 命令现在解释 vim 方向移动键。

  • schema 编辑表不再有最大尺寸


签名和分发

  • xcodebuild 现在支持使用 App Store Connect API 密钥对 Apple Developer 网站进行身份验证。

  • Xcode 现在提供在您第一次将新应用上传到 App Store Connect 时创建应用记录的功能。

  • 将应用上传到 App Store Connect 时,Xcode 中的分发助手会检测您的应用是否具有有效的内部版本号 (CFBundleVersion)。

  • Xcode 分发助手中的自动签名现在支持云签名。

  • Xcode 13 支持在 Mac 上为 TestFlight 配置应用程序

  • 您现在可以在命令行上使用 notarytool 与 Apple 公证服务进行交互


Source Control

  • 现在,您可以在登录 GitHub 或 Bitbucket Server 帐户后,使用 Xcode 的源代码控制功能创建、审查和合并拉取请求。

  • 您现在可以从文档选项卡栏中的任何编辑器(或编辑器拆分)中启用代码审查,默认情况下它会在内嵌演示中显示比较。


源码编辑器

  • Xcode 13 引入了 Vim 键绑定,在源代码编辑器中模拟 vim 体验并结合现有的编辑器功能。 

  • 在首选项中启用 Vim 键绑定,使用文本编辑 > 编辑中的启用 Vim 键绑定选项。

  • 可以通过选择 Edit > Copy Location 以 <filename>:<line-number> 的形式将所选内容的当前位置复制到剪贴板。

  • 在 Swift 中将占位符扩展为闭包时,代码完成使用闭包的参数名称而不是 <#Type#>。 

  • Xcode 13 中的 Swift 语法高亮显示是即时且无闪烁的,无论是在文件之间进行编辑还是导航。 

  • 即使您的代码不完整或您的项目无法编译,Swift Jump to Definition 现在也能提供更具弹性的体验。

  • 从 Swift 类、协议或方法声明跳转到定义还可以轻松导航到整个工作区中的所有子类、扩展和符合协议的类型。

  • Xcode 13 包括重新设计的 Swift 代码完成功能,可最大限度地提高可靠性和性能,尤其是在项目源代码中存在结构和逻辑不一致的情况下。


Static Analyzer

  • 静态分析器现在警告带有副作用的断言、无限循环和更多 C++11 std::move 误用情况。 


StoreKit

  • Xcode 中的 StoreKit 测试支持对使用 StoreKit 新的现代基于 Swift 的 API 构建的应用内购买进行全面测试。


Swift Packages

  • 根包和基于分支的包依赖项现在可以在其目标设置中使用 unsafeFlags。

  • Swift 包现在可以声明 Mac Catalyst 的部署目标,并且现在可以在构建条件中将 Mac Catalyst 指定为平台。

  • 当包声明工具版本为 5.5 或更高版本时,macOS 的构建条件不再适用于 Mac Catalyst。 

  • Swift Packages 现在支持 DriverKit 作为平台。

  • 当您尝试导入本地尚不可用的模块时,Xcode 现在会建议您添加的集合中的包。

  • 现在可以在 Add Packages 表中添加精选的包集合。

  • 单元测试现在可以直接测试可执行目标。


Swift 重构

  • 新的重构有助于迁移到异步代码。“Convert Call to Async Alternative”可用于将完成处理程序作为最后一个参数的调用,并重构它们以使用新的异步语言功能,假设该函数的异步等效项已经存在。

  • 现在可以将新的 Add Async Wrapper 重构操作应用于具有完成处理程序的函数。


测试

  • Source Editor 和 Test Navigator 具有 Run Test 操作的两个新变体,它们无需构建即可运行测试选择。

  • 您现在可以使用 XCTPerformanceMeasurementPolarity 枚举自定义如何将性能测试的自定义指标的测量值与设置的基线进行比较。

  • XCTest 现在能够在受支持的 iOS 设备上的 UI 测试中合成指针交互。

  • Xcode 现在为在运行测试时崩溃的进程收集代码覆盖率数据。

  • 性能 XCTests 现在支持测量应用程序启动时的 CPU 使用率 (XCTCPUMetric)、磁盘写入 (XCTStorageMetric) 和内存使用率 (XCTMemoryMetric)。 

  • xcodebuild 有一个新选项 -enablePerformanceTestsDiagnostics YES,用于收集性能 XCTest 的诊断信息。

  • 现在在所有新创建的测试计划中默认启用测试超时。通过转换方案创建的测试计划需要手动启用测试超时以保留现有行为。

  • 用户界面测试现在支持在 macOS 中使用 swipeUp、swipeDown、swipeLeft 和 swipeRight 系列方法。

  • 性能测试现在支持在 macOS 中为动画 os_signpost 间隔使用 XCTOSSignpostMetric 时收集故障指标。

  • XCTest 现在支持测试重复,且有三种测试重复模式。

  • 新的透明屏幕覆盖显示自动化运行时的活动,并显示描述如何停止自动化的文本。

  • 在 macOS 中,或在具有密码的设备上使用自动化时,您必须从管理员帐户运行自动化,并且必须进行身份验证以授权自动化。

  • XCTest 现在支持从 App Tracking Transparency 框架重置受保护资源“用户跟踪”的授权状态。

  • 用 Swift 编写的测试方法可能会被标记为异步或异步抛出,以允许调用和等待来自异步 API 的结果,作为 Swift 并发语言功能的一部分。

  • XCTestCase 现在包含一个 addTeardownBlock 方法重载,其闭包参数是 async throws

  • xcodebuild 现在支持将某些环境变量传递给测试运行器进程。

  • XCTExpectFailure 函数现在包括用于自定义某些选项的 Swift 重载,而无需创建 XCTExpectedFailure.Options 实例

  • XCTest 现在能够在 watchOS UI 测试中合成 Digital Crown 旋转。

  • XCTest 现在包括 setUp 和 tearDown 实例方法的异步抛出重载

  • 测试现在可以从任何线程调用 XCTestCase.expectation(description:)——以及其他返回 XCTestExpectation 的 XCTestCase API。这消除了之前测试从主线程调用这些 API 的要求,并允许使用它们的现有测试采用异步,而无需 @MainActor。

浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

分享
举报