static int value1 = 0; // Stored in __DATA
static int value2 = 0; // Stored in __DATA
const int * const valuePtr = &value1; // Stored in __DATA_CONST
// ERROR: Attempting to store a value to a constant pointer
(int *)valuePtr = &value2;
Clang 现在支持用于 iOS 13、macOS 10.15、watchOS 6 和 tvOS 13 的c++ 17 <filesystem>库。(50988273)
当使用手动保留释放时,可能不会捕捉到以下方法或它们传递调用的任何函数或方法抛出的异常: release、autorelease、retain、alloc或allocWithZone
。(50253394)
已解决的问题
当 Xcode 将 if (@available(…))
链接到运行在 iOS 13、macOS 10.15、watchOS 6或tvOS 13 上的应用程序或框架中时,if (@available(…))
检查可以正常工作。(51109405)
删除 <experimental/optional>
和 <experimental/ variable >
标头。使用c++ 17
中的 < optional >和< variant >
来替代。(50175894)
解决了优化器循环不变代码运动传递中的长编译时问题。(39648918)
Asset Catalog
现在可以使用菜单或键盘快捷键剪切、复制、粘贴和复制资产。(27107912)
Localized assets 中的本地化资产与用户首选的语言和地区不匹配。(49565973)
已解决的问题
如果您按下 Command-U
或在 navigator
区域中选择一个 Localized assets,Xcode将不再崩溃。(52211868)
修正了在使用 Interface Builder 的图像检查器时,如果资产目录包含一个符号和位图图像资产,并且它们具有相同的名称,则可能发生崩溃的问题。(51279661)
添加到资产目录的新用户定义图像将显示在图像视图图像组合框中(51090225,51120715)
修正了导致 Mac Catalyst 的 NSDataAsset 在运行时返回nil的问题。(50022757)
解决了一个问题,当一个资产具有为iPad 和 Mac Catalyst指定的变量时,会导致 NSDataAsset 查找返回错误的数据。(49990047,51278348,51288447)
Build System
如果测试是使用测试计划运行的,现在可以使用测试计划的代码覆盖率设置来配置哪些目标应该包括在代码覆盖率结果中。(50502861)
Xcode 默认情况下使用响应文件将输入文件传递给Swift编译器。要关闭此行为,请将 USE_SWIFT_RESPONSE_FILE
设置为 NO
。
您可以在目标中使用无限数量的 Swift 文件。(35879960)
运行脚本阶段和自定义构建规则可以声明和发出依赖项文件,使用一些编译器和构建工具使用的 makefile
样式的 .d
格式输出。在确定是否应该执行规则或阶段时,构建系统将检查列出的文件,以了解后续构建过程中的更改。(49226986)
项目现在可以使用定制的构建规则来处理头文件(APPLY_RULES_IN_COPY_HEADERS)
。(48185100)
自定义构建规则现在可以指定在执行期间使用的附加静态输入文件。使用SCRIPT_INPUT_FILE_#
环境变量为规则脚本提供这些已解析的输入文件路径。(49645853)
Xcode 从信息中删除了一些条目。如果条目不适合为其构建的平台,则在构建时使用产品的 plist
文件,这对于配置为为多个平台构建的目标非常有用。可以通过将构建设置 DISABLE_INFOPLIST_PLATFORM_PROCESSING
设置为 YES
来禁用此行为,在这种情况下,目标必须承担适当管理这些条目的责任。(47797497)
自定义构建规则现在可以声明它们应该在每个体系结构中运行一次(默认情况下),或者在所有体系结构中只运行一次。这对于与体系结构无关的自定义规则非常有用,例如,代码生成工具生成的文件不会因体系结构而异。(47716990)
XCFramework 允许将适用于多个平台(包括iOS设备、iOS模拟器和Mac Catalyst) 的二进制框架或库打包到一个可分发的. XCFramework包中,开发人员可以在自己的应用程序中使用这个包。可以将.xcframework
包添加到Xcode
目标的链接库阶段,并且Xcode在构建时使用所包含框架或库的正确平台版本。使用xcodebuild -create-xcframework
命令行支持创建框架。捆绑在XCFramework
中的框架或库应该与发行版构建设置设置为 YES
的构建库一起构建。(49948269)
增量构建可能无法对项目的非源相关更改(如资源文件修改)进行正确的协同设计,这可能导致应用程序无法启动。(41254808)
解决方案 :在相同的目标中更改源文件以触发 codesign
流程,或者执行一个干净的构建。
为Mac Catalyst更新iOS应用程序可能会显示新的错误诊断,说明Mac
上没有某些框架或功能。如果其中一个诊断显示错误,可以通过将VALIDATE_WORKSPACE
构建设置设置为NO
来禁用它。(50607174)
新的构建系统不计算到用户主目录的构建设置路径中的前导波浪号(~)。(41339901)
解决方法:使用 $(HOME)
代替。
如果目标启用 RUN_CLANG_STATIC_ANALYZER
,那么单个文件处理命令(如Compile、Preprocess、Show Assembly
)将不能正确工作,因为它们生成静态分析器输出文件,而不是适当的输出。(43340227)
解决方法:在目标中禁用RUN_CLANG_STATIC_ANALYZER
。
如果应用程序承载的测试目标的构建(其中定义了TEST_HOST
)失败,那么后续的构建可能会在签署应用程序产品时失败,因为在应用程序的初始签名时,测试目标是不完整的,并且是未签名的。(43402096)
解决方法 :执行一个干净的构建。或者,从app target
的产品中手动删除未签名的测试包并重新构建。
覆盖iOS
架构和有效架构构建设置的目标可能需要删除或限制覆盖,以便正确地为Mac Catalyst
构建。(51074742)
当在macOS 10.15
上使用Xcode
时,一些文件——特别是.xib文件和storyboard文件——可能会被复制而不是编译,从而导致不正确的构建产品。(49351105)
解决方法:在正在复制的文件的文件检查器中,将类型弹出框从默认值切换到<some type>,然后返回默认值。这将重置项目文件中的文件类型为正确的类型,并使构建系统能够将其匹配到正确的工具来处理它。
当用户第一次构建时,可能会出现一个弹出窗口,说明SimulatorTrampoline
希望访问桌面文件,因为运行在simulator
中的ibtool
需要访问这些文件来编译故事板。(51114450)
解决方案:允许在提示符中访问文件。
已解决的问题
当使用 Xcode Server
中的测试计划在多个配置下运行测试时,集成报告现在可以正确地显示测试所运行的每个配置的名称。(53402104)
如果更改活动测试计划文档在test navigator
是可见的,如添加或删除一个测试目标,或启用或禁用一个单独的测试或测试类——navigator
现在更新立即响应的变化而变得不同步测试计划。(52065983)
如果修改了活动测试计划文档中的设置,并且随后调用test Again操作来重新运行上次运行的测试,那么修改后的设置现在将生效,而不是使用先前的设置。(51145300)
macOS
现在支持按需资源(ODR)。(50358184)
使用遗留的构建系统特性,如构建规则或脚本阶段发现的依赖文件、定制构建规则的输入声明,或APPLY_RULES_IN_COPY_HEADERS
构建设置,将生成一个错误,而不是无声地被忽略。(51318274)
在Watch
目标中,将架构构建设置覆盖为仅仅armv7k
并不会阻止部署到TestFlight
或Xcode
的企业分发工作流。(51104990)
索引器不会在索引Swift
响应文件之前等待执行构建。(52110336)
在关闭和重新打开一个项目之后,或者在使用xcodebuild
执行增量构建时,来自先前构建的关于不兼容框架、应用程序扩展和代码签名设置的诊断信息现在会在问题导航器和构建日志中显示。(51131884)
默认情况下,Xcode
的新构建系统不会检测作为shell脚本
构建阶段输入声明的目录中的更改。启用构建设置allow_recursive_script_input
会导致它这样做。但是,如果目录中的任何文件是由依赖于脚本阶段输出的任务生成的,则会发出
依赖循环错误,必须通过重组目标来解决。(41126633)
当构建一些使用随需应变资源的目标时,构建系统不再崩溃。(49072702)
Command Line Tools
已解决的问题
python3
和pip3
命令不再错误地失败,不再出现声称只安装命令行工具时需要Xcode
的错误。(53284703)
当使用macOS Catalina 10.15 beta 4
时,可以使用默认的shell
路径使用pip3
。(50877974)
Python 3
在命令行工具包中可用。(51727440)
Xcode
的内置usdz_converter
工具已被弃用,将被删除。使用增强现实资源下的更新工具套件Augmented Reality。(52922369)
Core Data
现在有一个复选框,使您能够区分string
属性的默认值是nil还是空字符串。设置时,如果没有指定其他默认值,则默认值为空字符串。(26534406)
Xcode 11
数据模型文件格式不再为实体或属性写出或保存已废弃的同步服务信息。(32524648)
Core Data
数据模型编辑器在使用Xcode 11
数据模型文件格式和适当的部署目标时,添加了对派生属性的支持。(45567066)
当使用Core Data
创建应用程序时,会出现一个新的复选框来启用CloudKit
对数据模型默认配置的支持。对于使用新的配置检查器的现有数据模型,也可以启用此功能。当数据模型配置支持CloudKit
时,数据模型编辑器执行额外的验证,以确保模型符合Core data CloudKit
支持的需求。(51126024)
已解决的问题
与CloudKit
一起使用时,Core Data
模型中的属性必须是可选的,或者具有默认值。Xcode 11 beta 3
和更早版本错误地要求这样的属性是可选的,并且具有默认值。(51593507)
如果使用UUID
属性类型、URI
属性类型或持久性历史记录特性,在使用Xcode 9
中使用的格式之前的数据模型文件格式时,将正确地生成错误。(50188371)
Create ML
Create ML
中提供了活动分类、表格分类和单词标记模板。
Create ML
中提供了对象检测和文本分类模板,加入了图像分类和声音分类模板。从macOS 10.15 beta 3
开始使用这些模板。(52009035)
您现在可以使用声音分类预览直接从麦克风对声音进行分类。(52131594)
Live listen
在没有麦克风的设备上崩溃。(53405469)
声音分类器中的进度图可能无法正确更新。(52911042)
Debugging
视图调试器现在在检查器中显示NSImage
实例的名称。(35516797)
用于调试视图层次结构的Size检查器中的图形筛选器标识所选视图上的哪些属性受到约束。在筛选器中选择属性将显示的约束缩小到与该属性匹配的约束。标准修饰符键(如Shift和Command
)可用于展开显示匹配这些属性的约束的组合的选择。(44864394)
现在可以调试watchOS
应用程序的视图层次结构。(45173634)
现在,您可以从设备和模拟器窗口模拟连接设备的网络条件和热状态。(44608479)
视图调试器在调试导航器和画布中显示UIWindowScene
实例。(45378799)
可以在scheme选项中禁用视图调试。(45928299)
用于调试视图层次结构的大小检查器有关于约束的更多细节,包括过滤器、编辑器中的悬停高亮显示和更好的描述。(16153188)
视图调试器支持调试Mac Catalyst
应用程序。(37507479)
视图调试器检查器显示 NSImageView 和 NSButton 的 contentTintColor 。(49506123)
视图调试器现在显示iOS
命名的名称和系统颜色。(45162028)
视图调试器显示特征集合信息。(45161975)
视图调试器显示UIImage
实例的名称。(45327089)
视图调试器现在显示符号信息,如基线和中线。(49508874)
调试栏外观切换器支持在iOS
上在暗模式和亮模式之间切换。(45161907)
Scheme
编辑器的Diagnostics
选项卡中的“暂停问题”复选框被常规断点替换。可以使用断点导航器创建运行时问题断点。(31409112)
使用环境覆盖(可从调试栏访问)覆盖已调试流程的外观、动态类型和可访问性选项等系统设置。(45848655)
调试器支持使用崩溃日志(。崩溃文件)。(48408310)
调试器可以调试tvOS
的顶层扩展。(48869701)
在安装或调试应用程序时,Xcode
更喜欢使用Wi-Fi连接手表。
断点的VoiceOver
操作菜单包含一个跳转到相应代码行的操作。(44941178)
在调试带有约束的视图时,双击size
检查器中的约束将在编辑器中选择该约束,并在检查器中显示约束的信息。(18842905)
在 watchOS 6
中,APNs请求头中需要一个APNs -push-type
键。为正在发送的通知类型指定警告或背景。Xcode
中的模板APNs
文件默认情况下不包含这个头文件。(50709418)
调试符号可能无法用于Apple Watch
。(26995636)
解决方案:验证您有一个工作的互联网连接,并在首选项>帐户中登录到您的苹果ID。
在watchOS
模拟器中调试手表应用程序可能会在模拟器首次启动时失败。(50263836)
解决方法:等待手表模拟器完成引导,然后再次开始调试。
App
和热状态跟踪的能量冲击仪可能会停止更新。(50968828)
解决方法:停止并重新运行应用程序。
已解决的问题
修正了当在调试导航器中拖动进程项时,macOS 10.15上的Xcode
崩溃。(48453949)
您可以调试设备上的交互式预览。(51183159)
当使用运行当前beta
操作系统发行版的设备时,能量报告显示设备的热状态。(52349364)
调试可用于设备上的预览。(47668840,51139546)
Environment override
按钮出现在调试栏中,用于watchOS
和iOS
应用程序扩展目标,而不需要先暂停进程。(51203640)
预览调试会话不再在预览不可见时结束。(50593619)
添加到正在运行的进程中的运行时问题断点行为正确。(49433870)
视图调试器中的项可以在上下文菜单的Debug
导航器中显示。(18598643)
在调试视图层次结构时改进了Swift
类名的格式。(39679411)
修正了调试控制台将显示页面列指南的问题。(49693398)
断点支持VoiceOver
命令来打开快捷菜单。(44940944)
WatchKit
框架不再包含在 iOS SDK
中。如果您正在使用来自iOS
的WatchKit api
,则需要删除此使用。WatchKit框架仍然可以在watchOS
上使用。如果您正在使用来自iOS的WatchKit api
来推断配对的Apple Watch
的功能可用性,那么在向Feedback Assistant.
提交反馈时,请包含关于您的用例的信息。(49707950)
为了与遗留软件兼容,macOS
中包含了Python、Ruby和Perl
等脚本语言运行时。在macOS
的未来版本中,脚本语言运行时在默认情况下不可用,可能需要安装一个附加包。如果您的软件依赖于脚本语言,建议您将运行时捆绑在应用程序中。
不推荐使用Python 2.7
。这个版本包含在macOS
中,以便与遗留软件兼容。macOS
的未来版本将不包括Python 2.7
。相反,建议您在终端中运行python3
。(51097165)
Quartz Composer
框架不受欢迎。从macOS 10.15
开始,Quartz Composer
框架将被标记为不赞成使用,并且为了兼容性的目的仍然保留。如果您的应用程序使用的是Quartz Composer
,那么可以过渡到Core Image、SceneKit或Metal
等框架。(50911608)
命令行工具对Subversion
的支持——包括svn、git-svn
和相关命令——不再由Xcode
提供。如果需要Subversion
或相关的命令行工具,可以通过运行xcode-select——install
来安装命令行工具包。(50266910)
Devices
当同时运行到多个目的地时,使用xcodebuild
进行测试可能会导致崩溃。(52962341)
解决方案:通过将 - Disable -concurrent-destination-test
标志传递给xcodebuild
来禁用并发目标测试。
使用xcodebuild
中的设备或模拟器名称指定运行目的地不能正确解析。(52081230)
解决方案:根据平台和 ID
而不是名称指定目的地。
在设备上构建并运行 watchOS应用程序
可能会无限期地显示系统转轮。(51726238)
解决方法:重新启动设备。
已解决的问题
解决了一个问题,阻止运行一个手表应用程序与线程杀菌剂建立启用在旧版本的watchOS
。(49288795)
解决了在视网膜和非视网膜显示器之间切换导致的半点帧差异问题。(20175879)
DriverKit
已解决的问题
DriverKit
驱动程序构建正确。(52858797)
Instruments
仪器中的轨迹现在可以在层次结构中形成。它们现在可以表示任何工程类型,并使用定制的工具创建。(28615789)
现在,Instruments
允许一次从表中复制多行。(39326522)
工具允许创建范围,以便在跟踪文档中更容易地导航。(49022012)
<os-signpost-point-schema>
在定制工具中可用来匹配来自os_signpost(_:dso:log:name:signpostID:)的点事件。(50586708)
当分析一个独立的 watchOS应用程序
时,会启动一个 iOS模拟器
。(49788679)
已解决的问题
所选轨迹在仪器的触摸栏区域中呈现。(50186374)
在运行iOS、iPadOS、watchOS或tvOS
的设备上进行概要分析时,Instruments
对从其接收的os_log(:dso:log::_:) 和 os_signpost(_:dso:log:name:signpostID:)消息使用正确的类别。感兴趣的点现在可以正确地接收事件,并且自定义工具类别匹配的行为也正确。(52193505)
Interface Builder
界面生成器支持ios13
UIVisualEffectView 模糊和动态视觉效果。(48023286)
界面生成器支持ios13
UIActivityIndicatorView样式。(48573772)
iOS家庭显示器的颜色现在适应于浅色和深色画布的外观。(48610782)
接口生成器支持自定义 UIButton 符号配置。(51323174)
界面生成器支持新的布局 TVCollectionViewFullScreenLayout 在苹果电视上。(47598895)
UIViewController 实例现在默认为自动模式表示模式。模态表示segue
可以覆盖此设置。(48129590)
界面生成器支持iOS
上的暗模式。(45314199)
Interface Builder
的设备栏可以让你在iOS
应用程序的亮暗界面之间切换。(45282451)
您可以添加SwiftUI
宿主控制器,例如 UIHostingController,来将storyboard
控制器流连接到管理 SwiftUI
视图层次结构的宿主控制器。您可以在Interface Builder
中填充宿主控制器的内容,方法是提供一个通过编程设置控制器的rootView的自定义子类。(46039344)
你也可以使用 Segue
动作设置 UIHostingController
或 NSHostingController 的根视图。
对象库现在匹配所选的系统范围外观。(50874168)
NSStackView 检查器现在允许配置负间距。(49012055)
NSSwitch 在 macOS 10.15
上运行时可用。(47566686)
UITableView 中的单元格现在可以通过画布中的自动布局约束视图自调整大小。若要为现有表视图选择行为,请在大小检查器中为表视图估计的项大小启用“自动”,并为单元格的高度启用“自动”。(35735970)
NSView 和UIView 在尺寸检查器中有一个布局模式选项,可以显式地选择“将自动调整蒙版转换为约束”。默认设置为 “Automatic”
,这是现有的行为。“自动”意味着当视图受 storyboard或.xib
文件中的约束影响时,“将自动调整蒙版转换为约束”将关闭,如果不受约束则打开。(37352354)
提高了“添加缺失约束”自动布局约束生成的可靠性。(43694622)
UIScrollView 的内容在画布中是可滚动的,一旦它的子视图被自动布局约束完全约束。(44727961)
UICollectionView 中的单元格现在可以通过画布中的自动布局约束视图自调整大小。若要为现有集合视图选择行为,请在大小检查器中为集合视图的估计大小启用“自动”,并为单元格的大小启用“自动”. 如果部署在 iOS 13
之前,你可以激活自我分级集合视图细胞通过调用 performBatchUpdates(_:completion:) viewDidLoad()。(45617083)
在字体弹出窗口检查器中,家庭弹出窗口现在呈现菜单项作为适用字体的预览。(31484154)
现在可以在文档范围内对错位的帧执行更新帧,而不需要选择视图。(22076710)
UIScrollView
支持内容和框架布局指南,可以在Size检查器中启用它们,以便对可滚动内容进行更多控制。(29711618)
界面建设者支持新的苹果电视标签栏风格。(47598643)
新的 WKInterfaceTextField 接口元素可用于watchOS
。(45754186)
canvas
支持为 Mac Catalyst
应用程序定制界面。(37797710)
SF
符号在图像检查器属性中可用。(47532055)
UIImageView 检查器包括对配置符号的支持。(47797500)
使用带有新的 @IBSegueAction
属性注解的视图控制器方法,可以使用带有任何所需值的自定义初始化器,在代码中创建 segue
的目标视图控制器。这使得在故事板中使用具有非可选初始化需求的视图控制器成为可能。在源视图控制器上创建从 segue到@IBSegueAction
方法的连接。在支持 Segue
操作的新OS版本上,将调用该方法,它返回的值将是传递给 prepare(for:sender:) 的 Segue
对象的destinationViewController
。可以在一个源视图控制器上定义多个 @IBSegueAction
方法,这可以减少在prepare(for:sender:)
中检查 segue
标识符字符串的需要。(47091566)
IBSegueAction
方法最多接受三个参数:编码器、发送器和segue
的标识符。需要第一个参数,如果需要,可以从方法的签名中省略其他参数。必须将 NSCoder
传递到目标视图控制器的初始化器,以确保它是用 storyboard
中配置的值定制的。该方法返回一个视图控制器,该视图控制器匹配故事板中定义的目标控制器类型,或nil
,以使用标准init(coder:)
方法初始化目标控制器。如果您知道不需要返回nil
,则返回类型可以是非可选的。
在Swift中,添加@IBSegueAction
属性:
@IBSegueAction
func makeDogController(coder: NSCoder, sender: Any?, segueIdentifier: String?) -> ViewController? {
PetController(
coder: coder,
petName: self.selectedPetName, type: .dog
在Objective-C中,在返回类型前添加IBSegueAction:
- (IBSegueAction ViewController *)makeDogController:(NSCoder *)coder
sender:(id)sender
segueIdentifier:(NSString *)segueIdentifier
return [PetController initWithCoder:coder
petName:self.selectedPetName
type:@"dog"];
当在设备栏中选择 Mac设备
查看 iPad 故事板
时,项目添加的自定义字体不会呈现。(48528374)
如果一个字形有光明模式和黑暗模式表示,黑暗模式表示将不会出现在故事板中。(50354204)
在 Interface Builder
中配置的 UIKit菜单
在macOS
上运行时可用,但在iOS上不可用。(51077651)
苹果电视故事板中的 ARView 对象会导致界面生成器渲染崩溃。(50971800)
iOS状态栏
不会显示在界面构建器画布中。(48639919)
包含用 Xcode 11
创建的菜单命令的视图控制器场景会导致应用程序在iOS 12上运行时崩溃。(50871098)
在Interface Builder
中,将对齐设置为“center”或“right”的UILabel , UITextField , UITextView 实例在为macOS设计或运行时对齐错误。(50062524)
解决方法:在 awakeFromNib() 中重新应用所需的对齐。
在 Xcode 11 beta版
之前使用 Xcode版本
创建的项目在 Xcode 11 beta版
中打开时保留默认的自定义颜色。(50828300)
已解决的问题
使用 Xcode 11
创建的 iOS或tvOS模板
项目中的故事板和 .xib
文件现在可以在以前的 Xcode版本
中打开。(51230799)
使用 Xcode 11
创建的包含第四系填充颜色、第二系填充颜色、第三系填充颜色或系统填充颜色的故事板和 .xib文件
可以在较旧的 Xcode版本
上打开,而不会导致崩溃。(51233884,51236844)
修正了集合视图单元格自调整大小的布局问题,这些问题来自于故事板和 .xib文件
,当编译和部署到 iOS 12.4
及以后版本时(49537998)
解决了在查看 Mac Catalyst
应用程序的 storyboard
时,阻止界面构建器设备栏中的亮或暗界面样式组生效的问题。(50929581)
Xcode
在打开 .xib
文件或带有自定义视图的故事板文件时不会崩溃,如果该项目包含Swift
包,该视图被标记为IBDesignable
。(50551974)
拖出一个新的 iOS
主菜单不再会导致崩溃,如果你在画布上拖动一个现有的菜单。(51237295)
解决了与打开故事板和 .xib文件
相关的性能退化问题。(51282755)
UIDatePicker 的检查器现在只显示适用于所选模式的属性。(26726319)
用于添加 iOS设备
的预览编辑器菜单现在与当前画布方向匹配。(48818470)
预览编辑器项现在保存配置的区域设置或伪区域设置。(48303753)
在接口生成器中配置为 Count Down的UIDatePicker
对象现在在运行时使用指定的持续时间。(23426425)
在不使用自动布局的文档中也可以看到Embed In bar
按钮。(46855203)
NSControl 的子类现在在库和文档大纲中有唯一的图标。(24231920)
Library
修正了从库中拖动子视图控制器时背景颜色不正确的问题。(50388578)
库中的所有 UI控件
都正确切换到暗模式。(49830961)
Linking
已解决的问题
目标包含 Swift
代码,启用位码构建设置设置为 Yes
,在使用存档操作构建时正确链接。(52804818)
LLDB
的 Python脚本
现在基于 Python 3
。如果您使用的 Python扩展
与 python3不兼容
,它们就会崩溃。为了帮助转换,您可以在 python2
模式下运行,方法是设置一个默认值:
defaults write com.apple.dt.lldb DefaultPythonVersion 2
Python 2
支持将在未来被移除。(47806994)
Swift
Decimal 值在 LLDB
中有一个数据格式化程序,使它们以可读的方式显示。(38983073)
LLDB
现在支持检查通过支持库演化而编译的 Swift
类型。(48018240)
已解决的问题
在Swift代码中重新声明 self
可以与 LLDB
正常工作。(39611934)
当 PATH
中的 python二进制
文件不是系统二进制文件时,Swift REPL和LLDB
的
python
脚本可以正常工作。(40961425)
解决了在调试 XCTest 测试时阻止 LLDB
访问变量的多个问题。(41471338)
Localization
您现在可以在资产目录中本地化资产。在属性检查器中启用本地化。(12948139)
设置包现在包含在 Xcode
本地化目录中。(12495197)
genstring
的手册页提供了更详细的行为文档。(19709369)
genstrings
工具得到了增强,并与 extractLocStrings
工具合并。以前的版本已被弃用,已重命名为 ogenstring
,现在必须使用 xcrun
调用。应该将调用 xcrun extractlocstring
的任何脚本更改为使用 genstring
,但是目前提供了一个兼容符号链接来调用 genstring
。(19709395)
genstrings
工具现在接受一个 -encoding
参数,该参数允许指定输入文件的文件编码。(48224455)
更新版本的 genstring
改进了错误报告,并且可以在以前默认接受的场景中报告错误。例如,如果 MyApp
目录包含子目录,genstrings MyApp/*
将失败,因为 genstrings
文件参数必须是源文件。(48304658)
genstrings
工具现在可以使用任意数量的 -s
参数来指定与 NSLocalizedString 类似的附加宏,或者用于提取字符串的函数。例如,genstrings -s MyErrorSring -s MyUIString myfile.swift
将 MyErrorString
和 MyUIString
都视为等同于NSLocalizedString
。(48734596)
请注意: 使用-s参数并不会禁止对 NSLocalizedString
或CFCopyLocalizedString
的支持。
本地化命令和 genstrings
工具的导出现在支持多行 Swift
和 Objective-C
字符串,并且在识别 NSLocalizedString
参数时放宽了空格要求。(50516442)
本地化命令的导出性能得到了很大的改进。(40548416)
已解决的问题
本地化命令和 genstrings
工具的导出不再在转义的高 Unicode
代码点 (比如\U0001F603)
上崩溃。(18898240)
导入包含内嵌换行的本地化字符串现在会生成带转义 \n序列
的字符串文件。(44649979)
Xcode
本地化导出生成的 XLIFF文件
现在将 xml:space="preserve"
添加到 <trans-unit />
元素中,以确保保留空白。(44928807)
Mac Catalyst
Mac Catalyst
的 color asset
变量不会在运行时传递。(51113192)
Mac Catalyst
的 NSDataAsset
变量在运行时返回 nil
。(50022757)
Organizer
新的 Metrics organizer 显示电池寿命和性能分析为您的应用程序,以帮助您推动优化。
当您的应用程序在app Store上发布时,以及在足够的字段使用之后,将报告您的应用程序的指标。
可用的指标包括电池消耗、启动时间、挂起速率、内存和磁盘写操作。
您可以根据设备和使用特性筛选数据。(43028903)
Playgrounds
在 Xcode 11 beta
版中不支持 SwiftUI live
视图和操场中的内联结果。(42226387)
工作区中的操场不能从 Swift
包导入目标。(47668990)
UIKit
中视图的快速查看和内联结果预览可以显示为空白矩形。(50787870)
已解决的问题
操场的前几行不再被卡在窗户下面。(47529397)
修正了在 macOS 10.15
上运行游乐场时,由于网速慢或不可靠而导致的延迟。(48995467)
如果代码引用主线程以外的视图,游乐场将不再崩溃。(46579594)
Project Navigator
Xcode
可以使用 find
导航器在工作区或项目中找到资产。资产目录编辑器还支持查找和替换,您可以使用 replace
重命名资产。(14279237)
Reality Composer
增加了对AR场景中对象锚的支持。(48774003)
由先前发布的 Reality Composer
或 Xcode beta
版本创建的现实文件不再受支持。(53180175)
解决方案:使用最新版本的 Reality Composer
或 Xcode
重新导出现实文件。
从 macOS
上的 Reality Composer
的内容库中添加的对象与 iOS和iPadOS
上的Reality Composer
的 build 1A68
不兼容。
如果在接口生成器中没有指定它的模块,则在运行时加载故事板时不会找到 RealityKit ARView 类。在 Xcode
控制台中显示以下错误消息:“Interface Builder文件中的未知类ARView”。”(50840767)
解决方案:ARView
是一个Swift
视图类,需要在接口构建器检查器中指定它的类名 (ARView)
和模块 (RealityKit)
。
如果在 Xcode
项目中没有使用 RealityKit
,则在运行时加载 storyboard
时不会找到 RealityKit
的 ARView
类。在Xcode控制台显示以下错误消息:“ Interface Builder
文件中的未知类 _TtC10RealityKit6ARView
。”(50900969)
解决方案:如果导入 RealityKit
并使用 ARView
类型定义 @IBOutlet
,但在项目中不要使用 RealityKit
符号,则会出现此问题。要确保 RealityKit
在运行时使用此配置加载,请手动将 RealityKit
添加到目标的 Link二进制文件
和库构建阶段。
已解决的问题
改进了对导入的 USDZ
文件的支持。(49630946)
改进了对操作对象的支持。(50036512)
来自其他场景的通知触发器和通知操作将不再出现在没有创建它们的场景中。(51008577)
由 Xcode
从一个 Reality Composer
项目自动生成的 . Reality
文件包含项目中的所有场景。(51048599,51868814)
RealityKit
在iOS模拟器中可用。(48603396)
Server
当编辑使用SSH
进行身份验证的项目的bot
时,Xcode Server
可能会禁用一些特定于项目的设置。(51009722)
解决方案:在编辑bot时,要么替换 repository
选项卡中的 repository
,要么使用基于 http
的身份验证和 Xcode
服务器集成。
当从任何集成的上下文菜单创建机器人时,Xcode Server
都可能导致崩溃。(51082255)
解决方法:从服务器的上下文菜单或 Xcode
中的产品菜单创建机器人。
由多个目标构建的源文件中出现的构建问题可以在每次集成中标记为已解决并重新引入。(46523551)
已解决的问题
Xcode Server
现在支持Mac Catalyst应用。(50602873)
Swift包始终出现在 Xcode Server bot
配置存储库窗格中。(50058808)
解决了Xcode Server
无法自动签署使用iCloud
、应用程序组、Apple Pay
或钱包功能的项目的问题。(41008156,44704694)
Signing and Distribution
Xcode 11 beta 4
支持新的maccatalyst
。包标识符前缀。因此,Mac Catalyst
应用程序使用的配置文件必须重新生成,以反映新的前缀。如果使用自动签名,将自动生成一个新的配置配置文件。如果您正在使用手动签名,请登录到开发人员帐户并重新生成 Mac Catalyst
应用程序使用的配置文件。(52535178)
如果您正在使用以前的 Xcode 11 beta版
,并且已经为您的应用程序提供了配置文件,那么它将继续工作,直到您更新到 Xcode 11 beta 4
。如果您还没有为您的应用程序提供配置文件,您需要更新到 Xcode 11 beta 4
,以便生成一个具有正确应用程序ID前缀的配置文件。
如果代码包含对 bundle标识符
的引用,则需要更新这些引用。
签名和功能设置现在合并在项目编辑器中的新签名和功能选项卡中。新选项卡支持跨多个构建配置使用不同的应用程序功能。新的功能库使搜索可用功能成为可能。(35254597)
Xcode 11
支持新的 Apple
开发和 Apple
分发证书类型。这些证书支持在任何苹果平台上构建、运行和分发应用程序。现有的iOS和macOS开发和分发证书将继续工作,但是,在 Xcode 11
中创建的新证书将使用新类型。以前版本的 Xcode
不支持这些证书。(45527608)
如果你的iPad应用程序使用了私有权限,那么 Mac Catalyst
应用程序可能无法使用这些权限。
解决方案:为 Mac Catalyst
应用程序生成一个新的授权文件,并按照以下步骤排除不可用的授权:
在项目导航器中选择应享权利文件,然后选择 File > Duplicate
。
给你的 Mac Catalyst
授权文件一个唯一的名称并保存它。
3.从新的 Mac Catalyst
权限文件中删除任何不可用的私有权限。
在项目编辑器中导航到 Mac Catalyst
应用程序的构建设置,并找到代码签名权限构建设置。
展开构建设置,以便您可以查看所有构建配置的值。对于每个构建配置,单击 plus(+)
按钮添加条件设置。
从每个条件设置中的弹出按钮中,选择任何 macOS
,然后编辑条件设置的值,以引用新的 Mac Catalyst
授权文件的名称。
在创建开发证书时,自动签名可能会失败,并出现“出于安全原因禁止此请求”的错误。(50964225)
解决方法:您的帐户可能已经达到了证书限制。在Safari中查看您的 Apple Developer
帐户,并撤销您没有使用的任何开发证书,然后在 Xcode
中再次尝试。
存档操作不会对Swift包中的命令行可执行产品进行代码签名。(48717735)
解决方法:在发布存档的可执行文件之前,使用 codesign
工具手动签署它们。
使用 bot
编辑器的 sign
选项卡手动安装的 Mac
配置文件将使用错误的文件扩展名安装,这会导致集成失败。(47636041)
解决方法:登录到bot用户的帐户,并在 ~/Library/MobileDevice/Provisioning profiles
目录中重命名受影响的概要文件。
已解决的问题
修正了一个导致应用内购买内容包无法构建的代码签名问题。(50736776)
解决了 Xcode
在为 iOS Developer University
程序的成员创建新的签名证书时抛出错误的问题。(50640287)
解决了 Xcode
错误报告的一个问题:当上传到 App Store
时,“团队没有iTunes
连接访问”。(39292849)
Simulator
模拟器可以根据当前电源自动选择 macOS GPU
。当你的 Mac
连接到 AC电源
时,使用的是 分立GPU
。当你的Mac使用电池供电时,使用的是集成GPU。您可以通过导航到 File > GPU
选择在模拟器中更改策略。(53032365)
simctl
现在可以覆盖 iOS设备
的状态栏值。例如,要设置时间和电池,请使用:
xcrun simctl status_bar <device> override --time "9:41" --batteryState charged --batteryLevel 100
有关全部选项,请参见xcrun simctl help status_bar。(51697821)
当运行在 macOS 10.15
上时,Metal
可以在 iOS 13和tvOS 13模拟器
中使用。Metal
代码在主机 Mac GPU
上执行,比模拟的 OpenGL代码
要快得多。SceneKit api, CoreAnimation
和 其他系统框架抽象gpu
之间的许多差异,减少需要特定于设备的代码。当运行在早期版本的 macOS
上或在没有Metal
的环境中,模拟器将继续使用呈现的 OpenGL
软件。如果你的 Mac
有多个 GPU
,使用模拟器中的文件菜单来选择使用哪个 GPU
。如果正在使用的 GPU
变得不可用,任何使用它的模拟器都会自动关闭。(18430676)
默认情况下,Xcode
不再创建所有可用的 iOS模拟器设备
。而是创建一组最常用的设备。要创建其他设备(或一个设备的多个实例),请打开设备窗口,选择模拟器,单击+按钮,输入一个名称,并选择相关的设备类型和OS版本。(49428617)
CAMetalLayer
可以在 iOS 13和tvOS 13模拟器
中使用。(45101325)
iOS 13、watchOS 6和tvOS 13模拟器
现在都有一个 dyld共享缓存
。这改进了模拟器的启动时间,减少了模拟器进程使用的打开文件句柄的数量。如果您报告了一个您认为与共享缓存相关的问题,请包括一个 simctl诊断
和使用 DYLD_PRINT_LIBRARIES=1
启动程序的输出。(13632739)
simctl
现在接受运行时名称的简短别名。这意味着你可以用像 simctl create 'iPhone X' iOS13
这样的命令创建一个新的iPhone X模拟器。(41089607)
对于 headless
和 continuous integration
场景,您可以配置 CoreSimulator
,通过设置默认的 write com.apple
来跳过虚拟帧缓冲区中的合成操作。CoreSimulator FramebufferServerRendererPolicy to none
。在这种模式下,无法查看模拟器,simctl io
也无法截屏或录制视频。(48264341)
没有 CFBundleVersion
的包是无效的,不能正确地安装在设备或模拟器上。 CoreSimulator
现在可以在流程的早期检查和拒绝这些包,并提供更清晰的错误消息。(49892531)
模拟器停靠图标现在包括一个菜单,以快速启动模拟器。(43067512)
模拟器的文件菜单现在包括一个 GPU
选择菜单,以控制哪个 GPU
是使用金属支持模拟器和合成模拟器的虚拟帧缓冲区。如果在选中可用项时使用外部 GPU
,则在外部GPU连接后启动的任何模拟器都使用外部 GPU
。如果外部 GPU
断开连接,任何使用它的模拟器都会自动关闭。对这些设置的更改仅在模拟器启动时生效。当这个设置被改变时,模拟器已经启动,继续使用之前选择的 GPU
,直到它们重新启动。(46134036)
游戏控制器输入在iOS模拟器中可用。(50082777)
模拟器不分配负载,如果多个 GPU
在一个系统匹配选择的GPU策略。只使用MTLCopyAllDevices()
返回的第一个匹配的GPU。(50608554)
解决方案:通过将模拟器窗口定位在与模拟器使用的 GPU
直接连接的显示器上,您可能会看到更高的性能,这避免了跨 GPU复制
。
请注意:与任何利用 GPU
的应用程序一样,外部连接显示的性能行为也会随着工作负载的不同而变化。
通过 xcrun simctl io <UDID> recordVideo
对 iOS 13、tvOS 13和watchOS 6
模拟器进行视频录制,将返回一个错误而不是录制视频。(50625716)
watchOS模拟器
不支持冷启动上的断点。(51148192)
解决方法:在启动正在调试的应用程序之前,完全启动模拟器。
已解决的问题
自动纸板同步功能现在正确的所有模拟器运行 iOS 11.1
和更新。(53231481)
在模拟器中获取粘贴板后立即调用 Send Pasteboard
将不再导致设备不可用。(52866417)
修正了用 simctl
覆盖细胞栏的能力。(51698044)
模拟器中的旋转设备自动选项与 iOS 13模拟器兼容
。(51147050)
当模拟器不是 macOS Catalina 10.15
上的前台应用程序时,模拟器将游戏控制器事件交付给模拟设备。(51759699)
修正了一个导致模拟器停止向屏幕显示帧更新的问题。(51993678)
模拟器正确地显示了注册时的 Touch ID > Enrolled
的复选标记。(50553667)
主机和模拟设备之间的纸板自动同步的行为是正确的。(46686100)
Safari
对模拟器的共享行为正确。(49331693,49416352)
解决了 IOSurface实例
在 macOS 10.14.5及更早版本模拟器
进程中的泄漏问题。(50880827)
iCloud同步
可以在iOS模拟器中使用。(50924245)
当TVOut被配置为“断开连接”时,iOS 13模拟器
没有连接模拟显示。(50829453)
iOS模拟器
的颜色匹配金属的内容,以显示的颜色空间。(50625671)
解决了一个使用 Metal
的核心图像着色器无法在ios13模拟器上运行的问题,并禁用了错误的 “Metal DAG编译器”
。”(51521248)
游戏控制器与 iPad模拟器
可以正常工作。(51034639)
解决了在 iOS 13之前运行iOS版本的模拟器
设备无法正确呈现显示的问题。(50963987)
IOSurface
现在可以在 ios13、watchOS 6和tvOS 13模拟器
中运行。(11051639)
模拟器中播放音频的应用程序也不再自动打开麦克风输入。(32406954)
将删除 simctl
列表 JSON
输出中以前不推荐的可用性字段。使用 isAvailable Boolean
字段确定可用性。(45142676)
ATSC
纹理格式支持透明地解压他们在 CPU
上,然后再上传到 macOS GPU
。(51347811)
Source Control
现在您可以从一个分支到另一个分支进行更改。(18285039)
克隆新存储库时,现在可以从可用分支列表中选择要签出的分支。(41122122)
使用新的源代码控制文件检查器,您可以浏览当前分支文件的完整历史记录。日志检查器适用于所有文件类型,包括接口构建器文档。(45109443)
现在,您可以从源代码控制导航器中隐藏更改和管理隐藏。此外,Xcode还提供自动保存和恢复源代码控制操作的更改,比如从存储库中提取更改。(8797804)
源代码控制作者现在可以在每个编辑器的基础上使用。(45108927)
当在已启用rebase的分支上执行 Pull in Xcode
时,工作表不会自动关闭。(50377240)
如果文件已重命名,则从源代码控制日志检查器中查看文件修订的更改可能会失败。(49673170)
对于位桶云或位桶服务器托管的帐户,不支持在 Add Package assistant
中过滤包。(47290085)
GitLab或GitLab
自管理托管帐户不支持在 Add Package assistant
中过滤包。(47290125)
当使用xcodebuild时,解析包可能无法验证 SSH指纹
,除非指纹已经在~/.ssh / known_hosts
文件中。(50686014)
解决方案:在使用 xcodebuild
之前,通过 SSH
到主机并从命令行验证指纹,或者手动将主机指纹添加到 ~/.ssh / known_hosts
文件中。
已解决的问题
改进了在项目导航器中选择 Package.swift
文件时显示源代码控制信息的功能。(50696823)
如果作者信息尚未在 Preferences > Source Control
控制中为Git配置,则使用rebase进行提取将不再失败。(48680076)
解决了托管帐户提供者(如GitHub 和 BitBucket
)在添加帐户表中不可用,并且以前添加的帐户将被禁用的问题。(47645098)
解决 Xcode
中的源代码控制操作出现“无法与助手应用程序通信”对话框的问题。(47227781)
修复了个人、组织和星型存储库加载时间较长的性能问题。(48620126)
解决了添加GitHub
帐户后,来自 GitHub
的用户头像并不总是加载的问题。(48698029)
修正了代码评审编辑器中某些源编辑器菜单选项不可用的错误。(48774008)
Source Editor
语义突出显示、代码完成、实时问题、符号搜索和跳转到定义现在都支持 Metal
着色语言。(45144204)
通过单击源代码控制更改栏并选择显示或隐藏更改,介绍了在源代码编辑器中查看内联代码差异的功能。(49073551)
增加新的高对比度(暗)主题和高对比度(光)主题。还为标记、类型声明和其他声明添加了新设置。(50036007)
为 Swift文件
中的声明添加了专用的语法着色,可以在类型声明和其他声明下的首选项>字体和颜色中自定义。宣言着色 C-family
语言不支持。(10342935)
Xcode
的源代码编辑器现在支持拼写检查。(32062963)
Xcode 11
的源代码编辑器引入了该文件的一个迷你映射。这个迷你地图包括Mark:的可读文本,高亮显示的带有错误和警告的行,源代码控制更改,断点,以及高亮显示的 Find results
。迷你地图在默认情况下是启用的,并且可以在每个编辑器中关闭。(35939517)
在文档注释和游乐场标记中为标记添加语法高亮显示。您可以在文档标记下的首选项>字体和颜色中自定义散文字体,并在首选项>文本编辑>显示中自定义分隔符外观。(42941263)
Toggle
注释支持多个游标。(44319433)
拖放文本时,行与行之间会留出空间,以便更容易地看到文本将被拖放到何处。拖拽完整行时,Xcode
只允许在其他行之间拖放。(44735912)
编辑器允许分层代码折叠。(47502128)
代码折叠支持方括号和圆括号。(50460404)
// MARK: comments和#pragma MARK
指令现在在编辑器中画一条分隔线。显示标记分隔符的首选项位于首选项>文本编辑>显示>显示标记分隔符。(7299224)
已解决的问题
NSProgressIndicator 对象现在保存构建和运行时在检查器中配置的当前值。(43257511)
c++操作符重载
显示在跳转栏中。(50841460)
解决了Xcode在运行时使用键盘快捷键错误打开助理编辑器的问题。(37995114)
为 // MARK: comments和#pragma
标记指令添加了专用的语法着色,您可以在首选项>字体和颜色>标记中定制它们。(22114159)
您可以命令单击Swift操作符来使用 Quick Help
并跳转到 Definition
。(32695862)
解决了在Objective-C中编辑未关闭块时可能发生的问题。(48201424)
解决了代码完成将废弃符号排序在非废弃符号之前的问题。(38422586)
解决了删除文本时代码完成行出现空的问题。(48621410)
解决了在使用 throw
或 noexcept
子句时没有正确解析 c++函数
的问题。(37682611)
在输入时,可访问性缩放焦点现在跟随源编辑器中的插入点。(32775118)
当在源编辑器中逐行移动时,VoiceOver
不会重复上一行。(34334763)
VoiceOver
在源编辑器中有用于方法、错误、警告、断点和标记的转子,这使得搜索和移动到与错误或其他转子项对应的代码行非常容易。(34493080)
VoiceOver
文本属性现在包括源编辑器中一行代码的空格数、制表符数、缩进级别和行号。(34607795)
当读入源编辑器时,VoiceOver
不再围绕占位符标记说额外的字符,并说它们是占位符。(44941610)
解决了 c++原始字符串
没有正确突出显示的问题。(10770485)
解决了 c++类声明
在使用限定名、模板或多重继承时无法正确解析的问题。(11286215)
解决了在跳转栏中没有显示嵌套在函数或方法中的本地类的问题。(13337638)
解决了 c++ 11
后置返回类型不能正确识别的问题。(13634062)
解决了 c++
类型枚举没有正确解析的问题。(13693443)
改进了使用可用性宏和属性的声明的解析。(14569168)
解决了不识别带单引号的 c++
数字文字的问题。(18121031)
解决了结构体成员函数没有正确解析的问题。(27946356)
解决了在跳转栏中没有正确显示枚举声明的问题。(32518576)
改进了 JavaScript
中类和函数的识别。(42537831)
解决了返回枚举类型的函数没有正确解析的问题。(46164630)
解决了无符号和长整数文字语法颜色不正确的问题。(47138177)
更新 JavaScript
语法高亮显示,包括 ECMAScript 6
关键字。(47354463)
修正了双击 c++析构函数
名会导致
Static Analyzer
静态分析器检查 mach
服务器例程中是否违反了 MIG
调用约定。这些违反行为可能会导致使用后免费的漏洞。(35380337)
静态分析器检查是否违反了 IOKit和libkern
引用计数规则。(46357478)
静态分析器检查是否违反了 DriverKit
引用计数规则。这些违规行为可能导致泄漏和免费使用后的问题。(50349513)
Swift
结构和枚举的 @frozen属性
现在可用。(36597490)
结构的成员式初始化器现在为包含默认表达式的变量提供默认值。(SE-0242, 47130624)
struct Dog {
var name = "Generic dog name"
var age = 0
// The synthesized memberwise initializer
init(name: String = "Generic dog name", age: Int = 0)
let sparky = Dog(name: "Sparky") // Dog(name: "Sparky", age: 0)
现在可以使用类型别名声明 @autoclosure参数
。(SR-2688, 50560849)
class Foo {
typealias FooClosure = () -> String
func fooFunction(closure: @autoclosure FooClosure) {}
类中使用@objc属性声明的方法现在可以返回Self。(SR-7601, 50560991)
class MyClass: NSObject {
@objc func clone() -> Self { return self }
键路径表达式现在可以包含对元组元素的引用。(50562288)
接受Any类型值的单参数函数不再优先于其他函数。(50562333)
现在已经完全实现了元组类型之间的转换。在此之前,下面将诊断一个错误。(SR-2672, 12340004)
let values: (Int, Int) = (10, 15)
let converted: (Int?, Any) = values
现在可以声明和使用类型下标,就像类型属性和类型方法一样。通过对下标声明应用静态或(在类中)类修饰符来声明。(SE-0254, 16555559)
// Declare a type with a static subscript:
enum ProcessEnvironment {
static subscript(name: String) -> String? {
get { getenv(name) }
set { setenv(name, to: newValue) }
// Use it with any of these syntaxes:
ProcessEnvironment["PATH"]! += ":/usr/local/bin"
ProcessEnvironment["PATH"]! += ":/usr/local/bin"
someVarOfProcessEnvironmentDotType["PATH"]! += ":/usr/local/bin"
类型下标还可以与动态成员查找一起使用,以创建动态类型属性。
// Declare a type with a static subscript:
@dynamicMemberLookup
enum ProcessEnvironment {
// …As above…
static subscript(dynamicMember name: String) -> String? {
get { self[name] }
set { self[name] = newValue }
// Now you can use property syntax with ProcessEnvironment:
ProcessEnvironment.PATH! += ":/usr/local/bin"
ProcessEnvironment.self.PATH! += ":/usr/local/bin"
someVarOfProcessEnvironmentDotType.PATH! += ":/usr/local/bin"
指定 Optional.none 与同样具有 none
大小写的枚举进行比较,或将此类枚举与 Optional
进行比较。现在没有一个会发出警告。这样的表达式会产生歧义,因为编译器会选择可选的。none
超过您自己的枚举定义的 none
用例。(SR-2176, 26126801)
enum Foo { case none }
// Assigned Optional.none instead of Foo.none.
let foo: Foo? = .none
// Comparing with Optional.none instead of Foo.none.
let isEqual = foo == .none
编译器会提供一个警告,并提供一个修复程序来用 Optional替换.none
。没有或 Foo
。没有人能解决这种含糊不清的问题。
函数现在可以通过声明它所遵循的协议来隐藏它们的具体返回类型,而不是指定确切的返回类型:
func makeACollection() -> some Collection {
return [1, 2, 3]
调用该函数的代码可以使用协议的接口,但不能看到底层类型。(SE-0244, 40538331)
枚举现在可以匹配一个可选枚举,而不需要' ?”“在图案的末尾。(SR-7799, 41494702)
enum Foo { case zero, one }
let foo: Foo? = .zero
switch foo {
case .zero: break
case .one: break
case .none: break
现有的 @dynamicMemberLookup
属性现在支持键入键路径实现。(SE-0252, 49069813)
struct Point {
var x, y: Int
@dynamicMemberLookup
struct Box<T> {
var v: T
init(_ v: T) {
self.v = v
subscript<U>(dynamicMember member: KeyPath<T, U>) -> U {
get { return v[keyPath: member] }
var box = Box(Point(x: 0, y: 0))
_ = box.x
现在,您可以使用Self表达式来引用结构、枚举和类声明中最内层的标称类型。例如,这个结构中的两个方法声明是等价的:
struct Box<Value> {
func transform1() -> Self { return self }
func transform2() -> Box<Value> { return self }
在类中,Self
和前面一样是 Self
值的动态类型。声明类型中对Self的现有限制仍然适用;也就是说,Self
只能作为方法的返回类型出现。然而,Self现在可以在方法体中无限制地使用。(SE-0068, 17892696)
Array 和 ContiguousArray 现在都有 init(unsafeUninitializedCapacity:initializingWith:) 初始化器,它提供对数组未初始化存储的访问。(21880692)
实现了更彻底的检查,以确定转义闭包的限制,这些闭包捕获的 in-out
参数或 noescape
类型的值。虽然大多数代码不受影响,但在某些情况下,Swift 5.0
编译器接受的代码违反了这些限制。(SR-8546, SR-9043, 43355341)
Swift 5.0
编译器错误接受无效代码的一个例子是 @escaping
闭包,它调用一个本地函数,该函数从外部范围引用 in-out
参数:
struct BadCaptureExample {
var escapingClosure: () -> ()
mutating func takesInOut(_ x: inout Int) {
func localFunction() {
x += 1
escapingClosure = { localFunction() }
编译器现在通过指出 localFunction()
捕获x是无效的来正确诊断上面的代码,因为 localFunction()
是从 @ escape
闭包引用的。
这还解决了编译器错误地将某些代码诊断为无效的某些情况,而实际上并没有发生违反限制的情况。例如:
func takesNoEscape(_ fn: () -> ()) {
func localFunction() {
{ localFunction() }()
如果类型与其包含的模块具有相同的名称,则从模块接口导入该模块可能会失败。(19481048,48445154)
解决方法:重命名类型,使其不再与模块名称冲突。
已解决的问题
不再允许重复元组元素标签,因为这会导致不正确的行为。(SR-8974, 45218256)
以下内容现在被诊断为错误:
let dupLabels: (foo: Int, foo: Int) = (foo: 1, foo: 2)
enum Foo {
case bar(x: Int, x: Int)
let f: Foo = .bar(x: 0, x: 1)
只要内部标签不同,在声明函数和下标时仍然可以使用重复标签。例如:
func foo(bar x: Int, bar y: Int) {}
subscript(a x: Int, a y: Int) -> Int {}
带有不透明返回类型的声明需要在iOS 13、macOS 10.15、watchOS 6或tvOS 13中使用Swift 5.1运行时,由Swift编译器强制执行。(50731151)
在macOS 10.9之前废弃的API在编译时只需要应用程序扩展安全的API构建设置就会正确地显示为不可用。(51417764)
从终端启动时,Swift REPL工作正常。(51374106)
如果类型使用不透明的返回类型来满足协议的关联类型要求,并且关联类型在另一个泛型声明中按名称引用,则编译器不再崩溃。(50509030)
静态库现在总是在链接期间全部强制加载,以修复与请求失败相关的运行时错误。(47598583)
弱的和无主的存储特性不再抑制自动合成的 Equatable 或者 Hashable。(sr - 9827, 50566123)
如果崩溃日志中的符号没有正确解调,运行quick -demangle命令并传入崩溃日志的内容。(34920390)
SwiftUI
在没有为 OTHER_SWIFT_FLAGS
设置 -DDEBUG
设置的项目中定义的预览提供程序,如果在画布中没有显示调试,则将其封装在#中。这发生在Objective-C
应用中,Objective-C
从未指定 OTHER_SWIFT_FLAGS
。(51138834)
解决方法:从 PreviewProvider
声明周围删除 #if DEBUG和#endif
。
使用 Xcode 11 beta 5
,预览只在 macOS Catalina 10.15 beta 5
上可用,而且只有 Xcode 11 beta 5
支持在 macOS Catalina 10.15 beta 5
上预览。(52059562)
软件键盘不会出现在预览中。(35615536)
使用与系统类型相同的名称命名类型可能导致预览失败。(51531683)
解决方法:不要对您的类型使用与系统类型相同的名称。
在运行设备预览时进行的代码更改可能会在应用程序重新启动时短暂显示主屏幕。(48208765)
在实时预览中无法缩放。(51183125)
解决方法:退出活动模式或使用画布或编辑器菜单中的缩放控件。
iOS、tvOS和watchOS
的静态预览不支持 SceneKit、MapKit和Metal视图
,在呈现更新时会出现延迟。(50965310)
如果现有视图位于视图生成器中条件语句的顶层,则导致容器插入现有视图和容器中的新同级的拖放操作将不起作用。例如,不能在 Text 周围删除 HStack 或者 VStack。(50300406):
var body: some View {
VStack {
if true {
Text("Hello World")
解决方法:将现有视图嵌入到容器中——无论是在画布中还是在源编辑器中——然后将新视图放入容器中。
包中的预览总是执行活动方案的完整构建。(51030302)
将 Text 修饰符拖放到画布中已经具有 View 修饰符(例如 frame(width:height:alignment:) 的文本上,将导致编译错误。(50712235)
解决方法:重新排序修饰符,使特定于文本的修饰符出现在任何视图修饰符之前。
HStack 和 VStack检查器不支持自定义布局指南。(49710501)
解决方法:使用 source editor
作为自定义布局指南。
属性检查器不允许指定灵活的帧。(51310989)
第一次在画布中进入实时预览模式可能需要几秒钟。(46505269)
在文件之间切换时,预览可能会失败或更新不正确。(50841287)
解决方法:在活动文件的末尾添加新行,然后单击出现的横幅中的 Resume
。
属性检查器在画布关闭后仍然可见,停留在最后选定的项上,并且不起作用。(50958316)
解决方法:重新打开画布或切换到其他文件。
预览不适用于启用了应用沙箱的 macOS应用程序
。(51088926)
对于符合 PreviewProvider 的私有和文件私有结构,预览不会出现在画布中。(47011316)
解决方法:从符合要求的类型中删除私有或文件私有访问控制。
第一次在运行目标选择器中切换设备时,预览可能需要几秒钟更新。(47562171)
在从 Scheme
弹出菜单切换使用运行目标的设备时,预览可能会暂时显示不正确的设备 chrome
。(49496647)
画布不支持焦点。(50275735)
在画布中无法撤消。(49651153)
解决方法:将源编辑器放在焦点位置,并在那里执行撤消操作。
预览检查器使用系统字体呈现。(52473187)
修正了当你试图在你的 Mac
电脑上显示多个设备的预览时可能发生的崩溃。
修正了检查包含 SwiftUI
视图的视图层次结构时可能发生的崩溃。(52857304)
修正了启用或禁用实时预览时可能发生的崩溃。(52083572)
解决了 Apple Watch
预览在黑色背景上显示黑色文本的问题。(51676439)
预览继续工作后,更改文件名,而不需要切换到另一个文件和切换回来。(51708183)
预览尊重导入周围的条件编译块。例如,您可以有条件地导入由 #if canImport(UIKit)
保护的 UIKit
。(51545182)
应用于类型和方法的可用性属性受到预览的尊重。当部署目标不包括 SwiftUI
(即部署目标在 iOS 13、macOS 10.15、watchOS 6或tvOS 13之前
)时,您现在可以使用 UIViewRepresentable 实例和 UIViewControllerRepresentable 实例来查看视图和视图控制器的预览。为此,将适当的可用性属性添加到视图可表示类型和 PreviewProvider 一致性中,如 @available(ios13.0, *)
。(51493428)
命名颜色在属性检查器中是可编辑的。(51287606)
使用 withAnimation(::) 来更改根视图中的状态,可以在实时预览中正确显示。(51164838)
动画在live预览中保持在它们的上下文中,live预览与设备上的预览匹配。(50708417)
解决了在运行目的地选择器中选择与Apple Watch配对的设备时,watchOS
预览无法工作的问题。(50861269)
修正了在颜色检查器中反复选择指定颜色时可能发生的崩溃。(51304163)
当运行在 Apple Watch Series 3
上时,使用SwiftUI构建的应用程序不再表现得像运行在 Apple Watch Series 4
上一样。(50678109)
SwiftUI Tutorials
如果使用 Xcode 11 beta 5
中包含的 sdk
,使用 Path 结构可能会导致应用程序崩溃。因此,您可能无法成功地遵循 Drawing Paths and Shapes 教程中的步骤。(53523206)
Swift Packages
没有显式的命令行选项来使用 xcodebuild
构建 Swift包
。(45575820)
解决方法:运行xcodebuild -workspace
。在包含 Package.swift
文件的目录中。
独立软件包不支持预览。(51072409)
Swift
包不支持在目标中添加资源文件——比如图像、故事板或音频。(SR-2866, 33389529)
Swift
包不支持处理本地化的字符串文件。(48190792)
在项目中移动本地包将把它转换为文件夹引用。(50320585)
连接到 app
及其测试目标的打包产品会产生重复的符号。(50348625)
解决方法:只在应用程序或测试目标中链接包产品。
为Swift包自动生成的方案在包添加或删除目标时不会自动更新。(50586754)
解决方案:从包目录中的 swiftpm/xcode/xcshareddata/xcscheme
目录中删除该方案,然后重新打开包,自动生成一个新方案。
如果在方案中选择的构建配置未命名为 Debug或Release
,则使用调试条件设置的 Swift
包构建的目标。(50696202)
从工作区中删除本地包引用将从工作区中的所有 Xcode
目标中删除其包产品,即使对该本地包的其他引用仍然保留在工作区中。(50706448)
*解决方案8:将包产品引用添加回相关目标。
不支持预览 Swift
包中的代码,这些代码没有被活动方案引用,也没有被链接到应用程序目标,并且显示错误消息。(50909384)
新创建的 Swift
包的测试目标无法为 watchOS
构建,因为 XCTest
在 watchOS
上不可用。(51054894)
解决方法:用条件编译语句包围 watchOS
测试目标中引用 XCTest
框架或其api的任何代码。例如:
#if !os(watchOS)
// XCTest code
#endif
已解决的问题
在没有搜索结果时,在 Add package Dependency
工作表中搜索包存储库。(51223367)
无论在package . Swift
清单文件中声明的目标的名称与该目标的目录名在大小写上不同,代码补全都适用于 Swift包目标
。(49648458)
在 Swift包的c族
目标中添加新文件不会创建扩展名为 . Swift的文件
。(31395814)
使用 unsafeFlags
构建设置的Swift包不能作为依赖项使用。(50354068)
当使用 Swift包
管理器构建 Swift包
测试时,XCTUnwrap API
是可用的。(51115369)
如果本地包覆盖了项目中的远程包,并且本地包具有无法满足的包依赖关系,那么 Xcode
将不再崩溃。(51183216)
Testing
支持编写与SwiftUI视图交互的XCTest UI测试。(35224680)
测试计划是一种管理哪些测试运行以及这些测试如何运行的新方法。方案可以引用多个测试计划,并为自动化定义一个默认的测试计划。一个新的测试计划编辑器支持定义测试配置,它可以从计划本身继承共享设置。在Xcode中运行测试现在可以跨所有测试配置运行测试。更新源编辑器测试菱形以支持在单个配置中运行测试,并更新测试导航器以允许选择活动测试计划。更新测试报告以支持显示测试计划生成的结果。(16138582)
XCTest使用新的度量(度量:options:block:)方法和相关方法增强了性能测试功能。metrics参数需要符合XCTMetric协议的对象列表。您可以实现自己的自定义度量,或者使用 XCTClockMetric , XCTOSSignpostMetric , XCTCPUMetric , XCTMemoryMetric , 和 XCTStorageMetric。(49430032)下面显示了一个示例性能测试测量的 CPU
和内存影响排序列表:
func testExample() {
// Measures the CPU and memory impact of sorting the input list.
measure(metrics: [XCTCPUMetric(), XCTMemoryMetric()]) {
sortedList = qsort(list: self.fiftyNumbersFrom0to100)
添加了一个断言函数 XCTUnwrap
,用于 Swift测试
。XCTUnwrap
断言可选变量的值不是nil,如果断言成功,则返回其值。这消除了将 XCTAssertNotNil(::file:line:) 与展开值或处理测试其余部分的条件链接相结合的需要。例如:
func testFirstNameNotEmpty() throws {
let forenames: [String] = customer.forenames
let firstName = try XCTUnwrap(forenames.first)
XCTAssertFalse(firstName.isEmpty)
XCTUnwrap
是一个抛出断言,最好在抛出测试方法中使用,如上例所示。(30667432)
除了原始报告和存档文件外,xccov
现在还支持直接传递结果包。例如,要查看结果包中的覆盖率报告,可以调用 xccov
,如下所示: xccov视图——report /path/to/result_bundle.xcresult
。(50500789)
*结果包的格式在 Xcode 11
中更改。结果包是 Xcode 11
使用 xcresult
文件扩展名生成的资产,该扩展名包含有关构建、测试、代码覆盖率等信息。使用 Xcode 10
或更早版本生成的任何 xcresult
文件都不能被Xcode 11读取。通过传递 -resultBundlePath ./Example
可以生成一个结果包。将 xcresult
转换为xcodebuild
调用和示例。然后可以在 Xcode
中打开 xcresult
。Xcode 还在派生数据中创建结果包。当前的结果包版本号是3,可以通过传递
xcodebuild标志-resultBundleVersion 3来指定。版本3是
Xcode 11中的缺省版本,但是仍然建议自动化显式地传递该标志,以便将来任何可能成为缺省版本的版本都不会对现有工具造成问题。可以使用
xcresulttool检查结果包。可以使用
xcrun xcresulttool get——format JSON——path ./Example导出结果包根对象的
JSON表示。可以通过添加标记
——id REF. xcresulttool来导出
xcresult和任何由
JSON输出中找到的引用标识的嵌套对象。
xcresulttool还使用xcrun xcresulttool formatDescription` 提供其格式的描述。(41633595)
如果一个测试在多个目标上运行,并且其中一些目标(而不是其他目标)失败,那么测试报告将显示一个摘要,描述测试失败的目标,例如“在运行 iOS 12.0
的 iPad
目标上失败”。(49164968)
当通过源编辑器测试菱形运行测试或测试类时,选择单击菱形将显示一个弹出窗口,该弹出窗口允许在活动测试计划中的特定配置下运行测试(如果测试计划具有多个配置)。(46348663)
当查看在多个目标上运行的测试的测试报告时(例如 Xcode
服务器集成,或者 xcodebuild
调用使用多个目标说明符生成的结果包),现在可以根据目标过滤显示的结果。单击范围栏中的 devices
按钮将显示运行测试的目标列表,包括仅隐藏或显示感兴趣的目标的功能。此外,现在可以通过范围栏中的“混合”按钮过滤到仅在一个目标上失败但在另一个目标上成功的测试。(48981032)
xcodebuild
生成的结果包现在可以在Xcode中直接共享、双击和打开。(38620469)
介绍了对 Mac Catalyst
应用程序编写基于 xctest
测试的支持。(41530313)
默认情况下,为新创建的测试计划启用了代码覆盖率。(48749597)
在 macOS
的 UI
测试中,鼠标移动(包括对 hover API
的调用以及对 click、scroll
和其他 API
的调用)将在屏幕上逐步移动光标,就像用户在实际交互中所做的那样,而不是立即将光标移动到最终位置。这可能会给严重依赖鼠标悬停行为的UI测试带来问题。(49430331)
为测试计划修改 .xctestrun
文件格式,以包含关于如何在计划中执行每个测试配置的信息。当运行 xcodebuild build-for-testing
计划使用测试计划,生成 .xctestrun
文件使用 FormatVersion 2
和有一个修改后的属性列表结构。.xctestrun
文件生成的计划,不要使用测试计划继续使用 FormatVersion 1和xcodebuild test-without-building
接受要么版本。(46346053)
测试计划编辑器中的代码覆盖率设置不支持选择用于收集代码覆盖率的单个目标。如果测试计划是通过将一个计划转换为使用测试计划来创建的,并且该计划在转换时选择了单独的代码覆盖率目标,那么这些目标将保留在最终的测试计划中,但是不能在计划中编辑。(50502861)
xcodebuild
增强了支持测试计划的新选项。使用 new -showTestPlans
选项列出与方案关联的所有测试计划。使用新的 -testPlan <name>
选项指定与用于测试或构建测试的方案相关联的测试计划。如果没有指定 -testPlan <name>
, xcodebuild
测试将使用方案的默认测试计划。(46346197)
Xcode 11
引入了在 Xcode
本地化目录中自动包含来自 XCTest
的屏幕截图的选项。在测试计划或 scheme
编辑器中启用本地化截图,然后在导出本地化时检查“包含截图”。(28656175)
XCTUnwrap API
只在主要测试包目标中可用,而在其他库或框架中不可用。(51117167)
解决方案:将任何使用XCTUnwrap的库代码移动到您的主测试包目标,或者在受影响的目标中手动修改以下构建设置:
SYSTEM_FRAMEWORK_SEARCH_PATHS = "$(inherited) $(PLATFORM_DIR)/Developer/Library/Frameworks"
LIBRARY_SEARCH_PATHS = "$(inherited) $(PLATFORM_DIR)/Developer/usr/lib"
SWIFT_INCLUDE_PATHS = "$(inherited) $(PLATFORM_DIR)/Developer/usr/lib"
测试计划编辑器允许启用某些消毒剂和内存诊断的组合,这些组合是不兼容的,不应该同时启用。例如,Address Sanitizer
和保护 Malloc
,或者Address Sanitizer
和 Thread Sanitizer
。(49739613)
*解决方案 :不要将销毁者和不兼容的内存诊断设置组合在一起配置测试计划。如果测试计划的共享设置在测试配置中继承了不兼容的设置,则手动覆盖该设置,以禁用受影响的测试配置。
已解决的问题
Xcode
中的结构化构建日志,以及独立的结果包,再次显示了每个步骤的持续时间。(48126238)
修正了一个阻止UI测试运行器发出任意网络请求的问题。(52856418)
修正了一个问题,该问题阻止启动UI测试目标,该目标的名称包含一个连字符,后面直接跟一个数字。(51857798)
编辑引用与包含活动方案的项目不同的项目中的测试目标的测试计划,将不再导致这些测试目标被标记为缺失。(50148373)
您可以在包解析期间在包含 Swift包
的工作区中运行测试。(48719922)
在正确启用代码覆盖率的情况下运行测试,将在模拟器和 Mac
上生成 iOS应用程序
的覆盖率报告。
修正了 Mac上iPad
应用程序 UI测试
的一个问题,当试图与表格视图单元内的元素交互时,可能会出现hit测试错误而失败。(50745246)
一个方案的测试操作中的并行执行复选框现在对 Swift包
的测试目标启用了。(47564543)
解决了启动测试操作时检查设备可用性时可能发生的崩溃。(51245770)
解决了在模拟器中无法为 Mac Catalyst
应用程序或 iOS应用程序
生成代码覆盖率报告的问题。(51241460)
XCUIElement 上的 exists 属性现在在XCTest无法检查应用程序UI的情况下(例如,由于应用程序的主线程没有响应)产生测试失败,而不是在这些情况下返回false。(37359653)
单元测试发现机制对于大型项目更有效。重新打开项目后,测试导航器的填充速度更快。(32567980)
TestFlight
运行 tvOS 12.3或更早版本的TestFlight应用程序
分发到 Apple TV 4K
上,适用于部署目标在 tvOS 13之前的tvOS应用程序
。(53017497)