xcode运行ios11
2017-09-25 22:28:00 weixin_33950035 阅读数 26

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

Xcode Runtime Tool

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

  1. Main Thread Checker - Xcode 9新引入
  2. Address Sanitizer
  3. Thread Sanitizer
  4. Undefined Behavior Sanitizer
  5. Using Runtime Tools Effectively

Main Thread Checker

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


7755754-fa4a6db67639a3f1.png

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


7755754-a8ce6785734f099b.png

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

Address Sanitizer

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


7755754-cfbdc64cce2d2546.png

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

  1. 会有提示告知哪行代码有使用已经释放的内存对象
  2. 左边面板会告知该对象具体的创建、使用、释放的情况,非常方便debug


    7755754-7b85943f297985fc.png

Thread Sanitizer

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

  1. 发现多线程中的数据竞赛问题
  2. 在集合中的数据竞赛
  3. Swift access races

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


7755754-12fb22440a58028c.png

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


7755754-b2033d6cc24265e4.png

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

  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,具体如下:


7755754-67601848559f1ed9.png

参考资料:
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,可以不用再需要连接数据线进行真机开发工作


7755754-e7a8c1e00fd1af8b.png

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


7755754-9fef8c378a18e407.png

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


7755754-bab610ef6c5d00d0.png

参考资料:
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。


7755754-537c6fd2c7a95426.png

静态资源在项目中的组织如下:
Base.lproj: 基础资源包
en.lproj: 英文的文本资源


7755754-62d9f90890f88e54.png

Stringsdict

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


7755754-77661a8a8c1ddfc2.png

Adaptive Strings

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


7755754-cc9292ebddb276dc.png

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

参考资料:
Localizing with Xcode 9

What’s New in Testing

Async Testing

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

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

Multi-app

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


7755754-9e97f9d220fa656e.png

UI Testing Performance

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


7755754-74f04433f09635b2.png

参考资料:
What's New in Testing

2017-11-10 16:13:00 weixin_33961829 阅读数 25

1、首先保证这你的手机系统版本>=iOS11.0,Xcode版本 >= 9.0,手机和电脑在同一网络下面。

2、第一步:
用数据线连接手机和电脑,在Xcode --- Window -- Devices and SImulators,如图所示::


1335017-b22c1967ac0547a8.png
06A818BE-AAC3-48A5-8D9C-B873CF5D2C59.png

3、已经使用过的:


1335017-31122d5a4889bb3c.png
3731679C-80B5-4816-8E64-D2EDA87D5EAA.png

未使用的:


1335017-04a319ecea8af22b.png
C0D48137-D9E9-402E-8B66-6ECD8C3E257F.png

4、勾选之后等待几秒钟,再回到Xcode中:


1335017-b73450d0d847a051.png
A41E72D4-AD9B-4E4C-ADAB-F1FC6109D78C.png

5、如果你的手机后面有一个类似地球圆圈的东西就代表成功了,上图表示无法无线调试(不在同一网络下)。
成功标识如下图:


1335017-c3109df572339bdb.png
1DC429A5-778C-4647-B083-0957434D3375.png

PS:
1、无线调试很方便,不过就是网络有时候链接不稳定,如果发现无法调试

2017-06-07 11:25:01 mtc1256 阅读数 3114
/Applications/Xcode_beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk 
复制到
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk

/Applications/Xcode_beta.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS11.0.sdk
复制到
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk


/Applications/Xcode_beta.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/11.0 (15A5278f)
复制到
/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport/

参考:http://blog.csdn.net/u013316626/article/details/54100011

2017-10-17 09:49:00 weixin_33969116 阅读数 9

iOS 11开发教程(三)运行第一个iOS 11程序

运行iOS11程序

创建好项目之后,就可以运行这个项目中的程序了。单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果。

图1.6  运行效果                         图1.7  运行效果

注意:由于没有对程序进行编写,也没有对编辑界面进行设置,所有这时运行结果是不会产生任何效果的。对于编辑界面会在后面做一个详细的介绍。

其中,图1.6是应用程序的一个启动界面,它是系统自带的,在Xcode 7.0的测试版中是对此界面进行设计的,但是在Xcode 7.0的正式版以及以后的版本中此界面是没有进行设计的。运行程序后,会在此界面停留几秒,然后进入应用程序的主界面,也就是开发者真正要使用到的界面,即图1.7所示的界面。如果开发者不想在程序运行时有启动界面,可以打开Info.plist文件,在此文件中找到Launch screen interface file base name,将其value后面的内容删除,如图1.8所示,

图1.8  Info.plist文件

2017-10-17 09:43:07 u014621518 阅读数 601

iOS 11开发教程(三)运行第一个iOS 11程序

运行iOS11程序

创建好项目之后,就可以运行这个项目中的程序了。单击运行按钮,如果程序没有任何问题的话,会看到如图1.6和1.7的运行效果。


图1.6  运行效果                         图1.7  运行效果

注意:由于没有对程序进行编写,也没有对编辑界面进行设置,所有这时运行结果是不会产生任何效果的。对于编辑界面会在后面做一个详细的介绍。

其中,图1.6是应用程序的一个启动界面,它是系统自带的,在Xcode 7.0的测试版中是对此界面进行设计的,但是在Xcode 7.0的正式版以及以后的版本中此界面是没有进行设计的。运行程序后,会在此界面停留几秒,然后进入应用程序的主界面,也就是开发者真正要使用到的界面,即图1.7所示的界面。如果开发者不想在程序运行时有启动界面,可以打开Info.plist文件,在此文件中找到Launch screen interface file base name,将其value后面的内容删除,如图1.8所示,


图1.8  Info.plist文件

没有更多推荐了,返回首页