開始前先看看兩個 swift 的小概念:
class newClass: oldClass
這種模式的寫法<key>NSPrincipalClass</key>
<string>MyClassName</string>
為什麼在開始之前要講這些呢,因為 DeviceActivityMonitor 這個 class 的文檔上寫著,開發者應該要 subclass DeviceActivityMonitor 然後把這個指定為 principle class。也就是說,這個 class 應該要成為我們整個 app 的 entry point。
而如果要使用螢幕時間限制的話,則用 ManagedSettings 裡面的 ManagedSettingsStore() 去做設置。
再往下看的話有幾個屬性可以了解一下:
@objc open class DeviceActivityMonitor : NSObject {
...
}
底下有幾個 method:
@objc open class DeviceActivityMonitor : NSObject {
open func intervalDidStart(for activity: DeviceActivityName)
open func intervalDidEnd(for activity: DeviceActivityName)
open func intervalWillStartWarning(for activity: DeviceActivityName)
open func intervalWillEndWarning(for activity: DeviceActivityName)
}
會有被排程監控的時間段,intervalDidStart 和 intervalDidEnd 就是分別在 interval 開始&結束的時候會被調用。而 intervalWillStartWarning 和 intervalWillEndWarning 則是在即將開始&即將結束時去通知寫這些東西的 app。
我自己的猜測是,當打開一個新的 app 時,會是即將開始(在背景準備一些東西,像是遊戲加載)--> 開始 --> 即將結束(開始關掉一些東西並清理資源) --> 真正結束,而這四個 function 可能就是在這些時間點去通知監控的 app 有這些事情要發生。不過這邊也沒有研究得太深入,有錯歡迎指正感激不盡 QQ