A modern iOS app to track and manage your GitHub repositories and pull requests
Features β’ Architecture β’ Installation β’ Usage β’ Requirements
OctoTrack is a native iOS application that helps developers monitor their GitHub repositories and pull requests efficiently. Built with SwiftUI and following clean architecture principles, it provides a seamless experience for tracking project activity across multiple repositories.
- GitHub OAuth 2.0 integration
- Secure token management with Keychain
- Automatic token validation and refresh
- Session persistence
- Add and track multiple GitHub repositories
- Priority system (Low, Medium, High)
- Public/Private repository support
- Repository filtering by priority
- Quick repository deletion with swipe actions
- Real-time PR status monitoring (Open, Closed, Merged)
- Detailed PR timeline visualization
- Pull request metadata (created, updated, merged dates)
- Draft PR identification
- Pull-to-refresh functionality
- Direct links to GitHub
- Clean, modern SwiftUI design
- Dark mode support
- Custom tab bar navigation
- Responsive animations
- Localized in English and French π¬π§ π«π·
OctoTrack follows MVVM (Model-View-ViewModel) architecture with clean separation of concerns:
OctoTrack/
βββ π Models/ # Data models (User, Repository, PullRequest)
βββ π Views/ # SwiftUI views
βββ π ViewModels/ # Business logic and state management
βββ π Network/ # API clients and endpoints
β βββ Authentication/ # OAuth flow
β βββ Repositories/ # Repository endpoints
β βββ PullRequests/ # PR endpoints
β βββ Users/ # User endpoints
βββ π Storage/ # Keychain and token management
βββ π DataManager/ # SwiftData persistence layer
βββ π ExtractedViews/ # Reusable UI components
- Factory Pattern:
ViewModelFactoryfor dependency injection - Repository Pattern:
UserDataManagerfor data access - Coordinator Pattern:
AppCoordinatorfor navigation - Mapper Pattern: DTOs to domain model conversion
| Component | Technology |
|---|---|
| UI Framework | SwiftUI |
| Persistence | SwiftData |
| Networking | URLSession + async/await |
| Authentication | ASWebAuthenticationSession |
| Secure Storage | Keychain Services |
| Architecture | MVVM + Clean Architecture |
| Concurrency | Swift Concurrency (async/await) |
- iOS 17.0+
- Xcode 15.0+
- Swift 5.9+
- GitHub account
- GitHub OAuth App credentials
git clone https://github.com/yourusername/OctoTrack.git
cd OctoTrack-
Create a GitHub OAuth App:
- Go to GitHub Settings β Developer settings β OAuth Apps
- Register a new application
- Set callback URL to:
octotrack://callback
-
Update credentials in
GitHubAuthenticationEndpoint.swift:
static let config = GitHubOAuthConfig(
clientID: "YOUR_CLIENT_ID",
clientSecret: "YOUR_CLIENT_SECRET",
redirectURI: "octotrack://callback",
scopes: ["repo", "user"]
)- Open
OctoTrack.xcodeprojin Xcode - Select your target device or simulator
- Build and run (βR)
- Launch the app and tap "Sign In"
- Authenticate with your GitHub account
- Add repositories using the + button
- Track pull requests by tapping on any repository
- Filter repositories by priority level
- Add Repository: Tap the center
+button, enter owner and repo name - Delete Repository: Swipe left on any repository
- Update Priority: Tap the priority badge in repository details
- Refresh PRs: Pull down to refresh pull request list
- View Details: Tap any PR to see timeline and metadata
- View Profile: Navigate to Account tab
- Reset Repositories: Clear all tracked repositories
- Sign Out: Disconnect from GitHub
- OAuth tokens stored securely in iOS Keychain
- Token expiration handling with automatic refresh
- Periodic token validation (every 30 minutes)
- No credentials stored in UserDefaults or plain text
OctoTrack integrates with the GitHub REST API v3:
- Authentication: OAuth 2.0 flow
- Endpoints Used:
/user- User information/repos/{owner}/{repo}- Repository details/repos/{owner}/{repo}/pulls- Pull requests
All network requests use modern Swift Concurrency (async/await).
Below are a few screenshots showcasing the main modules of Octotrack.
Edit RepoPriority.swift to customize priority colors:
var color: Color {
switch self {
case .low: .customGreen
case .medium: .customYellow
case .high: .customRed
}
}Add new languages by extending Localizable.xcstrings with your locale.
- Token validation requires active network connection
- Large repository lists may experience slight loading delays
- OAuth flow requires Safari for authentication
# Run unit tests
βU in Xcode- SwiftLint configuration included
- Follow Swift API Design Guidelines
- MVVM architecture enforced
This project is licensed under the MIT License - see the LICENSE file for details.
- GitHub API for comprehensive developer tools
- SwiftUI community for inspiration and support
- Apple for excellent documentation
β Star this repo if you find it helpful!



