Xcode 12 GM发行说明,快来看看SwiftUI和Swift都更新哪些新技术吧

使用代码生成了词云大家可以看看

在这里插入图片描述

Xcode 12 GM发行说明

更新您的应用程序以使用新功能,并针对API更改测试您的应用程序。


总览

Xcode 12包括适用于iOS 14,iPad OS 14,tvOS 14,watchOS 7和macOS Catalina 10.15.6的SDK。Xcode 12 GM种子版本支持针对iOS 9和更高版本,tvOS 9和更高版本以及watchOS 2和更高版本的设备上调试。Xcode 12需要运行macOS Catalina 10.15.4或更高版本的基于Intel的Mac。

一般

新功能

  • 现在可以在它们自己的选项卡中打开文档,从而可以轻松地在文件之间快速切换,同时保持Xcode的其余配置。按住Option键单击或双击以在选项卡中打开文档。当您打开多个文档,或者选择“视图”>“始终显示标签栏”时,将显示标签栏。(7954451)

  • Xcode现在支持预览小部件,应用程序剪辑和Swift软件包中的内容。为了在设备上进行更无缝的实时预览,Xcode安装了适用于iOS 14和iPadOS 14的新Xcode Previews应用。(56388008)

  • 新协议使您能够在Xcode的库中显示视图和修饰符。(56423420)LibraryContentProvider

  • 代码补全具有新的,重点突出的用户界面,使查找补全更加容易。Xcode 12中的完成也更准确,速度最高可提高15倍。(56087948,58010475)

解决

  • SwiftUI API的可编译代码完成现在可以正确处理重载的方法。(64037686)

Apple Clang编译器

新功能

  • Clang现在警告在宏中指定的格式字符串不正确。(23622446)(FB5412403)NSLocalizedString

  • 现在,该特性对于Block类型成立。这允许在新的地方使用块,例如。(57892832)std::is_scalar``std::optional

解决

  • @dynamic如果在继承自另一个协议的协议中重新声明了该属性,则会忽略该属性上的。(45503561)

  • 现在,当为macOS构建C或Objective-C代码时,如果使用不带显式声明的函数,则Clang报告错误(-Werror=implicit-function-declaration标志为on)。这种额外的错误检测功能使Clang在iOS / tvOS和macOS 64位目标上的行为得以统一。(49917738)

  • 使用id协议对块参数进行固定类型检查。现在,编译器针对使用块的方法调用发出错误,该块使用的参数比将被调用的参数更具体。(57980961)

弃用

  • 不建议使用i386,x86_64和arm的独立系统组装程序。将as命令与-Q标志一起使用会显示警告,指示您过渡到Clang的集成汇编器和-q标志。该as(1)驱动程序将继续,因为调用锵的综合汇编,以及由开发商安装的任何汇编的标准方法。(61299833)

资产目录

新功能

  • 添加了对可缩放矢量图形(SVG)图像资产的支持。它们使用macOS 10.15或更高版本,iOS 13或更高版本以及iPadOS 13或更高版本的部署目标保留其矢量表示。(18389814)

  • 现在显示了复杂占位符图像所需的像素大小。(21135944)

  • 现在,默认情况下,添加新颜色包括“深色外观”变体。如果您将此保留为空,则Xcode将同时使用浅色外观和深色外观的任何外观颜色值。您可以使用资产的属性检查器隐藏未使用的变体。(55720623)

  • “ Mac Catalyst”资产变体现已命名为“ Mac Scaled”。当选择“缩放接口以匹配iPad”时(包括在macOS 10.15上),Xcode将在使用Mac Catalyst构建的目标中使用此资产。当选择“为Mac优化接口”时,Xcode将首选Mac资产变体。(58883008)

  • 现在,“新资产”菜单按平台组织资产类型。(59233882)

解决

  • 解决了资产目录中的隐藏文件夹可能导致Xcode反复重新加载目录的问题。(35275782)(FB5390092)

  • Xcode 修改资产目录文件时会对其进行规范化,以提高稳定性和与以后的编辑的兼容性。规范化文件包含按字母顺序排列的键,并且在文件末尾包含换行符。(53886564)Contents.json

建立系统

新功能

  • 现在,您可以momc在命令行上使用从模型生成Core Data代码。(58713955)

    有关可用参数的列表,请运行:

    xcrun momc
    
  • XCFrameworks现在可以在带有标志的库包中包含和调试符号文件。运行命令以获取其他用法信息。(64910707).dSYM``.bcsymbolmap``-debug-symbols``xcodebuild -create-xcframework -help

解决

  • 修复了以下错误:如果启用了更新的dSYM文件,则该产品不会以增量版本与产品一起复制。(44696736)DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT

  • 恢复了对新构建系统的支持。(45800765)(FB5711777)PRODUCT_DEFINITION_PLIST

  • 修复了一种竞态条件,在这种竞态条件下,使用同一XCFramework的多个目标可能导致不确定的构建失败。(53911952)(FB6878988)

  • 与配合使用时,其中的项目现在已被正确视为递归输入。(54635196)(FB7109342)USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES``XCFileLists

  • 修复了一个错误,该错误可能导致标记的按需资源同时包含在资产包和产品中。这些资源现在仅包含在资产包中。(59008757)

  • 现在,将跟踪运行脚本阶段的输入文件,作为代码签名任务的输入,从而允许对这些文件进行修改,以正确触发增量构建上的代码签名。(59353913)

  • 修复了导致在macOS应用程序和其他平台上将其设置为比构建目标的部署目标更早的值的问题。(62617478)(FB7681463)LSMinimumSystemVersionInfo.plistMinimumOSVersion

已知的问题

  • 启用Mac Catalyst后,可能无法再使用Swift语言新建一个iOS项目。(67885114)

    解决方法:用替换@mainApp Delegate上的 注释。@UIApplicationMain

弃用

  • “构建设置”编辑器不再包含“有效体系结构”构建设置(),不建议使用。而是有一个新的“排除的体系结构”构建设置()。如果项目包括,则该设置将显示在“构建设置”编辑器的“用户定义”部分中。(15145028)VALID_ARCHS``EXCLUDED_ARCHS``VALID_ARCHS

  • 旧版构建系统已弃用,并将在以后的版本中删除。(62742902)

核心数据

解决

  • 当您使用Core Data创建多平台应用程序项目时,Xcode现在可以正确使用项目名称作为其数据模型。(67534882)(FB8483330)

核心ML

已知的问题

  • 当您单击“侦听”时,Core ML编辑器的“声音”分类器模型的“预览”选项卡不会显示分类结果。此外,添加音频文件时,单击“播放”按钮不会在音频播放时更新音频时间线。在创建ML应用程序中也会发生此问题。(67515312)

弃用

  • 不推荐使用Xcode中自动生成的模型接口上的默认初始化程序,而推荐使用init(configuration:)。在自动生成的模型界面上使用init(configuration:)或新引入的.load()方法,并适当处理模型加载错误。(62875309)

创建ML

新功能

  • 训练控制可帮助您在训练过程中探索模型并与之互动。可以暂停,保存,恢复和扩展训练过程。此功能需要macOS 11或更高版本。(45241965)

  • 通过新的样式转换模板,您可以训练深度神经网络来实时样式化照片和视频。此模板需要macOS 11或更高版本。(55848835)

  • 通过新的动作分类模板,您可以训练神经网络对视频片段中的单个人的动作进行分类。此模板需要macOS 11或更高版本。(56622350)

  • 当训练数据有限时,对象检测模板的新“转移学习”选项有助于提高模型的准确性。此功能需要macOS 11或更高版本。(58627183)

  • Word Tagger模板的新“转移学习”选项使用动态词嵌入来在训练数据有限时帮助提高模型准确性。此功能需要macOS 11或更高版本。(59281335)

调试

新功能

  • 当流程在断点处暂停时,Xcode将特定断点位置的命中计数显示为编辑器中断点注释的一部分。一个示例是“断点2.1(7)”,其中“(7)”代表位置2.1的7个匹配。(3836838)

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

  • 通过将断点动作拖放到“断点编辑器”中的其他位置来重新排序。(9777468)

  • 新的“在当前行处启用断点”和“在当前行处禁用断点”菜单项使您可以在代码中切换现有的断点。此外,您可以将键盘快捷键绑定到该菜单项以快速切换断点。(17924697)

  • 现在,您可以命名一个断点,并从另一个断点的操作中按名称引用它。例如,要启用先前禁用的名为“ MyBreakpoint”的断点,请在操作的“调试器命令”字段中键入。(25739693)break enable MyBreakpoint

  • 在调试器中暂停时,跳出块会展开并降落在带有调试符号的帧中。

    要以反汇编着陆,请在单击“越过”或“越出”控件时按住控制键。(29482033)

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

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

  • Xcode调试器注释将突出显示源代码,使其具有更高的不透明度,以提高在多个Xcode主题中的可见性。(53463745)

  • 视图调试器可识别运行时问题,并提供优化机会以提高UI的效率和响应能力。当您调试应用程序的视图层次时,“调试”导航器会提供建议。(56552710)

  • 要调试窗口小部件扩展,请运行扩展的方案。在小部件扩展方案的“参数”窗格中设置环境变量以配置调试会话。小部件支持一个或多个系列或大小。调试时选择家庭使用中,设置环境变量,或。如果扩展用于支持多个小部件,则可以通过设置环境变量以匹配小部件配置的属性来选择要调试的小部件。在MacOS,你可以通过设置指定WidgetKit模拟器的默认视图环境变量,,,或。(57059772,63777618)_XCWidgetFamily``small``medium``largeWidgetBundle_XCWidgetKind``kind``_XCWidgetDefaultView``timeline``snapshot``placeholder``info

  • 视图调试器现在支持保存和重新打开视图层次结构快照。使用调试栏中的“调试视图层次结构”按钮捕获视图层次结构后,可以选择“文件”>“导出视图层次结构”将其另存为.viewhierarchy文件。您可以重新打开保存.viewhierarchy在Xcode中的代码,以检查捕获的视图层次结构的状态。(57933113)

  • CALayer在视图调试器中选择a时,对象检查器现在将在屏幕外标志和组标志上显示说明性的工具提示。(58647887)

  • 如果已在“断点导航器”中禁用了断点,则可以使用上下文菜单删除所有禁用的断点。(59164503)

  • 使用为应用程序剪辑创建的方案调试应用程序剪辑。在方案中,环境变量可用于设置调试会话的App Clip体验URL。(59404002)_XCAppClipURL

  • 现在,视图调试器会为产生性能优化机会的运行时问题CALayer。选择“编辑器”>“显示图层”以在视图调试器中查看CALayers。选择“编辑器”>“显示优化机会”以显示或隐藏性能运行时问题。(60103476)

  • 调试>附加到进程和调试>分离现在位于菜单的中间,更靠近其余的调试菜单项。(60390611)

  • 现在可以将使用Xcode捕获的视图层次结构导出到.viewhierarchy文件中。(61065771)

  • ClockKit框架会在Xcode中生成运行时问题,以帮助您分析运行时错误。(61346475)

解决

  • 解决了一个问题,即在调试栏中单击的按钮在黑暗模式下无法适当更改其外观。(46294176)

  • 修复了在“调试”导航器中选择内存浏览器时可能发生的崩溃。(54767689)

  • 使用进行调试时lldbpo self现在在模拟的tvOS设备上以Swift代码显示指针的地址。(58477904,65150335)

  • Xcode会更及时地将Malloc堆栈日志记录选项保留在方案编辑器的“诊断”选项卡中。(59154142)

  • Xcode现在使用启动服务启动应用程序,以更好地反映真实的应用程序运行环境。(59478437)

  • 解决了一个问题,当用户在调试过程的视图层次结构中选择“聚焦于视图”时,导致视图调试器不显示任何内容。(60255111)

已知的问题

  • 打开调试仪表时,Xcode可能崩溃。(64181692)

  • 在iOS 14上调试窗口小部件不会启动扩展程序,或者调试器未附加到窗口小部件。(64274027,66920094)

    解决方法:从主屏幕删除小部件,清理项目,然后生成并再次运行。

设备

新功能

  • 现在,“设备和模拟器”窗口中的“添加设备”工作表可调整大小。(59611308)

  • 设备和模拟器窗口允许在导航器中选择多个设备,因此可以将它们取消配对。这使您可以更轻松地清理不再使用的设备的旧记录。(63290367)

已知的问题

  • 如果没有将应用程序剪辑添加到配对的iOS应用程序中,则无法调试WatchKit应用程序。(65784374)(FB8065876)

    解决方法:在WatchKit App Extension的构建目标的“常规”设置中设置“支持在不安装iOS App的情况下运行”。

  • 在macOS 11上,单击在“设备和模拟器”窗口中选择的设备的“查看设备日志”按钮时,Xcode可能会崩溃。(66303792)

    解决方法:Xcode将日志从连接的移动设备复制到本地目录。有关如何手动检索崩溃和能量日志的信息,请参阅在Mac或Windows计算机上查找设备崩溃和能量日志。要检索其他类型的日志,请使用获取故障报告和诊断日志中描述的工作流程。

  • 在macOS 11上,打开“设备和模拟器”窗口时Xcode可能崩溃。(66932201,67336055)

    解决方法:确保已信任与Mac配对的所有移动设备,以物理方式断开不希望用于开发的任何设备,并在“系统偏好设置”的“常规”面板中将“显示滚动条”设置为“始终”。

  • 在“设备和模拟器”窗口中取消配对设备时,Xcode可能会崩溃。(68156364)

  • 下载watchOS符号可能会花费比预期更长的时间。(68316765)

    解决方法:如果未填充符号数据,请退出并重新启动Xcode以重试下载。

文档查看器

新功能

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

仪器

新功能

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

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

  • 仪器现在将适用的CPU注释为“高效”或“性能”。选择一个CPU将显示相关的详细信息,包括数据受该CPU限制的调用树。(38031506)

  • 仪器现在可以从.logarchive文件导入数据。Instruments使用包含和工具的新日志记录模板导入这些文件。要自定义导入期间要使用的模板,请使用“文件”>“导入到模板…”(38422518)os_signpost``os_log

  • xctrace现在,该命令可以使用该--attach标志按名称附加到现有进程。(47649439)(FB5645940)

  • 现在,“文件活动”模板除了提供“磁盘读取”和“磁盘写入”的单个详细信息视图外,还提供了逻辑读取和写入的汇总统计信息。(52148749)

  • 系统跟踪模板在新记录和导入文件上的性能明显更高。(55037273)

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

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

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

解决

  • 修复了以下问题:在没有乐器的情况下,双击“调用树”节点以移动到源会失败。(32751506)

  • 现在,Instruments中的线程名称反映了开发人员使用线程命名API设置的值。(51279758)

  • 显着改善了跟踪保存和加载性能。现在,节省速度高达40%。打开跟踪文件的速度提高了80%。(51597633)

  • 修复了自定义工具上忽略详细信息属性的问题。(61944832)

已知的问题

  • 插入macOS应用程序时,“动画挂钩”模板不会显示挂钩间隔。(61082729)

弃用

  • instruments现在不推荐使用该命令,而建议使用它替换:xctrace。使用xctrace以备案,进口,并从仪器导出数据.trace文件。(36641078)

界面生成器

新功能

  • 添加了对macOS 11中引入的新功能的支持。(16915977)safeAreaLayoutGuideNSView

  • Interface Builder的画布具有一个新的小地图。您可以使用“编辑器”>“画布”>“小地图”显示和隐藏小地图。将小地图拖到画布的任何角落。您也可以在小地图中双击或命令单击以聚焦于特定场景。(19218249,63831585)(FB5891904)

  • 查找和替换现在在属性字符串文字中包含匹配项。(21508424)

  • Interface Builder现在具有的Current Date选项。(56048031)NSDatePicker

  • Interface Builder现在支持iOS 14中引入的两栏和三栏样式。(57025285)UISplitViewController

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

  • 在macOS 11中添加了对SF符号的支持(58480276)

  • 在macOS 11中添加了对新工具栏项目属性的支持。(58584394)isNavigational

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

  • 在macOS 11中添加了对的支持和新的内容类型属性。(59273897)NSTextViewNSTextField

  • 在macOS 11中添加了对新功能的支持。(59274307)toolbarStyle

  • subtitle在macOS 11中增加了对新属性的支持。(59274358)

  • 在macOS 11中添加了对新功能的支持。(59277905)NSSearchToolbarItem

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

  • 现在,您可以为情节提要和.xib文件编辑SF符号的渲染模式和符号比例。在图像选择器中选择SF符号时,图像名称下方会展开两个附加属性。要显示支持全色的SF符号,请将“渲染模式”设置为“原始”。(61844681,63280118)

  • 通过“自动”,“全角”,“插图”和“源列表”选项添加了对新功能的支持 。(61958249)NSTableViewStyle

  • 增加了对新UISwitch属性的支持,和。(62320185)preferredStyletitle

  • 添加了对新版式NSView边距指南的支持。(62908200)

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

解决

  • 修复了一个错误,在该错误中,IBDesignableInterface Builder第一次显示情节提要或时,视图未使用内部内容大小.xib。(23234553)(FB5797024)

  • 修复了有时会取消检查员的iOS文本样式的问题。(51854358)(FB6169763)

  • IBDesignable视图无法构建时,现在画布中的视图直接存在错误。现在,单击身份检查器中IBDesignable属性上的错误图标,将提供一个显示该错误的弹出窗口,以便于调试。(56408987)

  • 故事板和.xib文件现在将使用由提供的固有内容尺寸IBDesignable覆盖时,视图上。(56419405)intrinsicContentSizeNSView

  • 修复了在上忽略了“拼写检查”属性的错误。(60750116)(FB7636246)UITextView

  • 修复了启用了“保留矢量表示”的图像无法在画布中正确显示亮或暗变体的问题。(61243894)(FB7649981)

  • 改进了“大小”检查器中“视图”的“布局”属性的选项,以提高清晰度。(61561405)

    • “自动”选项现在名为“推断的”,它指示视图是使用约束还是使用自动调整大小的蒙版。视图,其布局是被推断的使用转换面膜自动调整大小成约束false时的视图是使用约束条件或处于自动布局容器,如一个或。否则,它将使用自动调整大小的蒙版并将自动调整大小的蒙版转换为的约束。NSStackViewUIStackViewtrue

    • 将“将自动调整大小的蒙版转换为约束”始终true用于布局为“ 自动调整大小的蒙版”的视图。

  • 修复了在tvOS故事板上使用图像堆栈时可能发生的崩溃。(62113733)(FB7671430)

  • 修复了故事板或画布中隐藏视图的一些性能问题。(63008369,64314634)NSTabView.xib

已知的问题

  • 在macOS Big Sur上,Interface Builder会以新的外观显示macOS故事板。但是,当您使用Xcode 12中的macOS Catalina SDK构建和运行应用时,拆分视图,表视图,工具栏和窗口标题可能与情节提要不匹配。(66612224)

弃用

  • Interface Builder不再提供对“可以同时绘制”属性的访问。您仍可以在代码中使用来配置此行为。(42437767)canDrawConcurrently

  • QTCaptureView和QTMovieView已被弃用,不再受支持。从情节提要和.xib文件中删除这些视图。(64263402)

连结中

新功能

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

  • 现在,如果您与dylib链接但不使用任何符号,则链接器将报告警告。如果您确实打算这样做,则可以使用代替来禁止所有此类警告,也可以根据需要单独标记未使用的框架。例如,在“其他链接器标志”中,添加。(60936600)-Wl,-warn_unused_dylibs``-needed_framework Foo``-framework Foo``-Wl,-needed_framework,Foo

解决

  • 使用该-map file选项时,.o现在可以更准确地跟踪为链接时间优化构建的文件中的功能和数据。(50031245)

  • 现在,当遇到有关未对齐指针的错误时,链接器现在将显示所有此类指针,而不仅仅是第一个。(61019996)

金属

新功能

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

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

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

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

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

已知的问题

  • 调试macOS Catalina应用程序时,Metal Debugger可能会显示空白的“摘要”和“内存”报告。(68599136)

组织者

新功能

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

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

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

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

已知的问题

  • 当使用Xcode 12并针对“所有兼容的设备变体”进行精简时,导出watchOS应用程序进行临时或开发分发可能会失败。(66637482)

    解决方法:不要变薄,或选择特定的目标设备。

游乐场

新功能

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

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

  • Xcode Playgrounds现在可以导入和使用Swift包和框架。在游乐场的文件检查器中选中“构建活动方案”复选框,并确保活动方案可以构建包或框架目标。(60612584)

解决

  • 现在,VoiceOver可以访问实时视图。(40548790)

  • 解决了使用Xcode Playgrounds时导致LLDB RPC服务器崩溃的问题。(59271354)

  • 现在,如果iOS和tvOS Playgrounds中的实时视图的大小为零,则它们将使用该视图的固有内容大小。(61068790)

  • 游乐场现在支持资产目录。(61110861)

  • 如果视图没有固有大小,则macOS Playground的实时视图会退回到合理的默认大小。(62065321)(FB7670503)

  • 如果Playground实时视图的大小为零,则横幅现在会指示为什么不显示实时视图。(63033441)

  • 现在,Xcode Playground会在其Resources文件夹中自动编译Core ML模型,并且Playground代码可以访问生成的ML模型界面。(63109576)

已知的问题

  • Xcode可能会显示文本“ No Editor”,而不是在创建Playground后立即打开其源代码编辑器。(56484197)

    解决方法:使用“视图”>“导航器”>“项目”显示“项目导航器”,然后手动选择“游乐场”。

预告片

新功能

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

  • 现在,每个预览都具有用于启动实时预览,在设备上预览,检查预览和重复预览的按钮。(47472549)

  • 画布具有添加修改器的全新集成体验。单击“检查预览”按钮以查看所选视图的修改器建议,并搜索要应用的修改器。(51696163)

  • 现在,代码完成功能会为SwiftUI视图和修饰符插入可编译的完成内容和示例。(55455037)

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

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

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

  • Xcode现在通过将修饰符添加到watchOS并发症中来支持预览SwiftUI watchOS并发症。(57848297)previewContext(_:)

  • Xcode现在支持应用剪辑的预览。(59227941)

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

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

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

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

解决

  • 现在可以在不完全重建活动方案的情况下更新包含预览的软件包。(51030302)

  • 针对iOS 14,macOS 11,watchOS 7和tvOS 14 SDK进行了重建,从而改变了的用法,从而可靠地领先于对齐内部视图。这是以前的行为,除了无法检测到中的单个静态视图时。(59722992)(FB7597816)GeometryReaderGeometryReaderGeometryReader

已知的问题

  • 您无法在“预览”画布的小部件中选择视图。(62517078)

  • 动画可能无法在实时SwiftUI预览中使用。(63333795)

  • 进行更改之前,可能无法显示macOS的Live SwiftUI预览,除非您单击画布上的Bring Forward按钮。(63865018)

  • 预览iPad设备的小部件扩展名可能会在顶部显示多余的空白栏。(64277772)

  • 应用外观修改器时,窗口小部件扩展预览不适合深色外观。(64277915).preferredColorScheme(.dark)

项目编辑

新功能

  • 文档类型,导出类型标识符和导入类型标识符窗格支持macOS 11中新的模板化文档图标。(59314567)

项目浏览器

新功能

  • 现在,项目导航器,源代码控制导航器,调试导航器(用于View Debugger和Memory Graph)和Reports导航器中的选择将跟踪活动编辑器的内容。(9546415)(FB5634395)

  • Xcode的导航器现在尊重系统的“侧边栏图标大小”,并允许独立于该设置进行更改。(11619444)

  • 现在,在“查找”导航器中的文件结果将用显示其工作区位置的路径进行装饰。(47196462)

  • 现在,项目导航器可以在键入过滤器术语并按Enter时控制文本匹配样式(“包含”,“不包含”,“开头为”或“结尾为”)。(56474089)

  • 现在,“快速打开”比赛更具针对性和重点。快速打开更适合查找不连续的单词匹配。键入“ resetDownload”与您期望的“ resetDocumentDownload”匹配。提高的准确性着眼于最佳匹配,而排除了最差的匹配。(59065704)

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

解决

  • 解决的在项目结构中添加和移动项目时发生的崩溃。(48644008,57752303)

  • 改进了项目导航器的性能,尤其是“项目导航器中的显示”和对组的递归展开/折叠操作。(49189414,60245991,6092575)

  • 过滤文本和SCM状态的项目结构时,提高了结果的稳定性和准确性。请注意,结果现在需要匹配所有过滤条件,而不是任何条件。(57708582、58099589、62128435)

现实作曲家

弃用

  • 由Xcode 12创建的Reality文件只能在macOS 10.15.4或更高版本,iOS和iPadOS 13.4或更高版本以及Reality Composer 1.4或更高版本中加载。(58825031)

重构

新功能

  • 现在,“编辑器”>“重构”>“重命名”将使用带有反引号转义的定义或引用来处理重命名符号。(46409010)

消毒液

解决

  • 在模拟watchOS设备上进行调试时,Xcode现在支持Thread Sanitizer。(54654296,64421085)

服务器

解决

  • 您可以在Xcode Server机器人的“存储库”选项卡上选择用于集成的分支。(58615215,59068222)

签署和分发

新功能

  • App Clip可以使用网络扩展框架并Hotspot Configuration Entitlement配置Wi-Fi网络。(64966949)

  • Xcode 12使您可以构建iOS应用程序,以便在具有Apple芯片的Mac上运行。确保已在https://developer.apple.com/account帐户中使用Apple芯片的硬件标识符(可在“系统信息”应用程序的“硬件”>“配置UDID”字段中找到)注册Mac。,在管理器窗口中找到存档,单击“分发应用程序”,选择“临时”或“开发”,选择分发选项,选择“自动管理签名”,然后继续进行分发助手的其余部分以创建IPA 。创建IPA后,您可以将其通过Apple芯片传输到Mac,然后双击以进行安装。在应用程序首次启动期间,系统将提示您打开“安全性和隐私”首选项窗格以启用该应用程序。要在首选项窗格中查看启动按钮,请确保Mac已配置为仅允许来自App Store和指定开发人员的应用程序。(68513041,68528315)。

已知的问题

  • 应用剪辑无法使用“通行证类型ID”权利访问电子钱包通行证。但是,App Clips可以确定电子钱包中是否已经存在特定的通行证,并在必要时提示用户添加通行证。如果您已将电子钱包功能添加到App Clip目标,则可能无法构建或将应用提交到App Store Connect。在目标编辑器的“签名和功能”窗格中删除电子钱包功能,并禁用或删除任何使用此已删除功能的代码。(65244156)

  • 导出档案时,Xcode自动签名可能不会自动在您的配置文件中包括带有Apple芯片的Mac。(66857321)

    解决方法:如果Xcode生成的IPA并未安装在您注册的Mac上,请在导出存档之前,从〜/ Library / MobileDevice / Provisioning Profiles目录中删除任何Ad Hoc分发或开发配置文件。

  • 由于代码签名错误,您先前在Apple Silicon Developer开发工具包上构建的开源软件可能不再运行。(68226054)

    解决办法:使用Xcode 12重新构建软件,或者使用进行重新签名codesign -s - --preserve-metadata=identifier,entitlements,flags,runtime -f

仿真器

新功能

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

  • 模拟的watchOS 7设备支持64位进程。要验证watchOS项目在Simulator中是否为64位纯净,请确保ARCHS将其设置为默认值。(54654060,66352876)

    注意

    在具有Apple芯片的Mac上的Simulator中,项目必须是64位干净的,不支持32位代码。

  • 窗口>停留在最前可使设备窗口位于其他应用程序窗口的前面。(57060945)(FB7439463)

  • 当设备窗口失去焦点时,它将暂停捕获从“将指针发送到设备”和“将键盘输入发送到设备”的输入事件,直到模拟器重新获得焦点。(57351155)

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

  • 模拟器支持为支持该功能的设备模拟“邻近交互”。在屏幕上四处拖动设备窗口将更新两个设备之间的模拟距离。窗口在屏幕上的距离越远,报告的距离就越大。(62227375)

解决

  • 现在,“下载组件”首选项窗格会提示一次身份验证,以下载和安装旧版模拟器,而不是每次安装时都提示身份验证。(22993731)

  • 当客户端快速连接和断开连接时,CoreSimulatorService不会使用太多的CPU。(53220616)

  • 模拟器现在允许选择“物理尺寸”,“点精确度”和“像素精确度”尺寸选项,即使所选择的选项导致部分窗口不在屏幕上。(56163353)(FB7366108)

  • 现在,从应用程序商店更新Xcode,移动Xcode或重命名Xcode时,模拟器运行时仍然存在。(58100481)

  • 在按住键的情况下进入键盘捕获或指针捕获模式时,Simulator不再将这些键卡在macOS中。退出捕获模式时,正确的向左或向右击键事件会传递给来宾,以防止其认为修饰键被卡住。(60174685)

  • 模拟器不再在自定义设备集中创建默认设备,从而恢复了Xcode 11.3的行为。(63750578)(FB7717786)

  • 修复了一个错误,该错误在模拟器已经运行时在模拟器中启动应用程序有时会失败,并显示错误“等待Simulator.app准备就绪而超时”。(64508635)

  • 修复了一个问题,该问题使Xcode无法在使用项目的情况下为模拟watchOS设备编译项目。错误消息是“在范围内找不到’SignInWithAppleButton’”。即使项目导入了SwiftUIAuthentication Services,也会发生这种情况。(67817241)SignInWithAppleButton

已知的问题

  • 在具有content-available密钥集的Simulator中模拟推送通知时,系统将调用而不是。(60426170,60974170)(FB7625283)application(_:performFetchWithCompletionHandler:)application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

  • 在模拟的12.9英寸iPad Pro上激活显示缩放功能会使模拟设备的显示失真。(67455180)

    解决方法:重新启动模拟设备以返回正常显示。

  • 如果在启用CarPlay的情况下启用或禁用缩放模式,则尝试与CarPlay进行交互将导致部分重启模拟的iOS设备。(67534104)

    解决方法:关闭CarPlay窗口,然后重新启用或重新禁用CarPlay。

弃用

  • 在macOS 11上运行时,Simulator支持iOS 11.4或更高版本。(59938106)

源代码控制

新功能

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

源代码编辑器

新功能

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

解决

  • 修复了调试控制台中大量日志输出可能导致的崩溃。(49261867)

  • 编辑器现在保留粘贴文本的相对缩进,而不是重新缩进文本。可以在“首选项”>“文本编辑”>“缩进”中进行控制。(52348424)

  • 修复了一个问题,即在源文件大多为平面层次结构的大型项目中,该过程会占用大量内存。(53835770)com.apple.dt.SKAgent

  • 修复了代码完成有时会提示类名而不是变量名的问题。(56887185)

  • 修复了系统标题的跳转栏中显示错误内容的问题。(57509269)

  • 修复了粘贴到多个插入点会将选择重置为单个插入点的问题。(57572639)

  • 修复了代码完成会在最近使用的列表中建议使用不区分大小写的匹配候选项而不是小写且区分大小写的匹配候选项的问题。(57962108)(FB7495633)

  • 修复了以下问题:在文档中键入反引号,而未选中“文本编辑”首选项“启用键入完成”,则会插入额外的反引号。(58011556)

  • 修复了在Xcode之外编辑文件会导致Xcode在启动时崩溃的问题。(58272739)

  • 修复了Xcode无法正确将编辑内容DateData值保存在属性列表文件中的问题。(58836269)

  • 改进了代码完成中的显示顺序,以区分与参数类型匹配的符号的优先级。(59066628)

  • Swift代码完成中现在支持用户定义的标称类型的可调用值。代码完成显示了基本表达式后的括号后面的调用签名。(59302416)

  • 现在,当调试器点击折叠代码或在Breakpoint导航器中选择折叠代码时,隐藏在多个代码折叠中的断点现在可以正确展开折叠的代码。(59445409)

  • 修复了折叠代码有时会导致崩溃的问题。(60170676)

  • 修复了多个大型重构后Xcode会挂起的问题。(61749114)

  • 修复了编辑Objective-C类别名称有时会导致崩溃的问题。(61860583)

  • 修复了尾随空格折叠代码有时会导致崩溃的问题。(62218489)(FB7673070)

已知的问题

  • 新的Xcode Source Editor扩展目标不会自动在扩展中设置嵌入。(59274389)XcodeKit.framework

    解决方法:手动嵌入扩展中。XcodeKit.framework

弃用

  • 为了与macOS 11中的新安全功能兼容,必须使用Xcode 12构建Xcode扩展,并且必须将embed嵌入。使用这些工具重建的Xcode扩展与旧版本的Xcode和macOS兼容。(51822755)XcodeKit.framework

StoreKit

新功能

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

    在App Store Connect中进行设置之前,请在本地配置应用内购买信息以进行测试,而无需连接到App Store服务器。有关入门的更多信息,请参阅在Xcode中测试应用内购买在Xcode中设置StoreKit测试。测试环境支持早期开发,单元测试和调试应用内购买,如使用Xcode和Sandbox在开发的所有阶段进行测试中所述。

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

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

已知的问题

  • StoreKit事务管理器中选择“订阅选项”时,Xcode崩溃。(68354368)

    解决方法:使用StoreKit测试框架测试降级,交叉升级或升级订阅。

迅速

新功能

  • 改进了链式方法调用的缩进,特别是那些涉及嵌套或结尾闭包的缩进。(25519439)(FB5472851)

  • 改进了使用SwiftUI的List初始值设定项时的错误消息,该初始值设定项接受的可识别数据集合的元素类型不符合Identifiable。(51519565)(FB6130940)

    例如,以下代码:

    import SwiftUI
    struct NotIdentifiable {}
    let data: [NotIdentifiable] = []
    List(data) { _ in    Text("Row")}
    

    现在会产生错误消息:

    error: initializer 'init(_:rowContent:)' requires 'NotIdentifiable' conform to 'Identifiable'List(data) { _ in^
    
  • Swift缩进现在使guardand if语句中的条件列对齐。(53131527)(FB6688335)

    例如:

    guard let x = someOptional,      let y = anotherOptional else {  // ...}
    
  • 现在,编译器将defaultDictionary访问期间计算自变量的代码中诊断专有性违规。(SR- 11700,56378713)

    struct Container {  static let defaultKey = 0
      var dictionary = [defaultKey:0]
      mutating func incrementValue(at key: Int) {    dictionary[key, default: dictionary[Container.defaultKey]!] += 1  }}// error: overlapping accesses to 'self.dictionary', but modification requires exclusive// access; consider copying to a local variable//     dictionary[key, default: dictionary[Container.defaultKey]!] += 1//     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// note: conflicting access is here//     dictionary[key, default: dictionary[Container.defaultKey]!] += 1//                              ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
    

    可以通过default使用局部变量预先计算参数来避免排他性冲突。

    struct Container {  static let defaultKey = 0
      var dictionary = [defaultKey:0]
      mutating func incrementValue(at key: Int) {    let defaultValue = dictionary[Container.defaultKey]!    dictionary[key, default: defaultValue] += 1  }}// No error.
    
  • 现在,当不太可能发生参考周期时,Swift允许隐式使用selfin @escaping闭包。(SE- 0269,56408426)

    首先,如果用户已在闭包的捕获列表中明确捕获,则现在允许隐式使用selfin @escaping闭包self,因此以下代码现在有效:

    class Test {  var x = 0  func execute(_ work: @escaping () -> Void) {    work()  }  func method() {    execute { [self] in      x += 1    }  }}
    

    其次,当为值类型时,隐式self@escaping闭包中可用self,使以下代码有效:

    struct Test {  var x = 0  func execute(_ work: @escaping () -> Void) {    work()  }  func method() {    execute {      x += 1    }  }}
    
  • 现在,使用默认初始化而在包装属性上没有空括号的情况下,具有附加属性包装器的属性现在可以依靠类型推断来推断包装的值类型。(59471019)

    例如:

    @propertyWrapperstruct IntWrapper {  var wrappedValue: Int { 0 }}
    struct UseWrapper {  @IntWrapper var value}
    

    包装的属性使用的默认初始化,并且依赖于类型推断来推导类型包装的值类型为。UseWrapper.value``IntWrapper``Int

  • 为了缩短增量编译,Swift现在为每种类型(和协议)主体保留单独的指纹。这些类型的体指纹意味着,如果你改变的身体structenumclass,或protocol在一个文件中还定义了其他structenumclassprotocols,仅将更改的实体将被算作“脏”重新编译其他文件的目的。(59954707)

    例如,假设您有一个定义两个的文件structs

    struct A {}struct B {}
    

    并将成员添加到A

    struct A {  var x = 17}struct B {}
    

    在进行此更改之前,编译器将使用A或重新编译任何文件B。现在,编译器不会重新编译仅使用的文件B

    如果您在使用此功能时遇到问题,请-disable-type-fingerprints通过Other Swift Flags构建设置传入Swift编译器以将其禁用。如果仍然遇到问题,请-disable-fine-grained-dependencies通过Other Swift Flagsbuild设置传入Swift编译器,以禁用新的依赖项基础结构。

  • Xcode 12支持@main在基于UIKit或AppKit的应用中使用或代替它们。(60502727,60502804,63291088)@UIApplicationMain``@NSApplicationMain

  • where即使声明本身没有附加的通用参数,泛型上下文中的声明现在也可以具有子句。(SE- 0267,64228492)

    例如:

    struct Box {    func boxes() -> [Box] where Wrapped: Sequence { ... }}
    
  • lazy属性现在可以具有和/或观察者。(64229062)didSet``willSet

  • Swift 5.3引入了一个标识符,该标识符产生的字符串比短。该字符串包含文件名和模块名称,但是省略了文件的其余路径。这样可以节省空间,提高性能,并避免将私有信息(如开发人员的主目录名称)意外地嵌入二进制文件中。编译器生成的错误消息(例如,强制展开)和标准库断言(例如,现在使用字符串),我们建议您在生产代码中使用它们,而不是在代码中使用它们。(SE- 0285,65514304)#fileID``#file``#fileID``precondition``fatalError``#fileID``#file

  • 现在,尾随的闭包与从第一个闭包参数开始并向前移动的功能参数匹配。这允许默认的关闭参数更自然地与多个尾随的关闭一起工作(SE-0286SE- 0279,65615074)

    例如,函数:

    func animate(    duration: Double,    animations: @escaping () -> Void,    completion: ((Bool) -> Void)? = nil)
    

    当称为:

    animate(duration: 0.25) {  // animations}
    

    将结尾的闭包与animations参数匹配。然后,您可以使用新的“多个结尾闭包”功能来指定完成处理程序:

    animate(duration: 0.25) {  // animations} completion: { finished in {  // completion handler}
    

    新的警告标识了新的尾随匹配规则与旧规则不同的情况。例如:

    func f(a: () -> Int = { 17 }, b: () -> Int = { 42 }) { }
    f {  0}
    

    在这种情况下,编译器仍然会应用旧的(向后)规则(结尾的闭包将与parameter匹配b),但是编译器会生成警告和Fix-It,它指示代码将在将来的语言版本中更改行为:

    backward matching of the unlabeled trailing closure is deprecated; label the argument with 'b' to suppress this warning
    

解决

  • Swift现在支持对协议方法的未应用引用。以前,这仅适用于在结构,枚举和类中定义的方法。(21289579)(FB5819096)

    例如:

    protocol Cat {func play(catToy: Toy)}
    let fn = Cat.play(catToy:)fn(myCat)(myToy)
    
  • 当元素对齐时,Swift缩进不再使出现在调用参数,参数列表,数组和字典文字或元组中的多行表达式缩进。(48934744)

  • 修复了涉及super类型super错误的表达式中发生的编译器崩溃。(50819554)

  • 实验功能生成器功能现在已正确应用于单表达式闭包。(56340587)

    例如:

    @_functionBuilderstruct ArrayBuilder {    static func buildBlock(_ values: T…) -> [T] {        values    }}
    func array(@ArrayBuilder builder: () -> [Int]) -> [Int] {    builder()}
    array { 0 }
    

    这些闭包已经在SwiftUI中起作用了,因为它们仅返回一个View,这就是将转换应用于它们的全部工作。但是,并非所有函数构建器转换都具有此属性,现在它们应该可以正常使用。ViewBuilder

  • 修复了使用属性包装器(其包装的值具有变异的getter和非变异的setter)时发生的编译器崩溃。(56467140)

  • Swift编译器不再在兼容性标头中为空扩展名或仅具有私有成员且没有公共合规性的扩展名打印导入。

    依赖那些可移植导入的Objective-C / C源文件可能会引起有关缺少声明的错误,因此需要使用显式导入进行更新以按预期进行编译。(57133517)

  • 修复了由于将使用导入的Objective-C接口导入Swift 而导致的崩溃。(59306590)(FB7571694)objc_runtime_name

  • 修复了在子类中使用附加的属性包装器重写属性以实现属性观察器时发生的编译器崩溃。(60093232)(FB7615016)

  • 修复了初始化属性包装器可以在初始化所有属性包装器之前调用属性观察器的问题self。(60832285)

  • 修复了全局重命名可能会更改SDK标头的问题(62607314)(FB7681195)

  • 为发布而构建时,小部件不再崩溃。如果您先前禁用了解决此类崩溃的功能,则可以重新启用它。(65862827)DEAD_CODE_STRIPPING

  • 启用位码或将“条带样式”设置为“所有符号”时,小部件不再崩溃。如果您关闭了窗口小部件目标的构建设置中的“所有符号” 并从中取消设置,则可以还原这些解决方法。(66402358)ENABLE_BITCODE``STRIP_STYLE

已知的问题

  • 函数构建器主体包含空的switch语句时,编译器可能会崩溃。在SwiftUI视图主体中输入switch语句时,此问题还可能导致SourceKit崩溃。(65983237)(FB8111944)

迅捷包

新功能

  • 现在,您可以为Swift包的目标依赖项声明条件,例如通过平台限制依赖项。这使您可以更加灵活地描述支持多个平台的复杂目标依赖关系。(40237402)

  • Swift软件包现在可以包含资源,例如图像,资产目录,情节提要和其他文件。当Xcode构建依赖于程序包的应用程序时,它会将程序包的代码和资源添加到应用程序包中,以便在运行时使用。有关更多信息,请参见使用Swift软件包捆绑资源。(54361843)

  • Swift软件包现在可以出售作为XCFrameworks分发的预构建库,从而允许依赖于不能作为源代码分发的库。Xcode构建使用此类软件包的应用程序时,会将库嵌入到应用程序包中。有关更多信息,请参见将二进制框架分发为Swift软件包。(56592977)

  • Swift软件包现在可以包含软件包中任何资源的本地化内容。除了资产目录中的本地化内容外,Xcode还支持文件.lproj夹中单独的本地化文件。有关更多信息,请参见本地化软件包资源。(56925255)

已知的问题

  • 打开包含程序包引用的工作区时,可能会出现带有“数据库已锁定”消息的程序包解析错误。(61113361)

    解决方法:关闭并重新打开工作区。

测试中

新功能

  • XCTAssert和Objective-C中的相关断言宏现在可以在子类的实例方法以外的上下文中使用。(4176422)XCTestCase

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

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

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

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

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

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

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

    func testAppLaunchToResponsive() throws {    measure(metrics: [XCTApplicationLaunchMetric(waitUntilResponsive: true)]) {        app.launch()    }}
    
  • 现在,Xcode在计算在运行测试时要包含在DYLD_FRAMEWORK_PATH和DYLD_LIBRARY_PATH环境变量中的内置产品目录列表时,会排除静态库目标。(55254152)(FB7249507)

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

    func testScrollingAnimationPerformance() throws {  let table = app.tables.firstMatch  measure(metrics: [XCTOSSignpostMetric.scrollDecelerationMetric]) {    table.swipeUp(velocity: .fast)  }}
    
  • 如果在等待期望的过程中(例如在执行过程中或类似方法时)测试过程停顿,则Xcode将捕获测试过程的转储并将其附加到测试报告中。以前,Xcode终止了测试过程,并在下一个测试中重新开始执行。要继续防止测试停滞,请在测试计划中启用“测试超时”设置。(57163494)waitForExpectations(timeout:handler:)XCTWaiter

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

  • XCUIElementXCUICoordinate现在允许执行滑动并拖动时的交互指定速度。(58059937)

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

  • XCTAssertEqual(_:_:accuracy:_:file:line:)并且现在接受任何需要的值,而不是价值。这允许将非浮点数字类型(例如)作为表达式值或参数传递。(58481784)XCTAssertNotEqual(_:_:accuracy:_:file:line:)NumericFloatingPointIntaccuracy

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

  • 如果您在源代码编辑器中单击测试或测试类旁边的菱形,并且该测试不在活动方案或测试计划之外,则Xcode将显示一个工作表,允许您选择包含您所测试的特定方案或测试计划。想跑。(59223004)

  • 现在,“测试报告”中的“失败”和“跳过范围”栏按钮将显示所有运行失败或被跳过的测试,而不是仅显示所有运行失败或被跳过的测试。(59401757)

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

  • 现在,在启用了测试计划的方案中运行测试时,Xcode现在可以使用方案的“运行”操作的“选项”选项卡中的“调试XPC服务”设置。(60439063)

  • 现在可以在“测试计划编辑器”中自定义“默认执行时间津贴”和“最大执行时间津贴”。这些设置在启用“测试超时”时适用。(61607966)

  • 现在,当UI查询超时或目标应用程序没有迅速变为空闲时,XCTest现在在UI测试期间附加一个spindump诊断。(62076023)

解决

  • 现在,在切换到其他导航器或从其他导航器切换以及更改过滤器和方案时,“测试”导航器可以正确记住其选择状态和滚动偏移。(16308307,24918098)

  • UI目标查询现在可以定位到iOS共享表中的所有单元格。(49961747)

  • 解决了一个错误,该错误导致在未打开“测试”导航器时,阻止菱形出现在源代码编辑器中的测试方法和类旁边。(54216504)

  • 记录了没有任何源代码位置的测试失败后,Xcode现在会在源代码编辑器中显示失败注释,并提供一个链接,以从“问题”导航器跳转到该测试方法。(58118593)

  • 解决了可能导致键盘修饰符在调用后如果该块引发未处理的异常而持续存在的问题。(58376575)performWithKeyModifiers:block:

  • 现在,包含参数的XCTest API 使用Swift 5.3中引入的文字作为默认参数值。XCTest需要到源文件的完整文件路径,以进行错误报告并跳转到Xcode中的故障。有关更多信息,请参见关于SE–0274 和“快速”部分的注释。(58496553)file: StaticString = #file``#filePath#filePath

  • 现在,可以在项目导航器中的目录级别之间移动测试计划文件,从而在方案中正确更新对这些文件的引用。(59171975)

  • 如果在用户界面测试中删除了Xcode,该Xcode将重新安装该应用。(60159203)(FB7616398)

  • XCTest现在支持使用XCTSkipin 和将测试标记为已跳过。尽管在调用拆解方法时测试方法可能已经运行完毕,但是这对于“追溯”标记测试不符合条件或结果无效可能很有用。(60634152)tearDown()tearDownWithError()

  • 解决了该方案使用测试计划时xcodebuild不尊重该选项的问题。(62605817)-enableCodeCoverage

  • xcodebuild``-parallel-testing-worker-count并行运行测试时,不再忽略该选项。(64495567)

已知的问题

  • 当与结合使用动画时,模拟的设备不支持动画性能指标(故障总数,故障总持续时间,故障时间比率,帧频和帧数)。(63766090)os_signpostXCTOSSignpostMetric

    解决方法XCTSkip用于跳过模拟设备上的性能测试。

弃用

  • Xcode现在支持在运行iOS 9.0及更高版本的iOS设备上调试应用程序并运行测试。(59561001)

  • XCTAssert和Objective-C和Objective-C ++中的相关断言宏不再包含self访问当前测试用例的引用。设置了-Wunused-variable-Wunused-lambda-capture标志后,编译器现在可以发出有关代码的新警告,该代码声明的显式变量或lambda捕获self。删除self变量或lambda捕获,因为不再需要XCTAssert。(60017011)

Xcode 12 GM发行说明

更新您的应用程序以使用新功能,并针对API更改测试您的应用程序。


总览

Xcode 12包括适用于iOS 14,iPad OS 14,tvOS 14,watchOS 7和macOS Catalina 10.15.6的SDK。Xcode 12 GM种子版本支持针对iOS 9和更高版本,tvOS 9和更高版本以及watchOS 2和更高版本的设备上调试。Xcode 12需要运行macOS Catalina 10.15.4或更高版本的基于Intel的Mac。

一般

新功能

  • 现在可以在它们自己的选项卡中打开文档,从而可以轻松地在文件之间快速切换,同时保持Xcode的其余配置。按住Option键单击或双击以在选项卡中打开文档。当您打开多个文档,或者选择“视图”>“始终显示标签栏”时,将显示标签栏。(7954451)

  • Xcode现在支持预览小部件,应用程序剪辑和Swift软件包中的内容。为了在设备上进行更无缝的实时预览,Xcode安装了适用于iOS 14和iPadOS 14的新Xcode Previews应用。(56388008)

  • 新协议使您能够在Xcode的库中显示视图和修饰符。(56423420)LibraryContentProvider

  • 代码补全具有新的,重点突出的用户界面,使查找补全更加容易。Xcode 12中的完成也更准确,速度最高可提高15倍。(56087948,58010475)

解决

  • SwiftUI API的可编译代码完成现在可以正确处理重载的方法。(64037686)

Apple Clang编译器

新功能

  • Clang现在警告在宏中指定的格式字符串不正确。(23622446)(FB5412403)NSLocalizedString

  • 现在,该特性对于Block类型成立。这允许在新的地方使用块,例如。(57892832)std::is_scalar``std::optional

解决

  • @dynamic如果在继承自另一个协议的协议中重新声明了该属性,则会忽略该属性上的。(45503561)

  • 现在,当为macOS构建C或Objective-C代码时,如果使用不带显式声明的函数,则Clang报告错误(-Werror=implicit-function-declaration标志为on)。这种额外的错误检测功能使Clang在iOS / tvOS和macOS 64位目标上的行为得以统一。(49917738)

  • 使用id协议对块参数进行固定类型检查。现在,编译器针对使用块的方法调用发出错误,该块使用的参数比将被调用的参数更具体。(57980961)

弃用

  • 不建议使用i386,x86_64和arm的独立系统组装程序。将as命令与-Q标志一起使用会显示警告,指示您过渡到Clang的集成汇编器和-q标志。该as(1)驱动程序将继续,因为调用锵的综合汇编,以及由开发商安装的任何汇编的标准方法。(61299833)

资产目录

新功能

  • 添加了对可缩放矢量图形(SVG)图像资产的支持。它们使用macOS 10.15或更高版本,iOS 13或更高版本以及iPadOS 13或更高版本的部署目标保留其矢量表示。(18389814)

  • 现在显示了复杂占位符图像所需的像素大小。(21135944)

  • 现在,默认情况下,添加新颜色包括“深色外观”变体。如果您将此保留为空,则Xcode将同时使用浅色外观和深色外观的任何外观颜色值。您可以使用资产的属性检查器隐藏未使用的变体。(55720623)

  • “ Mac Catalyst”资产变体现已命名为“ Mac Scaled”。当选择“缩放接口以匹配iPad”时(包括在macOS 10.15上),Xcode将在使用Mac Catalyst构建的目标中使用此资产。当选择“为Mac优化接口”时,Xcode将首选Mac资产变体。(58883008)

  • 现在,“新资产”菜单按平台组织资产类型。(59233882)

解决

  • 解决了资产目录中的隐藏文件夹可能导致Xcode反复重新加载目录的问题。(35275782)(FB5390092)

  • Xcode 修改资产目录文件时会对其进行规范化,以提高稳定性和与以后的编辑的兼容性。规范化文件包含按字母顺序排列的键,并且在文件末尾包含换行符。(53886564)Contents.json

建立系统

新功能

  • 现在,您可以momc在命令行上使用从模型生成Core Data代码。(58713955)

    有关可用参数的列表,请运行:

    xcrun momc
    
  • XCFrameworks现在可以在带有标志的库包中包含和调试符号文件。运行命令以获取其他用法信息。(64910707).dSYM``.bcsymbolmap``-debug-symbols``xcodebuild -create-xcframework -help

解决

  • 修复了以下错误:如果启用了更新的dSYM文件,则该产品不会以增量版本与产品一起复制。(44696736)DWARF_DSYM_FILE_SHOULD_ACCOMPANY_PRODUCT

  • 恢复了对新构建系统的支持。(45800765)(FB5711777)PRODUCT_DEFINITION_PLIST

  • 修复了一种竞态条件,在这种竞态条件下,使用同一XCFramework的多个目标可能导致不确定的构建失败。(53911952)(FB6878988)

  • 与配合使用时,其中的项目现在已被正确视为递归输入。(54635196)(FB7109342)USE_RECURSIVE_SCRIPT_INPUTS_IN_SCRIPT_PHASES``XCFileLists

  • 修复了一个错误,该错误可能导致标记的按需资源同时包含在资产包和产品中。这些资源现在仅包含在资产包中。(59008757)

  • 现在,将跟踪运行脚本阶段的输入文件,作为代码签名任务的输入,从而允许对这些文件进行修改,以正确触发增量构建上的代码签名。(59353913)

  • 修复了导致在macOS应用程序和其他平台上将其设置为比构建目标的部署目标更早的值的问题。(62617478)(FB7681463)LSMinimumSystemVersionInfo.plistMinimumOSVersion

已知的问题

  • 启用Mac Catalyst后,可能无法再使用Swift语言新建一个iOS项目。(67885114)

    解决方法:用替换@mainApp Delegate上的 注释。@UIApplicationMain

弃用

  • “构建设置”编辑器不再包含“有效体系结构”构建设置(),不建议使用。而是有一个新的“排除的体系结构”构建设置()。如果项目包括,则该设置将显示在“构建设置”编辑器的“用户定义”部分中。(15145028)VALID_ARCHS``EXCLUDED_ARCHS``VALID_ARCHS

  • 旧版构建系统已弃用,并将在以后的版本中删除。(62742902)

核心数据

解决

  • 当您使用Core Data创建多平台应用程序项目时,Xcode现在可以正确使用项目名称作为其数据模型。(67534882)(FB8483330)

核心ML

已知的问题

  • 当您单击“侦听”时,Core ML编辑器的“声音”分类器模型的“预览”选项卡不会显示分类结果。此外,添加音频文件时,单击“播放”按钮不会在音频播放时更新音频时间线。在创建ML应用程序中也会发生此问题。(67515312)

弃用

  • 不推荐使用Xcode中自动生成的模型接口上的默认初始化程序,而推荐使用init(configuration:)。在自动生成的模型界面上使用init(configuration:)或新引入的.load()方法,并适当处理模型加载错误。(62875309)

创建ML

新功能

  • 训练控制可帮助您在训练过程中探索模型并与之互动。可以暂停,保存,恢复和扩展训练过程。此功能需要macOS 11或更高版本。(45241965)

  • 通过新的样式转换模板,您可以训练深度神经网络来实时样式化照片和视频。此模板需要macOS 11或更高版本。(55848835)

  • 通过新的动作分类模板,您可以训练神经网络对视频片段中的单个人的动作进行分类。此模板需要macOS 11或更高版本。(56622350)

  • 当训练数据有限时,对象检测模板的新“转移学习”选项有助于提高模型的准确性。此功能需要macOS 11或更高版本。(58627183)

  • Word Tagger模板的新“转移学习”选项使用动态词嵌入来在训练数据有限时帮助提高模型准确性。此功能需要macOS 11或更高版本。(59281335)

调试

新功能

  • 当流程在断点处暂停时,Xcode将特定断点位置的命中计数显示为编辑器中断点注释的一部分。一个示例是“断点2.1(7)”,其中“(7)”代表位置2.1的7个匹配。(3836838)

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

  • 通过将断点动作拖放到“断点编辑器”中的其他位置来重新排序。(9777468)

  • 新的“在当前行处启用断点”和“在当前行处禁用断点”菜单项使您可以在代码中切换现有的断点。此外,您可以将键盘快捷键绑定到该菜单项以快速切换断点。(17924697)

  • 现在,您可以命名一个断点,并从另一个断点的操作中按名称引用它。例如,要启用先前禁用的名为“ MyBreakpoint”的断点,请在操作的“调试器命令”字段中键入。(25739693)break enable MyBreakpoint

  • 在调试器中暂停时,跳出块会展开并降落在带有调试符号的帧中。

    要以反汇编着陆,请在单击“越过”或“越出”控件时按住控制键。(29482033)

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

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

  • Xcode调试器注释将突出显示源代码,使其具有更高的不透明度,以提高在多个Xcode主题中的可见性。(53463745)

  • 视图调试器可识别运行时问题,并提供优化机会以提高UI的效率和响应能力。当您调试应用程序的视图层次时,“调试”导航器会提供建议。(56552710)

  • 要调试窗口小部件扩展,请运行扩展的方案。在小部件扩展方案的“参数”窗格中设置环境变量以配置调试会话。小部件支持一个或多个系列或大小。调试时选择家庭使用中,设置环境变量,或。如果扩展用于支持多个小部件,则可以通过设置环境变量以匹配小部件配置的属性来选择要调试的小部件。在MacOS,你可以通过设置指定WidgetKit模拟器的默认视图环境变量,,,或。(57059772,63777618)_XCWidgetFamily``small``medium``largeWidgetBundle_XCWidgetKind``kind``_XCWidgetDefaultView``timeline``snapshot``placeholder``info

  • 视图调试器现在支持保存和重新打开视图层次结构快照。使用调试栏中的“调试视图层次结构”按钮捕获视图层次结构后,可以选择“文件”>“导出视图层次结构”将其另存为.viewhierarchy文件。您可以重新打开保存.viewhierarchy在Xcode中的代码,以检查捕获的视图层次结构的状态。(57933113)

  • CALayer在视图调试器中选择a时,对象检查器现在将在屏幕外标志和组标志上显示说明性的工具提示。(58647887)

  • 如果已在“断点导航器”中禁用了断点,则可以使用上下文菜单删除所有禁用的断点。(59164503)

  • 使用为应用程序剪辑创建的方案调试应用程序剪辑。在方案中,环境变量可用于设置调试会话的App Clip体验URL。(59404002)_XCAppClipURL

  • 现在,视图调试器会为产生性能优化机会的运行时问题CALayer。选择“编辑器”>“显示图层”以在视图调试器中查看CALayers。选择“编辑器”>“显示优化机会”以显示或隐藏性能运行时问题。(60103476)

  • 调试>附加到进程和调试>分离现在位于菜单的中间,更靠近其余的调试菜单项。(60390611)

  • 现在可以将使用Xcode捕获的视图层次结构导出到.viewhierarchy文件中。(61065771)

  • ClockKit框架会在Xcode中生成运行时问题,以帮助您分析运行时错误。(61346475)

解决

  • 解决了一个问题,即在调试栏中单击的按钮在黑暗模式下无法适当更改其外观。(46294176)

  • 修复了在“调试”导航器中选择内存浏览器时可能发生的崩溃。(54767689)

  • 使用进行调试时lldbpo self现在在模拟的tvOS设备上以Swift代码显示指针的地址。(58477904,65150335)

  • Xcode会更及时地将Malloc堆栈日志记录选项保留在方案编辑器的“诊断”选项卡中。(59154142)

  • Xcode现在使用启动服务启动应用程序,以更好地反映真实的应用程序运行环境。(59478437)

  • 解决了一个问题,当用户在调试过程的视图层次结构中选择“聚焦于视图”时,导致视图调试器不显示任何内容。(60255111)

已知的问题

  • 打开调试仪表时,Xcode可能崩溃。(64181692)

  • 在iOS 14上调试窗口小部件不会启动扩展程序,或者调试器未附加到窗口小部件。(64274027,66920094)

    解决方法:从主屏幕删除小部件,清理项目,然后生成并再次运行。

设备

新功能

  • 现在,“设备和模拟器”窗口中的“添加设备”工作表可调整大小。(59611308)

  • 设备和模拟器窗口允许在导航器中选择多个设备,因此可以将它们取消配对。这使您可以更轻松地清理不再使用的设备的旧记录。(63290367)

已知的问题

  • 如果没有将应用程序剪辑添加到配对的iOS应用程序中,则无法调试WatchKit应用程序。(65784374)(FB8065876)

    解决方法:在WatchKit App Extension的构建目标的“常规”设置中设置“支持在不安装iOS App的情况下运行”。

  • 在macOS 11上,单击在“设备和模拟器”窗口中选择的设备的“查看设备日志”按钮时,Xcode可能会崩溃。(66303792)

    解决方法:Xcode将日志从连接的移动设备复制到本地目录。有关如何手动检索崩溃和能量日志的信息,请参阅在Mac或Windows计算机上查找设备崩溃和能量日志。要检索其他类型的日志,请使用获取故障报告和诊断日志中描述的工作流程。

  • 在macOS 11上,打开“设备和模拟器”窗口时Xcode可能崩溃。(66932201,67336055)

    解决方法:确保已信任与Mac配对的所有移动设备,以物理方式断开不希望用于开发的任何设备,并在“系统偏好设置”的“常规”面板中将“显示滚动条”设置为“始终”。

  • 在“设备和模拟器”窗口中取消配对设备时,Xcode可能会崩溃。(68156364)

  • 下载watchOS符号可能会花费比预期更长的时间。(68316765)

    解决方法:如果未填充符号数据,请退出并重新启动Xcode以重试下载。

文档查看器

新功能

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

仪器

新功能

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

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

  • 仪器现在将适用的CPU注释为“高效”或“性能”。选择一个CPU将显示相关的详细信息,包括数据受该CPU限制的调用树。(38031506)

  • 仪器现在可以从.logarchive文件导入数据。Instruments使用包含和工具的新日志记录模板导入这些文件。要自定义导入期间要使用的模板,请使用“文件”>“导入到模板…”(38422518)os_signpost``os_log

  • xctrace现在,该命令可以使用该--attach标志按名称附加到现有进程。(47649439)(FB5645940)

  • 现在,“文件活动”模板除了提供“磁盘读取”和“磁盘写入”的单个详细信息视图外,还提供了逻辑读取和写入的汇总统计信息。(52148749)

  • 系统跟踪模板在新记录和导入文件上的性能明显更高。(55037273)

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

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

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

解决

  • 修复了以下问题:在没有乐器的情况下,双击“调用树”节点以移动到源会失败。(32751506)

  • 现在,Instruments中的线程名称反映了开发人员使用线程命名API设置的值。(51279758)

  • 显着改善了跟踪保存和加载性能。现在,节省速度高达40%。打开跟踪文件的速度提高了80%。(51597633)

  • 修复了自定义工具上忽略详细信息属性的问题。(61944832)

已知的问题

  • 插入macOS应用程序时,“动画挂钩”模板不会显示挂钩间隔。(61082729)

弃用

  • instruments现在不推荐使用该命令,而建议使用它替换:xctrace。使用xctrace以备案,进口,并从仪器导出数据.trace文件。(36641078)

界面生成器

新功能

  • 添加了对macOS 11中引入的新功能的支持。(16915977)safeAreaLayoutGuideNSView

  • Interface Builder的画布具有一个新的小地图。您可以使用“编辑器”>“画布”>“小地图”显示和隐藏小地图。将小地图拖到画布的任何角落。您也可以在小地图中双击或命令单击以聚焦于特定场景。(19218249,63831585)(FB5891904)

  • 查找和替换现在在属性字符串文字中包含匹配项。(21508424)

  • Interface Builder现在具有的Current Date选项。(56048031)NSDatePicker

  • Interface Builder现在支持iOS 14中引入的两栏和三栏样式。(57025285)UISplitViewController

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

  • 在macOS 11中添加了对SF符号的支持(58480276)

  • 在macOS 11中添加了对新工具栏项目属性的支持。(58584394)isNavigational

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

  • 在macOS 11中添加了对的支持和新的内容类型属性。(59273897)NSTextViewNSTextField

  • 在macOS 11中添加了对新功能的支持。(59274307)toolbarStyle

  • subtitle在macOS 11中增加了对新属性的支持。(59274358)

  • 在macOS 11中添加了对新功能的支持。(59277905)NSSearchToolbarItem

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

  • 现在,您可以为情节提要和.xib文件编辑SF符号的渲染模式和符号比例。在图像选择器中选择SF符号时,图像名称下方会展开两个附加属性。要显示支持全色的SF符号,请将“渲染模式”设置为“原始”。(61844681,63280118)

  • 通过“自动”,“全角”,“插图”和“源列表”选项添加了对新功能的支持 。(61958249)NSTableViewStyle

  • 增加了对新UISwitch属性的支持,和。(62320185)preferredStyletitle

  • 添加了对新版式NSView边距指南的支持。(62908200)

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

解决

  • 修复了一个错误,在该错误中,IBDesignableInterface Builder第一次显示情节提要或时,视图未使用内部内容大小.xib。(23234553)(FB5797024)

  • 修复了有时会取消检查员的iOS文本样式的问题。(51854358)(FB6169763)

  • IBDesignable视图无法构建时,现在画布中的视图直接存在错误。现在,单击身份检查器中IBDesignable属性上的错误图标,将提供一个显示该错误的弹出窗口,以便于调试。(56408987)

  • 故事板和.xib文件现在将使用由提供的固有内容尺寸IBDesignable覆盖时,视图上。(56419405)intrinsicContentSizeNSView

  • 修复了在上忽略了“拼写检查”属性的错误。(60750116)(FB7636246)UITextView

  • 修复了启用了“保留矢量表示”的图像无法在画布中正确显示亮或暗变体的问题。(61243894)(FB7649981)

  • 改进了“大小”检查器中“视图”的“布局”属性的选项,以提高清晰度。(61561405)

    • “自动”选项现在名为“推断的”,它指示视图是使用约束还是使用自动调整大小的蒙版。视图,其布局是被推断的使用转换面膜自动调整大小成约束false时的视图是使用约束条件或处于自动布局容器,如一个或。否则,它将使用自动调整大小的蒙版并将自动调整大小的蒙版转换为的约束。NSStackViewUIStackViewtrue

    • 将“将自动调整大小的蒙版转换为约束”始终true用于布局为“ 自动调整大小的蒙版”的视图。

  • 修复了在tvOS故事板上使用图像堆栈时可能发生的崩溃。(62113733)(FB7671430)

  • 修复了故事板或画布中隐藏视图的一些性能问题。(63008369,64314634)NSTabView.xib

已知的问题

  • 在macOS Big Sur上,Interface Builder会以新的外观显示macOS故事板。但是,当您使用Xcode 12中的macOS Catalina SDK构建和运行应用时,拆分视图,表视图,工具栏和窗口标题可能与情节提要不匹配。(66612224)

弃用

  • Interface Builder不再提供对“可以同时绘制”属性的访问。您仍可以在代码中使用来配置此行为。(42437767)canDrawConcurrently

  • QTCaptureView和QTMovieView已被弃用,不再受支持。从情节提要和.xib文件中删除这些视图。(64263402)

连结中

新功能

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

  • 现在,如果您与dylib链接但不使用任何符号,则链接器将报告警告。如果您确实打算这样做,则可以使用代替来禁止所有此类警告,也可以根据需要单独标记未使用的框架。例如,在“其他链接器标志”中,添加。(60936600)-Wl,-warn_unused_dylibs``-needed_framework Foo``-framework Foo``-Wl,-needed_framework,Foo

解决

  • 使用该-map file选项时,.o现在可以更准确地跟踪为链接时间优化构建的文件中的功能和数据。(50031245)

  • 现在,当遇到有关未对齐指针的错误时,链接器现在将显示所有此类指针,而不仅仅是第一个。(61019996)

金属

新功能

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

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

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

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

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

已知的问题

  • 调试macOS Catalina应用程序时,Metal Debugger可能会显示空白的“摘要”和“内存”报告。(68599136)

组织者

新功能

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

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

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

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

已知的问题

  • 当使用Xcode 12并针对“所有兼容的设备变体”进行精简时,导出watchOS应用程序进行临时或开发分发可能会失败。(66637482)

    解决方法:不要变薄,或选择特定的目标设备。

游乐场

新功能

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

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

  • Xcode Playgrounds现在可以导入和使用Swift包和框架。在游乐场的文件检查器中选中“构建活动方案”复选框,并确保活动方案可以构建包或框架目标。(60612584)

解决

  • 现在,VoiceOver可以访问实时视图。(40548790)

  • 解决了使用Xcode Playgrounds时导致LLDB RPC服务器崩溃的问题。(59271354)

  • 现在,如果iOS和tvOS Playgrounds中的实时视图的大小为零,则它们将使用该视图的固有内容大小。(61068790)

  • 游乐场现在支持资产目录。(61110861)

  • 如果视图没有固有大小,则macOS Playground的实时视图会退回到合理的默认大小。(62065321)(FB7670503)

  • 如果Playground实时视图的大小为零,则横幅现在会指示为什么不显示实时视图。(63033441)

  • 现在,Xcode Playground会在其Resources文件夹中自动编译Core ML模型,并且Playground代码可以访问生成的ML模型界面。(63109576)

已知的问题

  • Xcode可能会显示文本“ No Editor”,而不是在创建Playground后立即打开其源代码编辑器。(56484197)

    解决方法:使用“视图”>“导航器”>“项目”显示“项目导航器”,然后手动选择“游乐场”。

预告片

新功能

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

  • 现在,每个预览都具有用于启动实时预览,在设备上预览,检查预览和重复预览的按钮。(47472549)

  • 画布具有添加修改器的全新集成体验。单击“检查预览”按钮以查看所选视图的修改器建议,并搜索要应用的修改器。(51696163)

  • 现在,代码完成功能会为SwiftUI视图和修饰符插入可编译的完成内容和示例。(55455037)

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

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

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

  • Xcode现在通过将修饰符添加到watchOS并发症中来支持预览SwiftUI watchOS并发症。(57848297)previewContext(_:)

  • Xcode现在支持应用剪辑的预览。(59227941)

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

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

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

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

解决

  • 现在可以在不完全重建活动方案的情况下更新包含预览的软件包。(51030302)

  • 针对iOS 14,macOS 11,watchOS 7和tvOS 14 SDK进行了重建,从而改变了的用法,从而可靠地领先于对齐内部视图。这是以前的行为,除了无法检测到中的单个静态视图时。(59722992)(FB7597816)GeometryReaderGeometryReaderGeometryReader

已知的问题

  • 您无法在“预览”画布的小部件中选择视图。(62517078)

  • 动画可能无法在实时SwiftUI预览中使用。(63333795)

  • 进行更改之前,可能无法显示macOS的Live SwiftUI预览,除非您单击画布上的Bring Forward按钮。(63865018)

  • 预览iPad设备的小部件扩展名可能会在顶部显示多余的空白栏。(64277772)

  • 应用外观修改器时,窗口小部件扩展预览不适合深色外观。(64277915).preferredColorScheme(.dark)

项目编辑

新功能

  • 文档类型,导出类型标识符和导入类型标识符窗格支持macOS 11中新的模板化文档图标。(59314567)

项目浏览器

新功能

  • 现在,项目导航器,源代码控制导航器,调试导航器(用于View Debugger和Memory Graph)和Reports导航器中的选择将跟踪活动编辑器的内容。(9546415)(FB5634395)

  • Xcode的导航器现在尊重系统的“侧边栏图标大小”,并允许独立于该设置进行更改。(11619444)

  • 现在,在“查找”导航器中的文件结果将用显示其工作区位置的路径进行装饰。(47196462)

  • 现在,项目导航器可以在键入过滤器术语并按Enter时控制文本匹配样式(“包含”,“不包含”,“开头为”或“结尾为”)。(56474089)

  • 现在,“快速打开”比赛更具针对性和重点。快速打开更适合查找不连续的单词匹配。键入“ resetDownload”与您期望的“ resetDocumentDownload”匹配。提高的准确性着眼于最佳匹配,而排除了最差的匹配。(59065704)

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

解决

  • 解决的在项目结构中添加和移动项目时发生的崩溃。(48644008,57752303)

  • 改进了项目导航器的性能,尤其是“项目导航器中的显示”和对组的递归展开/折叠操作。(49189414,60245991,6092575)

  • 过滤文本和SCM状态的项目结构时,提高了结果的稳定性和准确性。请注意,结果现在需要匹配所有过滤条件,而不是任何条件。(57708582、58099589、62128435)

现实作曲家

弃用

  • 由Xcode 12创建的Reality文件只能在macOS 10.15.4或更高版本,iOS和iPadOS 13.4或更高版本以及Reality Composer 1.4或更高版本中加载。(58825031)

重构

新功能

  • 现在,“编辑器”>“重构”>“重命名”将使用带有反引号转义的定义或引用来处理重命名符号。(46409010)

消毒液

解决

  • 在模拟watchOS设备上进行调试时,Xcode现在支持Thread Sanitizer。(54654296,64421085)

服务器

解决

  • 您可以在Xcode Server机器人的“存储库”选项卡上选择用于集成的分支。(58615215,59068222)

签署和分发

新功能

  • App Clip可以使用网络扩展框架并Hotspot Configuration Entitlement配置Wi-Fi网络。(64966949)

  • Xcode 12使您可以构建iOS应用程序,以便在具有Apple芯片的Mac上运行。确保已在https://developer.apple.com/account帐户中使用Apple芯片的硬件标识符(可在“系统信息”应用程序的“硬件”>“配置UDID”字段中找到)注册Mac。,在管理器窗口中找到存档,单击“分发应用程序”,选择“临时”或“开发”,选择分发选项,选择“自动管理签名”,然后继续进行分发助手的其余部分以创建IPA 。创建IPA后,您可以将其通过Apple芯片传输到Mac,然后双击以进行安装。在应用程序首次启动期间,系统将提示您打开“安全性和隐私”首选项窗格以启用该应用程序。要在首选项窗格中查看启动按钮,请确保Mac已配置为仅允许来自App Store和指定开发人员的应用程序。(68513041,68528315)。

已知的问题

  • 应用剪辑无法使用“通行证类型ID”权利访问电子钱包通行证。但是,App Clips可以确定电子钱包中是否已经存在特定的通行证,并在必要时提示用户添加通行证。如果您已将电子钱包功能添加到App Clip目标,则可能无法构建或将应用提交到App Store Connect。在目标编辑器的“签名和功能”窗格中删除电子钱包功能,并禁用或删除任何使用此已删除功能的代码。(65244156)

  • 导出档案时,Xcode自动签名可能不会自动在您的配置文件中包括带有Apple芯片的Mac。(66857321)

    解决方法:如果Xcode生成的IPA并未安装在您注册的Mac上,请在导出存档之前,从〜/ Library / MobileDevice / Provisioning Profiles目录中删除任何Ad Hoc分发或开发配置文件。

  • 由于代码签名错误,您先前在Apple Silicon Developer开发工具包上构建的开源软件可能不再运行。(68226054)

    解决办法:使用Xcode 12重新构建软件,或者使用进行重新签名codesign -s - --preserve-metadata=identifier,entitlements,flags,runtime -f

仿真器

新功能

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

  • 模拟的watchOS 7设备支持64位进程。要验证watchOS项目在Simulator中是否为64位纯净,请确保ARCHS将其设置为默认值。(54654060,66352876)

    注意

    在具有Apple芯片的Mac上的Simulator中,项目必须是64位干净的,不支持32位代码。

  • 窗口>停留在最前可使设备窗口位于其他应用程序窗口的前面。(57060945)(FB7439463)

  • 当设备窗口失去焦点时,它将暂停捕获从“将指针发送到设备”和“将键盘输入发送到设备”的输入事件,直到模拟器重新获得焦点。(57351155)

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

  • 模拟器支持为支持该功能的设备模拟“邻近交互”。在屏幕上四处拖动设备窗口将更新两个设备之间的模拟距离。窗口在屏幕上的距离越远,报告的距离就越大。(62227375)

解决

  • 现在,“下载组件”首选项窗格会提示一次身份验证,以下载和安装旧版模拟器,而不是每次安装时都提示身份验证。(22993731)

  • 当客户端快速连接和断开连接时,CoreSimulatorService不会使用太多的CPU。(53220616)

  • 模拟器现在允许选择“物理尺寸”,“点精确度”和“像素精确度”尺寸选项,即使所选择的选项导致部分窗口不在屏幕上。(56163353)(FB7366108)

  • 现在,从应用程序商店更新Xcode,移动Xcode或重命名Xcode时,模拟器运行时仍然存在。(58100481)

  • 在按住键的情况下进入键盘捕获或指针捕获模式时,Simulator不再将这些键卡在macOS中。退出捕获模式时,正确的向左或向右击键事件会传递给来宾,以防止其认为修饰键被卡住。(60174685)

  • 模拟器不再在自定义设备集中创建默认设备,从而恢复了Xcode 11.3的行为。(63750578)(FB7717786)

  • 修复了一个错误,该错误在模拟器已经运行时在模拟器中启动应用程序有时会失败,并显示错误“等待Simulator.app准备就绪而超时”。(64508635)

  • 修复了一个问题,该问题使Xcode无法在使用项目的情况下为模拟watchOS设备编译项目。错误消息是“在范围内找不到’SignInWithAppleButton’”。即使项目导入了SwiftUIAuthentication Services,也会发生这种情况。(67817241)SignInWithAppleButton

已知的问题

  • 在具有content-available密钥集的Simulator中模拟推送通知时,系统将调用而不是。(60426170,60974170)(FB7625283)application(_:performFetchWithCompletionHandler:)application(_:didReceiveRemoteNotification:fetchCompletionHandler:)

  • 在模拟的12.9英寸iPad Pro上激活显示缩放功能会使模拟设备的显示失真。(67455180)

    解决方法:重新启动模拟设备以返回正常显示。

  • 如果在启用CarPlay的情况下启用或禁用缩放模式,则尝试与CarPlay进行交互将导致部分重启模拟的iOS设备。(67534104)

    解决方法:关闭CarPlay窗口,然后重新启用或重新禁用CarPlay。

弃用

  • 在macOS 11上运行时,Simulator支持iOS 11.4或更高版本。(59938106)

源代码控制

新功能

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

源代码编辑器

新功能

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

解决

  • 修复了调试控制台中大量日志输出可能导致的崩溃。(49261867)

  • 编辑器现在保留粘贴文本的相对缩进,而不是重新缩进文本。可以在“首选项”>“文本编辑”>“缩进”中进行控制。(52348424)

  • 修复了一个问题,即在源文件大多为平面层次结构的大型项目中,该过程会占用大量内存。(53835770)com.apple.dt.SKAgent

  • 修复了代码完成有时会提示类名而不是变量名的问题。(56887185)

  • 修复了系统标题的跳转栏中显示错误内容的问题。(57509269)

  • 修复了粘贴到多个插入点会将选择重置为单个插入点的问题。(57572639)

  • 修复了代码完成会在最近使用的列表中建议使用不区分大小写的匹配候选项而不是小写且区分大小写的匹配候选项的问题。(57962108)(FB7495633)

  • 修复了以下问题:在文档中键入反引号,而未选中“文本编辑”首选项“启用键入完成”,则会插入额外的反引号。(58011556)

  • 修复了在Xcode之外编辑文件会导致Xcode在启动时崩溃的问题。(58272739)

  • 修复了Xcode无法正确将编辑内容DateData值保存在属性列表文件中的问题。(58836269)

  • 改进了代码完成中的显示顺序,以区分与参数类型匹配的符号的优先级。(59066628)

  • Swift代码完成中现在支持用户定义的标称类型的可调用值。代码完成显示了基本表达式后的括号后面的调用签名。(59302416)

  • 现在,当调试器点击折叠代码或在Breakpoint导航器中选择折叠代码时,隐藏在多个代码折叠中的断点现在可以正确展开折叠的代码。(59445409)

  • 修复了折叠代码有时会导致崩溃的问题。(60170676)

  • 修复了多个大型重构后Xcode会挂起的问题。(61749114)

  • 修复了编辑Objective-C类别名称有时会导致崩溃的问题。(61860583)

  • 修复了尾随空格折叠代码有时会导致崩溃的问题。(62218489)(FB7673070)

已知的问题

  • 新的Xcode Source Editor扩展目标不会自动在扩展中设置嵌入。(59274389)XcodeKit.framework

    解决方法:手动嵌入扩展中。XcodeKit.framework

弃用

  • 为了与macOS 11中的新安全功能兼容,必须使用Xcode 12构建Xcode扩展,并且必须将embed嵌入。使用这些工具重建的Xcode扩展与旧版本的Xcode和macOS兼容。(51822755)XcodeKit.framework

StoreKit

新功能

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

    在App Store Connect中进行设置之前,请在本地配置应用内购买信息以进行测试,而无需连接到App Store服务器。有关入门的更多信息,请参阅在Xcode中测试应用内购买在Xcode中设置StoreKit测试。测试环境支持早期开发,单元测试和调试应用内购买,如使用Xcode和Sandbox在开发的所有阶段进行测试中所述。

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

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

已知的问题

  • StoreKit事务管理器中选择“订阅选项”时,Xcode崩溃。(68354368)

    解决方法:使用StoreKit测试框架测试降级,交叉升级或升级订阅。

迅速

新功能

  • 改进了链式方法调用的缩进,特别是那些涉及嵌套或结尾闭包的缩进。(25519439)(FB5472851)

  • 改进了使用SwiftUI的List初始值设定项时的错误消息,该初始值设定项接受的可识别数据集合的元素类型不符合Identifiable。(51519565)(FB6130940)

    例如,以下代码:

    import SwiftUI
    struct NotIdentifiable {}
    let data: [NotIdentifiable] = []
    List(data) { _ in    Text("Row")}
    

    现在会产生错误消息:

    error: initializer 'init(_:rowContent:)' requires 'NotIdentifiable' conform to 'Identifiable'List(data) { _ in^
    
  • Swift缩进现在使guardand if语句中的条件列对齐。(53131527)(FB6688335)

    例如:

    guard let x = someOptional,      let y = anotherOptional else {  // ...}
    
  • 现在,编译器将defaultDictionary访问期间计算自变量的代码中诊断专有性违规。(SR- 11700,56378713)

    struct Container {  static let defaultKey = 0
      var dictionary = [defaultKey:0]
      mutating func incrementValue(at key: Int) {    dictionary[key, default: dictionary[Container.defaultKey]!] += 1  }}// error: overlapping accesses to 'self.dictionary', but modification requires exclusive// access; consider copying to a local variable//     dictionary[key, default: dictionary[Container.defaultKey]!] += 1//     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~// note: conflicting access is here//     dictionary[key, default: dictionary[Container.defaultKey]!] += 1//                              ~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
    

    可以通过default使用局部变量预先计算参数来避免排他性冲突。

    struct Container {  static let defaultKey = 0
      var dictionary = [defaultKey:0]
      mutating func incrementValue(at key: Int) {    let defaultValue = dictionary[Container.defaultKey]!    dictionary[key, default: defaultValue] += 1  }}// No error.
    
  • 现在,当不太可能发生参考周期时,Swift允许隐式使用selfin @escaping闭包。(SE- 0269,56408426)

    首先,如果用户已在闭包的捕获列表中明确捕获,则现在允许隐式使用selfin @escaping闭包self,因此以下代码现在有效:

    class Test {  var x = 0  func execute(_ work: @escaping () -> Void) {    work()  }  func method() {    execute { [self] in      x += 1    }  }}
    

    其次,当为值类型时,隐式self@escaping闭包中可用self,使以下代码有效:

    struct Test {  var x = 0  func execute(_ work: @escaping () -> Void) {    work()  }  func method() {    execute {      x += 1    }  }}
    
  • 现在,使用默认初始化而在包装属性上没有空括号的情况下,具有附加属性包装器的属性现在可以依靠类型推断来推断包装的值类型。(59471019)

    例如:

    @propertyWrapperstruct IntWrapper {  var wrappedValue: Int { 0 }}
    struct UseWrapper {  @IntWrapper var value}
    

    包装的属性使用的默认初始化,并且依赖于类型推断来推导类型包装的值类型为。UseWrapper.value``IntWrapper``Int

  • 为了缩短增量编译,Swift现在为每种类型(和协议)主体保留单独的指纹。这些类型的体指纹意味着,如果你改变的身体structenumclass,或protocol在一个文件中还定义了其他structenumclassprotocols,仅将更改的实体将被算作“脏”重新编译其他文件的目的。(59954707)

    例如,假设您有一个定义两个的文件structs

    struct A {}struct B {}
    

    并将成员添加到A

    struct A {  var x = 17}struct B {}
    

    在进行此更改之前,编译器将使用A或重新编译任何文件B。现在,编译器不会重新编译仅使用的文件B

    如果您在使用此功能时遇到问题,请-disable-type-fingerprints通过Other Swift Flags构建设置传入Swift编译器以将其禁用。如果仍然遇到问题,请-disable-fine-grained-dependencies通过Other Swift Flagsbuild设置传入Swift编译器,以禁用新的依赖项基础结构。

  • Xcode 12支持@main在基于UIKit或AppKit的应用中使用或代替它们。(60502727,60502804,63291088)@UIApplicationMain``@NSApplicationMain

  • where即使声明本身没有附加的通用参数,泛型上下文中的声明现在也可以具有子句。(SE- 0267,64228492)

    例如:

    struct Box {    func boxes() -> [Box] where Wrapped: Sequence { ... }}
    
  • lazy属性现在可以具有和/或观察者。(64229062)didSet``willSet

  • Swift 5.3引入了一个标识符,该标识符产生的字符串比短。该字符串包含文件名和模块名称,但是省略了文件的其余路径。这样可以节省空间,提高性能,并避免将私有信息(如开发人员的主目录名称)意外地嵌入二进制文件中。编译器生成的错误消息(例如,强制展开)和标准库断言(例如,现在使用字符串),我们建议您在生产代码中使用它们,而不是在代码中使用它们。(SE- 0285,65514304)#fileID``#file``#fileID``precondition``fatalError``#fileID``#file

  • 现在,尾随的闭包与从第一个闭包参数开始并向前移动的功能参数匹配。这允许默认的关闭参数更自然地与多个尾随的关闭一起工作(SE-0286SE- 0279,65615074)

    例如,函数:

    func animate(    duration: Double,    animations: @escaping () -> Void,    completion: ((Bool) -> Void)? = nil)
    

    当称为:

    animate(duration: 0.25) {  // animations}
    

    将结尾的闭包与animations参数匹配。然后,您可以使用新的“多个结尾闭包”功能来指定完成处理程序:

    animate(duration: 0.25) {  // animations} completion: { finished in {  // completion handler}
    

    新的警告标识了新的尾随匹配规则与旧规则不同的情况。例如:

    func f(a: () -> Int = { 17 }, b: () -> Int = { 42 }) { }
    f {  0}
    

    在这种情况下,编译器仍然会应用旧的(向后)规则(结尾的闭包将与parameter匹配b),但是编译器会生成警告和Fix-It,它指示代码将在将来的语言版本中更改行为:

    backward matching of the unlabeled trailing closure is deprecated; label the argument with 'b' to suppress this warning
    

解决

  • Swift现在支持对协议方法的未应用引用。以前,这仅适用于在结构,枚举和类中定义的方法。(21289579)(FB5819096)

    例如:

    protocol Cat {func play(catToy: Toy)}
    let fn = Cat.play(catToy:)fn(myCat)(myToy)
    
  • 当元素对齐时,Swift缩进不再使出现在调用参数,参数列表,数组和字典文字或元组中的多行表达式缩进。(48934744)

  • 修复了涉及super类型super错误的表达式中发生的编译器崩溃。(50819554)

  • 实验功能生成器功能现在已正确应用于单表达式闭包。(56340587)

    例如:

    @_functionBuilderstruct ArrayBuilder {    static func buildBlock(_ values: T…) -> [T] {        values    }}
    func array(@ArrayBuilder builder: () -> [Int]) -> [Int] {    builder()}
    array { 0 }
    

    这些闭包已经在SwiftUI中起作用了,因为它们仅返回一个View,这就是将转换应用于它们的全部工作。但是,并非所有函数构建器转换都具有此属性,现在它们应该可以正常使用。ViewBuilder

  • 修复了使用属性包装器(其包装的值具有变异的getter和非变异的setter)时发生的编译器崩溃。(56467140)

  • Swift编译器不再在兼容性标头中为空扩展名或仅具有私有成员且没有公共合规性的扩展名打印导入。

    依赖那些可移植导入的Objective-C / C源文件可能会引起有关缺少声明的错误,因此需要使用显式导入进行更新以按预期进行编译。(57133517)

  • 修复了由于将使用导入的Objective-C接口导入Swift 而导致的崩溃。(59306590)(FB7571694)objc_runtime_name

  • 修复了在子类中使用附加的属性包装器重写属性以实现属性观察器时发生的编译器崩溃。(60093232)(FB7615016)

  • 修复了初始化属性包装器可以在初始化所有属性包装器之前调用属性观察器的问题self。(60832285)

  • 修复了全局重命名可能会更改SDK标头的问题(62607314)(FB7681195)

  • 为发布而构建时,小部件不再崩溃。如果您先前禁用了解决此类崩溃的功能,则可以重新启用它。(65862827)DEAD_CODE_STRIPPING

  • 启用位码或将“条带样式”设置为“所有符号”时,小部件不再崩溃。如果您关闭了窗口小部件目标的构建设置中的“所有符号” 并从中取消设置,则可以还原这些解决方法。(66402358)ENABLE_BITCODE``STRIP_STYLE

已知的问题

  • 函数构建器主体包含空的switch语句时,编译器可能会崩溃。在SwiftUI视图主体中输入switch语句时,此问题还可能导致SourceKit崩溃。(65983237)(FB8111944)

迅捷包

新功能

  • 现在,您可以为Swift包的目标依赖项声明条件,例如通过平台限制依赖项。这使您可以更加灵活地描述支持多个平台的复杂目标依赖关系。(40237402)

  • Swift软件包现在可以包含资源,例如图像,资产目录,情节提要和其他文件。当Xcode构建依赖于程序包的应用程序时,它会将程序包的代码和资源添加到应用程序包中,以便在运行时使用。有关更多信息,请参见使用Swift软件包捆绑资源。(54361843)

  • Swift软件包现在可以出售作为XCFrameworks分发的预构建库,从而允许依赖于不能作为源代码分发的库。Xcode构建使用此类软件包的应用程序时,会将库嵌入到应用程序包中。有关更多信息,请参见将二进制框架分发为Swift软件包。(56592977)

  • Swift软件包现在可以包含软件包中任何资源的本地化内容。除了资产目录中的本地化内容外,Xcode还支持文件.lproj夹中单独的本地化文件。有关更多信息,请参见本地化软件包资源。(56925255)

已知的问题

  • 打开包含程序包引用的工作区时,可能会出现带有“数据库已锁定”消息的程序包解析错误。(61113361)

    解决方法:关闭并重新打开工作区。

测试中

新功能

  • XCTAssert和Objective-C中的相关断言宏现在可以在子类的实例方法以外的上下文中使用。(4176422)XCTestCase

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

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

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

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

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

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

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

    func testAppLaunchToResponsive() throws {    measure(metrics: [XCTApplicationLaunchMetric(waitUntilResponsive: true)]) {        app.launch()    }}
    
  • 现在,Xcode在计算在运行测试时要包含在DYLD_FRAMEWORK_PATH和DYLD_LIBRARY_PATH环境变量中的内置产品目录列表时,会排除静态库目标。(55254152)(FB7249507)

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

    func testScrollingAnimationPerformance() throws {  let table = app.tables.firstMatch  measure(metrics: [XCTOSSignpostMetric.scrollDecelerationMetric]) {    table.swipeUp(velocity: .fast)  }}
    
  • 如果在等待期望的过程中(例如在执行过程中或类似方法时)测试过程停顿,则Xcode将捕获测试过程的转储并将其附加到测试报告中。以前,Xcode终止了测试过程,并在下一个测试中重新开始执行。要继续防止测试停滞,请在测试计划中启用“测试超时”设置。(57163494)waitForExpectations(timeout:handler:)XCTWaiter

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

  • XCUIElementXCUICoordinate现在允许执行滑动并拖动时的交互指定速度。(58059937)

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

  • XCTAssertEqual(_:_:accuracy:_:file:line:)并且现在接受任何需要的值,而不是价值。这允许将非浮点数字类型(例如)作为表达式值或参数传递。(58481784)XCTAssertNotEqual(_:_:accuracy:_:file:line:)NumericFloatingPointIntaccuracy

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

  • 如果您在源代码编辑器中单击测试或测试类旁边的菱形,并且该测试不在活动方案或测试计划之外,则Xcode将显示一个工作表,允许您选择包含您所测试的特定方案或测试计划。想跑。(59223004)

  • 现在,“测试报告”中的“失败”和“跳过范围”栏按钮将显示所有运行失败或被跳过的测试,而不是仅显示所有运行失败或被跳过的测试。(59401757)

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

  • 现在,在启用了测试计划的方案中运行测试时,Xcode现在可以使用方案的“运行”操作的“选项”选项卡中的“调试XPC服务”设置。(60439063)

  • 现在可以在“测试计划编辑器”中自定义“默认执行时间津贴”和“最大执行时间津贴”。这些设置在启用“测试超时”时适用。(61607966)

  • 现在,当UI查询超时或目标应用程序没有迅速变为空闲时,XCTest现在在UI测试期间附加一个spindump诊断。(62076023)

解决

  • 现在,在切换到其他导航器或从其他导航器切换以及更改过滤器和方案时,“测试”导航器可以正确记住其选择状态和滚动偏移。(16308307,24918098)

  • UI目标查询现在可以定位到iOS共享表中的所有单元格。(49961747)

  • 解决了一个错误,该错误导致在未打开“测试”导航器时,阻止菱形出现在源代码编辑器中的测试方法和类旁边。(54216504)

  • 记录了没有任何源代码位置的测试失败后,Xcode现在会在源代码编辑器中显示失败注释,并提供一个链接,以从“问题”导航器跳转到该测试方法。(58118593)

  • 解决了可能导致键盘修饰符在调用后如果该块引发未处理的异常而持续存在的问题。(58376575)performWithKeyModifiers:block:

  • 现在,包含参数的XCTest API 使用Swift 5.3中引入的文字作为默认参数值。XCTest需要到源文件的完整文件路径,以进行错误报告并跳转到Xcode中的故障。有关更多信息,请参见关于SE–0274 和“快速”部分的注释。(58496553)file: StaticString = #file``#filePath#filePath

  • 现在,可以在项目导航器中的目录级别之间移动测试计划文件,从而在方案中正确更新对这些文件的引用。(59171975)

  • 如果在用户界面测试中删除了Xcode,该Xcode将重新安装该应用。(60159203)(FB7616398)

  • XCTest现在支持使用XCTSkipin 和将测试标记为已跳过。尽管在调用拆解方法时测试方法可能已经运行完毕,但是这对于“追溯”标记测试不符合条件或结果无效可能很有用。(60634152)tearDown()tearDownWithError()

  • 解决了该方案使用测试计划时xcodebuild不尊重该选项的问题。(62605817)-enableCodeCoverage

  • xcodebuild``-parallel-testing-worker-count并行运行测试时,不再忽略该选项。(64495567)

已知的问题

  • 当与结合使用动画时,模拟的设备不支持动画性能指标(故障总数,故障总持续时间,故障时间比率,帧频和帧数)。(63766090)os_signpostXCTOSSignpostMetric

    解决方法XCTSkip用于跳过模拟设备上的性能测试。

弃用

  • Xcode现在支持在运行iOS 9.0及更高版本的iOS设备上调试应用程序并运行测试。(59561001)

  • XCTAssert和Objective-C和Objective-C ++中的相关断言宏不再包含self访问当前测试用例的引用。设置了-Wunused-variable-Wunused-lambda-capture标志后,编译器现在可以发出有关代码的新警告,该代码声明的显式变量或lambda捕获self。删除self变量或lambda捕获,因为不再需要XCTAssert。(60017011)

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付 79.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值