A comprehensive campus life companion app for KAIST students, integrating timetables, discussion boards, social feeds, and taxi coordination.
- Timetable - Class schedule management with OTL integration
- Boards - Campus discussion boards via Ara integration
- Feed - Social feed with posts and comments
- Taxi - Ride-sharing coordination with real-time chat
- Search - Unified search across timetable, posts, and taxi rooms
- Widgets - Lock screen and home screen widgets for quick access
- Watch App - watchOS companion with complications
- Siri Shortcuts - Voice command and automation integration for quick actions
- iOS 26.0+
- watchOS 26.0+
- Xcode 26.0+
- Swift 6.2+
The project follows Clean Architecture with a modular Swift Package Manager structure:
app-ios/
├── soap/ # Main iOS app target
├── BuddyDomain/ # Domain layer (entities, use cases, repositories)
├── BuddyData/ # Platform-agnostic data layer
├── BuddyDataiOS/ # iOS-specific data implementations
├── BuddyFeature/ # Feature modules
│ ├── BuddyFeatureTimetable
│ ├── BuddyFeatureFeed
│ ├── BuddyFeaturePost
│ ├── BuddyFeatureTaxi
│ ├── BuddyFeatureSearch
│ ├── BuddyFeatureSettings
│ └── BuddyFeatureShared
├── BuddyUI/ # Widget UI components
├── BuddyAppIntents/ # Siri Shortcuts integration
├── BuddyiOSWidget/ # iOS widget extension
├── BuddyWatchWidget/ # watchOS widget extension
└── WatchBuddy Watch App/ # watchOS companion app
- Repository Pattern - Abstracted data access via protocols
- Dependency Injection - Using Factory for IoC container
- MVVM - ViewModels with SwiftUI and Observation framework
| Package | Purpose |
|---|---|
| Factory | Dependency injection |
| Moya | Network abstraction |
| Alamofire | HTTP networking |
| Socket.IO | Real-time chat |
| Nuke | Image loading |
| KeychainSwift | Secure storage |
| Firebase | Crashlytics & Push notifications |
-
Clone the repository:
git clone https://github.com/sparcs-kaist/app-ios.git cd app-ios -
Open the project in Xcode:
open soap.xcodeproj
-
Resolve Swift Package dependencies (Xcode will do this automatically)
-
Build and run the
soapscheme
Add your GoogleService-Info.plist to the soap/ directory for Firebase services.
The app uses SPARCS SSO for authentication. Contact the SPARCS team for API access.
The app supports:
- English (default)
- Korean
Localization files are managed using Localizable.xcstrings.
This project is licensed under the MIT License - see the LICENSE file for details.
Copyright 2025 SPARCS