also looking at this
feat(ios): scanNFC — the first migration with no blocker to expire, ratchet 25 → 24
#121
5 files
+539
-1
| @@ -57,6 +57,7 @@ const zig_sources = [_][]const u8{ | ||
| 57 | 57 | @embedFile("src/bridge_mobile_audiorec.zig"), |
| 58 | 58 | @embedFile("src/bridge_mobile_health.zig"), |
| 59 | 59 | @embedFile("src/bridge_mobile_speech.zig"), |
| 60 | @embedFile("src/bridge_mobile_nfc.zig"), | |
| 60 | 61 | }; |
| 61 | 62 | |
| 62 | 63 | /// The action list lives in the `switch action` block, and nowhere else. |
| @@ -104,6 +105,10 @@ const dispatch_end = "func webView("; | ||
| 104 | 105 | /// preconditions and four blockers; the load-bearing one was the realtime |
| 105 | 106 | /// audio tap, which is the first callback in this migration that runs on a |
| 106 | 107 | /// thread where a lock is a bug rather than a slowdown. |
| 108 | /// 24 with scanNFC, which had no recorded reason at all — not a deferral that | |
| 109 | /// expired, just an action nobody had reached. One framework, one guard, one | |
| 110 | /// small delegate; the four remaining like it are registerPush, scanQRCode and | |
| 111 | /// signInWithApple. | |
| 107 | 112 | /// 25 with scheduleNotification. Its deferral was the first to expire on its |
| 108 | 113 | /// own: the blocker recorded in `bridge_mobile_notifications.zig` was that |
| 109 | 114 | /// `ios_async` could only resolve, so an action whose two failure paths are |
| @@ -111,7 +116,7 @@ const dispatch_end = "func webView("; | ||
| 111 | 116 | /// and `deliverErrorCode` landed the day after that was written. Worth |
| 112 | 117 | /// re-reading the other deferrals for the same reason before assuming they |
| 113 | 118 | /// still hold. |
| 114 | const max_not_yet_migrated: usize = 25; | |
| 119 | const max_not_yet_migrated: usize = 24; | |
| 115 | 120 | |
| 116 | 121 | fn dispatcherRegion() []const u8 { |
| 117 | 122 | const begin = std.mem.indexOf(u8, swift_spec, dispatch_begin) orelse return ""; |