store.mochios.orgで公開するmochiOS向けApp Storeです。フロントエンドはNext.js + OpenNext、APIはRust + workers-rsで実装し、どちらもCloudflare WorkersへWranglerで公開します。
ストアフロントはメンテナンスモードです。store.mochios.org配下のすべての画面をメンテナンス案内へ内部的に書き換え、既存のカタログAPIを呼び出しません。検索エンジンにはインデックスしないよう応答します。
既存のカタログAPIは削除していません。Developer Consoleと審査APIの整備を先行し、利用者向けストアフロントの実装再開まではメンテナンス表示を維持します。
- App、Build、Submission、Review、公開状態を分離したD1モデル
- GitHub Releases上の固定
.mpkgassetを使うBuild登録と直接ダウンロード - 審査待ちReleaseを排他的に取得する自動MPKG Reviewer Queue
- DraftからRejectedまでのSubmissionワークフロー
- Store Listing、Capability、通信先、Privacy、課金、Content、動的コード、AI、テスト情報の申告
- 512×512 PNG/JPEGアイコンの実体検査と、3枚以上のスクリーンショット検査
- Available/Developer Unpublished/Removedを審査状態から分離した公開管理
- 回数制限のないAppeal、append-only Review/公開履歴
- 1 Appにつき1つのcurrent Developer Certificateと、失効後の安全な置換
- Developer/運営者向け通知、Account単位の未読管理
利用者向けストアフロントは現在データを読み込まず、モックも表示しません。
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 dev主な公開API:
GET /apps
GET /apps/{bundle_id}
GET /apps/{bundle_id}/status
POST /apps/{bundle_id}/acquisitions
GET /apps/{bundle_id}/download
GET /search?q={query}
GET /storefront
アプリアイコンはAPIレスポンスのiconで指定します。フロントエンド側で絵文字や生成画像へ置き換えません。
利用者向けストアフロントを再開するまでは、これらのAPIを画面から呼び出しません。
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:test本番Reviewer RunnerはGitHub Actionsが1時間ごとに最大1件処理します。AppStoreリポジトリのRepository Secretに、AppStore APIのREVIEWER_TOKENと同じ値を設定してください。
APPSTORE_REVIEWER_TOKEN
手動実行はGitHubのActions → MPKG Reviewer → Run workflowから行えます。ローカルで常駐させる場合は次を実行します。
$env:APPSTORE_REVIEWER_TOKEN='<AppStore API REVIEWER_TOKEN>'
cargo run --release --manifest-path reviewer/Cargo.toml -- --queueMPKG形式と署名対象はdocs/appbundle.md、審査ツールはreviewer/README.mdを参照してください。
npx wrangler secret put ADMIN_TOKEN --config api/wrangler.jsonc
npx wrangler secret put REVIEWER_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を参照してください。