专栏名称: 知识小集
目录
相关文章推荐
上海证券报  ·  万科,大涨 ·  昨天  
证券时报  ·  深度 ... ·  昨天  
上海证券报  ·  蜜雪冰城,今起招股 ·  4 天前  
51好读  ›  专栏  ›  知识小集

Xcode 10.1 新特性及解决的问题

知识小集  · 掘金  ·  · 2018-11-30 05:06

正文

阅读 293

Xcode 10.1 新特性及解决的问题

原文链接

距离 Xcode 10.1 正式版发布已经将近一个月了,我们今天重新来回顾一下 Xcode 10.1 的新特性,以及已解决的问题和存在的问题。

本文主要参考了 《Xcode 10.1 Release Notes》 进行整理,同时你也可以查阅 《Xcode 10 Release Notes》 获取更多关于 Xcode 10 的细节。

接下来我们将以新特性(New Features)、已解决的问题(Resolved Issues)、已知问题(Known Issues)等几方面来介绍 Xcode 10.1 在各模块上的更新。

1. General / 通用

新特性

  • 支持 arm64e 处理器架构(预览版)

如果你想尝试尚处于开发者预览版的 arm64e,请在 Xcode 项目编辑器中选择你的 iOS app 对应的 target,在 Build Settings 中找到 "Architectures" 设置项,选择 "Other…" 选项,然后添加手动添加 arm64e 到 architectures 列表中。

注:目前 App Store 和 TestFlight 并不接受包含 arm64e 的提交,所以当我们 Archive 后在 Organizer 窗口要向苹果提交发布时,Xcode 会自动移除掉 app 包中 arm64e 的内容。

已解决的问题

  • 菜单中 Navigate > Open in… 的导航栏 UI 不再将窗口中的各个 tabs 显示为单独的窗口,每个窗口都有一个 tab。

  • xed 工具现在使用由当前 xcode-select DEVELOPER_DIR 环境变量指定的 Xcode。

2. Apple Clang Compiler / 苹果 Clang 编译器

已解决的问题

  • 对 iOS 12.1 beta 2 中的 libunwind 库进行修改,解决了在 iPhone XS 和 iPhone XS Max 上运行少部分 app 的问题。

3. Asset Catalog / 资源目录

已知问题

  • 项目中如果包含了 asset catalogs 并使用 Xcode 10.0 或者更高版本的构建的 app,且其 Deployment Target(指最低支持的系统版本)设为 iOS 9.0、9.1 或者 9.2 时,会生成与这些 iOS 版本的运行时不兼容的内容(具体表现为:在系统版本为 9.0 ~ 9.2.1 之间的真机设备上通过 App Store 或者 TestFlight 下载安装该 app 并运行,会出现偶现的 Crash)。

注:关于这个问题,相信大家已经很熟悉了,网上有很多讨论,我们之前也发了几条相关的小集。它是在 Xcode 10.0 上开始出现的,而在 Xcode 10.1 刚发布时,苹果声称已经解决了,后面大家纷纷表示这个问题仍然存在。不过根据微博上的最新消息和小伙伴们的亲自验证,苹果已经在服务端解决了这个问题,开发者通过 Xcode 10.1 打的 ipa 包在上传到 App Store Connect 后台,苹果在处理包的过程中会自动修复。

已解决的问题

  • 增加 40mm 和 44mm 的孔(wells)用于解决指定正确的图标大小的难题。

4. Build System / 构建系统

已解决的问题

  • 新的构建系统支持“按需资源”(On Demand Resources,ODR)。

  • 修复了问题:在为 .xib 文件或 storyboards 使用基本本地化时,不会将与基本文件关联的各个本地化的 .xib 文件或 storyboards 编译到产品中。

5. Debugging / 调试

新特性

  • 对于异常断点(Exception Breakpoints)的断点编辑器增加了一个 "ignore count" 字段。

6. Devices / 设备

已解决的问题

  • 运行 iOS 12 或更高版本的设备从 "Devices" 窗口中请求获取屏幕截图的问题。

7. Interface Builder / 界面构建工具

新特性

  • 现在,在画布中拖动控件(Control-dragging)以添加约束总是包括所有四个方向,而不仅仅是最接近拖动方向的方向。

已解决的问题

  • 修复了问题:在将视图与 UIScrollView 的子视图添加约束时, Auto Layout 会错误报告问题。

  • 提高了画布(canvas)的性能:当底部设备栏在 iPhone XS、iPhone XS Max 和 iPhone XR 之间切换时。

  • 修复了导致预览助手编辑器(Preview assistant editor)中监视内容布局与设备栏选择不匹配的问题。

  • 现在,当启用 @IBDesignable 视图时,将使用新的构建系统进行编译。

8. Simulator / 模拟器

已知问题

  • 如果有另一个进程,例如 simctl ,在模拟器正在打开时关闭了模拟的设备,则模拟器在下次启动设备时无法正确地重新连接到模拟器。如果你安装了多个版本的 Xcode,则在其他版本的 Xcode 中运行模拟器是可能也会遇到这个问题。

*临时解决方案:*退出并重新启动模拟器。要在不关闭所有模拟器的情况下退出,请先按住 Option 键并选择 Simulator > Quit Simulator…,然后在出现的对话框中选择 "Keep Running"。

9. Swift Compiler / Swift 编译器

已知问题

  • 如果你在一个类的实例对象上通过使用 protocol 或 extension 中定义的 nonmutating setter 来间接修改属性,则 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
复制代码

已解决的问题

  • Xcode 中的 Playgrounds 不再记录关于在运行时类型无法解码的字段的信息。

  • 现在编译 Swift 代码时会始终报告导致任何失败的错误。例如,之前可能会发生诸如 "Command CompileSwiftSources failed with a zeroo exit code" 之类的消息,而没有伴随的失败原因。

  • 包含空格的长文件路径将不会再导致构建失败。

  • NSBundle 类的 bundleForClass: 初始化方法现在与 Swift 类保持一致,包括即使不在最新的操作系统版本上运行。

  • 现在可以将以函数类型作为参数的泛型类的 "let property" 成功传递给另一个函数或方法。

class A<B> {
    let function: (B) -> B
}
func takeFunction(_: (Int) -> Int) {}

func passFunction(from a: A<Int>) {
    takeFunction(a.function)
}
复制代码
  • 对嵌套上下文中(nested context)的捕获值所做的更改现在将反映在外部上下文中(outer context)。

  • 现在可以成功调用一个在协议类型(protocol type)的值上返回 Self 的变异方法(mutating method):

protocol






请到「今天看啥」查看全文