Files
timetracker/ios/TimeTracker
simon.franken 544b86c948 fix(ios): replace 2001-page TabView with 3-page recycling carousel
Eliminates the eager instantiation of 2001 view bodies by keeping only
three pages (previous, current, next) alive at all times. After each
swipe settles, dayOffset is shifted and tabSelection is silently reset
to the middle page, preserving the native paging animation.
2026-02-23 10:09:51 +01:00
..
2026-02-21 14:03:56 +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