Thanks for your interest in NotchLand! This is a small, focused macOS app and contributions of all sizes are welcome — bug reports, fixes, features, and docs.
git clone https://github.com/scienceLabwork/NotchLand.git
cd NotchLand
open NotchLand.xcodeprojNotchLand is a plain Xcode project (no Package.swift). Dependencies — Sparkle and
Lottie — are resolved by Xcode through Swift Package Manager automatically on first
open.
The project ships with the maintainer's Apple Developer Team (H7RVWCMKF5) baked into the
build settings, so a fresh clone will not sign on your machine. Before building:
- Open the project in Xcode.
- Select the NotchLand target → Signing & Capabilities.
- Set Team to your own (or uncheck Automatically manage signing / set signing to None for a local unsigned build).
Note: App Sandbox is off and Hardened Runtime is on by default. Full Sparkle update installation only works on Developer ID–signed builds, but that doesn't affect local development.
# Build (Debug)
xcodebuild -project NotchLand.xcodeproj -scheme NotchLand -configuration Debug build
# Run tests (Swift Testing, hosted in the app target)
xcodebuild -project NotchLand.xcodeproj -scheme NotchLand -configuration Debug test \
-destination 'platform=macOS'
# Clean
xcodebuild -project NotchLand.xcodeproj -scheme NotchLand cleanSwiftUI Previews need Xcode (not the command line). For UI/animation work, iterate in Xcode.
- Match the surrounding code. There is no linter and no enforced style — read the neighboring files and follow their naming, comment density, and structure.
- Concurrency: the project sets
SWIFT_DEFAULT_ACTOR_ISOLATION = MainActor, so types default to@MainActor. Move non-UI work tononisolatedfunctions, actors, or explicitTasks. - Adding a notch overlay? Follow the existing pipeline: a
Controllerpublishes aPresentationwhosebranchKeyis handled inFloatingNotchView. A new branch needs four touch points — the check inbranchKey, a size case incurrentVisibleSize(for:), a content case inbranchView(for:), and a mirror size case inWindowManager.currentVisibleSize()for the hover hit-test. - New
.swiftfiles dropped intoNotchLand/are picked up automatically (the project uses Xcode's synchronized file groups) — noproject.pbxprojedit needed.
- Open an issue to discuss anything larger than a small fix before sending a big PR.
- Keep PRs focused; describe what changed and how you tested it.
- Make sure the project builds and the tests pass before requesting review.
By contributing, you agree that your contributions are licensed under the Apache License 2.0, the same license as the project.