mirror of
https://github.com/priyanshujain/sanderling.git
synced 2026-10-02 19:17:10 +00:00
fix(companion): synthesize gestures synchronously to avoid the async completion crash
This commit is contained in:
1 parent
c3e0de547e
commit
76cbf1a102
2 files changed
+7
-12
No files matched your search
@@ -73,17 +73,9 @@ enum Gesture {
|
||||
let record = XCSynthesizedEventRecord(name: "companion", interfaceOrientation: 0)
|
||||
record.add(path)
|
||||
|
||||
let semaphore = DispatchSemaphore(value: 0)
|
||||
var synthesisError: Error?
|
||||
XCTRunnerDaemonSession.shared().synthesize(event: record) { error in
|
||||
synthesisError = error
|
||||
semaphore.signal()
|
||||
}
|
||||
if semaphore.wait(timeout: .now() + 30) == .timedOut {
|
||||
throw GestureError.synthesisTimeout
|
||||
}
|
||||
if let synthesisError = synthesisError {
|
||||
throw GestureError.synthesisFailed("\(synthesisError)")
|
||||
}
|
||||
// Synchronous delivery: returns whether the event was synthesized and
|
||||
// populates the error out-pointer on failure. This avoids the async
|
||||
// completion-block path.
|
||||
try record.synthesize()
|
||||
}
|
||||
}
|
||||
@@ -18,10 +18,13 @@ NS_ASSUME_NONNULL_BEGIN
|
||||
@end
|
||||
|
||||
// A complete synthesized event composed of one or more pointer paths.
|
||||
// synthesizeWithError: delivers the event synchronously and returns whether it
|
||||
// succeeded, which avoids the asynchronous completion-block path.
|
||||
@interface XCSynthesizedEventRecord : NSObject
|
||||
- (instancetype)initWithName:(NSString *)name
|
||||
interfaceOrientation:(NSInteger)interfaceOrientation;
|
||||
- (void)addPointerEventPath:(XCPointerEventPath *)pointerEventPath;
|
||||
- (BOOL)synthesizeWithError:(NSError *_Nullable *_Nullable)error;
|
||||
@end
|
||||
|
||||
// The runner-side session that delivers synthesized events to the system under
|
||||
|
||||
Reference in new issue
Block a user