90 lines
2.3 KiB
Markdown
90 lines
2.3 KiB
Markdown
# Hesychia — iOS
|
|
|
|
Native Capacitor project for `ai.hesychia.chat`. Web UI comes from the CRA
|
|
`build/` output in the parent `llm-fe/` package (synced with `npx cap sync`).
|
|
|
|
Broader Capacitor notes (env files, icons, QA, TestFlight): [`../IOS.md`](../IOS.md).
|
|
|
|
## Prerequisites
|
|
|
|
- macOS + **Xcode** 15+
|
|
- Node.js **20**
|
|
- **CocoaPods** (`pod --version`)
|
|
- Open **`App.xcworkspace`** (not `.xcodeproj`)
|
|
|
|
## Build the web bundle and sync
|
|
|
|
From the **npm root** (`llm-fe/`, one level up):
|
|
|
|
```bash
|
|
cd ..
|
|
npm ci
|
|
npm run build:mobile # .env.mobile → react-scripts build → cap sync
|
|
```
|
|
|
|
Open in Xcode:
|
|
|
|
```bash
|
|
npm run ios:open
|
|
# or: npx cap open ios
|
|
```
|
|
|
|
Re-sync after changing web code (with an existing `build/`):
|
|
|
|
```bash
|
|
npm run ios:sync
|
|
```
|
|
|
|
Backend URLs are baked in at web-build time via `../.env.mobile` (prod by default).
|
|
|
|
After cloning, if Pods are missing:
|
|
|
|
```bash
|
|
cd App
|
|
pod install
|
|
```
|
|
|
|
## Run on a simulator / device
|
|
|
|
1. Open `App/App.xcworkspace` in Xcode.
|
|
2. Pick a simulator or a paired iPhone (Signing & Capabilities → your Team).
|
|
3. Product → Run (⌘R).
|
|
|
|
CLI (optional):
|
|
|
|
```bash
|
|
xcodebuild -workspace App/App.xcworkspace \
|
|
-scheme App \
|
|
-destination 'platform=iOS Simulator,name=iPhone 16' \
|
|
build
|
|
```
|
|
|
|
## Version before a store release
|
|
|
|
Edit target **App** → General, or `App.xcodeproj` build settings:
|
|
|
|
| Field | Build setting | Rule |
|
|
|-------|---------------|------|
|
|
| Version | `MARKETING_VERSION` | Keep in sync with `../package.json` `version` + Android `versionName` |
|
|
| Build | `CURRENT_PROJECT_VERSION` | Integer; **must increase** for every TestFlight / App Store upload |
|
|
|
|
Currently: version **0.1.0**, build **1**.
|
|
|
|
## Signing
|
|
|
|
**Do not commit** `.p12`, `.mobileprovision`, or export option files with secrets.
|
|
|
|
Debug / simulator: Automatic signing with a personal team is enough.
|
|
|
|
Distribution: App Store Connect + distribution certificate + profile — credentials
|
|
live outside this repo. CI/TestFlight automation is a follow-on ticket.
|
|
|
|
## Useful paths
|
|
|
|
| Path | Purpose |
|
|
|------|---------|
|
|
| `App/App/AppDelegate.swift` | Disables WKWebView rubber-band bounce |
|
|
| `App/App/Info.plist` | Display name **Hesychia**, version keys |
|
|
| `App/App/Assets.xcassets` | App icon + splash (regenerate via `npm run assets:generate`) |
|
|
| `App/Podfile` / `Podfile.lock` | CocoaPods (commit lockfile; Pods/ is gitignored) |
|