Xcode 8.1 GM的新增功能

苹果已经发布了Xcode 8.1 GM-这是新版本中的新增功能和改进功能:

快速更新

  • 将C和Objective-C代码导入Swift时,将定义一个新的宏__swift__。 该宏的值的格式为XYYZZ,其中X是语言的主要版本,YY是次要版本
    语言的版本,而ZZ是“补丁”版本(YY和ZZ始终为两位数)。
  • Swift标准库中添加了两种类型:UnsafeRawBufferPointer和UnsafeMutableRawBufferPointer。 它们表示固定内存区域(缓冲区)上的非所有视图。 它们将底层缓冲区公开为UInt8字节的集合,而与该内存中保存的值的类型无关。
  • 一个新的withUnsafeBytes(of :)函数将值的内存表示形式公开为UnsafeRawBufferPointer。
  • Swift标准数字类型现在作为NSNumber桥接到Objective-C。 NSValue类为其提供工厂方法的结构现在作为NSValue桥接到Objective-C。 由乔·格罗夫(Joe Groff)建议。
  • 当Optional值桥接到Objective-C对象时,当Optional传递给采用非空ID的API或[T?]数组桥接到NSArray时,如果有一个值,Swift运行时将桥接已包装的值。 如果桥接了nil值,并且API不接受nil指针,则Swift将使用NSNull。 由乔·格罗夫(Joe Groff)建议。

快速修复

  • Swift 3.0.1现在生成一个const UnsafePointer而不是UnsafeMutablePointer。
  • 现在可以正确处理C属性swift_error(zero_result)。
  • 覆盖和满足协议要求的成员的访问检查已修复为与SE-0025更紧密匹配。 如果需要保持Swift 3代码与Xcode 8.0兼容,请对顶级类和结构使用private而不是fileprivate。
  • 解决了使用@NSManaged属性来满足协议要求的问题。

Objective-C更新

  • 现在,使用“手动引用计数”的Objective-C文件支持__weak引用,而不是忽略它。 您需要在项目设置中启用它,否则将触发编译器警告。

核心数据更新

  • 现在,在创建新实体时,Xcode 8将为实体名称和类名称设置相同的值。 更改实体名称也将更改类名称,除非它们已经不同。

核心数据修复

  • 使用自动代码生成保存后,现在可以对数据模型进行更改。

界面生成器更新

  • 新的“更新框架”按钮将更新所选对象及其子对象的框架。
  • 固定按钮已重命名为添加新约束。
  • 自定义手势识别器已添加到对象库,以允许继承UIGestureRecognizer或NSGestureRecognizer而不是使用NSObject。

界面生成器修复

  • 修复了使用重力区域分布的NSStackView的自动布局性能。
  • 解决了布局不明确时Xcode不能始终从情节提要和xib恢复视图帧的几个问题。 现在,您可以解决歧义,并且Xcode将继续存在。
  • 将内容拖动到画布上的静态UITableView单元中,将再次起作用。
  • 创建IBAction连接不再使用Swift 2.3插入WithSender。
  • 在非视网膜上的设备栏中选择横向方向
    在OS X 10.11上运行时显示的内容现在将不再挂起。

调试修复

  • 在Simulator中进行调试时,Xcode控制台不再显示来自系统框架的额外日志记录。

模拟器修复

  • Sticker Pack应用程序可以与Xcode中的iPhone 5和iPad Retina模拟器一起使用。
  • 每次启动,旋转设备或更改比例时,CoreSimulatorService不再会泄漏内存。
  • simctl launch现在支持将应用程序的标准输出和标准错误定向到文件或本地终端。

源代码编辑器修复

  • 扩展现在可以更可靠地工作。
  • XCSourceTextRange现在在开始位置包含字符,并且
    在结尾位置排除字符。 扩展将需要针对Xcode 8.1进行构建以包含此修复程序。
  • 扩展程序可以通过将XCXcodeKitVersionNumber与XcodeKit / XcodeKitDefines.h中列出的版本进行比较来检查Xcode的版本。

签名修复

  • 手动签名时,Xcode要求您的配置文件包含默认构建配置的权利文件使用的所有权利。

编译器修复

  • 即使使用Objective-C类属性,现在也可以将使用Xcode 8.1 GM Seed编译的LTO文件链接到使用以前的Xcode版本编译的LTO文件。
  • 当代码包含“ private func ==”定义时,LLDB会正确评估Swift表达式。