apollo-migrate
Command**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime —…
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase
> /plugin marketplace add carloshpdoc/ios-workflow-claude
> **Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime — detect them from the project (`xcodebuild -list -json` for the scheme, `git`/`gh` for repo & owner, the branch name for the Jira key, a codebase search for flag/font files), or ask if they cannot be inferred. This plugin ships no per-project config.
Investigate the Apollo repository **$ARGUMENTS** and produce a detailed investigation for migration.
**Output:** This command creates an investigation file at `docs/apollo-removal/issues/$ARGUMENTS.md` that serves as the "issue" for this migration. The `/apollo-migrate` command will read this investigation before executing the fixed migration steps.
Search for all files related to this repository:
Glob: **/$ARGUMENTS* Glob: **/Network$ARGUMENTS* Grep: "$ARGUMENTS" in *.swift files
Look specifically for:
Read the old `Network*Repository.swift` file to understand:
Read the `.graphql` file to get the query string.
Read the `.graphql.swift` file to understand nullability of fields (`.nonNull` vs optional).
Search for all files that import or use this repository:
Grep: protocol name (e.g., "<Name>RepositoryProtocol" or "<Name>Repository")
Grep: class instantiation (e.g., "Network<Name>Repository(")
Grep: factory usage if existsCheck in:
**For each consumer**, note:
Check if the repository's consumers are gated behind Firebase Remote Config flags or feature toggles that may indicate dead code:
Grep: RemoteConfig / remoteConfig / FeatureToggle in each consumer file Grep: the consumer's class name in coordinator/factory files to trace the full call chain
For each consumer, trace the full instantiation chain back to the entry point (Coordinator → Factory → ViewModel → Repository). At any point in that chain, check if a feature flag controls whether the code path is reached.
**For each feature flag found**, document:
> **Why this matters:** If a repository is only used behind a feature flag that has been permanently disabled, the entire repository + consumer chain may be dead code. The user can validate this in Firebase Remote Config before deciding to **delete** instead of **migrate**, saving the full migration effort.
Search if this repository's `.graphql` file defines fragments used by other repositories:
Grep: fragment names from the .graphql file across all other .graphql files
If fragments are shared, note which repos depend on them — the `.graphql` file may need to be kept.
**IMPORTANT:** Also check the reverse: do OTHER `.graphql` files have queries that reference fragments defined in THIS repo's `.graphql` file? If so, deleting this `.graphql` will cause Apollo codegen to fail with "Unknown fragment". In the investigation, note whether the referencing query is dead after migration (can be removed from the other `.graphql` file) or still live (fragment must be kept or inlined).
Look for signs of existing migration:
Create the file `docs/apollo-removal/issues/$ARGUMENTS.md` using the Write tool with this structure:
# Migration Plan: $ARGUMENTS > Generated: <date> > Status: planned ## Summary - **Repository:** <full class name> - **Location:** <path> - **Tier:** <1-5> - **Consumers:** <count> - **Operation type:** query / mutation / mixed - **Recommendation:** migrate / delete / already-done ## Current State ### Files | File | Path | Purpose | |------|------|---------| | .graphql | <path> | Query definition | | .graphql.swift | <path> | Apollo-generated types | | Network impl | <path> | Old Apollo implementation | | Fragment extensions | <path or N/A> | Apollo fragment helpers | ### Queries/Mutations | Operation | Name | Variables | Cache Policy | |-----------|------|-----------|--------------| | query/mutation | <OperationName> | <list or none> | <policy> | ### Response Shape <Describe the response structure based on .graphql.swift analysis, including nullability> ### Shared Fragments | Fragment | Defined in | Used by | |----------|-----------|---------| | <name> | <this repo's .graphql> | <list of other repos> | (or "None — .graphql can be safely deleted") ### Consumers | # | File | Instantiation | Methods Used | Uses Apollo Types? | |---|------|---------------|--------------|-------------------| | 1 | <path> |
Reusable Claude Code slash-commands, skills, and workflows extracted from real iOS / backend projects. Packaged as three installable plugins - register the marketplace and /plugin install what you need.
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime —…
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime —…
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime —…
**Project context:** Values in angle brackets below (e.g. `<scheme>`, `<JIRA_KEY>`, `<flag-key-enum>`) are resolved at runtime —…
Bump the app version or build number across all targets in the current project.
Review code quality applying DRY, SOLID, naming, and formatting standards
Implement tasks incrementally — build, test, verify, commit. Add "auto" to run the whole plan in one approved pass.