@dofa-tech/sync-fastlane-metadata
v0.1.0
Published
Sync iOS App Store fastlane metadata and screenshots into the Google Play (supply) format.
Maintainers
Readme
@dofa-tech/sync-fastlane-metadata
Copy iOS App Store fastlane metadata and screenshots into the Google Play (supply) metadata structure, so a single iOS source of truth drives both store listings.
Operates on the standard fastlane layout:
<project-root>/
└── fastlane/
├── metadata/
│ ├── <ios-locale>/ # source
│ │ ├── name.txt
│ │ ├── subtitle.txt
│ │ ├── description.txt
│ │ └── release_notes.txt
│ └── android/
│ └── <android-locale>/ # destination
│ ├── title.txt
│ ├── short_description.txt
│ ├── full_description.txt
│ ├── changelogs/default.txt
│ └── images/phoneScreenshots/
└── screenshots/
└── <ios-locale>/ # source screenshotsUsage
Run from the root of a project whose fastlane/ directory is a sibling of the current working directory:
# sync every iOS locale found
npx @dofa-tech/sync-fastlane-metadata
# preview without writing anything
npx @dofa-tech/sync-fastlane-metadata --dry-run
# restrict to specific iOS locales (repeatable)
npx @dofa-tech/sync-fastlane-metadata --locale de-DE --locale ja
# overwrite android files that already exist
npx @dofa-tech/sync-fastlane-metadata --force
# text metadata only, skip screenshot copying
npx @dofa-tech/sync-fastlane-metadata --no-screenshots
# run against a fastlane/ directory rooted elsewhere
npx @dofa-tech/sync-fastlane-metadata --cwd /path/to/projectWhat it copies
Text files (per locale):
| iOS source | Android destination |
| --- | --- |
| name.txt | title.txt |
| subtitle.txt | short_description.txt |
| description.txt | full_description.txt |
| release_notes.txt | changelogs/default.txt |
An empty video.txt is created if missing (required by supply).
Screenshots: the first 8 screenshots per locale from fastlane/screenshots/<ios-locale>/ matching the pattern *_APP_IPHONE_65_*.{jpg,png}, copied to fastlane/metadata/android/<android-locale>/images/phoneScreenshots/ as {n}_{android-locale}.jpeg. When both .jpg and .png variants of the same shot exist, .jpg wins.
Text replacements
The string iPhone is replaced with device in all copied text (Google Play disallows references to competing platforms; this avoids listing rejection).
Locale mapping
| iOS | Google Play |
| --- | --- |
| en-US, en-AU, en-CA, en-GB | unchanged |
| de-DE, es-ES, fr-CA, fr-FR, nl-NL, pt-PT | unchanged |
| ar-SA | ar |
| cs | cs-CZ |
| hr | hr |
| it | it-IT |
| ja | ja-JP |
| ko | ko-KR |
| pl | pl-PL |
| sv | sv-SE |
| tr | tr-TR |
| zh-Hans | zh-CN |
iOS locales without a mapping are skipped with a warning.
Flags
| Flag | Meaning |
| --- | --- |
| --dry-run | Preview changes without writing. |
| --locale <code> | Limit to the given iOS locale. Repeatable. |
| --force | Overwrite existing Android files. |
| --no-screenshots | Skip screenshot copying. |
| --verbose, -v | Log every file operation. |
| --cwd <path> | Resolve fastlane/ against this directory instead of process.cwd(). |
| --help, -h | Show usage. |
Exit codes
0 on success, 1 if no valid locales resolve from the provided --locale filter.
