关于ZAKER 合作 加入

Xcode 11 Beta 5

CocoaChina 08-19

这一篇文章给大家介绍:Xcode 11 Beta 5,虽然是beta版本,但是在不久的将来必将来临,例如:SwiftUI + Combine

概述

Xcode 11包括用于iOS 13、macOS Catalina 10.15、watchOS 6和tvOS 13的sdk。Xcode 11支持iOS 8及以上版本、tvOS 9及以上版本、watchOS 2及以上版本的设备上调试。Xcode 11要求Mac运行macOS Mojave 10.14.4或更高版本。这是版本要求

通用

新特性

注意:SwiftUI开发工具只能在macOS Catalina 10.15 beta版上运行。

现在,您可以独立于系统外观设置更改Xcode的外观。(41165587)

Xcode支持使用 xcodebuild 或 xcrun altool从Organizer window或命令行上传应用程序。Xcode不再包含Application Loader。(29008875)

现在,当启动嵌入在 Xcode 中的 Instruments、模拟器和其他开发工具时,macOS上的 LaunchServices会考虑所选择的Xcode。例如,当您在Finder中双击一个Instruments trace时,将启动所选Xcode的Instruments版本。从命令行中更改Xcode和Xcode -select一起使用的是哪个Xcode。(6757601)

编辑器可以添加到任何窗口,而不需要助理编辑器。编辑器是使用跳转栏中的"Add Editor" 按钮或File > New > Editor command添加的。现在,每个编辑器都可以处于以下三种模式之一:"Editor Only", "Editor and Assistant" 或 "Editor and Canvas"。后两种模式在可用时自动显示相关内容。当使用多个编辑器时,View > Editor > Focus command可用于临时展开活动编辑器,以填充整个窗口,隐藏其他编辑器。对于源代码控制支持,工具栏中的Code Review按钮将替换Comparison Editor。"Show Authors"命令现在可以从Source Editor的编辑器菜单中获得。SCM日志现在位于检查器区域。(43806898)

已知问题

Xcode 11不支持在Mac Catalyst应用程序中使用SwiftUI。

已解决的问题

所需的软件包安装程序不再不必要地出现在macOS 10.15上。(51080815)

Foundation继承 Combineframework 现在可以了!可以使用以下Foundation和Grand Central Dispatch与Combine进行集成:keyvalueobserver、NotificationCenter、RunLoop、OperationQueue、Timer、URLSession、DispatchQueue、JSONEncoder、JSONDecoder、PropertyListEncoder、PropertyListDecoder和@Published属性包装器。(51241500)

当使用带有暗黑系统外观的浅色主题时,问题文本不再是浅色的。(48230278)

Apple Clang Compiler

新特性

Clang 现在提供了一种机制来控制退出时析构函数注册。您可以使用 -fno-c++-static-destructors 标志全局禁用这些函数,或者应用属性[[clang::no_destroy]] 来禁用特定变量的析构函数。还添加了属性[[clang:::always_destroy]],以便在使用 -fno-c++-static-destructors时启用特定变量的析构函数。(21734598)

作为扩展,所有语言模式现在都支持具有固定底层类型的c++ 11枚举。(43831380)

当使用在活跃 Standard version 中被弃用的标准库设施时,将发出弃用警告。(46881474)

堆栈检查在所有平台上都是默认打开的,以防止内存损坏。(25859140)

默认情况下,机器码outliner在 -Oz 下是打开的。它通过跨函数标识相同的代码序列来减小代码大小。这些序列被封装在一个编译器生成("outlined")的函数中。每个原始代码序列都替换为对所述函数的调用。(46385499)

为了提高性能和安全性,静态链接器(ld)现在将标记为常量的全局变量移动到一个新的段中:__DATA_CONST。这些全局变量可能由编译器生成的指针组成,动态链接器(dynamic linker, dyld)需要在加载期间修复这些指针,但是其他方面是常量,比如vtables和显式声明的常量指针。一旦dyld完成加载映像,它就会使__DATA_CONST只读。这种更改不会影响行为良好的代码,但是可能会破坏依赖于未定义行为的代码,比如使用类型双关来编写声明为const`的指针。(50898833)

static int value1 = 0; // Stored in __DATAstatic int value2 = 0; // Stored in __DATAconst 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 6tvOS 13c++ 17 库。(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 CatalystNSDataAsset 在运行时返回nil的问题。(50022757)

解决了一个问题,当一个资产具有为iPadMac 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)解决方法:在正在复制的文件的文件检查器中,将类型弹出框从默认值切换到,然后返回默认值。这将重置项目文件中的文件类型为正确的类型,并使构建系统能够将其匹配到正确的工具来处理它。

当用户第一次构建时,可能会出现一个弹出窗口,说明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)

索引器不会在索引Swif响应文件之前等待执行构建。(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)

视图调试器检查器显示NSImageViewNSButtoncontentTintColor。(49506123)for

视图调试器现在显示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)

NSViewUIView 在尺寸检查器中有一个布局模式选项,可以显式地选择"将自动调整蒙版转换为约束"。默认设置为 "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属性:

@IBSegueActionfunc 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

已知问题

Linking

已解决的问题

目标包含 Swift 代码,启用位码构建设置设置为 Yes ,在使用存档操作构建时正确链接。(52804818)

LLDB

新特性

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

已知问题

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 不兼容。

如果在接口生成器中没有指定它的模块,则在运行时加载故事板时不会找到 RealityKitARView 类。在 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 应用程序生成一个新的授权文件,并按照以下步骤排除不可用的授权:

在创建开发证书时,自动签名可能会失败,并出现"出于安全原因禁止此请求"的错误。(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:@dynamicMemberLookupenum 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? = .zeroswitch foo { case .zero: break case .one: break case .none: break}复制代码

现有的 @dynamicMemberLookup 属性现在支持键入键路径实现。(SE-0252, 49069813)

struct Point { var x, y: Int}@dynamicMemberLookupstruct 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)

ArrayContiguousArray 现在都有 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() { fn() } { 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)解决方法:重新排序修饰符,使特定于文本的修饰符出现在任何视图修饰符之前。

HStackVStack检查器不支持自定义布局指南。(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的任何代码。例如:

// XCTest code复制代码

已解决的问题

在没有搜索结果时,在 Add package Dependency 工作表中搜索包存储库。(51223367)

无论在package . Swft 清单文件中声明的目标的名称与该目标的目录名在大小写上不同,代码补全都适用于 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)

这一篇 Xcode 11 Beta 5 翻译 官方文档 长夜漫漫,独自一人翻译。如有纰漏敬请原谅(同时还望指出,及时更改,以惠后人)。内容更新角度是空前的,我相信正式版来临必将震撼整个互联网行业!通过现在 Xcode 11 出现之后的 SwiftUI + Combine 就知道!身处互联这个利益的漩涡之中,我们唯一能做的就是与时俱进

就问此时此刻还谁?45度仰望天空,该死!我这无处安放的魅力!

相关标签 腾讯

觉得文章不错,微信扫描分享好友

扫码分享

热门推荐