store.mochios.orgで公開するmochiOS向けApp Storeです。フロントエンドはNext.js + OpenNext、APIはRust + workers-rsで実装し、どちらもCloudflare WorkersへWranglerで公開します。
- API駆動の「見つける」ストアフロント
- 特集、ランキング、横スクロール棚、カテゴリ
- アプリ/ゲーム一覧
- 公開カタログ検索
- 評価、スクリーンショットを含むアプリ詳細
- GitHub Releases上の固定
.mpkgassetを使うRelease一覧と直接ダウンロード - アプリアイコン画像の表示
- デスクトップ/モバイル対応
- Cloudflare Workers向けOpenNext設定
画面上のアプリ情報はモックデータを使用しません。APPSTORE_API_BASE_URLで指定した公開カタログAPIの応答だけを表示します。
APIはapi/にあります。D1にはRelease metadata、SHA-256、署名、審査状態だけを保存し、.mpkg本体はGitHub Releasesから配布します。Developer認証とCertificate確認にはAccounts/DeveloperCAのService Bindingを使用します。
npm run api:check
npm run api:test
npm run api:migrate:local
npm run api:dev別ターミナルでフロントエンドを起動します。
$env:APPSTORE_API_BASE_URL='http://127.0.0.1:8787/v1'
npm run devAPIが未設定、到達できない、または公開アプリが0件の場合は、画面確認用のExampleApplicationを1件だけ表示します。実データが1件でも存在すれば表示しません。
期待するAPI:
GET /apps
GET /apps/{bundle_id}
GET /search?q={query}
GET /storefront
アプリアイコンはAPIレスポンスのiconで指定します。フロントエンド側で絵文字や生成画像へ置き換えません。
特集やストア棚も固定文言を置かず、/storefrontの応答だけで構成します。詳しい応答形式はdocs/storefront-api.mdを参照してください。
npm install
npm run devCloudflare Workersと同じ実行環境で確認する場合:
npm run previewnpm run lint
npx tsc --noEmit
npm run build
npx opennextjs-cloudflare build
npx wrangler deploy --dry-run
npm run reviewer:check
npm run reviewer:testMPKG形式と署名対象はdocs/appbundle.md、審査ツールはreviewer/README.mdを参照してください。
npx wrangler secret put ADMIN_TOKEN --config api/wrangler.jsonc
npx wrangler secret put APPSTORE_SERVICE_TOKEN --config api/wrangler.jsonc
npm run api:migrate:remote
npm run api:deploy
npm run deployCustom Domainはフロントエンドがstore.mochios.org、APIがapi.store.mochios.orgです。詳細はapi/README.mdを参照してください。