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.
TimeTracker iOS App
Setup Instructions
Prerequisites
-
XcodeGen - Required to generate the Xcode project
# On macOS: brew install xcodegen # Or via npm: npm install -g xcodegen -
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:
- Open
TimeTracker.xcodeprojin Xcode - Select the TimeTracker target
- Go to Info.plist
- Add or modify
API_BASE_URLwith your backend URL:- For development:
http://localhost:3001 - For production: Your actual API URL
- For development:
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
- Configure your OIDC provider settings in the backend
- The iOS app uses ASWebAuthenticationSession for OAuth
- 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:
- SQLite.swift - Local database
- KeychainAccess - Secure storage
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