概览
Xcode 10
包含SDK iOS 12
,watchOS 5
, macOS 10.14
,tvOS 12
. 支持调试iOS 8
和更高版本,tvOS 9
和更高版本,watchOS 2
和更高版本,需要Mac
运行在macOS 10.13.6
或更高版本
General
新功能
- 快速查找弹出窗口中添加了一个选项,用于导出
NSData
等数据类型。 - 现在,新创建的方案默认由
Xcode
项目的所有用户共享。要创建个人方案,Product
->Scheme
->Manager Scheme
->uncheck Shared
-
Ctrl + 0
弹出Schemes
选择窗口,Ctrl + Shift + 0
弹出设备选择窗口,使用上下箭头选择,enter
选中 - 库(就以前右下角的快捷代码和xib的拖动空间)内容已从“检查器”区域的底部移动到叠加窗口,该窗口可以像Spotlight搜索一样移动和调整大小。 它会在拖动项目时解除,但在拖动之前按住Option键会使库保持打开状态以进行额外的拖动
库打开的方式可以使用顶部导航栏View
->Show Librarys
,或(Options) + Shift + Command + L
顶部的内容,媒体内容可以长按工具栏按钮或View
->Show Media Librarys
或(Options) + Shift + Command + M
- 打开库的时候用一次就会消失,按住
options
键打开,在手动关闭之前都不会消失 - “Project Editor”中的“ Capabilities”选项卡为macOS应用程序和应用程序扩展提供了新的“Hardened Runtime”功能。 启用此功能会使您的应用选择加入macOS 10.14提供的新安全保护,并且您的应用需要经过公证
已知问题
- 打开存储在
iCloud Drive
中的Xcode
项目和工作区,或更改存储在iCloud Drive
中的打开的工作区或项目的源代码控制分支,可能会导致Xcode
挂起
解决问题
-
Objective-C(.h)
新文件模板包括NS_ASSUME_NONNULL_BEGIN
和NS_ASSUME_NONNULL_END
宏 - 修复了从
Find Navigator
中进行选择时不会突出显示查找结果的文本范围的问题 - 项目设置验证了解通过引用其他构建设置而设置的构建设置值
- 管理方案表中未选中显示的方案不再显示在
Product
->Scheme
子菜单中 - 双击导航现在默认为与单击相同。可以在
preferences
修改 - 修复了在代码段编辑器中按
Tab
键时发生崩溃的问题
Apple Clang Compiler
新功能
-
Xcode 10
添加C++17
的头文件<any>, <optional>, and <variant>
的支持
解决问题
- 编译器现在可以正确的处理可能影响代码完成支持的无效
Objective-C
属性
Asset Catalog
新功能
- 命名颜色现在可以象征性地引用系统颜色
- 支持
ARKit 3D ARReferenceObject
资源 - 支持
CarPlay
资源 - 支持在
macOS 10.14
及更高版本上通过Light
,Dark
和High Contrast
外观改变图像和颜色资源 -
Asset catalog
和View debugger
的背景可以明确地设置为亮或暗,以便前景元素以足够的对比度显示
解决问题
- 默认情况下,
watchOS PDF
不再启用自动缩放,无论选择如何 - 修复了打开属于外部项目引用的
Asset catalog
时可能发生的挂起问题
Build System
查看 Build System Release Notes for Xcode 10
Command Line Tools
新功能
- 命令行工具包在
macOS SDK
中安装macOS
系统头文件。 使用已安装工具编译的软件将在Xcode
中提供的macOS SDK
中搜索标头,
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.14.sdk
或命令行工具:
/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk
依赖于你选中的Xcode
默认情况下,命令行工具将在SDK
中搜索系统标头。 但是,某些软件可能无法针对SDK
正确构建,并且需要在/ usr / include
下的基本系统中安装macOS
标头。 如果是此类软件的维护者,建议更新项目以使用SDK,或者提交错误报告以解决阻止您这样做的问题。 作为一种解决方法,提供了一个额外的包,它将把标头安装到基本系统。 在将来的版本中,将不再提供此包。 您可以在以下位置找到此套餐:
/Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
确保你使用的版本的命令行工具,运行xcode-select - s <Xcode 路径>
或Xcode
select- s/Library/Developer/CommandLineTools后安装。
Create ML
新功能
-
MTDataTable,MLDataColumn,MLUntypedColumn
支持数学运算,基于范围的切片,多列子选择,类型转换和其他数据预处理方法 - 增强支持裁剪图像的能力
已知问题
- 不支持使用命令行工具创建
ML
解决问题
- 关闭字段时,更改模型名称可以正确保存
Debugging
新功能
- 运行时改变
macOS app
外观Debug
->View Debugging
->Appearance
- Xcode的 视图调试器添加了浅色和深色的背景色选择
-
NSVisualEffectView
属性现在显示在视图调试器检查器中 -
Disk Gauge Report
中的files
表包含已关闭的文件,以便开发人员了解其大小 - 视图调试器将
appearance
和effectiveAppearance
属性添加到视图检查器 - 调试附件表允许开发人员打开
Malloc Stack Logging(Live Allocations)
- 磁盘计量报告包括一个新表,显示该进程的总读写大小
- 检查器中显示的命名颜色,而视图调试现在指示其名称以及它们是否为系统颜色
-
Metal Frame
调试器
调试Metal
着色剂, 捕获Metal
工作负载,选择绘制/分派调用并单击调试栏上的新调试按钮以开始调试着色器
在Debug Navigator
中选择命令编码器项将显示一个图表,显示编码器如何通过资源使用相互依赖。 放大以获取有关附件和编码器的更多信息。
每个绘制调用都有新的“ Geometry”
项,您可以在其中查看后变换顶点数据的三维可视化以及顶点输入和输出。
解决问题
-Memory Gauge Report
现在可以在所有平台上一致地报告物理足迹。
- 存在大量静态
Swift
模块时,第一个Swift
表达式评估的性能已得到优化 - 尝试在模拟器上运行应用程序之前,
Xcode
等待模拟器可用。 -
Debug
->View Debugging
菜单中的选项(如Show View Frames
)现在按预期继续目标应用程序
Deprecation Notices
Deprecations
-
libstdc++ Xcode 8
弃用,Xcode 10
开始不支持,推荐使用libc++
。还要审核硬编码链接器标志和目标依赖项,以删除libstdc++
的引用,包括(-lstdc++,-lddc++.6.0.9,libstdc++6.0.9.tbd,libstdc++.6.0.6.dylib
),还需要针对libc++
重建项目依赖项,如,针对libstdc++
构建的静态归档 -
Libgcc
已经过时了。Xcode 10
无法再构建具有macOS 10.4
和10.5
部署目标的应用程序。 - 对
Subversion
的支持已经被删除 - 在仪器中不再支持仅适用于
macOS
和Simulator
的基于dtrace
的自定义检测。 基于os_signpost
的新定制仪器包允许更大的灵活性和对数据表示的控制,并支持所有平台 -
Xcode 10
是最后支持Swift 3
的发布版本,从Swift 3.
转移到Swift 4.2
打开项目,Edit
->Convert
->To Current Swift Syntax
-
macOS 10.14 SDK
不在包含和支持编译32位的应用程序,如果需要编译i386
,需要Xcode 9.4
或更早的版本·
Devices
已知问题
- 运行在iOS 12设备使用Xcode截屏可能会失败
解决方案:使用设备进行截屏 - 在
Xcode 10
运行一个Xcode 10
以前的版本构建WatchKit App
,可能会出现错误"The WatchKit app has an invalid stub executable."
解决方案:清除构建文件重新运行App
Documentation Viewer
新功能
-
Quick Help
使用单个列布局,可以更好地利用其显示的可用空间 - 文档查看器和快速帮助中的代码清单与用户当前选择的主题颜色相匹配
Instruments
新功能
- 在
Instruments 10
线程状态中使用系统跟踪检测时- 添加了一种只显示线程状态通道的新线程模式,之前的OS Fundamentals
图形样式(系统调用,VM
故障和线程状态通道)仍然可用 - 在
Instruments 8
之前对系统跟踪仪表的支持已经被移除。包含来自这些仪器的数据的某些跟踪文件将不再在仪器中打开。 要查看这些文件,下载Xcode 10
之前的版本 - 可以构建和分发自己的自定义仪器
已知问题
- 如果
Xcode
尚未完成准备开发的任何连接设备,则仪器可能无法启动
解决方案: 等待设置完成然后启动Instruments
-
Instruments
可能无法在模拟器中配置库或框架单元测试 - 当停止包含路标的录音(例如
pointsOfInterest
,os_signpost(_:dso:log:name:signpostID :)
或os_log(_:dso:log:_:_ :) instruments)
时,录音按钮在一定时间内可能无法重新激活。
解决方案:在Mac
上启动控制台,选择目标设备,让控制台继续运行。 控制台和目标之间的这种连接足以使仪器在录制结束时不挂起
解决问题
- 在
iOS 11.3
之前的版本上进行性能测试,大多数都失败了
Interface Builder
Interface Builder Release Notes for Xcode 10
Localization
新功能
-
Xcode 10
支持新的Xcode
本地化目录(.xcloc)
导出和导入格式,用于本地化数据,可以包含XLIFF
文件和其他可本地化的内容,如图像文件 -
Xcode
提供了为尚未使用它但支持多个本地化的项目启用Base Internationalization
解决问题
- 在
Export For Localization
命令生成的XLIFF
中,项目目录外部文件的内容将通过相对于项目目录的路径而不是绝对路径引用 -
Xcode
现在提取以下Info.plist
键的适当值以进行本地化:UTExportedTypeDeclarations
,UTImportedTypeDeclarations
,UIApplicationShortcutItems
,INAlternativeAppNames
Metal
新功能
- 直接调用
Metal
编译器时,必须在构建.metal
文件时使用-c
标志.当metallib
使用生成的.air
文件时,不添加该选项将导致错误.使用Xcode
的构建系统调用Metal
编译器自动添加标志
Playgrounds
新功能
-
Playgrounds
现在回逐步执行代码,Shift-Return
或运行
会编译新的代码行,对于不想重复运行长任务特别有用,例如训练机器学习模型或设置实时视图的状态,并允许您逐步迭代您的想法而无需重新启动Playgrounds
已知问题
- 在
playground
中切换到非默认工具链可能会导致Xcode
崩溃
解决方案:切换回默认工具链,然后打开playground
。
解决问题
- 修复了
playground
无法运行的问题,显示“couldn't lookup symbols”
错误消息 - 修复了在带有
inline
结果的playground
中发生的崩溃 - 修复了创建新
playground
页面时有时会发生的崩溃,尤其是在playground
被锁定时 - 修复了阻止
iOS Game Playground
模块正常工作的问题 -
playground
中的代码现在完成支持辅助资源文件
Refactoring
解决问题
- 解决了当编辑
Refactor
->Rename
时,无法获取键盘焦点当Reduce motion
->Accessibility
选项打开
Server
解决问题
-
Xcode Server
日志(例如触发器日志)现在可在集成日志报告中看到
Signing and Distribution
新功能
- 支持通过命令行将应用程序上传到Apple
xcodebuild -export Archive
命令会执行上传如果提供了包含一个键名为destination
值为upload
的ExportOptions.plist
文件。此外,必须在Xcode的“帐户”首选项窗格中添加具有必要的App Store Connect
角色和提供者成员身份的Apple ID
帐户.xcodebuild 支持"app-store"
,"developer-id"
,"validation"
分布式方法 -
Xcode
的管理器中的开发者ID
分发选项现在支持将应用程序上传到Apple
进行审核,打包后在管理器中通过单击“发布应用程序”按钮,然后选择“开发者ID”方法和“Upload”目标来选择此选项。必须要有Apple ID
且已经加入会员.此外,上传的审核应用程序必须使用开发者ID
证书进行签名.如有必要,发布工作流程可以创建此证书,但需要具有代理角色的Apple ID
帐户才能执行此操作。
上传要应用程序后,可以通过选择存档并单击“显示状态日志”按钮,在“管理器”窗口中查看应用程序的状态。 收到应用程序已经过审核的通知时,可以通过选择存档并单击“导出应用程序”按钮从“管理器”窗口中将其导出。 导出的应用程序包含装订的票证,可以发布
Simulator
新功能
- 模拟器的“编辑”菜单中的“复制”和“粘贴”项目不再用于与模拟器设备的粘贴板同步。 “编辑”菜单现在具有用于处理这些操作的显式菜单项
- 当使用
iOS
模拟器目标从xcodebuild
或Xcode Server
运行测试时,测试失败将导致嵌入测试操作结果包中的日志存档的收集
已知问题
- 如果使用键盘命令进行快进和快退,视频输出可能会在外部显示器上停止播放
解决方案:从屏幕的右上角拉下控制面板,然后再次隐藏它。 - 模拟设备中的
macOS
粘贴板和粘贴板之间的同步有时会失败 - 操作系统可能需要几分钟才能在模拟器中首次启动
- 在
macOS 10.14
上,模拟器可能会在启动时或在模拟器中首次与麦克风交互时提示进行麦克风访问(例如,使用Siri
)如果拒绝权限,模拟器音频会话将无法使用任何类型的音频输入,无论模拟器内授予的权限如何.使用macOS
系统偏好设置,安全性和隐私首选项窗格更改此设置。
您的应用程序仍必须在模拟器中被授予麦克风权限。macOS
将其权限策略作为一个整体应用于模拟器运行时版本和模拟器内的所有应用程序。 每个模拟器将权限策略应用于各个应用程序,就像设备一样
Source Control
新功能
- 改进源代码管理身份验证工作流程,可提供更多信息并提供更强大的控制权来执行
- 集成
Bitbucket Cloud
和Bitbucket Server
。 - 可以选择推送标签。
- 集成
GitLab.com
和GitLab
- 通过源代码控制启用的项目,源编辑器显示开发人员在装订线中所做的更改,并显示尚未被拉入项目的其他开发人员所做的更改
- 使用
GitHub
,Bitbucket
和GitLab
的新创建,验证和上传工作流程,可以轻松管理SSH
密钥。 -
Rebase
支持当pulling source control
更改时
已知问题
-
Xcode
不支持ed25519
编码的SSH
秘钥
解决问题:使用不同加密形式的SSH密钥对
解决问题
-
Source Control
编辑器的子模式性能得到了改进,可以更快地加载和滚动。
Source Editor
Source Editor Release Notes for Xcode 10
Static Analyzer
新功能
- 使用
Grand Central Dispatch
时,静态分析器会检查常见的性能模式,其中包括使用信号量等待回调
+ (NSString *)requestCurrentTaskName {
__block NSString *taskName = nil;
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
NSXPCConnection *connection =
[[NSXPCConnection alloc]
initWithServiceName:@"MyConnection"];
id remoteObjectProxy = connection.remoteObjectProxy;
[remoteObjectProxy requestCurrentTaskName:^(NSString *task) {
taskName = task;
dispatch_semaphore_signal(sema);
}];
dispatch_semaphore_wait(sema,
dispatch_time(DISPATCH_TIME_NOW, 100)
);
return taskName;
}
此类模式可能会降低性能并导致应用程序挂起。 默认情况下,该检查当前处于禁用状态,但可以使用building setting
设置“Performance Anti-Patterns with Grand Central Dispatch”来启用该检查
- 静态分析器效率更高,并且会报告大多数程序的其他问题
Swift
Swift 4.2 Release Notes for Xcode 10
Testing
新功能
- 现在可以将方案配置为仅在测试包中运行固定的测试子集,而不是自动包含添加到包中的新测试。 这可以在方案编辑器的“测试”窗格中配置为每个测试包的选项
-
XCTest UI
测试现在将已启动目标应用程序的标准输出和错误流捕获到结果包中的文件 -
Xcode 10
支持并行运行测试,减少测试所需的时间。 测试并行化支持macOS
单元测试,以及iOS
和tvOS
模拟器上的单元和UI测试。 要启用并行化,请导航到方案编辑器(“Product”
>“Scheme”
>“Edit Scheme”
),选择“Test”
操作,然后选择“Info”
选项卡,然后在测试目标旁边,单击“Options”
。 最后,选择“Execute in parallel”
(对于macOS
测试)或“Execute in parallel on Simulator”
(对于iOS
或tvOS
)
通过在多个运行程序进程中在目标中发布测试类来进行测试并行化。 使用测试日志查看测试类的并行化方式。 您将在日志中看到已启动的每个运行程序进程的条目,并且在每个运行程序下方,您将看到它执行的类的列表。
在Simulator
上并行测试时,每个运行程序进程在所选模拟器的单独克隆上执行。 对于名为“iPhone X”
的模拟器,这些克隆将在Simulator
中显示为“Clone 1 of iPhone X”
,“Clone 2 of iPhone X”
等。 -
XCTest
现在强制不要多次等待XCTestExpectation
实例。这可以防止意外误用,对于反转期望尤其重要,因为它们会导致等待完全超时持续时间,从而导致测试执行速度变慢
期望可能被多次意外等待的一种方式是,如果使用expectationWithDescription
创建它,则等待使用waitForExpectations:timeout:
,然后waitForExpectationsWithTimeout:handler
:被调用。XCTest
现在会在发生这种情况时引发异常,列出应该调整的有问题的预期。
例如,以下代码就存在这个问题:
func testFoo() {
let expectation1 = self.expectation(description: "expectation1")
doSomething { expectation1.fulfill() }
XCTWaiter().wait(for: [expectation1], timeout: 1)
let expectation2 = self.expectation(description: "expectation2")
doSomething { expectation2.fulfill() }
// API Violation exception because it waits on both expectations,
// but expectation1 has already been waited on.
self.waitForExpectations(timeout: 1)
}
两种修复的可能
func testFoo_fix1() {
let expectation1 = self.expectation(description: "expectation1")
doSomething { expectation1.fulfill() }
XCTWaiter().wait(for: [expectation1], timeout: 1)
let expectation2 = self.expectation(description: "expectation2")
doSomething { expectation2.fulfill() }
// Only wait on expectation2, which has not yet been waited on.
self.wait(for: [expectation2], timeout: 1)
}
func testFoo_fix2() {
// Create an XCTestExpectation directly, not using XCTestCase convenience API.
let expectation1 = XCTestExpectation(description: "expectation1")
doSomething { expectation1.fulfill() }
XCTWaiter().wait(for: [expectation1], timeout: 1)
let expectation2 = self.expectation(description: "expectation2")
doSomething { expectation2.fulfill() }
self.waitForExpectations(timeout: 1) // Waits only for expectation2.
}
- 现在可以将测试包配置为每次运行测试时以随机顺序执行其内容。 这可以在方案编辑器的“测试”窗格中启用,作为每个测试包的选项
-
xcodebuild
具有新的命令行选项来控制并行测试的行为。 使用-parallel-testing-enabled
可以覆盖方案中的每个目标设置,以确定是否启用了并行化。 如果要控制启动运行数量,请使用-parallel-testing-worker-count
或-maximum-parallel-testing-workers
-
Xcode
偏好设置包含用于控制Xcode
在并行运行测试时应尝试的并行度的UI
.Mac Test Parallelization
用于调整并行运行macOS单元测试时生成的运行器数量。Simulator Test Parallelization
调整iOS ,tvOS app UI
测试时生成的模拟器克隆的数量。注意,从xcodebuild
进行测试时,-parallel-testing-worker-count
和-maximum-parallel-testing-workers
命令行选项优先于这些值 -
XCTest
在XCUIElement
上添加了新的API
,用于捕获UI
的整个状态,用于导出到外部系统或用于本地检查。 它包含一个表示UI
和API
快照的类型,用于将该快照导出到标准值类型的字典
解决问题
- 测试日志中会显示可能导致丢失或没有覆盖数据的错误。 如果发现任何此类错误,请使用
Apple Bug Reporter
提交错误,并在DerivedData中
附加项目文件夹的压缩存档 - 在与
WKWebView
和SFSafariViewController
内部的内容交互时,UI
测试记录期间Xcode
不再崩溃 - 修复了在使用不使用点作为小数分隔符的区域设置的系统上编辑这些测量时导致基线测量更改丢失和将来测量报告为%inf的问题
-"Run tests in Parallel"
重命名为"Test on the selected destinations concurrently"
,此选项使选定的目标同时运行方案的测试. 它不会导致单个目标并行运行测试。 要允许每个目标并行运行测试,请取消选中此复选框,并在方案中启用并行测试,或者将-parallel-testing-enabled YES
添加为xcodebuild
参数 - 当在测试导航器或源编辑器
(Xcode)
中单击测试gem
时,或者在使用-only-testing
时,Xcode
和xcodebuild
现在在活动方案中构建所有目标:(xcodebuild)
。 以前,只会构建相关的测试包目标及其依赖关系。Xcode
和xcodebuild
现在也将禁止您运行其测试包不属于活动(Xcode)
或指定(xcodebuild)
方案的测试或测试类。
网友评论