iOS app for knitting and crochet projects: single and double counters, a project library, photos per project, a handful of color themes (light/dark), and zip backup/restore that matches the Android app. Nothing syncs to the cloud unless you export the zip yourself.
Swift/SwiftUI port of stitchCounterV2 (Android). Older app: Stitch Counter.
SwiftUI + SwiftData for projects. Backups are zips with backup.json in the same shape as Android (LibraryBackupManager; tests keep the JSON keys aligned). Six themes, alternate app icons via ThemeService. XCTest lives under StitchCounterTests/. Build and test in Xcode.
| Swift, SwiftUI | min iOS 17 (IPHONEOS_DEPLOYMENT_TARGET in the Xcode project) |
| SwiftData | ZIPFoundation for zips |
| Strings | Localizable.xcstrings |
- SwiftUI entry in
StitchCounterApp; navigation/sheets viaAppCoordinator/ContentView. - Data stays on device; no cloud.
- Export/import zip with metadata + images; fine for moving between phones or swapping with the Android build.
- Single and double counter modes (stitches / rows)
- Project library: create, open, bulk delete
- Six themes, light/dark; theme can change the alternate icon
- Works on phones, portrait and landscape
- Up to six photos per project (files under Documents—see
ProjectImageSelectorView/ProjectService) - Zip export/import compatible with Android backups
- No analytics; privacy links live in
AppConstants/ settings
Open StitchCounter.xcodeproj, pick the StitchCounter scheme, run on a simulator or device. Tests: ⌘U or xcodebuild test.
| Xcode | 15.0+ (iOS 17 SDK). The project sets IPHONEOS_DEPLOYMENT_TARGET to 17.0 and Swift language mode 5.0 (SWIFT_VERSION in StitchCounter.xcodeproj). Last opened with Xcode 26.4.1 (build 17E202) on the maintainer machine—newer Xcode is fine. |
| SwiftLint / SwiftFormat | Not configured in-repo; follow the style of nearby code. |
| CI | .github/workflows/ci.yml runs xcodebuild test on pull requests and pushes to main on GitHub’s macos-15 image (default Xcode 16.4, build 16F6 on the current runner image). The job picks the first concrete iOS Simulator from xcodebuild -showdestinations (by device id) so the destination stays valid as runner images change. You can also run it manually (Actions → CI → Run workflow) on your branch before merging. |
Use GitHub Issues for bug reports and small feature ideas. For larger changes, open an issue first so direction matches the rest of the app.
Pull requests should keep the diff focused, run the StitchCounter scheme tests locally (⌘U or xcodebuild test), and match existing naming and SwiftUI structure.
StitchCounter/
├── Coordinators/
├── Models/
├── Services/
├── Theme/
├── ViewModels/
├── Views/
│ ├── Components/
│ └── Screens/
├── Resources/
├── Constants.swift
└── StitchCounterApp.swift
Run StitchCounterTests before you merge anything big.
Apache License 2.0. See LICENSE.
- custom app icons
- expansion on accessibility features
- stats