Xcode 9最近刚刚发布,带来了一系列不错的新特性,可以更好的帮助到开发者完成开发工作。

Xcode Runtime Tool

Xcode 9中有许多Runtime Tool可以帮助开发者找到代码错误,包括如下:

  • Main Thread Checker  -  Xcode 9新引入

  • Address Sanitizer

  • Thread Sanitizer

  • Undefined Behavior Sanitizer

  • Using Runtime Tools Effectively

Main Thread Checker

Main Thread Checker可以帮助开发者找到不在主线程中执行的UI操作。

设置可以在Diagnostics面板中找到,Xcode默认勾上:

在运行时刻,如果发现有任何的Main Thread问题,则会提示如下:

Address Sanitizer

Address Sanitizer可以用于检测内存问题,Address Sanitizer开启会带来比较大的Overhead,所以需要开发者手动设置。

开启之后一旦发现有任何内存问题,就会自动检测并且提示,如下图所示:

1. 会有提示告知哪行代码有使用已经释放的内存对象

2. 左边面板会告知该对象具体的创建、使用、释放的情况,非常方便debug

Thread Sanitizer

用于发现多线程问题,在Xcode 9中的Thread Sanitizer可以帮助:

1. 发现多线程中的数据竞赛问题

2. 在集合中的数据竞赛

3. Swift access races

如下图所示就是Swift关于Array的数据多线程竞赛问题:

可以通过引入Queue来同步多个线程的方式来解决:

通常解决多线程数据竞赛问题的方法:

1. 使用GCD同步数据操作

2. 使用Serial Queue将共享数据的操作串型化

3. Thred Sanitizer是发现数据竞赛的很好的工具

Undefined Behaviour Sanitizer

顾名思义,Undefined Behaviour Sanitizer可以帮助开发者在运行时找到一些异常情况,包括如下情况:

1. 运行时的Bug查找:整型溢出,

2. 检查C中的不安全的Constructs

3. 和其他运行时的工具可以兼容

Using Runtime Tools Effectively

Apple对于Xcode 9中的Runtime工具提供了一些建议

1. 使用持续集成,在测试过程中发现运行时错误

2. Address Sanitizer和Thread Sanitizer不可兼容,所以不能同时使用

Runtime工具有一定的Overhead,具体如下:

参考资料:

Finding Bugs Using Xcode Runtime Tools

Clang Documentation for Address Sanitizer

Clang Documentation for Thread Sanitizer

Clang Documentation for Undefined Behavior Sanitizer

Code Diagnostics

Undefined Behavior Sanitizer

Debugging with Xcode 9

支持了无线Debug,可以不用再需要连接数据线进行真机开发工作

增强的断点:支持条件断点,并且可以在断点的时候执行额外语句

ViewController Debugging: 可以在查看View Hierarchy时候可以查看到ViewController的信息

参考资料:

Debugging with Xcode 9

Localizing with Xcode 9

String Management

使用NSLocalizedString加载多语言,使用localizedStringWithFormat加载格式化的多语言。

// Set a label's text
label.text = "Population"
// Set a label's text to a localized string
label.text = NSLocalizedString("Population", comment: "Label preceding the population value")
// Load localized string from a specific table label.text = NSLocalizedString("Population", tableName:
nil, comment:
"Label preceding the population value"
// Create a formatted string
"Localizable", bundle: .main, value:
)
let
format = NSLocalizedString("%d popular languages", comment:
"Number of popular languages")
label.text = String.localizedStringWithFormat(format, popularLanguages.count)

使用静态分析可以帮助找到没有Localized的文本,在Build Setting中勾选上Missing Localizability和Missing Localization Context Comment。

静态资源在项目中的组织如下:

Base.lproj: 基础资源包

en.lproj: 英文的文本资源

Stringsdict

可以根据不同场景使用不同的Localized String,例如单复数的情况:

Adaptive Strings

可以根据特定条件,显示不同的Localized String,例如在不同屏幕尺寸下面显示不同的文本

String资源可以支持XLIFF格式的导入导出

参考资料:

Localizing with Xcode 9

What’s New in Testing

Async Testing

可以用于异步的行为测试,通过设置期望条件,然后等待验证。引入XCTWaiter,通过显示的方式来指定异步行为的期望。

// Test case waits implicitly
waitForExpectations(timeout: )
// Test case waits explicitly
wait(for: [documentExpectation], timeout: )
// Waiter instance delegates to test
XCTWaiter(delegate: self).wait(for: [documentExpectation], timeout: )
// Waiter class returns result
let result = XCTWaiter.wait(for: [documentExpectation], timeout: )
if result == .timedOut {
// handling the timeout...
}

Multi-app

支持多个APP的同时自动测试,通常可以用于:App Groups,Extensions

UI Testing Performance

Xcode 9对于UI Testing进行了大量的优化,提升了性能

参考资料:

What's New in Testing

iOS 11系列 - Xcode 9新特性的更多相关文章

  1. IOS学习【xcode 7新特性url链接】

    由于xcode7的更新,在访问http链接的时候会输出错误信息 The resource could not be loaded because the App Transport Security ...

  2. 最新iOS 6 in Xcode4.5新特性——Storyboard和属性自动绑定

    最新iOS 6 in Xcode4.5新特性编程之二(上)——Storyboard和属性自动绑定 从Xcode 4.3开始,Storyboard 就是iOS 5和iOS 6中令人兴奋的一个新特性,他将 ...

  3. iOS之Xcode8 Auto Layout新特性

    目录 1.Incrementally Adopting Auto Layout 2.Design and Runtime Constraints 3.NSGridView 4.Layout Feedb ...

  4. xcode 10 新特性

    这里主要介绍一下Xcode10 版本主要更新的内容.随着iOS12的发布,Xcode10已经可以从Mac App Store下载.Xcode10包含了iOS12.watchOS 5.macOS10.1 ...

  5. iOS开发实用技巧—项目新特性页面的处理

    iOS开发实用技巧篇—项目新特性页面的处理 说明:本文主要说明在项目开发中会涉及到的最最简单的新特性界面(实用UIScrollView展示多张图片的轮播)的处理. 代码示例: 新建一个专门的处理新特性 ...

  6. Java系列 - 用Java8新特性进行Java开发太爽了

    本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome/ 前言 从开始写博客到现在已经过去3个 ...

  7. Java系列 – 用Java8新特性进行Java开发太爽了(续)

    本人博客文章网址:https://www.peretang.com/using-java8s-new-features-to-coding-is-awesome-2/ 前言 上周, 我们谈论了关于Ja ...

  8. 前端进阶系列(三):HTML5新特性

    HTML5 是对 HTML 标准的第五次修订.其主要的目标是将互联网语义化,以便更好地被人类和机器阅读,并同时提供更好地支持各种媒体的嵌入.HTML5 的语法是向后兼容的.现在国内普遍说的 H5 是包 ...

  9. Xcode 8 新特性

    在2016 苹果全球开发者大会(WWDC)期间, 苹果一如既往地给开发者们披露了新版的集成开发工具 – Xcode, 在过去的每一次大版本发布中,苹果都会积极地改进开发工具,添加一些极具吸引力的新功能 ...

随机推荐

  1. 在CTreeCtrl控件点击事件中获取点击的项

    网上搜了一下,有两种方法: 1.使用GetSelectedItem() HTREEITEM hItem = m_treeCtrl.GetSelectedItem(); CString strText ...

  2. F - Goldbach`s Conjecture 对一个大于2的偶数n,找有多少种方法使两个素数的和为n;保证素数a<=b; a+b==n; a,b都为素数。

    /** 题目:F - Goldbach`s Conjecture 链接:https://vjudge.net/contest/154246#problem/F 题意:对一个大于2的偶数n,找有多少种方 ...

  3. 中移苏研DCOS实践之路完整篇

    一.实践背景 1.1现网生产系统存在的问题 在中国移动内部各省市公司,由于技术迭代.设备更新的原因,设备繁杂,有x86server .VMware虚拟机.OpenStack虚拟机以及不同厂商的物理机( ...

  4. webpack issues

    webpack-dev-server安装失败 npm ERR! path C:\Users\YYT\Desktop\dot_webpack\node_modules\express\node_modu ...

  5. python cookies 爬虫处理

    Cookie Cookie 是指某些网站服务器为了辨别用户身份和进行Session跟踪,而储存在用户浏览器上的文本文件,Cookie可以保持登录信息到用户下次与服务器的会话. Cookie原理 HTT ...

  6. OpenGL ES andoid学习————1

    package com.xhm.getaccount; import javax.microedition.khronos.egl.EGLConfig; import javax.microediti ...

  7. go http的三种实现---2

    package main import ( "io" "log" "net/http" "os" ) func main ...

  8. < 转载 > 说说JSON和JSONP

    推荐博文---说说JSON和JSONP,也许你会豁然开朗,含jQuery用例 里头说的很详细!

  9. 使用Volley缓存图片时,缓存无效的原因。

    使用Volley的ImageLoader异步获取并缓存图片时,发现有的网络图片已经缓存了,可是断网后却读不出来. ImageLoader的用法: RequestQueue requestQueue = ...

  10. Android开发:《Gradle Recipes for Android》阅读笔记(翻译)3.3——整合resource文件

    问题: 想要在product的flavor里面改变图片,文字或者其它资源. 解决方案: 在flavor里面增加合适的资源目录,并且改变他们包含的值. 讨论: 考虑下3.2章的“hello world ...