Thanks for contributing! This guide covers the local development workflow.
- Xcode 16+ with the iOS 17+ SDK
- Homebrew
open PcVolumeControl.xcodeprojSelect a simulator or device and build/run with the Xcode run button (Cmd+R).
xcodebuild test -scheme PcVolumeControl \
-destination 'platform=iOS Simulator,name=iPhone 17 Pro Max,OS=26.0'We use periphery to find unused code. Run a scan before opening a pull request and resolve anything it reports.
-
Install (one-time):
brew install peripheryapp/periphery/periphery
-
From the repository root, run:
periphery scan
periphery scan reads the committed .periphery.yml; a clean run prints
No unused code detected..
Alternatively, run the same check CI runs via fastlane:
bundle exec fastlane peripheryThe periphery lane runs periphery scan --strict, so it exits non-zero when
unused code is found. CI (.github/workflows/ci.yml) runs this lane on every push
and pull request, so a scan failure will fail the build.
Prefer deleting genuinely unused code. When periphery flags code that is not actually dead, do not silence it blindly:
- Code reachable only through reflection, SwiftUI SPI, or the wire protocol can be
retained via
.periphery.ymlsettings (e.g.retain_codable_properties) or a targeted// periphery:ignorecomment with an explanatory note. - Vendored or generated files (e.g. fastlane's
SnapshotHelper.swift) and intentional scaffolding are listed underreport_excludein.periphery.yml.
Always add a comment explaining why an exclusion or ignore is justified.
If periphery fails with Scheme 'PcVolumeControl' does not exist, you likely have
a stale per-user scheme shadowing the shared one. Remove it (it is git-ignored and
Xcode regenerates it):
rm PcVolumeControl.xcodeproj/xcuserdata/*.xcuserdatad/xcschemes/PcVolumeControl.xcscheme- Target iOS 17+ with SwiftUI and the MVVM pattern.
- NEVER use emojis in code, including comments and log output.