Ship iOS app by wrapping the web build with Capacitor #21
Notifications
Due Date
No due date set.
Depends on
#20 Ship Android app by wrapping the web build with Capacitor
ai_ml_operations/chat_web_app
#22 Make auth work from a Capacitor WebView origin (JWT-only, CORS/CSRF for capacitor://localhost)
ai_ml_operations/chat_web_app
#23 Harden chat WebSocket for mobile lifecycle (background/resume, network switch, reconnect)
ai_ml_operations/chat_web_app
#24 Make routing work from a file-served bundle (React Router 6 under Capacitor)
ai_ml_operations/chat_web_app
Reference: ai_ml_operations/chat_web_app#21
Reference in New Issue
Block a user
Goal
Publish an iOS app for chat.aimloperations.com that runs the existing CRA build inside a Capacitor WKWebView, sharing the
llm-fe/codebase with web and Android.Depends on
#20 (Android) — the shared Capacitor scaffolding lands there:
capacitor.config.ts,webDir: build, mobile env handling, auth/CORS fixes, and router changes. This ticket adds theios/platform on top of that.Approach
Requires macOS with Xcode plus CocoaPods; note that our CI runners are Linux, so iOS builds are manual (or need a Mac/hosted mac runner) until we decide otherwise.
Scope
@capacitor/ios, commit the generatedios/project, gitignore Pods/build artifacts.com.aimloperations.chat, matching display name and version/build numbering with Android.capacitor://localhostby default, so backend CORS/CSRF trusted origins must accept it (chat_backendchange). WKWebView is stricter than Android about third-party cookies, so header-based JWT is likely required rather than cookie CSRF.wss://chat socket survives suspend/resume and cellular-to-WiFi switches; iOS kills sockets on background more aggressively than Android.@capacitor/assets; light and dark variants.rechartscharts, theme switching, text selection/copy in code blocks.Out of scope
Push notifications, offline caching, Sign in with Apple, and other native-only features. Follow-ups after the wrapper ships.
Set as Gitea issue dependencies (Dependencies panel in the sidebar):
capacitor://localhost)Gitea will block closing this issue until all four are closed.