Xcode 12 Beta 新特性概览



Xcode 一年一度的大版本升级跟着 WWDC 一起来了。Xcode 12 增加了许多新特性,其中很多与各个新系统的新版本相关。当然,由于是 Beta 版本,所以问题也不少,我们这里只将 Xcode 12 的新特性整理出来,完整的文档可以查看 Xcode 12 Beta Release Notes 。

通用

• 现在,可以在自己的标签中打开文档,从而可以轻松地在文件之间快速切换,同时保持Xcode的其余配置。按住Option键单击或双击以在选项卡中打开文档。打开第二个文档时,将显示选项卡栏,或者选择 View  -> Always Show Tab Bar 。

• Xcode增加了对预览小部件,App Clip 和 Swift 包中的内容的支持。为了在设备上进行更无缝的实时预览,Xcode 集成了适用于 iOS 14 和 iPadOS 14 的新 Xcode Previews 应用。

• 新的 LibraryContentProvider 协议能够在Xcode的库中显示自定义视图和修饰符。

• 将iPad应用程序引入macOS时,现在可以使用 Optimize Interface for Mac 目标设置来使用本机macOS控件和Mac分辨率。

• 代码补全具有一个新的,集中的用户界面,使查找补全更加容易。Xcode 12 中的 Completion 也更准确,速度最高可提高12倍。

• 对于 WWDC Lab ,请单击 Help -> Mirror Screen Device(WWDC) 以将物理设备的屏幕镜像到Mac。使用此菜单项可通过 Webex 共享已连接设备的内容。

Apple Clang Compiler

• Clang 现在会在 NSLocalizedString  宏中指定的格式字符串不正确时给出警告。

资产目录

• 添加了对可缩放矢量图形(SVG)图像资产的支持。当部署目标是 macOS 10.15+,iOS 13+ 以及 iPadOS 13+ 时,将保留其矢量表示。

构建系统

• 现在可以使用 momc 工具在命令行上调用 CoreData 代码生成。

Create ML

• Training Control 可帮助您在训练过程中探索模型并与之互动。可以暂停,保存,恢复和扩展训练过程。此功能需要macOS 11+。

• 新的 Style Transfer 模板可让您训练深度神经网络,以实时样式化照片和视频。此模板需要macOS 11+。

• 通过新的 Action Classification 模板,您可以训练神经网络对视频片段中单个人的动作进行分类。此模板需要macOS 11+。

• 当训练数据有限时, Object Detection 模板的新 Transfer Learning 选项有助于提高模型的准确性。此功能需要macOS 11+。

• Word Tagger 模板的新 Transfer Learning 选项使用动态词嵌入,可在训练数据有限时帮助提高模型的准确性。此功能需要macOS 11+。

调试

• 当流程在断点处暂停时,Xcode将特定断点位置的点击计数显示为编辑器中断点注释的一部分。例如 Breadpoint 2.1 (7) ,其中7表示位置 2.1 被命中 7 次。

• 当进程在调试器下崩溃时,Xcode在控制台中打印崩溃消息。这些消息类似于 CrashReporter 中显示的消息。

• 通过将断点动作拖放到 Breakpoint Editor 中的其他位置来重新排序断点动作。

• 新的 Enable Breakpoint at Current Line 和 Disable Breakpoint at Current Line 菜单项使您可以在代码中切换现有的断点。此外,您可以将键盘快捷键绑定到该菜单项以快速切换断点。

• 现在,您可以命名一个断点,并从另一个断点的操作中按名称进行引用。例如,要启用以前禁用的名为“ MyBreakpoint”的断点,请在操作的 Debugger Cmomand 域中键入 break enable MyBreakpoint 。

• 在调试器中暂停时,跳出块会返回到在带有调试符号的帧中。如果要返回到汇编代码,请在单击 Step Over 或 Step Out 控件时按住控制键。

• 除了在编辑器中向您显示暂停的行外,Xcode还指示该进程被暂停的列。这有助于了解何时 step in ,分析崩溃报告以及使自己处于具有多个闭包的代码中。

• 现在,您可以为LLDB初始化文件指定要在“运行和测试”操作中使用的路径。在方案的“运行”或“测试”操作的“信息”标签中配置此路径。该路径可以包含一个构建设置宏,例如$ {SRCROOT},因此该文件可以是项目的一部分。(38677796)(FB5425738)

• Xcode调试器注释将高亮显示源代码,并且具有更高的不透明度,以提高在多种 Xcode 主题中的可见性。

• 视图调试器将识别运行时问题,并提供优化机会,以提高UI的效率和响应能力。调试应用程序的视图层次结构时,建议显示在调试导航器中。

• 要调试 Widget Extension ,请运行扩展的方案。通过在小部件扩展方案的 Arguments 窗格中设置环境变量,您可以配置调试会话的选项。小部件支持一个或多个系列或大小。要选择调试时要使用的族,请将 _XCWidgetFamily 环境变量设置为 small , medium 或 large 。如果扩展程序使用 WidgetBundle 支持多个窗口小部件,则可以通过设置 _XCWidgetKind 环境变量以匹配窗口小部件配置的 kind 属性来选择要调试的窗口小部件。在macOS上,您可以通过将 _XCWidgetDefaultView 环境变量设置为 timeline , snapshot , placeholder 或 info 来指定 WidgetKit 模拟器中显示的默认视图。

• 视图调试器现在支持保存和重新打开视图层次结构快照。使用调试栏中的 Debug View Hierarchy 按钮捕获视图层次结构后,可以选择 File -> Export View Hierarchy 将其另存为 .viewhierarchy 文件。您可以在 Xcode 中重新打开保存的 .viewhierarchy ,以检查捕获的视图层次结构的状态。

• 在视图调试器中选择了 CALayer 后,对象检查器现在将在 Offscreen Flags 和 Group Flags  上显示说明性的工具提示。

• 如果已在 Breakpoint Navigator 中禁用了断点,则可以使用上下文菜单删除所有禁用的断点。

• 使用为 App Clip 创建的方案调试 App Clip 。在方案中,环境变量 _XCAppClipURL 可用于设置调试会话的 App Clip 体验URL。

• 现在,视图调试器会为 CALayer 的性能 Optimization Opportunities 生成运行时问题。选择 Editor -> Show Layers 以在视图调试器中查看 CALayers 。选择 Editor -> Show Optimization Opportunities 以显示或隐藏性能运行时问题。

• Debug -> Attach to Process and Debug -> Detach  现在位于菜单的中间,更靠近其余的调试菜单项。

• Xcode捕获的视图层次结构现在可以导出到 .viewhierarchy 文件。

• ClockKit 框架会在 Xcode 中生成 Runtime Issues ,以帮助您分析运行时错误。

设备

• 现在, Devices and Simulators 窗口中的 Add Device 工作表可调整大小。

• Devices and Simulators 窗口允许在导航器中选择多个设备,因此可以将它们取消配对。这便于删除不再使用的设备的旧记录。

文档查看器

• Developer Documentation 窗口具有一个新的“特色页面”,其中包含Apple最新开发人员文档的概述。 

Instruments

• 现在,您可以使用 xctrace 命令从现有 Instruments .trace 文件中导出 Analysis Core Tables 。有关更多详细信息,请参见xctrace手册页。

• 现在,当存在dSYM时,Instruments 支持在调用树和事件回溯中更好地扩展内联函数。

• Instruments 现在将适用的CPU注释为 Efficient 或 Performance 。选择一个CPU将显示相关的详细信息,包括数据受该CPU约束的调用树。

• Instruments 现在可以从 .logarchive 文件导入数据。Instruments 使用包含 os_signpost 和 os_log 工具的新日志记录模板导入这些文件。要自定义在导入过程中使用的模板,请使用 File  > Import To Template… 

• 现在,可以使用 --attach 标志通过名称将 xctrace 命令附加到现有进程。

• 现在, File Activity 模板除了提供 Disk Reads 和 Disk Writes 的单个详细信息视图外,还提供了逻辑读取和写入的汇总统计信息。

• System Trace 模板在新记录和导入文件上的性能明显更高。

• 由于优化了 .trace 符号存储,现在具有大量符号记录的文件小了80-90%。

• Instruments 包括一个新的 Animation Hitches 模板,用于检测滚动和动画问题,以帮助您可视化和研究应用程序的图形管道。

• 现在,在轨迹视图中双击事件将切换到一个详细视图,该视图在检查的时候显示基础数据,以便您进一步调查。

Interface Builder

• 添加了对macOS 11中引入的 NSView 上新的 safeAreaLayoutGuide 的支持。

• 为 Interface Builder 画布引入了一个新的 minimap。您可以使用 Editor  > Canvas  > Minimap  和隐藏小地图。将小地图拖到画布的任何角落。您也可以在小地图中双击或命令单击以聚焦于特定场景。

• 现在, Find and Replace 在属性字符串文字中包含匹配项。

• Interface Builder 现在为NSDatePicker提供了 Current Date 选项。

• 现在,默认情况下,当项目彼此之间的距离为标准距离时,会创建标准间距约束。

• 在macOS 11中添加了对 SF Symbols 的支持

• 添加了对 UIButton.ButtonType.close 的支持。

• 在macOS 11中添加了对NSTextView和NSTextField新内容类型属性的支持。

• 在macOS 11中添加了对新的 toolbarStyle 的支持。

• 在macOS 11中添加了对新 subtitle 属性的支持。

• 在macOS 11中添加了对新 NSSearchToolbarItem 的支持。

• 添加了对在macOS 11中选择文本样式的支持。

• 添加了对具有 Automatic , Full Width , Inset , 和 Source List 选项的新 NSTableViewStyle 的支持。

• 添加了对新 NSView Layout Margins Guide 的支持。

• Objects 库包含一个带有边栏对象的新 Window Controller ,该对象由窗口控制器和拆分视图控制器组成,这些控制器被配置为提供工具栏,边栏和具有安全区域布局指南的全尺寸内容视图。

• 现在可以编辑iOS的 SF Symbols 的渲染模式和符号比例属性。在图像选择器中选择 SF Symbol 后,其他属性将在图像名称下方展开。

Linking

• 链接器现在支持 @filename 响应文件。文件的内容代替文件名被替换到参数列表中。通常通过已经支持响应文件的 Clang 调用链接器。要让链接器解析响应文件而不是 Clang,请使用 -Wl, @filename 。

• 当部署目标是iOS 14+时,链接器现在将 __TEXT 中的 Objective-C 方法列表转换为新的,较小的只读相对方法列表。这些二进制文件不适用于旧版本的 iOS 或 iPadOS 。

• 现在,如果您与 dylib 链接但未使用任何符号,则链接器将给出警告。如果您真的想这样做,则可以使用 -Wl, -warn_unused_dylibs 禁止所有此类警告,或者根据需要使用 -needed_framework Foo 而不是 -framework Foo 分别标记未使用的框架。例如,在 Other Linker Flags 中,添加 -Wl,-needed_framework,Foo 。

Metal

• Metal Debugger 中新的 Summary Page 概述了捕获的命令缓冲区,性能指标和内存使用情况。Xcode分析命令,并提供描述您可能要调查的潜在问题的见解列表。在摘要屏幕上,您可以导航到有关每个主题区域的更多详细信息。

• 在具有A11+ GPU的设备上捕获数据时, Metal System Trace 会跟踪各个着色器的开始和结束时间,从而提供有关GPU如何执行代码的更详尽的见解。

• 在 Instruments 中,除了iOS, GPU Counters 现在还可用于 macOS。使用 GPU Counters 可获取有关GPU如何运行着色器代码的更多信息,例如着色器代码是未充分利用GPU还是在GPU的特定部分出现瓶颈。

• Shader Validation 可检测常见的着色器错误。调试应用程序时,请打开 Shader Validation ,以查找非法的内存访问和其他本来很难调试的问题。

• Metal Debugger 中的 GPU Validation 视图具有新的用户界面,可以更轻松地过滤和分类GPU计数器数据。创建自己的计数器集,以查看诊断应用性能所需的确切数据。

Organizer

• Xcode Organizer 中的 Metrics Charts 现在是交互式的,允许开发人员比较和对比与他们的应用程序的不同版本关联的指标。

• Xcode Organizer 现在显示滚动指标。使用这些指标可以帮助您识别在滚动应用程序时遇到的可察觉的动画延迟。要查看 Scroll Hitch 条形图,请单击 Metrics Organizer 窗口中的 Scrolling 部分。

• Xcode Organizer 现在提供 Disk Writes 诊断报告。使用这些报告可以优化应用程序的磁盘写入性能。要查看报告,请单击管理器 Reports 部分中的 Disk Writes 项。

• 现在, Xcode Organizer 中的 Metrics 包括来自应用程序版本的数据,这些数据在字段中的使用受到限制。未达到前一年使用量阈值的应用程序版本会在版本号旁边标记一个计量器图标,并显示错误幅度。随着客户使用率的增加,误差幅度会减小,直到误差幅度足够低以至于可以从UI中将其忽略。

Playground

• Xcode Playgrounds 现在可以导入和使用Swift包和框架。选中 Playground 的文件检查器中的 Build Active Scheme  复选框,并确保活动方案可以构建程序包或框架目标。

• Xcode 的 Report Navigator 现在包括Playground构建日志。

• Xcode Playgrounds 现在可以构建活动方案的目标,并在文件检查器中启用 Build Active Scheme 后将其导入。

Preview

• 现在,Xcode在选择哪个应用程序呈现预览时会考虑已编辑的文件并打开预览。现在,与应用程序链接的框架中包含的文件可以在应用程序内部进行预览,从而拾取应用程序提供的所有资源和权利。

• 现在,每个预览都有用于启动 Live Preview , Preview on Device , Inspect Preview , 和 Duplicate Preview 的按钮。

• 画布具有添加修改器的全新集成体验。单击 Inspect Preview 按钮以查看所选视图的修改器建议,并搜索要应用的修改器。

• 现在,代码完成功能为SwiftUI视图和修饰符插入了可编译的完成功能和示例。

• Xcode支持预览小部件。有关如何配置窗口小部件预览的示例,请参见 WidgetPreviewContext 。

• 现在, Attributes 检查器提供了快速操作,用于编辑所选预览的名称,设备,布局,首选配色方案和可访问性文本大小。

• 如果框架通过选定方案中的应用程序链接,则 Xcode Previews 现在支持在设备上预览框架中的视图。

• Xcode现在通过在 watchOS complications 中添加 previewContext(_:) 修饰符来支持预览SwiftUI watchOS complications。

• Xcode 现在支持 App Clip 的预览。

• Xcode 现在可以与适用于iOS 14和iPadOS 14的新Xcode预览应用程序连接,以大大改善设备上的预览。Xcode Previews 应用程序无缝显示设备上 Xcode Previews 中的更改。首次使用设备上的预览时,Xcode预览应用会显示在设备的主屏幕上。与Xcode断开连接后,在设备上启动Xcode预览将恢复最后显示的预览。

• 现在,双击预览中的视图将选择相应的代码,并将键盘焦点移至源代码编辑器,从而可以快速编辑视图的内容。

• 画布的底部栏现在包含一个用于快速检查选定视图的按钮。

• 使用新的 LibraryContentProvider 协议将自定义SwiftUI视图和修饰符添加到Xcode库。

Project Editor

• Document Types , Exported Type Identifiers , 和 Imported Type Identifiers 窗格支持macOS 11中新的模板化文档图标。

Project Navigator

• 现在,Project 导航器,Source Control 导航器,Debug 导航器(用于 View Debugger 和 Memory Graph )和 Reports 导航器中的选择将跟踪活动编辑器的内容。

• Xcode的导航器现在尊重 System 的 sidebar icon size ,并允许独立于该设置进行更改。

• 现在,在 Find 导航器中的文件结果将使用显示其工作区位置的路径进行装饰。

• 现在,Project 导航器可以在键入过滤条件并按Enter时控制文本匹配样式(“contains”, “does not contain”, “begins with”, 或 “ends with”)。

• 现在, Open Quickly 匹配更具针对性和重点。 Open Quickly 更适合查找不连续的单词匹配。如您所愿,键入 resetDownload 将与 resetDocumentDownload 匹配。提高的准确性着眼于最佳匹配,而排除了最差的匹配。

• 跳转栏,scheme 菜单和运行目标选择器中的文本过滤得到了显着改善。它显示最佳匹配,而抑制最差匹配。过滤频繁出现的字符(例如“ init”)将仅显示init方法,而不是每个包含i,n,i,t的符号。

重构

• 现在, Editor  > Refactor  > Rename 将使用带有反引号转义的定义或引用来处理重命名符号。

模拟器

• Simulator可以全屏模式显示模拟的设备,也可以将其窗口平铺在Xcode旁边。

• Simulator现在支持watchOS 7的64位和32位处理器。要验证watchOS项目在Simulator中是否为64位,请确保将 ARCHS 设置为其默认值。

• Window > Stay On Top 可使设备窗口位于其他应用程序窗口的前面。

• 当设备窗口失去焦点时,它将暂停捕获从 Send Pointer to Device  和 Send Keyboard Input to Device 的输入事件,直到模拟器重新获得焦点。

• 模拟器默认为内置麦克风,除非您明确选择其他音频源。这样可以避免在蓝牙耳机上触发电话呼叫模式,这会在听音乐时降低音频质量。

• 模拟器支持为支持该功能的设备模拟 Nearby Interaction 。在屏幕上四处拖动设备窗口将更新两个设备之间的模拟距离。窗口在屏幕上的距离越远,报告的距离就越大。

代码编辑器

• 与Xcode 11.5相比,Swift函数体内的重复代码完成调用现在快了12倍。

StoreKit

Xcode 12支持使用新的本地StoreKit测试环境直接在 Simulator 或连接的设备中测试应用内购买。

在App Store Connect中进行设置之前,请在本地配置应用内购买信息以进行测试,而无需连接到App Store服务器。有关入门的更多信息,请参阅 Testing In-App Purchases in Xcode  和 Setting up StoreKit Testing in Xcode 。测试环境支持早期开发,单元测试和调试应用内购买,如 Testing at All Stages of Development with Xcode and Sandbox 中所述。

使用StoreKitTest框架创建和自动化测试以处理应用内购买交易。StoreKitTest支持对应用程序内购买方案的全面测试,包括订阅状态更改,订阅优惠,恢复购买,要求购买,购买中断等。

控制测试环境,包括清除购买历史记录,重置商品资格以及加快测试订阅的续订时间。

测试

• 现在,除 XCTestCase 子类的实例方法外,还可以在Objective-C中使用 XCTAssert 和相关的断言宏。

• Xcode现在捕获测试方法之外发生的测试失败的回溯,并在 Issue 导航器,源代码编辑器和测试报告中列出失败的调用堆栈框架。

• UI测试现在将隐式处理iOS上的横幅通知,这些横幅通知会在UI测试期间阻止导航栏。

• XCTest 现在提供 XCTIssue 类型,用于对测试失败和其他问题进行更丰富的建模,以及用于处理这些问题的关联API,包括XCTestCase上的一个新的 recordIssue: 方法,该方法取代了 recordFailureWithDescription:inFile:atLine:expected: 方法。

• 如果测试过程无法启动或加载测试包,例如,如果动态链接失败,或者某些其他系统故障阻止了测试的启动,则该错误将显示在测试报告中标题为 System Failures 的部分。

• 现在,测试报告UI中会显示通过,失败和跳过的测试数量。

• 在以启用测试计划的方案进行测试时,Xcode现在仅生成活动测试计划所引用的测试目标。如果方案引用了多个测试计划,则不会构建当前活动的测试计划未引用的测试目标。此项更改不会影响 xcodebuild :除非指定一个或多个 -testPlan <name> 参数,否则它将构建该方案的所有测试计划所引用的所有测试目标。

• XCTApplicationLaunchMetric 现在可以衡量应用程序启动到第一帧的情况。此新指标衡量应用程序启动并准备响应触摸事件所花费的时间。下面显示了一个使用 XCTApplicationLaunchMetric 来衡量应用程序响应时间的示例。

func testAppLaunchToResponsive() throws {
measure(metrics: [XCTApplicationLaunchMetric(waitUntilResponsive: true)]) {
app.launch()
}
}

• 现在,Xcode在计算在运行测试时要包含在 DYLD_FRAMEWORK_PATH 和 DYLD_LIBRARY_PATH 环境变量中的内置产品目录列表时,会排除静态库目标。

• 现在,性能XCTests在结合使用 XCTOSSignpostMetric 和动画 os_signpost 间隔时支持动画性能测试。返回的性能度量包括持续时间,三个与拴住相关(hitch-related)的指标和帧速率。要创建动画os_signpost间隔,请创建自定义间隔或使用提供的UIKit间隔之一。下面显示了一个性能测试示例,该测试测量滚动应用程序的动画性能。

func testScrollingAnimationPerformance() throws {
let table = app.tables.firstMatch
measure(metrics: [XCTOSSignpostMetric.scrollDecelerationMetric]) {
table.swipeUp(velocity: .fast)
}
}

• 如果测试过程在等待期望时停止,例如在 waitForExpectations(timeout:handler:) 或类似的XCTWaiter方法中,则Xcode捕获测试过程的转储并将其附加到测试报告中。以前,Xcode会终止测试过程,并在下一个测试中重新开始执行。要继续防止测试停滞,请在测试计划中启用 Test Timeouts 设置。

• Xcode 12扩展了Xcode 11.4中引入的重置受保护资源的授权状态的功能。可以使用iOS 14.0及更高版本中提供的新常量 XCUIProtectedResource.health 重置运行状况资源。

• 现在, XCUIElement  和 XCUICoordinate 允许在执行滑动和拖动交互时指定速度。

• 在UI测试期间拍摄的屏幕截图现在已编码为 HEIC 文件,而不是JPEG。这可以大大减少结果包的文件大小。

• XCTAssertEqual(_:_:accuracy:_:file:line:)  和 XCTAssertNotEqual(_:_:accuracy:_:file:line:) 现在接受任何数值,而不需要FloatingPoint值。这允许传递非浮点数字类型(例如Int)作为表达式值或精度参数。

• 现在,在启用了测试计划的方案中运行单个测试会跳过该测试计划中已禁用的配置。现在,按住Option键或按Control键并单击一次测试菱形,则表示已禁用活动测试计划中的所有配置,并且如果禁用了某些配置,则包括 Run in All Enabled Configurations 选项。

• 如果您在源代码编辑器中单击测试或测试类旁边的菱形,并且该测试不在活动方案或测试计划之外,则Xcode将显示一张表格,供您选择包含您所测试的特定方案或测试计划。

• 现在, Test Report 中的“失败”和“跳过”范围栏按钮将显示任何运行失败或被跳过的测试,而不是仅显示所有运行失败或被跳过的测试。

• 除了失败的测试和仅包含在活动方案中的测试,“测试导航器”现在还支持过滤跳过的测试。

• 现在,在启用测试计划的方案中运行测试时,Xcode会接受该方案的 Run 操作的 Option 选项卡中的 Debug XPC services 设置。

• 现在可以在 Test Plan Editor 中自定义 Default Execution Time Allowance  和 Maximum Execution Time Allowance 。这些设置在启用 Test Timeouts 时适用。

• 现在,当UI查询超时或目标应用没有立即变为空闲状态时,XCTest会在UI测试期间附加一个spindump诊断。


0