测试 iOS app 的后台行为

最近在开发中碰到用 SwiftUI 的 backgroundTask(_:action:) 修饰符来实现“真后台”下载数据的功能。代码实现本身就已经有点儿绕了,而测试更是令人挠头。主要在于 iOS 和其他桌面操作系统相比,最初就没有想着如何精确控制后台程序的行为,导致很多的行为都是靠操作系统自己来协调。因此,测试起来也颇费一番周折。

在测试过程中,我们发现了一些小的技巧,在此记录一二。

打印日志

iOS 14 引入的 OSLog 库能够让我们用现代而高效的日志来刻画程序运行…


This content originally appeared on DEV Community and was authored by Ting

最近在开发中碰到用 SwiftUI 的 backgroundTask(_:action:) 修饰符来实现“真后台”下载数据的功能。代码实现本身就已经有点儿绕了,而测试更是令人挠头。主要在于 iOS 和其他桌面操作系统相比,最初就没有想着如何精确控制后台程序的行为,导致很多的行为都是靠操作系统自己来协调。因此,测试起来也颇费一番周折。

在测试过程中,我们发现了一些小的技巧,在此记录一二。

打印日志

iOS 14 引入的 OSLog 库能够让我们用现代而高效的日志来刻画程序运行状态。通过创建一个由环境变量控制的 Logger,我们可以在 debug build 里打出更多日志,而毋需影响 release build。

导出日志

iOS app 的后台行为之所以难测,是因为一旦程序被操作系统挂起、进入所谓“假死”、“软退出”的状态后,Xcode 的 debugger 就不再和程序连接在一起了。因此,也没法通过看 debugger 的输出来决定程序目前到底处在什么状态、下载数据下载到多少。

这个时候我们就需要把在真实设备上运行的程序日志,输出到电脑上查看。通过以下的命令

sudo log collect --device-name "My iPhone" --last 10m --output "~/Desktop"

可以把设备上之前10分钟的日志输出到桌面的 .logarchive 文件里,从而用 macOS 的 Console 控制台软件打开。

如何模拟后台运行

Eskimo 曾经写过一个很好的回答:https://developer.apple.com/forums/thread/14855

主要的几点:

  • 可以用 syscall exit(0) 来模拟类似挂起的“软退出”。在 iOS 上滑的后台管理界面里,如果你拖拽来杀后台的话,系统默认是“硬退出”,从而会导致后台任务被完全暂停;而如果只是上滑把程序放进后台,而不手动杀后台的话,系统会时不常分给程序一点儿后台时间,从而让后台下载数据的任务持续进行
  • 尽量用真实设备,而非模拟器来测试后台行为
  • 为了确保后台行为的可重复性,建议每次都删掉之前的测试 app ,或者手动清空数据,或者使用 invalidateAndCancel() 方法来重置 app 的状态


This content originally appeared on DEV Community and was authored by Ting


Print Share Comment Cite Upload Translate Updates
APA

Ting | Sciencx (2024-06-26T23:03:11+00:00) 测试 iOS app 的后台行为. Retrieved from https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/

MLA
" » 测试 iOS app 的后台行为." Ting | Sciencx - Wednesday June 26, 2024, https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/
HARVARD
Ting | Sciencx Wednesday June 26, 2024 » 测试 iOS app 的后台行为., viewed ,<https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/>
VANCOUVER
Ting | Sciencx - » 测试 iOS app 的后台行为. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/
CHICAGO
" » 测试 iOS app 的后台行为." Ting | Sciencx - Accessed . https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/
IEEE
" » 测试 iOS app 的后台行为." Ting | Sciencx [Online]. Available: https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/. [Accessed: ]
rf:citation
» 测试 iOS app 的后台行为 | Ting | Sciencx | https://www.scien.cx/2024/06/26/%e6%b5%8b%e8%af%95-ios-app-%e7%9a%84%e5%90%8e%e5%8f%b0%e8%a1%8c%e4%b8%ba/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.