Context
The repo is in an inconsistent state for deep-linking:
ios/Runner/Info.plist:25-37 declares CFBundleURLTypes with scheme realunit-wallet (URL name realunit)
ios/Runner/Info.plist:40-41 sets FlutterDeepLinkingEnabled: true
android/app/src/main/AndroidManifest.xml:36-39 has only the LAUNCHER intent — no <intent-filter> with android:scheme, no assetlinks.json
lib/** has no Dart handler — no uni_links, app_links, getInitialLink, or Uri.parse-driven routing
So the iOS app advertises a realunit-wallet:// scheme that nothing handles. The Android app doesn't advertise the scheme at all. This is a real bug that nobody owns today.
This issue picks one of two paths and ships it.
Options
Option A — Drop the iOS plist entries
Remove CFBundleURLTypes block (Info.plist:25-37) and FlutterDeepLinkingEnabled (:40-41). Add a CI guard so they can't be reintroduced without a Dart handler PR.
- Pros: Minimal change; closes the inconsistency.
- Cons: Loses any future option to deep-link without re-declaring.
- Effort: 0.5 day (plist edits + CI guard + test that link clicks now do nothing).
Option B — Wire the handler
-
Add Android <intent-filter> with android:scheme="realunit-wallet" in AndroidManifest.xml
-
Add a Dart deep-link receiver (likely app_links package, modern, supports both platforms)
-
Define the supported link patterns (e.g. realunit-wallet://buy?amount=…, realunit-wallet://kyc/resume)
-
Wire cold-start, background-resume, and malformed-URI paths through _navigate()
-
Add Tier-0 cubit tests + a Tier-1 integration test driving the receiver
-
Pros: Adds real product capability (email-link onboarding, payment links).
-
Cons: More work; needs product input on which link patterns to support.
-
Effort: 2-4 days depending on link patterns.
Deliverable
- Decision: A or B
- Implementation per the choice
- If Option A:
.test-coverage-allowlist entry or removed plist block; CI guard
- If Option B: package added, manifest updated, receiver wired, tests added, link-pattern docs in
docs/
Acceptance criteria
- iOS and Android are in the same state w.r.t. deep-links (both off, or both on with parity)
- No "advertises a scheme nothing handles" inconsistency remains
- If Option B: at least one supported link pattern with test coverage end-to-end
Estimated effort
| Option |
Days |
| A — drop entries + CI guard |
0.5 |
| B — wire handler + Android + tests |
2-4 |
Decision: 0.25 day. Total: 0.75-4.25 engineer-days.
Related
Context
The repo is in an inconsistent state for deep-linking:
ios/Runner/Info.plist:25-37declaresCFBundleURLTypeswith schemerealunit-wallet(URL namerealunit)ios/Runner/Info.plist:40-41setsFlutterDeepLinkingEnabled: trueandroid/app/src/main/AndroidManifest.xml:36-39has only theLAUNCHERintent — no<intent-filter>withandroid:scheme, noassetlinks.jsonlib/**has no Dart handler — nouni_links,app_links,getInitialLink, orUri.parse-driven routingSo the iOS app advertises a
realunit-wallet://scheme that nothing handles. The Android app doesn't advertise the scheme at all. This is a real bug that nobody owns today.This issue picks one of two paths and ships it.
Options
Option A — Drop the iOS plist entries
Remove
CFBundleURLTypesblock (Info.plist:25-37) andFlutterDeepLinkingEnabled(:40-41). Add a CI guard so they can't be reintroduced without a Dart handler PR.Option B — Wire the handler
Add Android
<intent-filter>withandroid:scheme="realunit-wallet"inAndroidManifest.xmlAdd a Dart deep-link receiver (likely
app_linkspackage, modern, supports both platforms)Define the supported link patterns (e.g.
realunit-wallet://buy?amount=…,realunit-wallet://kyc/resume)Wire cold-start, background-resume, and malformed-URI paths through
_navigate()Add Tier-0 cubit tests + a Tier-1 integration test driving the receiver
Pros: Adds real product capability (email-link onboarding, payment links).
Cons: More work; needs product input on which link patterns to support.
Effort: 2-4 days depending on link patterns.
Deliverable
.test-coverage-allowlistentry or removed plist block; CI guarddocs/Acceptance criteria
Estimated effort
Decision: 0.25 day. Total: 0.75-4.25 engineer-days.
Related
main.dart, router config, DI wiring, deep links #546 — Bootstrap + routing (consumes this decision for its deep-link test section)ios/Runner/Info.plist,android/app/src/main/AndroidManifest.xml