Skip to content

chore: drop *.xcscheme gitignore rule and track Savely scheme#28

Merged
Ivan-LB merged 1 commit into
devfrom
chore/drop-xcscheme-gitignore
Apr 25, 2026
Merged

chore: drop *.xcscheme gitignore rule and track Savely scheme#28
Ivan-LB merged 1 commit into
devfrom
chore/drop-xcscheme-gitignore

Conversation

@Ivan-LB
Copy link
Copy Markdown
Owner

@Ivan-LB Ivan-LB commented Apr 25, 2026

Summary

  • Delete the *.xcscheme line from .gitignore (line 18).
  • Track Savely.xcodeproj/xcshareddata/xcschemes/Savely.xcscheme (was silently ignored before).

Why

Discovered while implementing Task 2 of docs/plans/maintenance-cleanup.md: the *.xcscheme rule had been globally ignoring every scheme file since the repo started. The existing Savely.xcscheme on disk was never trackedgit ls-files | grep xcscheme returned empty. CI's xcodebuild -scheme Savely worked only because xcodebuild auto-derives schemes when the file is missing.

Two consequences:

  1. CI's build was non-deterministic (auto-derived scheme could drift from the developer's local one).
  2. Any future shared scheme created via Xcode's "Manage Schemes → Shared" checkbox would have been silently dropped from commits — a real footgun.

Dropping the rule fixes both: the existing scheme becomes tracked verbatim, future shared schemes (e.g. SavelyTests.xcscheme if we ever want to run unit tests independently of UI tests) can commit naturally. User-specific scheme state continues to be excluded via xcuserdata/ (lines 12 and 22).

This implements Option B from the plan, with Path 2 expansion (track scheme alongside gitignore change) since leaving the scheme untracked would reproduce the same opaque-state problem.

What's in the scheme

Standard Xcode-generated scheme (LastUpgradeVersion 1540, version 1.7):

  • Build action: Savely.app only
  • Test action: both SavelyTests and SavelyUITests, parallelizable = YES
  • Run/Profile/Analyze/Archive: defaults pointed at Savely
  • No hardcoded simulator UDIDs, no env vars, no command-line args, no secrets

Test plan

  • xcodebuild build -scheme Savely -destination 'platform=iOS Simulator,name=iPhone 17 Pro' — passes
  • xcodebuild test -scheme Savely -destination 'platform=iOS Simulator,name=iPhone 17 Pro' -skip-testing:SavelyUITests — passes
  • git ls-files | grep -i xcscheme now lists Savely.xcodeproj/xcshareddata/xcschemes/Savely.xcscheme
  • git status clean (only docs/ untracked, separate concern)
  • Savely/Config.plist and Savely/GoogleService-Info.plist correctly stay gitignored

Risks

Minimal. Note for reviewer:

  • The Test action lists SavelyUITests with skipped = NO, but .github/workflows/ci.yml overrides this with -skip-testing:SavelyUITests (intentional per commit 33b5f5a — template launch-perf tests flake on shared CI runners). That mismatch is by design and out of scope for this PR.
  • Local builds validated on iPhone 17 Pro instead of iPhone 16 Pro (CLAUDE.md / CI default) because Xcode 26 no longer ships the 16 Pro simulator locally. CI's macos-15 runner still has it, so CI runs unchanged.

🤖 Generated with Claude Code

The rule globally ignored every .xcscheme file. The existing
Savely.xcscheme had been silently untracked since the repo started —
CI worked only because xcodebuild auto-derives schemes when the file
is missing. Dropping the rule and adding the scheme makes the build
deterministic and lets future shared schemes (e.g. SavelyTests) commit
naturally. User-specific scheme state continues to be excluded via
xcuserdata/.

Implements Option B from docs/plans/maintenance-cleanup.md Task 2,
with the orchestrator's Path 2 expansion (track scheme alongside
gitignore change) approved by the user.
@Ivan-LB Ivan-LB merged commit 1525aa9 into dev Apr 25, 2026
1 check passed
@Ivan-LB Ivan-LB deleted the chore/drop-xcscheme-gitignore branch April 25, 2026 21:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant