mirror of
https://github.com/garrytan/gstack.git
synced 2026-06-18 15:50:11 +02:00
c2f2acebf6
Bridges.swift.template imports DebugBridgeTouch but no .m/.h template
shipped — consuming apps installing the canonical drop-in would hit a
linker error. Closes that gap with the fixture's verified working code.
Changes:
- New ios-qa/templates/DebugBridgeTouch.{h,m}.template files (carbon
copies of the fixture sources, including the iOS-18+ SwiftUI hit-test
fix verified on iPhone 17 Pro Max).
- Package.swift.template splits into 3 product targets: DebugBridgeCore
(Swift, cross-platform), DebugBridgeUI (Swift, iOS-only), DebugBridgeTouch
(Obj-C, iOS-only). Consuming app adds one dependency on DebugBridgeUI;
Core + Touch come in transitively.
- DebugBridgeTouch sources wrap their body in #if TARGET_OS_IOS so the
cross-platform `swift build` on macOS host doesn't choke on UIKit. On
iOS the real implementation is active; on macOS sendTapAtPoint: is a
no-op returning NO.
- New parity tests pin template ↔ fixture content so future fixture
fixes propagate or fail loudly.
- Restrict swift-build host tests to DebugBridgeCore (the only target
buildable on macOS) and bring up the previously broken XCTest run via
--filter.
Verified post-change: real iPhone 17 Pro Max, iOS 26.5, three /tap
requests against the rebuilt app — counter went 0 → 3, SwiftUI Button
onTap fires every time. Templates now sufficient to ship to any
consuming iOS app.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
35 lines
1.3 KiB
Objective-C
35 lines
1.3 KiB
Objective-C
//
|
|
// DebugBridgeTouch.h — public Objective-C interface for in-process touch
|
|
// synthesis. Implementation derived from KIF (https://github.com/kif-framework/KIF),
|
|
// MIT-licensed. The minimal subset needed to deliver a real UITouch to a
|
|
// point on the key window, including SwiftUI Buttons via iOS 18+
|
|
// _UIHitTestContext. DEBUG-only — never link in Release.
|
|
|
|
#import <Foundation/Foundation.h>
|
|
#import <CoreGraphics/CoreGraphics.h>
|
|
#import <TargetConditionals.h>
|
|
|
|
#if TARGET_OS_IOS
|
|
#import <UIKit/UIKit.h>
|
|
#else
|
|
// macOS build: forward-declare UIWindow so the module compiles without UIKit.
|
|
// The host CI runs swift build on macOS to validate the cross-platform Swift
|
|
// surface; DebugBridgeTouch's implementation is a no-op there. On iOS the
|
|
// real UIWindow comes from UIKit and the implementation is active.
|
|
@class UIWindow;
|
|
#endif
|
|
|
|
NS_ASSUME_NONNULL_BEGIN
|
|
|
|
@interface DebugBridgeTouch : NSObject
|
|
|
|
/// Synthesize a single tap (TouchPhaseBegan + TouchPhaseEnded) at the given
|
|
/// window-coordinate point. Returns YES if the touch was delivered (a hit
|
|
/// view was found and the event passed through UIApplication.sendEvent).
|
|
/// On non-iOS platforms returns NO unconditionally.
|
|
+ (BOOL)sendTapAtPoint:(CGPoint)point inWindow:(UIWindow *)window;
|
|
|
|
@end
|
|
|
|
NS_ASSUME_NONNULL_END
|