Xcode 12 新特性盘点

746次阅读  |  发布于4年以前

随着苹果各大系统正式版的发布,Xcode 12 正式版也最终发布。Xcode 12 包含的 SDK 支持 iOS 14, iPadOS 14, tvOS 14, watchOS 7, 和 macOS Catalina 10.15.6。现在已经可以用 Xcode 12 打包上传 App 了,而且苹果要求最晚在明年 4 月份,要全部使用 Xcode 12 来打包。

整个 Xcode 12 Release Notes 的内容很多,总共包含了 20+ 项内容,每项或多或少包含了新特性、解决的问题、已知的问题和弃用项等内容,有耐心的读者可以慢慢研究。这里我们主要整理了一些新特性,没有包含全部的内容,仅供参考。

通用

• 文档可在所属的标签中打开,从而可以在文件之间快速切换,同时保持 Xcode 其余的配置不变 • Xcode 现在支持预览 widgets,App Clips 和 Swift 包中的内容,并安装了适用于 iOS 14 和 iPadOS 14 的新的 Xcode Previews 应用; • 新的 LibraryContentProvider 协议能够在 Xcode 的库中显示视图和修饰符; • 代码补全的用户界面更加突出重点,更容易查找,同时速度也提高了 5 倍

Apple Clang Compiler

• Clang 现在会对 NSLocalizedString 宏中不正确的格式化字符串给出警告; • std::is_scalar 对于 Block 类型的值为 true,这允许在一些新的地方使用 block,如 std::optional

资产目录

• 添加了对 SVG 的支持; • 显示复杂点位符图像所需要的像素大小; • 默认情况下,添加新颜色时会包含一个 Dark Appearance 变体。如果保持为空的话,Xcode 会为 Light Appearance 和 Dark Appearance 使用 Any Appearance 色值; • Mac Catalyst 资产变体更名为 Mac Scaled。在选择了 Scale Interface to Match iPad 时,Xcode 将在使用 Mac Catalyst 构建的目标中使用此资产。当选择 Optimize Interface for Mac 时,Xcode 将首选 Max 资产变体; • New Asset 菜单按平台组织资产类型;

构建系统

• 可以在命令行上使用 momc 从模型生成 Core Data 代码; • XCFrameworks 现在可以使用 -debug-symbols 标识在库中包含 .dSYM 和 .bcsymbolmap 调试符号文件;

Create ML

• Training Control 可辅助在训练过程中探索模型并与之交互,可暂停、保存、恢复和扩展训练过程; • 新的 Style Transfer 模板可以训练深度神经网络来实时样式化照片和视频; • 新的 Action Classification 模板可以训练神经网络以对视频片段中单个人的动作进行分类; • 当训练数据有限时,新的 Object Detection 模板的新 Transfer Learning 选项有助于提高模型的准确性; • Word Tagger 模板的新 Transfer Learning 选项使用动态词嵌入,可在训练数据有限时帮助提高模型的准确性。

调试

• 流程在断点处暂停时,断点位置的点击计数会显示为断点注释的一部分; • 进程在调试时崩溃时,Xcode 将会在控制台中打印崩溃消息,这些消息类似于 CrashReporter 中显示的信息; • 在 Breakpoint Editor 中拖动断点以重新排序; • Current Line -> Current Line and Disable Breakpoint 中的新的 Enable Breakpoint 菜单项可以在代码中切换已有的断点; • 可以命名一个断点,并在另一个断点的动作中通过名称来引用这个断点; • 要进入汇编,可以单击 Step Over 或 Step Out 时按住 control 键; • 除了在编辑器中显示暂停的行外,还会显示暂停所在的列; • 可以指定用于 Run 和 Test 操作中的 LLDB 初始化文件的路径; • Xcode 调试器注释将突出显示源代码,使其具有更高的不透明度,以提高在多个Xcode主题中的可见性; • 视图调试器可识别运行时问题,并提供优化机会以提高UI的效率和响应能力。当您调试应用程序的视图层次时,Debug 导航器会给出建议; • 要调试 Widget Extension,可运行扩展的方案。在小部件扩展方案的 Arguments 中设置环境变量,以配置调试会话。小部件支持一个或多个系列或大小; • 视图调试器现在支持保存和重新打开视图层次结构快照; • 在视图调试器中选择了 CALayer 后,Object 检查器现在将在 Offscreen Flags 和 Group Flags 上显示说明性的工具提示; • 如果已在 Breakpoint Navigator 中禁用了断点,则可以使用上下文菜单删除所有禁用的断点; • 使用为 App Clip 创建的方案调试 App Clip; • 视图调试器会为 CALayer 的性能优化机会生成运行时问题; • Xcode 捕获的视图层次结构现在可以导出到 .viewhierarchy 文件; • ClockKit 框架会在 Xcode 中生成运行时问题,以帮助您分析运行时错误;

设备

• Devices and Simulators 窗口的 Add Device 可调整大小; • Devices and Simulators 窗口允许在导航器中选择多个设备,因此可以将它们取消配对;

文档视图

• Developer Documentation 窗口有一个新的 Featured 页面,包含Apple最新开发人员文档的概述;

Instruments

• 您可以使用 xctrace 命令从现有 Instruments.trace 文件导出 Analysis Core 表; • 当存在 dSYM 时,Instruments 支持在调用树和事件回溯中更好地扩展内联函数; • Instruments 现在将适用的 CPU 注释为 Efficient 或 Performance。选择一个 CPU 将显示相关的详细信息,包括数据受该 CPU 限制的调用树; • Instruments 现在可以从 .logarchive 文件导入数据; • 可以使用 --attach 标志通过名称将 xctrace 命令附加到现有进程; • 现在,除了 Disk Reads 和 Disk Writes 的各个详细信息视图之外,File Activity 模板还提供了逻辑读取和写入的汇总统计信息; • System Trace 模板在新记录和导入文件上的性能明显更高; • 由于优化了 .trace 符号存储,现在具有大量符号记录的文件小了80-90%; • Instruments包括一个新的Animation Hitches模板,用于检测滚动和动画问题,以帮助您可视化和研究应用程序的图形管道; • 在轨迹视图中双击事件将切换到详细视图,该视图在检查的时间显示基础数据,以便您进一步调查;

Interface Builder

• 添加了对 macOS 11 中引入的 NSView 上新的 safeAreaLayoutGuide 的支持; • Interface Builder 的画布具有一个新的小地图; • 查找和替换现在在属性字符串文字中包括匹配项; • Interface Builder 现在为 NSDatePicker 提供了“当前日期”选项; • Interface Builder 现在为 iOS 14 中引入的 UISplitViewController 支持两列和三列样式; • 在,默认情况下,当项目彼此之间的距离为标准距离时,会创建标准间距约束; • 在 macOS 11 中添加了对 SF 符号的支持; • 在 macOS 11 中添加了对新的 isNavigational 工具栏项属性的支持; • 现在,您可以为 storyboard 和 .xib 文件编辑 SF 符号的 Render Mode 和 Symbol Scale。在图像选择器中选择 SF 符号时,图像名称下方会展开两个附加属性; • 添加了对带有自动,全宽,插入和源列表选项的新 NSTableViewStyle 的支持; • Objects 库包含一个带有边栏对象的新窗口控制器,该对象由一个窗口控制器和拆分视图控制器组成,这些控制器被配置为提供工具栏,边栏和具有安全区域布局指南的全尺寸内容视图。

链接

• 链接器现在支持 @filename 响应文件,文件的内容代替文件名被替换到参数列表中; • 现在,如果您与 dylib 链接但未使用任何符号,则链接器将报告警告;

Metal

• Metal Debugger 中新的 Summary Page 概述了捕获的命令缓冲区,性能指标和内存使用情况。Xcode 分析命令,并提供描述您可能要调查的潜在问题的见解列表; • 在 A11 或更高版本 GPU 的设备上捕获数据时,Metal System Trace 会跟踪各个着色器的开始和结束时间,从而提供有关 GPU 如何执行代码的更详尽的信息; • 在 Instruments 中,除了 iOS,GPU 计数器现在还可用于macOS。使用 GPU 计数器可获取有关 GPU 如何运行着色器代码的更多信息,例如着色器代码是未充分利用 GPU 还是在 GPU 的特定部分出现瓶颈; • 着色器验证可检测常见的着色器错误 • Metal Debugger 中的 GPU Counter 视图具有新的用户界面,可以更轻松地过滤和分类 GPU 计数器数据;

Organizer

• Xcode Organizer 中的 Metrics Charts 现在是交互式的,允许开发人员比较和对比与他们的应用程序的不同版本相关的指标; • Xcode Organizer 现在显示滚动提示指标。使用这些指标可以帮助您识别在滚动应用程序时遇到的可察觉的动画延迟; • Xcode Organizer 现在提供“磁盘写入”诊断报告。使用这些报告可以优化应用程序的磁盘写入性能; • 现在,Xcode Organizer 中的指标包括来自应用程序版本的数据,这些数据使用有一定限制;

Playgrounds

• Xcode 的 Report Navigator 现在包括 Playground 构建日志; • Xcode Playgrounds现在可以构建活动方案的目标,并在文件检查器中启用 Build Active Scheme 后将其导入; • Xcode Playgrounds 现在可以导入和使用 Swift 包和框架;

预览

• Xcode 现在可以在选择哪个应用程序呈现预览时考虑编辑过的文件并打开预览。现在,与应用程序链接的框架中包含的文件可以在应用程序内部进行预览,从而拾取应用程序提供的所有资源和权利; • 现在,每个预览都有用于启动 Live Preview, Preview on Device, Inspect Preview, and Duplicate Preview 的按钮; • 画布具有添加修改器的全新集成体验; • 现在,代码完成功能会为SwiftUI视图和修饰符插入一个可编译的完成内容和示例; • Xcode 支持预览小部件; • 现在,“属性”检查器提供了快速操作,可用于编辑所选预览的名称,设备,布局,首选配色方案和可访问性文本大小; • 如果框架通过选定方案中的应用程序链接,则 Xcode Previews 现在支持在设备上预览框架中的视图; • Xcode 现在通过在 watchOS complications 中添加 previewContext(_:) 修饰符来支持预览 SwiftUI watchOS complications; • Xcode 现在支持 App Clips 的预览; • Xcode 现在可以与适用于 iOS 14 和 iPadOS 14 的新 Xcode 预览应用程序连接,以大大改善设备上的预览。Xcode Previews 应用程序无缝显示设备上 Xcode Previews 中的更改。首次使用设备上的预览时,Xcode 预览应用会显示在设备的主屏幕上。与 Xcode 断开连接后,在设备上启动 Xcode 预览将恢复最后显示的预览; • 现在,双击预览中的视图将选择相应的代码,并将键盘焦点移至源代码编辑器,从而可以快速编辑视图的内容; • 现在,画布的底部栏包含一个用于快速检查所选视图的按钮; • 使用新的 LibraryContentProvider 协议将自定义 SwiftUI 视图和修饰符添加到 Xcode 库;

项目编辑器

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

项目浏览器

• 现在,Project navigator, Source Control navigator, Debug navigator 和 Reports navigator 中的选择将跟踪活动编辑器的内容。 • Xcode 的导航器现在尊重系统的“侧边栏图标大小”,并允许独立于该设置进行更改。 • 现在,在 Find 导航器中的文件结果将使用显示其工作区位置的路径进行修饰。 • 现在,Project 导航器可以在键入过滤条件并按 Enter 时控制文本匹配样式(“包含”,“不包含”,“开头为”或“结尾为”)。 • Open Quickly 匹配更具针对性和重点。Open Quickly 更适合查找不连续的单词匹配; • 跳转栏,方案菜单和运行目标选择器中的文本过滤得到了显着改进;

重构

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

签名与分发

• App Clip 可以使用 Network Extension 框架和 Hotspot Configuration Entitlement 来配置Wi-Fi网络; • Xcode 12 使您可以构建 iOS 应用程序,以便在具有 Apple Silicon 芯片的 Mac 上运行;

模拟器

• Simulator 可以全屏模式显示模拟的设备,也可以将其窗口平铺在 Xcode 旁边; • 模拟的 watchOS 7 设备支持 64 位处理器; • Window > Stay On Top 可使设备窗口位于其他应用程序窗口的前面; • 当设备窗口失去焦点时,它将暂停捕获从 Send Pointer to Device 和 Send Keyboard Input to Device 的输入事件,直到模拟器重新获得焦点; • 模拟器默认为内置麦克风,除非您明确选择其他音频源; • 模拟器支持为支持该功能的设备模拟“近场交互”;

源码控制

• 现在,您可以在 Xcode 的“偏好设置”的“源代码控制”窗格中为新存储库指定默认分支名称。此首选项使用 Git 版本 2.28 中提供的 init.defaultBranch Git 配置选项;

源码编辑器

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

StoreKit

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

Swift

• 改进了链式方法调用的缩进,特别是那些涉及嵌套或结尾闭包的缩进; • 改进了使用 SwiftUI 的 List 初始化程序时的错误消息,该初始化程序采用可识别数据的集合,且其元素类型不符合 Identifiable; • Swift 缩进现在使 guard 和 if 语句中的条件按列对齐; • 现在,编译器将诊断代码中的排他性违规,该代码在字典访问期间计算默认参数; • 现在,当不太可能发生循环引用时,Swift 允许在 @escaping 闭包中隐式使用 self; • 现在,使用默认初始化而在包装属性上没有空括号的情况下,具有附加属性包装器的属性现在可以依靠类型推断来推断包装的值类型; • 为了缩短增量编译,Swift现在为每种类型(和协议)主体保留单独的指纹。这些类型主体指纹意味着,如果您在还定义了其他结构,枚举,类,协议的文件中更改结构,枚举,类或协议的主体,则只有已更改的实体才被视为“dirty”。目的是重新编译其他文件。 • Xcode 12 支持在基于 UIKit 或 AppKit 的应用程序中使用 @main 代替 @UIApplicationMain 或 @NSApplicationMain; • lazy 属性现在可能具有 didSet 和/或 willSet 观察者; • Swift 5.3 引入了一个 #fileID 标识符,该标识符产生的字符串比 #file 短。#fileID 字符串包含文件名和模块名称,但省略了文件的其余路径;这样可以节省空间,提高性能,并避免在开发人员的二进制文件中意外嵌入开发人员的主目录名称之类的私人信息; • 尾随闭包现在与从第一个闭包参数开始并向前移动的功能参数匹配。这允许默认的闭包参数更自然地与多个尾随的闭包一起使用;

Swift Package

• 现在,您可以为 Swift 软件包的目标依赖项声明条件,例如按平台限制依赖项。这使您可以更加灵活地描述支持多个平台的复杂目标依赖关系; • Swift 软件包现在可以包含资源,例如图像,资产目录,storyboards 和其他文件;Xcode 构建依赖于程序包的应用程序时,会将程序包的代码和资源添加到应用程序包中,以便在运行时使用; • Swift 软件包现在可以作为 XCFrameworks 分发的预构建库,从而允许依赖于不能作为源代码分发的库。Xcode 构建使用此类软件包的应用程序时,会将库嵌入到应用程序包中; • Swift 软件包现在可以包含软件包中任何资源的本地化内容。除了资产目录中的本地化内容外,Xcode 还支持.lproj文件夹中的单独本地化文件;

测试

• 现在,可以在除 XCTestCase 子类的实例方法之外的上下文中使用 Objective-C 中的 XCTAssert 和相关的断言宏; • Xcode 现在捕获测试方法之外发生的测试失败的回溯,并在“问题”导航器,源代码编辑器和测试报告中列出失败的调用堆栈框架; • 现在,UI 测试将隐式处理 iOS 上的横幅通知,这些横幅通知会在 UI 测试期间阻止导航栏; • XCTest 现在提供 XCTIssue 类型,用于对测试失败和其他问题进行更丰富的建模,以及用于处理这些问题的关联 API; • 如果测试过程无法启动或加载测试包,例如,如果动态链接失败,或者某些其他系统故障导致无法启动测试,则该错误将显示在测试报告中标题为“System Failures”的部分; • 现在,测试报告UI中会显示通过,失败和跳过的测试数量; • 在以启用测试计划的方案进行测试时,Xcode 现在仅生成活动测试计划引用的测试目标。如果该方案引用了多个测试计划,则不会构建当前活动的测试计划未引用的测试目标; • XCTApplicationLaunchMetric 现在可以衡量应用程序启动到第一帧的情况; • 现在,Xcode 在计算在运行测试时要包含在 DYLD_FRAMEWORK_PATH 和 DYLD_LIBRARY_PATH 环境变量中的内置产品目录列表时,会排除静态库目标; • 性能 XCTests 现在在结合使用 XCTOSSignpostMetric 和动画 os_signpost 间隔时支持动画性能测试; • 如果测试进程在等待异常时停止,则 Xcode 捕获测试进程的转储并将其附加到测试报告中; • Xcode 12 扩展了 Xcode 11.4 中引入的重置受保护资源的授权状态的功能; • XCUIElement 和 XCUICoordinate 允许在执行滑动和拖动交互时指定速度; • 在UI测试期间拍摄的屏幕截图现在已编码为 HEIC 文件,而不是 JPEG,这可以大大减少结果包的文件大小; • ......

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8