A native iOS and watchOS companion app for managing plural systems. Sheaf provides a beautiful, privacy-focused interface for tracking fronting history, managing members, organizing groups, and staying connected across devices.
-
System Management
- View and edit system profile
- Track current fronters with real-time updates
- Browse fronting history with timeline views
- Manage member profiles with custom avatars and colors
-
Member Organization
- Create and manage system members
- Customize member profiles (name, pronouns, description, birthday)
- Privacy controls (public, friends, private)
- Group organization with hierarchical support
-
Authentication & Security
- Secure token-based authentication
- TOTP (Two-Factor Authentication) support
- Refresh token auto-renewal
- Secure credential storage in Keychain
-
User Experience
- Dark mode and light mode support
- Customizable theme settings (system, light, dark)
- Quick actions for common tasks
- App Intents and Shortcuts support
- Full localization support with String Catalog
- Simply Plural import functionality
-
Glanceable Information
- View current fronters at a glance
- Browse member list
- Check system information
- Seamless sync with iOS app
-
Watch-Specific Features
- Optimized for small screen
- Automatic credential sync from iPhone
- Independent authentication state
- Native watchOS UI patterns
-
Complications
- Show current fronter on watch face
- Multiple complication styles (circular, rectangular, inline, corner)
- Auto-updates when fronting changes
- Co-fronting count display
- Works with most watch faces
-
Watch Connectivity
- Automatic credential synchronization
- Real-time data sync between iPhone and Watch
- Background data transfer
- Session-based communication
-
App Intents & Shortcuts
- Quick front switching
- Add member shortcuts
- Siri integration
- Home Screen quick actions
Sheaf is built with modern Swift best practices and Apple platform technologies:
- SwiftUI: 100% SwiftUI interface across iOS and watchOS
- Swift Concurrency: Async/await for all network operations
- MVVM Pattern: Clear separation of concerns with observable objects
- Watch Connectivity: Seamless data sync between devices
- App Intents: Deep integration with iOS system features
Models.swift: Core data models (Member, SystemProfile, FrontEntry, SystemGroup)APIClient.swift: Network layer with authentication and API communicationSystemStore: Central data store with caching and state managementAuthManager: Authentication state and token management
SheafApp.swift: Main app entry point with dependency injectionContentView: Tab-based navigation (Home, Members, Groups, History, Settings)LoginView&TOTPView: Authentication flowsQuickActions.swift: 3D Touch / Haptic Touch quick actionsTheme.swift: Theming system with custom color support
watchOSApp.swift: Watch app entry pointWatchStore: Watch-optimized data storeWatchConnectivityManager: Device-to-device communicationWatchTabView: Tab-based navigation for Watch
PhoneConnectivityManager: iOS-side Watch ConnectivitySheafShortcuts.swift: App Intents and Shortcuts supportLocalizationHelpers.swift: Type-safe localization utilities
- iOS: 17.0 or later
- watchOS: 10.0 or later
- Xcode: 16.0 or later
- Swift: 6.0
You'll need:
- A Sheaf-compatible API server endpoint
- Valid account credentials
- Xcode 16.0+ installed
- An iPhone running iOS 17+ (and optionally Apple Watch with watchOS 10+)
π Quick Start: Download the latest unsigned development build from the dev release.
Installation (Easy with AltStore):
- Install AltStore on your iPhone (free, no paid developer account needed)
- Download the unsigned
.ipafrom the dev release - Open the
.ipain AltStore - AltStore signs and installs automatically with your Apple ID
- Trust the app in Settings β General β VPN & Device Management
- Launch and enjoy!
Alternative signing tools:
- Sideloadly - Popular desktop sideloading tool
- SideStore - No computer needed after setup
- See the
SIGNING_GUIDE.mdin the release for all methods
Note: The IPA is unsigned so users can sign with their own Apple ID. Works on any device - no UDID restrictions! Free Apple IDs work (7-day validity, auto-refreshed by AltStore). Paid accounts get 1-year validity.
-
Clone the repository:
git clone https://github.com/sheaf-project/ios.git cd ios -
Open the project in Xcode:
open Sheaf.xcodeproj
-
Select your target:
- Sheaf for iOS app
- watchOS App for watchOS app
-
Build and run (βR)
- Launch the app on your iPhone
- Enter your API server URL
- Sign in with your credentials
- If TOTP is enabled, enter your verification code
- Start managing your system!
The Watch app will automatically sync credentials from your iPhone.
The app stores your API base URL securely in iCloud Keychain. On first launch, you'll be prompted to enter:
- Server URL (e.g.,
https://test.sheaf.sh) - Email/username
- Password
- TOTP code (if enabled)
Access theme settings from the Settings tab:
- System: Follows iOS appearance settings
- Light: Always light mode
- Dark: Always dark mode
Members and system profile support three privacy levels:
- Public: Visible to everyone
- Friends: Visible to friends only
- Private: Visible only to you
Sheaf includes comprehensive localization support:
- String Catalog:
Localizable.xcstringswith translator comments - Type-Safe Strings:
LocalizedStringsenum prevents typos - Formatted Strings: Support for parameterized localization
- 90+ Strings: Full coverage of UI elements
- Open
Localizable.xcstringsin Xcode - Add your language in the String Catalog editor
- Translate each string using the provided context comments
- Build and test
Sheaf supports 3D Touch / Haptic Touch quick actions from the Home Screen:
- Switch Front: Quickly update who's fronting
- Add Member: Jump directly to member creation
Sheaf integrates with Siri and Shortcuts:
- Query current fronters
- Switch fronting members
- Add new members
- Access via Shortcuts app
The Watch app provides:
- Home Tab: Current fronters and quick actions
- Members Tab: Browse all system members
- Settings Tab: View system profile and sign out
All data syncs automatically from your iPhone via Watch Connectivity.
Sheaf/
βββ Sheaf/ # iOS App
β βββ SheafApp.swift # App entry point
β βββ Models.swift # Data models
β βββ APIClient.swift # Network layer
β βββ SystemStore.swift # Data store
β βββ AuthManager.swift # Authentication
β βββ Theme.swift # Theming system
β βββ QuickActions.swift # Home Screen actions
β βββ SheafShortcuts.swift # App Intents
β βββ LocalizationHelpers.swift # Localization utilities
β βββ Views/
β β βββ LoginView.swift
β β βββ TOTPView.swift
β β βββ ContentView.swift # Main tab view
β β βββ HomeView.swift
β β βββ MembersView.swift
β β βββ GroupsView.swift
β β βββ HistoryView.swift
β β βββ SettingsView.swift
β β βββ ...
β βββ Components/
β β βββ AvatarView.swift
β β βββ ...
β βββ Localizable.xcstrings # String Catalog
β
βββ watchOS App/ # watchOS App
βββ watchOSApp.swift # Watch app entry
βββ WatchStore.swift # Watch data store
βββ WatchAuthManager.swift # Watch authentication
βββ WatchAPIClient.swift # Watch network layer
βββ WatchConnectivityManager.swift
βββ PhoneConnectivityManager.swift
βββ Views/
βββ WatchTabView.swift
βββ WatchHomeView.swift
βββ WatchMembersView.swift
βββ WatchSettingsView.swift
Sheaf takes your privacy seriously:
- Local Storage: Credentials stored securely in Keychain
- No Analytics: No tracking or analytics
- No Third-Party: No external dependencies or SDKs
- Privacy Controls: Granular privacy settings for members and system
- Secure Communication: HTTPS-only API communication
- Token-Based Auth: No passwords stored after authentication
Contributions are welcome! Please feel free to submit a Pull Request.
- Follow Swift API Design Guidelines
- Use SwiftUI best practices
- Maintain async/await for all async operations
- Add localization strings to
Localizable.xcstrings - Test on both iOS and watchOS when applicable
- Update documentation for new features
- Migrate to Keychain for credential storage
- Add widgets for Home Screen and Lock Screen
- Add complications for watchOS
- iCloud sync support
- Offline mode with local caching
- Custom notifications for system events
- Built with SwiftUI and Swift Concurrency
- Designed for plural systems and their communities
- Inspired by the need for privacy-focused system management tools
For questions, issues, or feature requests:
- Open an issue on GitHub
- Join our Discord