苹果开发:从手表应用扩展到代码质量保障
1. 苹果手表应用扩展
在使用苹果设备时,你会看到 Mac 应用图标出现在 Dock 栏,旁边还有 Apple Watch 图标。这意味着你可以在手表、Mac 和 iPhone 之间实现任务接力。
1.1 Glances 功能介绍
Glances 允许用户在使用手表时快速查看信息,无需启动 watchOS 应用。它能显示自定义内容,但不能交互,且仅限于一个屏幕。点击 Glance 可以启动 watchOS 应用。
我们将为 watchOS 应用添加一个 Glance,让用户能快速进入应用并开始听写新笔记。以下是具体操作步骤:
1.
添加图片
:
- 打开 Watch 组中的 Assets.xcasset 文件(不是 Watch 扩展组中的那个)。
- 将随附资源中的 Watch Glance Add 图片拖到图像集列表中。
2.
添加代码到 GlanceController 类
:
- 打开 GlanceController.swift 文件。
- 更新 willActivate 方法如下:
override func willActivate() {
// This method is called when watch view controller is
// about to be visible to user
updateUserActivity("au.com.secretlab.Notes.creating",
userInfo: ["editing":true], webpageURL: nil)
super.willActivate()
}
通过调用 updateUserActivity,向 watchOS 系统表明如果点击 Glance,用户即将创建文档。
3.
让 NoteListInterfaceController 检测用户活动并创建笔记
:
- 打开 NoteListInterfaceController.swift 文件。
- 添加以下方法到 NoteListInterfaceController 类:
override func handleUserActivity(_ userInfo: [AnyHashable: Any]?) {
if userInfo?["editing"] as? Bool == true {
// Start creating a note
createNote()
// Clear the user activity
invalidateUserActivity()
}
}
如果用户活动包含我们在 GlanceController 的 willActivate 方法中设置的编辑标志,则调用 createNote 开始创建新笔记,然后调用 invalidateUserActivity 清除用户当前活动。
4.
实现 Glance 的用户界面
:
- 打开 Interface.storyboard 并转到 Glance 界面控制器。
- 选择界面控制器,将上部区域的界面设置为包含单个小标签的选项,将下部区域的界面设置为包含单个图像的选项。
- 选择上部区域的标签,在属性检查器中,将其文本设置为 Notes。
- 选择现在出现在 Glance 界面下部区域的图像对象,在属性检查器中,将其图像设置为 Watch Glance Add,并将其模式设置为 Center。
完成上述步骤后,你可以在 Apple Watch 上运行测试 Glance。点击 Glance 时,应用将启动并立即进入听写模式以创建笔记。你可能需要通过 iPhone 上的 Watch 应用手动将 Glance 添加到手表。若要在模拟器中测试 Glance,使用方案选择器选择“Glance - Watch”方案。
2. 代码质量与分发
为确保代码质量,我们需要使用一些工具和技术,包括调试、性能分析和自动化测试等。
2.1 调试
当代码运行不符合预期时,可使用 Xcode 的内置调试器。调试器能中断应用执行,收集变量数据,帮助你了解应用的运行情况。使用调试器的步骤如下:
1.
添加断点
:在代码左侧的灰色区域点击,会出现一个小蓝色箭头,表示程序将在此处停止。
2.
运行程序
:触发包含断点的代码时,程序将暂停,Xcode 会显示调试视图。此时调试器激活,会出现以下内容:
-
调试检查器
:位于 Xcode 窗口左侧,显示堆栈跟踪,指示程序执行停止的位置以及到达该点所调用的方法。
-
调试视图
:分为两部分,左侧显示所有局部变量列表,可查看局部变量的当前值以及访问当前对象的属性;右侧是 LLDB 控制台,可输入命令供调试器解释,最有用的命令是 po,用于打印指定表达式的值。
3.
调试操作
:在调试视图顶部有控制调试器执行的按钮,重要的前六个按钮功能如下:
| 按钮序号 | 功能 |
| ---- | ---- |
| 1 | 关闭调试视图 |
| 2 | 启用或禁用断点 |
| 3 | 恢复程序执行 |
| 4 | 移动到下一行代码 |
| 5 | 进入下一个方法调用 |
| 6 | 继续执行直到当前方法返回,然后停止 |
此外,你还可以让调试器在应用崩溃时自动介入,帮助找出崩溃原因。
2.2 Instruments 性能分析
Instruments 工具可跟踪应用活动,能监控应用的各个方面,从网络数据传输等高级指标到单帧中执行的 OpenGL 命令等低级信息。使用 Instruments 有两种方式:
1.
在 Xcode 中获取高级摘要
:运行应用后,转到调试导航器,在应用名称下方可看到 CPU、Memory、Disk 和 Network 四个条目,显示应用的当前性能状态。点击这些条目可查看更详细的信息。若在 Mac 或 iOS 设备(非模拟器)上测试,还会看到能耗数据;在 Mac 上还会看到 iCloud 使用数据。点击视图右上角的“Profile in Instruments”按钮,Xcode 会将应用控制权转移到 Instruments,以便收集更详细的信息。
2.
直接在 Instruments 中分析
:打开 Product 菜单并选择 Profile,可将应用直接启动到 Instruments 中,收集应用从开始到结束的完整运行数据。
下面以分析 Notes 应用查看图像附件时的性能热点为例,介绍具体操作步骤:
1. 选择 Product → Profile 或按 ⌘ - I。
2. 若 Instruments 未打开,它会询问你要使用哪些工具收集应用数据,选择 Time Profiler 并点击 Choose。
3. 点击窗口左上角的 Record 按钮。
4. Instruments 启动后,显示 CPU Usage 工具。使用应用时,CPU 使用情况将被记录。
5. 打开一个文档,文档打开后,转到 Instruments 并按 Pause 按钮。
6. 查看 Call Tree 面板,该窗口显示每个线程占用的 CPU 时间,还可深入每个线程找出占用最多 CPU 时间的方法。
7. 为了只查看自己能控制的代码,可进行过滤操作:
- 找到屏幕右下角面板顶部的显示设置按钮并点击,会看到一系列控制数据显示方式的选项。
- 关闭除 Hide System Libraries 之外的所有选项,此时 Call List 将只显示你的方法,并按每个方法占用的时间排序。
对于 CPU Usage 工具,Detail Area 的 Call Tree 视图中的列含义如下:
| 列名 | 含义 |
| ---- | ---- |
| Running Time | 当前行占用的总时间,包括它调用的任何方法 |
| Self (ms) | 当前行占用的总时间,不包括它调用的任何方法 |
| Symbol Name | 相关方法的名称 |
通过这种测量、确定问题点和优化的过程,可多次应用于不同方面,不仅能减少 CPU 时间,还能减少内存消耗、磁盘读写数据和网络传输数据。
2.3 自动化测试
复杂应用的测试较为困难,为确保应用各部分正常工作,现代软件开发依赖自动化测试。Xcode 中有两种自动化测试:单元测试和用户界面测试。
1.
单元测试
:单元测试是小而独立的测试,用于验证代码特定部分的行为。可在创建项目时包含单元测试,也可通过打开 File 菜单,选择 New → Target,然后打开 Tests 部分并选择 Unit Tests 为现有项目添加单元测试。测试用例是 XCTestCase 的子类,其中的方法即为单元测试。例如:
func testDocumentTypeDetection() {
// Create an NSFileWrapper using some empty data
let data = NSData()
let document = NSFileWrapper(regularFileWithContents: data)
// Give it a name
document.preferredFilename = "Hello.jpg"
// It should now think that it's an image
XCTAssertTrue(document.conformsToType(kUTTypeImage))
}
运行单元测试时,Xcode 会先定位所有 XCTestCase 的子类,然后找到每个子类中以 test 开头的方法,依次运行测试用例的 setUp 方法、测试本身和 tearDown 方法。使用 XCTAssert 系列函数测试特定条件,若条件不满足,整个测试失败。要运行当前目标的单元测试,可按 ⌘ - U 或点击特定测试顶部行左侧的图标。
2.
用户界面测试
:单元测试不足以全面了解应用的工作情况,用户界面测试可验证应用在使用时的行为。UI 测试是记录用户与用户界面的交互,录制时 Xcode 会记录每个交互并添加一行代码来重现该步骤。例如:
func testCreatingSavingAndClosingDocument() {
// Get the app
let app = XCUIApplication()
// Choose File->New
let menuBarsQuery = XCUIApplication().menuBars
menuBarsQuery.menuBarItems["File"].click()
menuBarsQuery.menuItems["New"].click()
// Get the new 'Untitled' window
let untitledWindow = app.windows["Untitled"]
// Get the main text view
let textView = untitledWindow.childrenMatchingType(.ScrollView)
.elementBoundByIndex(0).childrenMatchingType(.TextView).element
// Type some text
textView.typeText("This is a useful document that I'm testing.")
// Save it by pressing Command-S
textView.typeKey("s", modifierFlags:.Command)
// The save sheet has appeared; type "Test" in it and press return
untitledWindow.sheets["save"].childrenMatchingType(.TextField)
.elementBoundByIndex(0).typeText("Test\r")
// Close the document
app.windows["Test"].typeKey("w", modifierFlags:.Command)
}
UI 测试的运行方式与单元测试相同,运行时系统会控制计算机执行测试中规定的步骤,确保每次以相同方式测试应用。
苹果开发:从手表应用扩展到代码质量保障
3. 总结与实践建议
在前面的内容中,我们详细介绍了苹果手表应用扩展以及代码质量保障的相关内容。接下来,我们总结一下关键要点,并给出一些实践建议。
3.1 苹果手表应用扩展总结
- Handoff 功能 :Mac 应用图标在 Dock 栏与 Apple Watch 图标一同出现,意味着可在手表、Mac 和 iPhone 间实现任务接力。
- Glance 功能 :允许用户快速查看信息,无需启动 watchOS 应用。添加 Glance 到 watchOS 应用的步骤包括添加图片、编写代码设置用户活动以及实现用户界面。
以下是添加 Glance 的步骤流程图:
graph TD;
A[添加图片] --> B[打开 Assets.xcasset 文件];
B --> C[拖动图片到图像集列表];
C --> D[添加代码到 GlanceController 类];
D --> E[打开 GlanceController.swift 文件];
E --> F[更新 willActivate 方法];
F --> G[让 NoteListInterfaceController 检测用户活动并创建笔记];
G --> H[打开 NoteListInterfaceController.swift 文件];
H --> I[添加 handleUserActivity 方法];
I --> J[实现 Glance 的用户界面];
J --> K[打开 Interface.storyboard 并转到 Glance 界面控制器];
K --> L[设置界面选项];
L --> M[设置标签文本];
M --> N[设置图像属性];
3.2 代码质量保障总结
- 调试 :使用 Xcode 内置调试器,通过添加断点、观察程序状态和使用调试视图的控制按钮来定位和解决代码问题。
- Instruments 性能分析 :可跟踪应用活动,有在 Xcode 中获取高级摘要和直接在 Instruments 中分析两种方式。通过选择合适的工具和过滤显示内容,可找出性能热点。
- 自动化测试 :包括单元测试和用户界面测试。单元测试用于验证代码特定部分的行为,用户界面测试用于验证应用在使用时的整体行为。
以下是代码质量保障的方法对比表格:
| 方法 | 作用 | 操作步骤 |
| ---- | ---- | ---- |
| 调试 | 定位和解决代码问题 | 添加断点、运行程序、使用调试视图控制按钮 |
| Instruments 性能分析 | 找出应用性能热点 | 在 Xcode 中获取摘要或直接在 Instruments 中分析,选择工具、记录数据、过滤显示 |
| 自动化测试 | 确保应用各部分正常工作 | 单元测试:创建测试用例、编写测试方法;用户界面测试:录制交互、运行测试 |
3.3 实践建议
- 多设备测试 :在开发苹果手表应用时,不仅要在模拟器中测试,还要在实际的 Apple Watch、iPhone 和 Mac 设备上进行测试,以确保 Handoff 等功能正常工作。
- 定期性能分析 :使用 Instruments 工具定期对应用进行性能分析,及时发现和解决性能问题,特别是在应用功能增加或代码更新后。
- 全面自动化测试 :结合单元测试和用户界面测试,对应用进行全面的自动化测试,确保每次代码修改都不会引入新的问题。
4. 未来展望
随着苹果设备和开发技术的不断发展,我们可以预见未来在苹果开发领域将有更多的创新和机遇。
4.1 设备交互的进一步提升
未来,设备之间的交互可能会更加无缝和智能。例如,Handoff 功能可能会支持更多类型的任务和数据,用户在不同设备间切换时的体验将更加流畅。
4.2 代码质量保障工具的发展
调试、性能分析和自动化测试等工具可能会不断改进和完善,提供更强大的功能和更便捷的操作方式。例如,调试器可能会更加智能地分析代码问题,Instruments 工具可能会提供更详细的性能数据和更直观的分析界面。
4.3 新的开发框架和技术
苹果可能会推出新的开发框架和技术,为开发者提供更多的可能性。例如,可能会有更强大的手表应用开发框架,支持更多的传感器和交互方式。
总之,苹果开发领域充满了机遇和挑战。通过不断学习和实践,掌握好苹果手表应用扩展和代码质量保障的技术,开发者可以开发出更优质、更具竞争力的应用。
超级会员免费看
886

被折叠的 条评论
为什么被折叠?



