Analyze Unrecognized Host Apps
SkillDatabases & dataAnalyze unrecognized host app bundle IDs from Firebase/Google Analytics and add URL scheme mappings
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Analyze Unrecognized Host Apps skill
What this skill tells your AI
The instructions your AI receives, as published by n0an/vivadicta in .agents/skills/analyze-unrecognized-apps/SKILL.md and read by ahel’s review.
Last run: 2026-09-05 - added 29 return-URL mappings (Happy Coder, Kelivo, Simplenote, Drafts, Uber, Slack, Evernote, LINE, YouTube, eBay, Google Docs, Taobao, Arc Search, plus 5 AASA universal-link fallbacks for Amazon US/UK, ClassDojo, Mercari and Uber Eats) and 11 knownNoSchemeHosts entries. Three mappings (Alibaba enalibaba://, Beeper beeper://, DiDi diditaxi://) went in at explicitly lower confidence and sit under their own comment block. Two lookup techniques worth reusing: the iTunes lookup API (https://itunes.apple.com/lookup?bundleId=...) resolves a bundle ID to an app name and seller URL in one call, and it caught a misidentification - com.codality.NotationalFlow is Simplenote, not the note app the name suggests; and an AASA is not always at /.well-known/ (Hevy serves its own at https://hevy.com/apple-app-site-association). Also note an AASA entry with an empty paths array (DeepSeek) matches nothing and is not a usable fallback. This sample still predates the iOS 26.4 host-resolution fix, so it under-reports.
You are given the following context: $ARGUMENTS
Task
Analyze unrecognized host app bundle IDs from Firebase/Google Analytics and determine which ones need URL scheme mappings added to the app.
Instructions
-
Read the current mappings from
VivaDicta/VivaDictaApp.swift— find theknownURLsdictionary insidereturnURL(forHostId:). TheknownNoSchemeHostsset lives just above it, inattemptReturnToHost(hostId:). -
Get the analytics data — the user will provide a screenshot or list of bundle IDs from the Google Analytics "Unrecognized Host Apps" exploration (see
internal/firebase-analytics-events.mdfor how to access it) -
Cross-reference each bundle ID against
knownURLsandknownNoSchemeHosts, and categorize into:Already mapped — bundle ID exists in
knownURLs(these show up in analytics from before the mapping was added)Variant of a mapped app — same app under a different bundle ID: a team-ID suffix (
com.spotify.client.L32G8C83V9), a regional build (com.amazon.AmazonDE), or an app extension (net.whatsapp.WhatsApp.ShareExtension). Aliasing a suffixed build to the same URL is safe. An extension is a judgement call — returning to the parent app is not the surface the user was in.Not actionable — system services that can't be returned to:
(not set)— pre-custom-dimension-registration datacom.apple.SafariViewService— SFSafariViewController embedded in other appscom.apple.springboard— iOS home screen- Other Apple system services
Need to add — real third-party apps not yet in
knownURLs -
Research a way back for the "need to add" apps. Search for:
- "[app name] iOS URL scheme"
- "[app name] deep link"
- "[bundle id] URL scheme"
- Known URL scheme databases and GitHub repos
Two sources beat any blog list, and are worth the extra step for high-volume apps:
- The app's own registration — its open-source
Info.plistor build file (CFBundleURLSchemes), or, for Apple apps, the binary in a simulator runtime under/Library/Developer/CoreSimulator/.../RuntimeRoot/Applications/. - The app's AASA file —
https://<domain>/.well-known/apple-app-site-association. If it lists the bundle ID, the matchinghttps://URL is a valid fallback for an app that registers no custom scheme. This works only on this code path, because the lookup runs solely for the app the keyboard was just typing into, so it is installed by definition.
Watch for schemes shared between apps. Swiftgram registers
tg://andtelegram://alongside official Telegram; iOS picks between claimants unpredictably, so map only a scheme the app owns outright (sg://). -
Output a summary table with:
- Bundle ID
- Event count
- Category (already mapped / variant / not actionable / need to add)
- Return URL (if found) and confidence level
-
After user confirms which entries to add, update
VivaDicta/VivaDictaApp.swift:- Apps with a way back → the
knownURLsdictionary inreturnURL(forHostId:) - Apps with none → the
knownNoSchemeHostsset, so they stop being reported as unrecognized
There is no plist step, and adding one is a regression.
LSApplicationQueriesSchemeswas deleted on 2026-08-29 along with thecanOpenURLgate it existed to permit. Apple caps that array at 50 entries, and past the capcanOpenURLreturns false whether or not the app is installed — which silently killed the newest mappings.UIApplication.openneeds no declaration and reports failure through its own result, so the table can now grow without limit. Do not reintroduce either. - Apps with a way back → the
-
Update the "Last run" line at the top of this file with the date and what changed.
Signals
- GitHub stars
- 112
- Forks
- 10
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
analyze-unrecognized-apps- Source
- github.com/n0an/vivadicta