Xcode 11 Beta 5

这一篇文章给大家介绍: 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继承 Combine
    framework 现在可以了!可以使用以下 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 __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 库
    。(50988273)

已知问题

  • 当使用手动保留释放时,可能不会捕捉到以下方法或它们传递调用的任何函数或方法抛出的异常: release、autorelease、retain、alloc或allocWithZone
    。(50253394)

已解决的问题

  • Xcode
    if (@available(…))
    链接到运行在 iOS 13、macOS 10.15、watchOS 6或tvOS 13
    上的应用程序或框架中时, if (@available(…))
    检查可以正常工作。(51109405)

  • 删除

    标头。使用 c++ 17
    中的
    来替代。(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) 解决方法
    :在正在复制的文件的文件检查器中,将类型弹出框从默认值切换到,然后返回默认值。这将重置项目文件中的文件类型为正确的类型,并使构建系统能够将其匹配到正确的工具来处理它。

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

Debugging

新特性

  • 视图调试器现在在检查器中显示 NSImage
    实例的名称。(35516797)

  • 用于调试视图层次结构的Size检查器中的图形筛选器标识所选视图上的哪些属性受到约束。在筛选器中选择属性将显示的约束缩小到与该属性匹配的约束。标准修饰符键(如 Shift和Command
    )可用于展开显示匹配这些属性的约束的组合的选择。(44864394)

  • 现在可以调试 watchOS
    应用程序的视图层次结构。(45173634)

  • 现在,您可以从设备和模拟器窗口模拟连接设备的网络条件和热状态。(44608479)
  • 视图调试器在调试导航器和画布中显示 UIWindowScene
    实例。(45378799)
    可以在scheme选项中禁用视图调试。(45928299)

  • 用于调试视图层次结构的大小检查器有关于约束的更多细节,包括过滤器、编辑器中的悬停高亮显示和更好的描述。(16153188)
  • 视图调试器支持调试 Mac Catalyst
    应用程序。(37507479)

  • 视图调试器检查器显示 NSImageView
    NSButton
    contentTintColor
    。(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(_: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

新特性

  • 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"
    添加到
    元素中,以确保保留空白。(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
    应用程序生成一个新的授权文件,并按照以下步骤排除不可用的授权:

      1. 在项目导航器中选择应享权利文件,然后选择 File > Duplicate
      1. 给你的 Mac Catalyst
        授权文件一个唯一的名称并保存它。
    • 3.从新的 Mac Catalyst
      权限文件中删除任何不可用的私有权限。

      1. 在项目编辑器中导航到 Mac Catalyst
        应用程序的构建设置,并找到代码签名权限构建设置。
      1. 展开构建设置,以便您可以查看所有构建配置的值。对于每个构建配置,单击 plus(+)
        按钮添加条件设置。
      1. 从每个条件设置中的弹出按钮中,选择任何 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  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 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 {
    var v: T

    init(_ v: T) {
        self.v = v
    }

    subscript(dynamicMember member: KeyPath) -> U {
        get { return v[keyPath: member] }
    }
}

var box = Box(Point(x: 0, y: 0))
_ = box.x
复制代码
  • 现在,您可以使用Self表达式来引用结构、枚举和类声明中最内层的标称类型。例如,这个结构中的两个方法声明是等价的:
struct Box {
    func transform1() -> Self { return self }
    func transform2() -> Box { 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() {
        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) 解决方法
    :重新排序修饰符,使特定于文本的修饰符出现在任何视图修饰符之前。

  • 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
    选项指定与用于测试或构建测试的方案相关联的测试计划。如果没有指定 -testPlan
    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度仰望天空,该死!我这无处安放的魅力!