Repository navigation
fix(settings): resolve a display-name --app for app-scoped settings - #3386
Conversation
|
Size Report
Startup median (7 runs, lower is better):
|
There was a problem hiding this comment.
All reported issues were addressed across 15 files
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
Address review on #3386: - iOS settings resolve the app with resolveIosApp's new installedOnly mode: a dotted name is matched against installed bundle ids, then display names (Booking.com resolves), and an uninstalled id is refused with app_not_installed instead of written to TCC. open/close keep the default pass-through. - app_not_installed carries a settings hint pointing at `apps --all`. - Android refuses an intent alias with reason setting_app_not_package, and validates the permission request before resolving the app. - Help, client docs and commands.md scope resolution per target, including Limrun iOS alias-only resolution. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 12 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
…failures distinct Address review on #3386: - Android settings resolve with resolveAndroidApp's new installedOnly mode: a package-shaped id must be an installed package (exact match, no fuzzy fallback), so an uninstalled package is refused with app_not_installed before pm runs. open/close keep the pass-through. - A simctl listapps that fails or answers unparsably is now a COMMAND_FAILED enumeration failure in resolveIosApp, not APP_NOT_INSTALLED, so an installed app is never reported missing. - Permission tests target setAndroidPermission, the module they cover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 10 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
Address review on #3386: - installedOnly resolution on Android and iOS no longer reuses a cached name resolution, so an app uninstalled within the cache TTL is refused instead of reaching pm or simctl privacy. - Document that Android installedOnly may still answer an alias intent the caller must refuse; rewrap the client app doc. - Name the permission tests after setAndroidPermission, which they call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
There was a problem hiding this comment.
All reported issues were addressed across 6 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
|
The code in 9c73056 looks right to me, and all 21 checks pass at that commit. I found nothing that blocks merge. I am holding the approval until the live runs are shown, because I did not re-run them and no transcript is attached. They were reported for f1227d7, and the head differs from that only by a doc comment. Please attach the iOS and Android run output that shows a display-name Not blocking: findIosSimulatorInstalledApp already resolves installed-only on the simulator, and the new Is there a smaller design? I looked for one. Resolving |
`settings permission ... --app Maps` (and iOS `location on|off --app`) sent the name to `simctl privacy` / `pm grant` as a literal client id and reported success. App-scoped settings now resolve the named app through the same platform resolution `clear-app-state` uses: an id passes through, a display name resolves to the installed app's id, and an app that resolves to nothing refuses with APP_NOT_INSTALLED, details.reason app_not_installed, and dispatched: no. Closes #3384 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address review on #3386: - iOS settings resolve the app with resolveIosApp's new installedOnly mode: a dotted name is matched against installed bundle ids, then display names (Booking.com resolves), and an uninstalled id is refused with app_not_installed instead of written to TCC. open/close keep the default pass-through. - app_not_installed carries a settings hint pointing at `apps --all`. - Android refuses an intent alias with reason setting_app_not_package, and validates the permission request before resolving the app. - Help, client docs and commands.md scope resolution per target, including Limrun iOS alias-only resolution. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…failures distinct Address review on #3386: - Android settings resolve with resolveAndroidApp's new installedOnly mode: a package-shaped id must be an installed package (exact match, no fuzzy fallback), so an uninstalled package is refused with app_not_installed before pm runs. open/close keep the pass-through. - A simctl listapps that fails or answers unparsably is now a COMMAND_FAILED enumeration failure in resolveIosApp, not APP_NOT_INSTALLED, so an installed app is never reported missing. - Permission tests target setAndroidPermission, the module they cover. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Address review on #3386: - installedOnly resolution on Android and iOS no longer reuses a cached name resolution, so an app uninstalled within the cache TTL is refused instead of reaching pm or simctl privacy. - Document that Android installedOnly may still answer an alias intent the caller must refuse; rewrap the client app doc. - Name the permission tests after setAndroidPermission, which they call. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
No settings path reaches resolveIosApp with installedOnly on the macOS host, which keeps resolving through resolveMacOsApp; say so. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… Android user Address review on #3386: - findIosSimulatorInstalledApp delegates to resolveIosApp's installedOnly mode. It stays lenient: a missing or ambiguous app and an unreadable simctl app list (now typed app-list-unreadable) answer undefined, and other failures still propagate. installedOnly also verifies an alias (settings -> com.apple.Preferences) is installed, as the probe did. - Android permission settings read the acting user once and list that user's packages (`pm list packages --user <id>`), so a package installed only for a secondary foreground user is not refused. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
9c73056 to
4b1aebc
Compare
|
Live runs on head
Cleanup: I reset the photos and location grants for Maps, stopped the daemon, shut the simulator down and killed the emulator. a. iOS display name grantb. iOS unknown name refusedc. iOS location on/off by display named. iOS clear-app-state by display namee. Android display name grant, then resetf. Android unknown name and uninstalled package refusedYour two non-blocking points (both taken in
Gate: |
There was a problem hiding this comment.
All reported issues were addressed across 8 files (changes from recent commits).
Reply with feedback, questions, or to request a fix.
View guided diff | Turn on auto-fix | Re-trigger cubic
Address review on #3386: a `pm list packages --user <id>` resolution was written into the device-wide name cache, so a later default-user lookup could reuse a package absent for that user. Only device-default listings are cached now. Also retitle the alias test and move the app-list-unreadable reason above the requireSimulatorApps doc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Head is now |
|
I reviewed df68072 and found no code problems. The Android name-cache key now includes the user, and the new regression test in app-deployment.test.ts covers that case. The earlier ask from the 4b1aebc round is done. All three earlier inline threads from the other review are fixed at this commit: the user-keyed cache in app-deployment-resolution.ts (#3386 (comment)), the renamed test title in app-resolution.test.ts (#3386 (comment)), and the moved doc comment in app-resolution.ts (#3386 (comment)). Please resolve these three threads. Required evidence is in place. The live transcripts are yours from the run at 4b1aebc. I did not re-run them, and df68072 does not touch the route they exercise. That run used user 0 on ReactNative_API_35, so the secondary-user route ( CI is pending. Smoke Tests is still queued, with no failure so far. Those lanes can reach the Android and iOS app-resolution route this PR changes, so a result there would count for this PR. There are no conflicts. Once Smoke Tests passes, this is ready for a maintainer review. |
Summary
settings permission … --app <name>(and iOSlocation on|off --app) sent a display name tosimctl privacyorpmas a literal id and reported success. App-scoped settings (permission, iOSlocation on|off,clear-app-state) now resolve the app through each platform's shared resolver, using a newinstalledOnlymode:--app Mapsresolves tocom.apple.Maps, andBooking.comresolves too. A bundle id must be installed.setting_app_not_package, and the permission request is validated before resolution.APP_NOT_INSTALLED,reason: app_not_installed,dispatched: no, and a hint pointing toapps --all.simctl listappsthat fails or can't be parsed reportsCOMMAND_FAILED, not a missing app. This also applies toopenby name.SimctlSettingRequest.resolveApp), and the docs say so.The help text, client types, and
commands.mdare updated. Closes #3384Validation
Commit df68072 (rebased on main; live runs on 4b1aebc, which differs only in the Android name cache):
pnpm check:affected --runpassed all runnable checks (1433 test files, 12601 tests, fallow clean). Coverage and provider integration run in CI.--app Mapswrote the TCC.db row forcom.apple.Maps.location on/off --app Mapsflipped locationd's Authorization for Maps.clear-app-state --app Mapsclearedcom.apple.Maps.app_not_installedanddispatched: no.--app Chromegranted CAMERA tocom.android.chrome; I reset it afterwards.app_not_installed.findIosSimulatorInstalledAppnow delegates toresolveIosAppwithinstalledOnly. It still returnsundefinedfor missing, ambiguous, or unreadable listings. Android lists the acting user's packages (--user <id>).🤖 Generated with Claude Code