Skip to content
evanpaul14Public

About

An iOS 26 app that turns any image of an event — flyer, screenshot, photo — into a calendar event using entirely on-device Apple frameworks.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

SnapSchedule

An iOS 26 app that turns any image of an event — flyer, screenshot, photo — into a calendar event using entirely on-device Apple frameworks.

How it works

  1. Import an image — use the in-app photo picker, the document scanner, or share from any app
  2. On-device OCR — Vision extracts all text from the image
  3. On-device LLM — Foundation Models parses the text into structured event details (title, date/time, location, notes)
  4. Location lookup — MKLocalSearch resolves partial addresses and place names into full geocoded addresses
  5. Calendar — a native EKEventEditViewController sheet lets you review, edit, and save the event with a map pin and travel time

Everything runs on-device. No data leaves your device.

Requirements

iOS 26.0+
Apple Intelligence Required (A17 Pro / M1 chip or later)
Xcode 26+

Features

  • Scan Flyer — VNDocumentCameraViewController scans physical documents with automatic perspective correction and lighting adjustment
  • Choose Photo — pick any image from your photo library
  • Share Extension — share an image to SnapSchedule from Photos, Safari, Files, or any other app
  • Smart time parsing — handles ranges like 9-2AM (→ 9 PM–2 AM) and 8AM-4PM, cross-midnight events, and relative dates like "next Friday"
  • Address completion — if only a venue name is present, MKLocalSearch looks up the full address automatically
  • Structured location — sets EKStructuredLocation with coordinates so Calendar shows a map, travel time, and directions

Project structure

SnapSched/                  Main app target
├── App/
│   ├── SnapSchedApp.swift  Entry point; handles snapsched:// URL scheme
│   └── AppState.swift      Observable pipeline orchestrator
├── Services/
│   ├── OCRService.swift    Vision text recognition
│   ├── EventParserService.swift  Foundation Models structured output
│   ├── LocationService.swift     MKLocalSearch geocoding
│   └── CalendarService.swift     EventKit integration
└── Views/
    ├── ContentView.swift         Home screen (picker + scanner)
    ├── ProcessingView.swift      Loading state
    └── EventPreviewView.swift    Review & edit before saving

SnapSchedShared/            Compiled into both app and extension
└── SharedModels.swift      AppGroup constants, ExtractedEvent, PendingImagePayload

ShareExtension/             Share Extension target
└── ShareViewController.swift   Saves image to App Group, opens main app

SnapSchedTests/             Unit tests

Building

This project uses XcodeGen to generate the Xcode project from project.yml.

brew install xcodegen
xcodegen generate
open SnapSched.xcodeproj

Set your development team in Signing & Capabilities for both the SnapSched and SnapSchedShareExtension targets, then build and run on a physical device with Apple Intelligence enabled.

The iOS Simulator does not support Foundation Models. A physical device with Apple Intelligence turned on is required for the full pipeline.

App Group

Both targets share data via the App Group group.com.snapsched.shared. The Share Extension writes the image to the shared container and posts a PendingImagePayload to UserDefaults(suiteName:). The main app reads and processes it on launch via the snapsched://process URL scheme.

About

An iOS 26 app that turns any image of an event — flyer, screenshot, photo — into a calendar event using entirely on-device Apple frameworks.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages