{"_id":"@dofa-tech/sync-fastlane-metadata","name":"@dofa-tech/sync-fastlane-metadata","dist-tags":{"latest":"0.1.0"},"versions":{"0.1.0":{"name":"@dofa-tech/sync-fastlane-metadata","version":"0.1.0","description":"Sync iOS App Store fastlane metadata and screenshots into the Google Play (supply) format.","keywords":["fastlane","supply","ios","android","app-store","google-play","metadata","screenshots"],"license":"MIT","type":"module","bin":{"sync-fastlane-metadata":"dist/cli.js"},"scripts":{"build":"tsup","dev":"tsup --watch","typecheck":"tsc --noEmit"},"engines":{"node":">=18.3"},"devDependencies":{"@types/node":"20.11.30","tsup":"8.0.2","typescript":"5.4.3"},"publishConfig":{"access":"public"},"_id":"@dofa-tech/sync-fastlane-metadata@0.1.0","gitHead":"a1847476fec809cd244cba6ca404116dc4052487","_nodeVersion":"23.9.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-azhLWnimy/6Pdern2oZNDjU9ivrhk/aPAx4JPD2PwsDQF0vkJfCNI+RagyzXULpV3Yd16W/u9HyLUiL8SMWr2g==","shasum":"059d9bd25ade37f4408ef9737c7b44aebbd4d71d","tarball":"https://registry.npmjs.org/@dofa-tech/sync-fastlane-metadata/-/sync-fastlane-metadata-0.1.0.tgz","fileCount":3,"unpackedSize":14407,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFf67AqQlnCf9c6U3Vk/gXnDX/n4d13attYjo5AXOzcvAiEAsMEchDZUExy6Ei1beqYo2F4FnwSIpBN4EbZddlGxnM0="}]},"_npmUser":{"name":"dofa-tech","email":"dogu@dofatech.com"},"directories":{},"maintainers":[{"name":"dofa-tech","email":"dogu@dofatech.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sync-fastlane-metadata_0.1.0_1776543758409_0.17390287976970686"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-18T20:22:38.302Z","0.1.0":"2026-04-18T20:22:38.536Z","modified":"2026-04-18T20:22:38.721Z"},"maintainers":[{"name":"dofa-tech","email":"dogu@dofatech.com"}],"description":"Sync iOS App Store fastlane metadata and screenshots into the Google Play (supply) format.","keywords":["fastlane","supply","ios","android","app-store","google-play","metadata","screenshots"],"license":"MIT","readme":"# @dofa-tech/sync-fastlane-metadata\n\nCopy 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.\n\nOperates on the standard fastlane layout:\n\n```\n<project-root>/\n└── fastlane/\n    ├── metadata/\n    │   ├── <ios-locale>/        # source\n    │   │   ├── name.txt\n    │   │   ├── subtitle.txt\n    │   │   ├── description.txt\n    │   │   └── release_notes.txt\n    │   └── android/\n    │       └── <android-locale>/ # destination\n    │           ├── title.txt\n    │           ├── short_description.txt\n    │           ├── full_description.txt\n    │           ├── changelogs/default.txt\n    │           └── images/phoneScreenshots/\n    └── screenshots/\n        └── <ios-locale>/         # source screenshots\n```\n\n## Usage\n\nRun from the root of a project whose `fastlane/` directory is a sibling of the current working directory:\n\n```sh\n# sync every iOS locale found\nnpx @dofa-tech/sync-fastlane-metadata\n\n# preview without writing anything\nnpx @dofa-tech/sync-fastlane-metadata --dry-run\n\n# restrict to specific iOS locales (repeatable)\nnpx @dofa-tech/sync-fastlane-metadata --locale de-DE --locale ja\n\n# overwrite android files that already exist\nnpx @dofa-tech/sync-fastlane-metadata --force\n\n# text metadata only, skip screenshot copying\nnpx @dofa-tech/sync-fastlane-metadata --no-screenshots\n\n# run against a fastlane/ directory rooted elsewhere\nnpx @dofa-tech/sync-fastlane-metadata --cwd /path/to/project\n```\n\n## What it copies\n\n**Text files** (per locale):\n\n| iOS source | Android destination |\n| --- | --- |\n| `name.txt` | `title.txt` |\n| `subtitle.txt` | `short_description.txt` |\n| `description.txt` | `full_description.txt` |\n| `release_notes.txt` | `changelogs/default.txt` |\n\nAn empty `video.txt` is created if missing (required by `supply`).\n\n**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.\n\n## Text replacements\n\nThe string `iPhone` is replaced with `device` in all copied text (Google Play disallows references to competing platforms; this avoids listing rejection).\n\n## Locale mapping\n\n| iOS | Google Play |\n| --- | --- |\n| `en-US`, `en-AU`, `en-CA`, `en-GB` | unchanged |\n| `de-DE`, `es-ES`, `fr-CA`, `fr-FR`, `nl-NL`, `pt-PT` | unchanged |\n| `ar-SA` | `ar` |\n| `cs` | `cs-CZ` |\n| `hr` | `hr` |\n| `it` | `it-IT` |\n| `ja` | `ja-JP` |\n| `ko` | `ko-KR` |\n| `pl` | `pl-PL` |\n| `sv` | `sv-SE` |\n| `tr` | `tr-TR` |\n| `zh-Hans` | `zh-CN` |\n\niOS locales without a mapping are skipped with a warning.\n\n## Flags\n\n| Flag | Meaning |\n| --- | --- |\n| `--dry-run` | Preview changes without writing. |\n| `--locale <code>` | Limit to the given iOS locale. Repeatable. |\n| `--force` | Overwrite existing Android files. |\n| `--no-screenshots` | Skip screenshot copying. |\n| `--verbose`, `-v` | Log every file operation. |\n| `--cwd <path>` | Resolve `fastlane/` against this directory instead of `process.cwd()`. |\n| `--help`, `-h` | Show usage. |\n\n## Exit codes\n\n`0` on success, `1` if no valid locales resolve from the provided `--locale` filter.\n","readmeFilename":"README.md","_rev":"1-03d37ca3d508dcf8b0d3d37230b49390"}