Trey t 1ae9c884c8 Rebuild UI test foundation with page objects, wait helpers, and screen objects
Replace brittle localized-string selectors and broken wait helpers with a
robust, identifier-first UI test infrastructure. All 41 UI tests pass on
iOS 26.2 simulator (iPhone 17).

Foundation:
- BaseUITestCase with deterministic launch helpers (launchClean, launchOffline)
- WaitHelpers (waitUntilHittable, waitUntilGone, tapWhenReady) replacing sleep()
- UITestID enum mirroring AccessibilityIdentifiers from the app target
- Screen objects: TabBarScreen, CameraScreen, CollectionScreen, TodayScreen,
  SettingsScreen, PlantDetailScreen

Key fixes:
- Tab navigation uses waitForExistence+tap instead of isHittable (unreliable
  in iOS 26 simulator)
- Tests handle real app state (empty collection, no camera permission)
- Increased timeouts for parallel clone execution
- Added NetworkMonitorProtocol and protocol-typed DI for testability
- Fixed actor-isolation issues in unit test mocks

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-18 10:36:54 -06:00
wip
2026-01-29 10:40:23 -06:00
2026-01-23 11:12:00 -06:00
2026-01-23 16:43:05 -06:00
wip
2026-01-29 10:40:23 -06:00

PlantTime

A plant identification and care management iOS app built with SwiftUI.

Features

  • Plant Identification - Identify plants using on-device ML (Core ML) with PlantNet API fallback
  • Plant Collection - Save and organize your identified plants
  • Room Organization - Group plants by room (Kitchen, Living Room, Bedroom, etc.)
  • Care Scheduling - Track watering, fertilizing, repotting, pruning, and pest control
  • Today View - Dashboard showing overdue and today's care tasks
  • Progress Photos - Capture growth photos with time-lapse playback
  • Photo Reminders - Scheduled reminders for progress photos (weekly, bi-weekly, monthly)
  • CloudKit Sync - Sync plants and care data across devices via iCloud
  • Dark Mode - Full dark mode support with semantic color tokens

Screenshots

Coming soon

Requirements

  • iOS 17.0+
  • Xcode 15.0+
  • Swift 5.9+

Architecture

Clean Architecture + MVVM with three layers:

Presentation (SwiftUI Views + ViewModels)
    ↓
Domain (Use Cases + Entities + Repository Protocols)
    ↓
Data (Repository Implementations + Data Sources)

Key patterns:

  • Dependency Injection via DIContainer
  • Actor-based concurrency for thread safety
  • Core Data + CloudKit for persistence and sync

Setup

  1. Clone the repository
  2. Open PlantGuide.xcodeproj in Xcode
  3. Configure your API keys in App/Configuration/APIKeys.swift:
  4. Set up CloudKit:
    • Enable iCloud capability in Signing & Capabilities
    • Create CloudKit container: iCloud.com.yourteam.PlantGuide
  5. Build and run

ML Model

Uses PlantNet-300K ResNet50 for on-device plant classification:

  • Input: 224x224 RGB image
  • Output: 1,081 plant species probabilities

License

MIT

Description
No description provided
Readme 823 KiB
Languages
Swift 84.4%
Cython 15.6%