Thanks for helping MiaoYan grow! Bug fixes, features, docs, localisation, performance tuning, accessibility, and any other improvements are welcome through pull requests.
main <--- Releases / production builds
↑
dev <--- Default branch for all PRsdevholds day-to-day development. Please branch from the latestdevand target your PRs back to it.mainis the release branch. We tag releases frommain. Small documentation-only fixes can targetmaindirectly, but most changes should flow throughdevfirst.
- macOS 13 or newer (Sonoma recommended)
- Xcode 16+ with the Swift 6 toolchain (the project builds with
SWIFT_VERSION = 6.0) - SwiftLint and swift-format available on your PATH (e.g. via Homebrew)
- Clone the repository and check out the latest
devbranch. - Resolve Swift Package Manager dependencies once via Xcode (
File → Packages → Resolve Package Versions) orxcodebuild -resolvePackageDependencies. - Open
MiaoYan.xcodeprojin Xcode or work from VS Code using the tracked.vscode/launch.jsonand.vscode/tasks.json.
When you first open the project in Xcode, you'll see a signing error:
Signing for "MiaoYan" requires a development team.
Select a development team in the Signing & Capabilities editor.
To fix:
- Select the
MiaoYantarget in Xcode - Go to the "Signing & Capabilities" tab
- Choose your Apple ID in the "Team" dropdown
- If you don't have one, click "Add an Account..." to add your free Apple ID
- No paid developer account needed for local development
Why no DEVELOPMENT_TEAM in project.pbxproj?
To make the DMG easier for users to open (avoid strict macOS Gatekeeper blocking), we removed the hardcoded DEVELOPMENT_TEAM from the project file. Xcode will save your Team selection locally in xcuserdata/ (which is gitignored), so each developer uses their own Apple ID without affecting others.
- Xcode: Open the project and use
⌘B/⌘Rto build and run. - Command line:
xcodebuild -scheme MiaoYan -configuration Debug -destination "platform=macOS" build - VS Code: Trigger
Run Build Taskto execute.vscode/tasks.json, then use theDebug MiaoYan (LLDB DAP)launch config.
Build artifacts land in .vscode/DerivedData/ (VS Code) or your default DerivedData path (Xcode). Both are ignored by git.
- Run
swift format --configuration .swift-format --in-place <folders>on the files you touched before committing. - Run
swiftlint lint --strictto surface style and analyser warnings; address any issues it raises. - Keep diffs focused: avoid committing files from
.build/, DerivedData, or other generated content. Only.vscode/launch.jsonand.vscode/tasks.jsonare tracked from the.vscodedirectory. - If you modify UI, include a screenshot or short video in your PR description so reviewers can verify the change quickly.
- Use the emoji-based commit convention from https://github.com/tw93/cz-emoji-chinese (or run Commitizen with that adapter).
- Squash unrelated changes into separate commits/PRs.
- Ensure your branch is rebased on the latest
devbefore requesting review. - Fill in the PR template and describe testing steps (manual or automated).
- For sizeable features, open a discussion/issue first so we can align on scope and UX.
- Typos or minor doc fixes can go straight to PRs without an issue.
- When reporting bugs, include the macOS version, app version, reproduction steps, and relevant logs if available.
MiaoYan 4.0 ships on both distribution lanes: App Store/TestFlight and direct-download GitHub Releases. Keep the tag, release notes, DMG, ZIP, and Sparkle appcast aligned before announcing the release.
./scripts/build-appstore.shThe version comes from MARKETING_VERSION / CURRENT_PROJECT_VERSION in
MiaoYan.xcodeproj/project.pbxproj. Submit the resulting archive via Xcode
Organizer or Transporter.
- Bump
MARKETING_VERSIONandCURRENT_PROJECT_VERSIONinMiaoYan.xcodeproj/project.pbxprojacross macOS and iOS configurations - Confirm
.github/RELEASE_NOTES.mdmatches the intended uppercase tag, for exampleVx.y.z - Create Git tag:
git tag V<version> && git push origin V<version> - Build and notarize the direct-download DMG and ZIP, then update the Sparkle appcast
- Create GitHub Release with release notes plus the DMG and ZIP assets
- Submit App Store build via Transporter or Xcode Organizer
Self-build path still works.
scripts/build.shproduces a runnable Release build for local use or CI. Sparkle integration remains active for direct-download users.
Thank you for investing time in MiaoYan ❤️