其实 iPhone 的锁屏状态会被系统发出通知,只不过这个通知不是 Foundation 的 Notifications,而是 CoreFoundation 的 Darwin Notifications,具体来说,是
com.apple.springboard.lockstate
com.apple.springboard.lockcomplete
具体怎么监听这两个通知 StackOverflow 上面能找到很多答案, 那几种方法都是 C 函数,用起来可能有点麻烦,你可以写一个 Objective-C 的 wrapper。
然后 moment 利用定位让自己保持在后台运行,就能做到上述事情了。
Darwin
Notifications 能做很多事情,早期的 watchOS 并没有 WatchConnectivity 可用,也可以利用自定义的
Darwin Notifications 做 watch 和 iPhone 的通信,一个 app 的多个 extension 也能利用
Darwin Notifications 通信,这是 MMWormhole 这个库的基础之一。