File tree Expand file tree Collapse file tree 4 files changed +24
-10
lines changed
Expand file tree Collapse file tree 4 files changed +24
-10
lines changed Original file line number Diff line number Diff line change @@ -69,8 +69,8 @@ actor EventHandler {
6969 reply ( endpoint)
7070 } else {
7171 endpoint = nil
72- reply ( nil )
7372 await launcher. launch ( )
73+ reply ( nil )
7474 }
7575 #endif
7676 }
Original file line number Diff line number Diff line change @@ -65,13 +65,20 @@ struct General: ReducerProtocol {
6565 return . run { send in
6666 let service = try getService ( )
6767 do {
68- let xpcServiceVersion = try await service. getXPCServiceVersion ( ) . version
69- let isAccessibilityPermissionGranted = try await service
70- . getXPCServiceAccessibilityPermission ( )
71- await send ( . finishReloading(
72- xpcServiceVersion: xpcServiceVersion,
73- permissionGranted: isAccessibilityPermissionGranted
74- ) )
68+ let isCommunicationReady = try await service. launchIfNeeded ( )
69+ if isCommunicationReady {
70+ let xpcServiceVersion = try await service. getXPCServiceVersion ( ) . version
71+ let isAccessibilityPermissionGranted = try await service
72+ . getXPCServiceAccessibilityPermission ( )
73+ await send ( . finishReloading(
74+ xpcServiceVersion: xpcServiceVersion,
75+ permissionGranted: isAccessibilityPermissionGranted
76+ ) )
77+ } else {
78+ toast ( " Launching service app. " , . info)
79+ try await Task . sleep ( nanoseconds: 3_000_000_000 )
80+ await send ( . reloadStatus)
81+ }
7582 } catch {
7683 toast ( error. localizedDescription, . error)
7784 await send ( . failedReloading)
Original file line number Diff line number Diff line change @@ -39,6 +39,7 @@ public class XPCCommunicationBridge {
3939 service. delegate = delegate
4040 }
4141
42+ @discardableResult
4243 public func launchExtensionServiceIfNeeded( ) async throws -> NSXPCListenerEndpoint ? {
4344 try await withXPCServiceConnected { service, continuation in
4445 service. launchExtensionServiceIfNeeded { endpoint in
Original file line number Diff line number Diff line change @@ -25,12 +25,18 @@ public class XPCExtensionService {
2525 let logger : Logger
2626 let bridge : XPCCommunicationBridge
2727
28- nonisolated
29- public init ( logger: Logger ) {
28+ public nonisolated
29+ init ( logger: Logger ) {
3030 self . logger = logger
3131 bridge = XPCCommunicationBridge ( logger: logger)
3232 }
3333
34+ /// Launches the extension service if it's not running, returns true if the service has finished
35+ /// launching and the communication becomes available.
36+ public func launchIfNeeded( ) async throws -> Bool {
37+ try await bridge. launchExtensionServiceIfNeeded ( ) != nil
38+ }
39+
3440 public func getXPCServiceVersion( ) async throws -> ( version: String , build: String ) {
3541 try await withXPCServiceConnected {
3642 service, continuation in
You can’t perform that action at this time.
0 commit comments