Tomortec/ZhuJian
iOS app for collecting and reviewing sentences: OCR capture, card‑based browsing, colorful tags & fonts, widgets, optional iCloud sync. Minimal SwiftUI quotes notebook—scan, type or collect via link; personalized colors/fonts, QR sharing and widgets. 一款专注记录句子的 iOS App:OCR 扫描、卡片化整理、颜色与字体个性化、桌面小组件、iCloud 同步、多字体/多配色、批量编辑与可访问性优化
ZhuJian
An iOS app focused on “collecting good sentences”. Capture what you see and think in the most convenient way: scan photos (OCR), type manually, or collect from share links. Everything is presented as cards for reviewing. Cards support per-note colors, tags, and fonts. Widgets help you revisit at a glance.
This open-source repo focuses on the app-side implementation and best practices. All external domains and private endpoints are disabled by default for out‑of‑the‑box experience and easier customization.
中文 README: README.zh-CN.md
Highlights (v1.3.0)
- Custom background: set a global background (with cropping), widgets can mirror it
- Colorful cards: per-note foreground/background color and tags for categorization
- Typography: multiple built-in fonts (e.g., Alimama DongFangDaKai, Source Han Serif)
- Bulk edit: long-press in Outline to multi-select and batch update color/tags
- Share cards: export images with QR codes for easy collection by others
- Sort & review: sort by modified/created time, title, tag, tag color
- Security & sync: optional FaceID/TouchID; optional iCloud sync
- Accessibility: VoiceOver-friendly hints and actions
See the in-app “New Version: Colorful” guide for more details.
Screenshots
Getting Started
- Requirements: Xcode 14+, iOS 15+
- Install dependencies
# If CocoaPods is not installed yet:
brew install cocoapods # or: gem install cocoapods
pod install- Open workspace
open ZhuJian.xcworkspace- Code signing
- In Xcode Targets (App / Share Extension / Widgets), set your Signing Team.
- If you don’t need iCloud sync or Widgets, you can temporarily disable the capabilities to run quickly.
- Run
- Choose a simulator or device, then Run.
- The first build may trigger Swift Package dependency resolution (network dependent).
Optional Configuration (Info.plist)
The project runs with “zero external dependency” by default. If you want link handling, share-collection, or remote toggles, add these optional keys in the app’s Info.plist:
- ZJ_ALLOWED_URL_HOSTS: comma-separated HTTPS hosts allowed in URL handling
e.g.,share.example.com, app.example.com - ZJ_SHARE_BASE_URL: base URL for share-collection (used for links and QR)
e.g.,https://share.example.com - ZJ_HELP_URL: in-app “Help” page URL
- ZJ_FONTS_INFO_URL: fonts info & license page
- ZJ_HOME_URL: project home page
- ZJ_API_MEMORIAL_URL: memorial-day toggle endpoint (GET, returns
{"MemorialDay":true|false}) - ZJ_API_SUPPORTS_URL: support/upvote endpoint (PUT, LeanCloud-style)
- ZJ_LEANCLOUD_ID / ZJ_LEANCLOUD_KEY: headers for the above APIs
If these keys are not set, related features are hidden or safely downgraded; no external requests are made.
Additionally, log uploading to COS is disabled by default. To enable, configure in Info.plist:
- ZJ_QCLOUD_TOKEN_URL: backend endpoint that returns temporary credentials
- ZJ_QCLOUD_REGION: COS region (e.g.,
ap-beijing) - ZJ_QCLOUD_BUCKET: COS bucket name
Once set, LogManager/AppDelegate will initialize the SDK using these values.
Tech Stack & Architecture
- UI: SwiftUI (iOS 15+)
- Data: Core Data (via
PersistenceManager); optional iCloud sync (SyncKit + CloudKit) - Widgets: WidgetKit (colors and fonts mirrored)
- Accessibility: VoiceOver & Dynamic Type friendly (labels, hints, events wired)
- Sharing: card image export with QR code; link-based collection configurable
- Fonts & theme: multiple built-in fonts and palettes; per-note customization and bulk edit
- Architecture: “Manager” objects for cross-screen state (
StorageManager,SettingsManager,FontManager, …) injected viaEnvironmentObject; views lean on unidirectional data flow with side effects pushed down to managers
Privacy & Open Source
- No secrets or private endpoints are included. By default, the app makes no external requests.
- For App Store distribution, replace bundle id, signing, and configure capabilities accordingly.
Contributing
Issues and PRs are welcome. For larger changes, please discuss the direction in an issue first.
License
MIT License — see LICENSE.







