@@ -18,30 +18,44 @@ final class InstallerService: ObservableObject {
1818 }
1919
2020 func unregisterAll( ) {
21- try ? daemon. unregister ( )
22- try ? agent. unregister ( )
21+ do { try daemon. unregister ( ) } catch { LockInLog . error ( " daemon.unregister failed " , error ) }
22+ do { try agent. unregister ( ) } catch { LockInLog . error ( " agent.unregister failed " , error ) }
2323 refreshStatus ( )
24+ LockInLog . info ( " unregisterAll done — daemon= \( Self . describe ( daemonStatus) ) agent= \( Self . describe ( agentStatus) ) " )
2425 }
2526
2627 // the agent registers cleanly only after the daemon is approved; called repeatedly by the poll
2728 func registerAgentIfDaemonReady( ) {
2829 refreshStatus ( )
2930 guard daemonStatus == . enabled else { return }
3031 if agentStatus == . notRegistered || agentStatus == . notFound {
31- try ? agent. register ( )
32+ do { try agent. register ( ) } catch { LockInLog . error ( " agent.register failed " , error ) }
3233 refreshStatus ( )
3334 }
3435 }
3536
3637 // required website-blocking helper; re-registers a stale enabled job that no longer answers
3738 func registerDaemon( alive: Bool ) {
3839 refreshStatus ( )
40+ LockInLog . info ( " registerDaemon(alive: \( alive) ) — current status= \( Self . describe ( daemonStatus) ) " )
3941 if daemonStatus == . enabled && !alive {
40- try ? daemon. unregister ( )
42+ do { try daemon. unregister ( ) }
43+ catch { LockInLog . error ( " daemon.unregister (stale) failed " , error) ; lastError = humanError ( error) ; return }
4144 refreshStatus ( )
4245 }
43- if daemonStatus == . enabled { openLoginItems ( ) ; return }
44- do { try daemon. register ( ) } catch { lastError = humanError ( error) }
46+ if daemonStatus == . enabled {
47+ lastError = " macOS reports the service as installed but it isn’t running — its background record is out of sync. Restart your Mac to rebuild it. "
48+ LockInLog . error ( " daemon enabled but not alive — launchd job desynced from registration " )
49+ openLoginItems ( )
50+ return
51+ }
52+ do {
53+ try daemon. register ( )
54+ LockInLog . info ( " daemon.register() succeeded — status now \( Self . describe ( daemon. status) ) " )
55+ } catch {
56+ LockInLog . error ( " daemon.register() failed " , error)
57+ lastError = humanError ( error)
58+ }
4559 refreshStatus ( )
4660 }
4761
@@ -79,8 +93,8 @@ final class InstallerService: ObservableObject {
7993 private func humanError( _ error: Error ) -> String {
8094 let ns = error as NSError
8195 if ns. domain == " SMAppServiceErrorDomain " && ns. code == 1 {
82- return " macOS blocked registration. A previous install may be stuck — reset background items in System Settings → Login Items and try again. "
96+ return " macOS blocked registration (a previous install is stuck). Restart your Mac, then open LockIn again. ( \( ns . domain ) \( ns . code ) ) "
8397 }
84- return ns. localizedDescription
98+ return " \( ns. localizedDescription) ( \( ns . domain ) \( ns . code ) ) "
8599 }
86100}
0 commit comments