monotasker

Monotasker

iOS 18+ app that shows one reminder at a time from a list you choose (default: a Reminders list named Monotasker).

Requirements

Generate and open

cd /path/to/monotask
xcodegen generate
open Monotasker.xcodeproj

Then select an iPhone simulator or device and run (⌘R).

Signing and xcodegen

Putting Development Team only in the Xcode UI does not survive xcodegen generate (the project file is recreated). Putting it only in YAML is easy to get wrong and triggers “No Account for Team” if the ID does not match Xcode → Settings → Accounts.

If Xcode says signing “requires a development team”: the local team file is missing or still has the placeholder. Without it, xcodegen generate produces a project with no DEVELOPMENT_TEAM (the UI choice alone does not survive regeneration).

Recommended: keep team in Monotasker/Config/MonotaskerSigning.local.xcconfig (gitignored). Each xcodegen generate runs a post-generate step: if that file does not exist, it is copied from MonotaskerSigning.local.xcconfig.example.

  1. Run xcodegen generate once so MonotaskerSigning.local.xcconfig appears (or copy the example file manually).
  2. Edit MonotaskerSigning.local.xcconfig and replace XXXXXXXXXX with your real 10-character Team ID — use Build Settings → Development Team after you have successfully picked Personal Team and built once (must match Xcode → Settings → Accounts). You can cross-check with security find-identity -v -p codesigning (parentheses on the Apple Development: line).
  3. The wrapper Monotasker/Config/MonotaskerSigning.xcconfig #include?s that file; it is not overwritten by xcodegen.

If you see “No Account for Team”: fix Accounts and the ID inside MonotaskerSigning.local.xcconfig so they match; remove or fix the bad ID in that file, then build again.

project.local.yml remains available for other optional overrides; prefer the xcconfig path above for Development Team.

First run

Grant full Reminders access when prompted. The app needs read access to incomplete reminders, not write-only.

Rename the app (and default list name)

  1. Set CFBundleDisplayName in Monotasker/App/Info.plist (or override via project.yml INFOPLIST_KEY_CFBundleDisplayName).
  2. Optionally change PRODUCT_BUNDLE_IDENTIFIER / target name in project.yml.
  3. Run xcodegen generate again.
  4. Existing installs keep the list they already picked via persisted calendar ID; only new installs use the new default list title.

Tests

xcodegen generate
# Pick a booted or available iPhone simulator (name + OS must match an installed runtime)
xcodebuild -scheme Monotasker -destination 'platform=iOS Simulator,name=iPhone 16,OS=18.1' test

Verified on this machine with Xcode 16 / iOS 18.1 simulator. List devices: xcrun simctl list devices available.

Testing the onboarding flow

The onboarding screen appears when Reminders permission is .undetermined (first run) or has been denied. To reset permission on the simulator without wiping it:

xcrun simctl privacy booted reset reminders com.jonplummer.monotasker

Then relaunch the app. On a real device, delete and reinstall the app to reset permission state.

Product docs

License

PolyForm Noncommercial 1.0.0 — free for noncommercial use.