Files
timetracker/ios/TimeTracker
Simon Franken ba4765b8a2 Rebuild iOS app: calendar entries, overtime dashboard, settings tab, full CRUD
- Replace 5-tab layout with 4 tabs: Dashboard, Timer, Entries, Settings
- Dashboard: add Work Time Balance section using /client-targets API, showing
  per-client weekly progress bar, overtime/undertime label and expandable week breakdown
- Time Entries: replace flat list with UICalendarView month grid; tap a day to see
  that day's entries; add filter sheet (date range, project, client); new
  TimeEntryDetailSheet for creating and editing entries; duration shown as Xh Ymin
- Settings tab: user info header, navigation to Clients and Projects, logout button
- ClientsListView: list with NavigationLink to ClientDetailView
- ClientDetailView: inline client editing + full work time target CRUD (create,
  edit, delete target; add/delete balance corrections with date, hours, description)
- ProjectsListView: grouped by client, NavigationLink to ProjectDetailView
- ProjectDetailView: edit name, description, colour, client assignment
- Add ClientTarget, WeekBalance, BalanceCorrection models and APIEndpoints for
  /client-targets routes
- Update TimeInterval formatter: add formattedShortDuration (Xh Ymin / Xmin / <1min)
  used throughout app; keep formattedDuration for live timer display
2026-02-21 13:51:41 +01:00
..
2026-02-20 17:45:32 +01:00
2026-02-18 21:45:09 +01:00
2026-02-18 21:35:32 +01:00
2026-02-18 21:35:32 +01:00

TimeTracker iOS App

Setup Instructions

Prerequisites

  1. XcodeGen - Required to generate the Xcode project

    # On macOS:
    brew install xcodegen
    
    # Or via npm:
    npm install -g xcodegen
    
  2. Xcode - For building the iOS app (macOS only)

Project Generation

After installing XcodeGen, generate the project:

cd ios/TimeTracker
xcodegen generate

This will create TimeTracker.xcodeproj in the ios/TimeTracker directory.

Configuration

Before building, configure the API base URL:

  1. Open TimeTracker.xcodeproj in Xcode
  2. Select the TimeTracker target
  3. Go to Info.plist
  4. Add or modify API_BASE_URL with your backend URL:
    • For development: http://localhost:3001
    • For production: Your actual API URL

Building

Open the project in Xcode and build:

open ios/TimeTracker/TimeTracker.xcodeproj

Then select your target device/simulator and press Cmd+B to build.

Authentication Setup

  1. Configure your OIDC provider settings in the backend
  2. The iOS app uses ASWebAuthenticationSession for OAuth
  3. The callback URL scheme is timetracker://oauth/callback

App Groups

For the widget to work with the main app, configure the App Group:

  • Identifier: group.com.timetracker.app
  • This is already configured in the project.yml

Dependencies

The project uses Swift Package Manager for dependencies:

Project Structure

TimeTracker/
├── TimeTrackerApp/          # App entry point
├── Core/
│   ├── Network/             # API client
│   ├── Auth/               # Authentication
│   └── Persistence/        # SQLite + sync
├── Features/
│   ├── Auth/              # Login
│   ├── Timer/              # Timer (core feature)
│   ├── TimeEntries/       # Time entries CRUD
│   ├── Projects/          # Projects CRUD
│   ├── Clients/           # Clients CRUD
│   └── Dashboard/         # Dashboard
├── Models/                  # Data models
├── Shared/                  # Extensions & components
└── Resources/              # Assets

TimeTrackerWidget/           # iOS Widget Extension