You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
--body "Automated snapshot of the canonical catalog contract from LamPPKK/SmartMovie@$GITHUB_SHA. Merge only after Android and desktop conformance CI passes."
102
+
--body "Automated snapshot of the canonical catalog contract from LamPPKK/Smart-Movie-iOS@$GITHUB_SHA. Merge only after Android and desktop conformance CI passes."
[](https://github.com/LamPPKK/SmartMovie/actions/workflows/xcode-build-analyze.yml)
[](https://github.com/LamPPKK/Smart-Movie-iOS/actions/workflows/xcode-build-analyze.yml)
SmartMovie is a cinematic TMDb catalog for the Apple ecosystem. It covers movies, television, people, collections, companies, networks, keywords, seasons, and episodes; adds region-aware availability and trailers; and can optionally synchronize library, ratings, recommendations, and mixed lists through a browser-approved TMDb account.
9
9
@@ -19,8 +19,8 @@ This repository contains the native SwiftUI apps for iPhone, iPad, Mac Catalyst,
19
19
20
20
| Repository | Owns | Mobile release role |
21
21
| --- | --- | --- |
22
-
|**[SmartMovie](https://github.com/LamPPKK/SmartMovie)** (this repository) | SwiftUI Apple apps, `SmartMovieKit`, Cloudflare Worker, OpenAPI 3.1 contract, canonical fixtures | App Store source of truth and backend owner |
23
-
|**[Android.Smart.Movie](https://github.com/LamPPKK/Android.Smart.Movie)**| Native Android and Wear OS apps, Compose Multiplatform desktop/web app, versioned contract snapshot | Google Play source of truth |
22
+
|**[Smart Movie iOS](https://github.com/LamPPKK/Smart-Movie-iOS)** (this repository) | SwiftUI Apple apps, `SmartMovieKit`, Cloudflare Worker, OpenAPI 3.1 contract, canonical fixtures | App Store source of truth and backend owner |
23
+
|**[SmartMovie Android](https://github.com/LamPPKK/Smart-Movie-Android)**| Native Android and Wear OS apps, Compose Multiplatform desktop/web app, versioned contract snapshot | Google Play source of truth |
24
24
25
25
The two native mobile apps keep platform-specific UI and storage while sharing the additive `/v2` Worker contract, six locales, semantic release train, normalized errors, and deterministic decoder fixtures. `/v1` remains served for SmartMovie 2.0 compatibility. Account identity and content belong to TMDb; SmartMovie only brokers opaque sessions and maintains local-first caches/outboxes.
The current verified local baseline contains 57 Swift tests and 91 Worker tests. Coverage includes canonical `/v1` and `/v2` fixture decoding, configured capability/fixture equality, fail-closed browser/TV account rollout, malformed broker configuration and return-URI allowlists, cold-start callback deferral, stale completion invalidation, durable outbox isolation, capability-gated Advanced Discover and Profile provider regions with a fail-closed `/v1` fallback, complete Movie/TV Discover queries and regional provider configuration, External ID and Credit Detail source/path mapping, account recommendations, normalized/paginated custom mixed lists, restart-safe pending item snapshots, local adult filtering and in-flight request invalidation, metadata/item mutations, normalized person/title credit links, unknown and missing nullable fields, success/error schema validation, repeatable D1 migrations, encryption/callback/CSRF controls, durable idempotency, TMDb Changes pagination/backlog recovery, invalid cursor recovery, verified changing-page-count fallback, D1 parameter-bound chunking, monotonic revision and cache-bypass behavior, retries, cancellation, pagination, and data behavior without live personal credentials.
205
+
The current verified local baseline contains 60 Swift tests and 91 Worker tests. Coverage includes canonical `/v1` and `/v2` fixture decoding, configured capability/fixture equality, fail-closed browser/TV account rollout, malformed broker configuration and return-URI allowlists, cold-start callback deferral, stale completion invalidation, durable outbox isolation, capability-gated Advanced Discover and Profile provider regions with a fail-closed `/v1` fallback, complete Movie/TV Discover queries and regional provider configuration, External ID and Credit Detail source/path mapping, account recommendations, normalized/paginated custom mixed lists, restart-safe pending item snapshots, explicit adult age confirmation, six-digit PIN validation, five-attempt lockout, local adult filtering and in-flight request invalidation, metadata/item mutations, normalized person/title credit links, unknown and missing nullable fields, success/error schema validation, repeatable D1 migrations, encryption/callback/CSRF controls, durable idempotency, TMDb Changes pagination/backlog recovery, invalid cursor recovery, verified changing-page-count fallback, D1 parameter-bound chunking, monotonic revision and cache-bypass behavior, retries, cancellation, pagination, and data behavior without live personal credentials.
206
206
207
207
CI independently builds and analyzes iOS, iPad/Catalyst, tvOS, native macOS, watchOS, and visionOS, then installs and launches the iOS app in Simulator. Read [Testing](docs/TESTING.md) for destination-specific commands and the manual device matrix.
Copy file name to clipboardExpand all lines: SmartMovieKit/Sources/SmartMovieKit/Resources/en.lproj/Localizable.strings
+16Lines changed: 16 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -133,3 +133,19 @@
133
133
"Provider region" = "Provider region";
134
134
"Watch providers" = "Watch providers";
135
135
"TMDb account is temporarily unavailable." = "TMDb account is temporarily unavailable.";
136
+
"Adult content" = "Adult content";
137
+
"Off by default. Confirm you are at least 18 and create a six-digit PIN stored only on this device. Adult titles never appear on Watch/Wear remote or public previews." = "Off by default. Confirm you are at least 18 and create a six-digit PIN stored only on this device. Adult titles never appear on Watch/Wear remote or public previews.";
138
+
"I confirm that I am at least 18 years old." = "I confirm that I am at least 18 years old.";
139
+
"Confirm that you are at least 18 years old." = "Confirm that you are at least 18 years old.";
140
+
"Six-digit PIN" = "Six-digit PIN";
141
+
"Confirm PIN" = "Confirm PIN";
142
+
"Enable adult content" = "Enable adult content";
143
+
"Unlocked on this device" = "Unlocked on this device";
144
+
"Lock" = "Lock";
145
+
"Disable" = "Disable";
146
+
"Enter PIN" = "Enter PIN";
147
+
"Unlock" = "Unlock";
148
+
"Enter the same six-digit PIN twice." = "Enter the same six-digit PIN twice.";
149
+
"Incorrect PIN." = "Incorrect PIN.";
150
+
"Too many attempts. Try again in five minutes." = "Too many attempts. Try again in five minutes.";
Copy file name to clipboardExpand all lines: SmartMovieKit/Sources/SmartMovieKit/Resources/ja.lproj/Localizable.strings
+16Lines changed: 16 additions & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -133,3 +133,19 @@
133
133
"Provider region" = "配信地域";
134
134
"Watch providers" = "視聴サービス";
135
135
"TMDb account is temporarily unavailable." = "TMDbアカウントは一時的に利用できません。";
136
+
"Adult content" = "成人向けコンテンツ";
137
+
"Off by default. Confirm you are at least 18 and create a six-digit PIN stored only on this device. Adult titles never appear on Watch/Wear remote or public previews." = "初期設定はオフです。18歳以上であることを確認し、この端末だけに保存する6桁PINを作成してください。成人向け作品はWatch/Wearリモートや公開プレビューには表示されません。";
138
+
"I confirm that I am at least 18 years old." = "18歳以上であることを確認します。";
139
+
"Confirm that you are at least 18 years old." = "18歳以上であることを確認してください。";
140
+
"Six-digit PIN" = "6桁PIN";
141
+
"Confirm PIN" = "PINを確認";
142
+
"Enable adult content" = "成人向けを有効化";
143
+
"Unlocked on this device" = "この端末でロック解除済み";
144
+
"Lock" = "ロック";
145
+
"Disable" = "無効化";
146
+
"Enter PIN" = "PINを入力";
147
+
"Unlock" = "ロック解除";
148
+
"Enter the same six-digit PIN twice." = "同じ6桁PINを2回入力してください。";
149
+
"Incorrect PIN." = "PINが正しくありません。";
150
+
"Too many attempts. Try again in five minutes." = "試行回数を超えました。5分後に再試行してください。";
0 commit comments