Xcode 10.1 更新
2018-11-26 本文已影响2538人
Mr__Peng__
概览
Xcode 10.1
包含SDK iOS 12.1
,watchOS 5.1
, macOS 10.14.1
,tvOS 12.1
. 支持调试iOS 8
和更高版本,tvOS 9
和更高版本,watchOS 2
和更高版本,需要Mac
运行在macOS 10.13.6
或更高版本
General(常规)
新功能
- 支持 arm64e(预览)
要尝试arm64e
的开发者预览版,Select Project
->Select Target
->Build Setting
->Architectures
->Vail Architectures
-> 添加arm64e
标.
App Store
和TestFlight
不接受包含arm64e
的提交。 提交上传到AppStore
的时候,Xcode会删除arm64e
内容。
解决问题
- 导航栏->
Navigate
>Open in
,不在为每个单独的选项卡设置单独的窗口,而是都集成在一个窗口 -
xed
工具现在使用xcode-select
或开发者定义的环境变量执行的Xcode
Apple Clang Compiler
解决问题
-
iOS 12.1 beta 2
中对libunwind
的更改解决了iPhone XS
和iPhone XS Max
上运行少量应用程序的问题
Asset Catalog
已知问题
- 使用
Xcode 10
或更高版本构建的图片资源的应用程序,当开发版本设置为iOS 9.0
,9.1
或9.2
,会产生与这些iOS
版本的运行时不兼容的内容
解决问题
-
40mm
and44mm
用来复杂指定正确的图片大小
Build System
解决问题
- 新的构建系统支持 ODR
- 修复了在为
.xib
文件或storyboard
使用基本本地化时,不会将与基本文件关联的单个本地化.xib文件或storyboard
编译到产品中的问题
Debugging
新功能
-
Exception breakpoints
有了“忽略计数”字段
Devices
解决问题
- 运行iOS 12或更高版本的设备截屏会从设备窗口请求
Interface Builder
新功能
- 在
xib
中拖动添加过约束的控件,再更新约束后,四个方向都会更新。
解决问题
- 修复当视图作为
UIScrollView
的子视图时,自动布局错误的报告问题的问题 - 在
iPhone XS
,iPhone XS Max
,和iPhone XR
设备栏切换时,提高xib
的性能 - 修复了预览助手编辑器中监视内容布局与设备栏选择不匹配的问题
-
@IBDesignable
视图,现在在启用时使用新的构建系统构建
Simulator
已知问题
- 如果另一个进程在模拟器打开时关闭模拟器,则模拟器在下次启动时不会正确的重新连接到模拟器。安装了多个版本的
Xcode
,在其他版本运行Simulator
时可能会碰到。
解决方案:退出重启模拟器。不关闭所有模拟器退出,按住Option
->Simulator
->Quit Simulator
->Keep Running
。
Swift Compiler
已知问题
- 在类实例上的协议或扩展中定义的非突变设置器间接修改属性,
Swift
编译器可能会在调用getter
之后通过释放实例来错误编译它。 会导致程序崩溃或在运行时出现不可预测的行为。例如
protocol SomeProtocol { }
class SomeClass: SomeProtocol { }
extension SomeProtocol {
var someNonmutatingProperty: CGPoint {
nonmutating set { _ = self }
get { return .zero }
}
}
// Might be miscompiled, deallocating SomeClass() too early.
SomeClass().someNonmutatingProperty.x = 42
解决方案: 将操作分解为多个语句,以便get
和set
操作在不同的语句中发生:
let someObject = SomeClass()
// First get the nonmutating property value.
var temp = someObject.someNonmutatingProperty
temp.x = 42
// Then modify it.
someObject.someNonmutatingProperty = temp
解决问题
-
Playgrounds
不再记录有关其类型在运行时无法解码的字段的消息 - 编译器现在报告任何错误的错误原因。 例如,以前,可能会出现
“Command CompileSwiftSources failed with a nonzero exit code”
这样的消息,但没有失败原因 - 包含空格的长文件路径不会导致构建失败
-
NSBundle
,bundleForClass:
初始化与Swift
类一致,包括不在最新的操作系统版本上运行时。 - 可以将具有函数类型作为参数的泛型类的let属性成功传递给另一个函数或方法
class A<B> {
let function: (B) -> B
}
func takeFunction(_: (Int) -> Int) {}
func passFunction(from a: A<Int>) {
takeFunction(a.function)
}
- 嵌套上下文中对捕获值所做的更改将反映在外部上下文中。
- 可以调用一个在协议类型值上返回Self的
mutating
方法
protocol Example {
mutating func test() -> Self
}
func foo(x: inout Example) {
_ = x.test() // No longer crashes the compiler sometimes.
}
- 可以将不同的类型组成一个
Anyobject
类型的数组
func f(_: [AnyObject])
f([NSObject.self, NSString.self])
Swift Standard Library
解决问题
- 不推荐使用
FixedWidthInteger
协议的unsafeAdding(_ :)
,unsafeSubtracting(_ :)
,unsafeDivided(by :)
和unsafeMultiplied(by :)
方法,并将在以后的版本中删除。
这些方法在溢出条件下产生未定义的行为。 在算术运算的情况下,使用assert
和addsReportingOverflow(_ :)
方法或&+
运算符的组合,两者都有溢出的情况下定义明确的结果
Source Control
解决问题
- 当从
GitLab.com
或GitLab
自托管帐户克隆时,组织仓库现在与个人仓库一起显示。
Testing
已知问题
- 启用测试并行化时,性能分析测试的行为不正确
解决方案:Product
->Scheme
->Edit Scheme
->Test
->Info
-> 选中测试目标 ->Option
->Disable Execute in parallel
解决问题
- 使用旧版构建系统的项目中的
UI
测试现在可以在iPhone XS
和iPhone XS Max
上运行 - 如果
UI
测试目标应用程序在模拟器中测试期间崩溃,现在它被正确报告为测试失败,而不是被错误地视为成功测试或显示有关“应用程序状态未知”的失败消息 -
Xcode 10.1 beta 2
和更高版本支持运行iOS 12
测试版本进行UI
测试 - 修复了一个问题 在测试开始的任何时候添加观察者,不会添加到共享
XCTestObservationCenter
实例的观察者上调用testBundleDidFinish:
方法的问题(例如:在当前注册的观察者调用testBundleWillStart:
方法之后) - 当接收器是
menu item
或其子类时,XCUIElement
类实例方法click
和hover
方法现在会自动滚动菜单