Skip to content
This repository has been archived by the owner on Feb 12, 2021. It is now read-only.

Commit

Permalink
🎉 Initial commit
Browse files Browse the repository at this point in the history
  • Loading branch information
rrroyal committed May 31, 2020
0 parents commit 6eb130a
Show file tree
Hide file tree
Showing 153 changed files with 11,186 additions and 0 deletions.
92 changes: 92 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Xcode
#
# gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore

.DS_Store

## User settings
xcuserdata/

## compatibility with Xcode 8 and earlier (ignoring not required starting Xcode 9)
*.xcscmblueprint
*.xccheckout

## compatibility with Xcode 3 and earlier (ignoring not required starting Xcode 4)
build/
DerivedData/
*.moved-aside
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3

## Obj-C/Swift specific
*.hmap

## App packaging
*.ipa
*.dSYM.zip
*.dSYM

## Playgrounds
timeline.xctimeline
playground.xcworkspace

# Swift Package Manager
#
# Add this line if you want to avoid checking in source code from Swift Package Manager dependencies.
# Packages/
# Package.pins
# Package.resolved
# *.xcodeproj
#
# Xcode automatically generates this directory with a .xcworkspacedata file and xcuserdata
# hence it is not needed unless you have added a package configuration file to your project
# .swiftpm

.build/

# CocoaPods
#
# We recommend against adding the Pods directory to your .gitignore. However
# you should judge for yourself, the pros and cons are mentioned at:
# https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
#
# Pods/
#
# Add this line if you want to avoid checking in source code from the Xcode workspace
# *.xcworkspace

# Carthage
#
# Add this line if you want to avoid checking in source code from Carthage dependencies.
# Carthage/Checkouts

Carthage/Build/

# Accio dependency management
Dependencies/
.accio/

# fastlane
#
# It is recommended to not store the screenshots in the git repo.
# Instead, use fastlane to re-generate the screenshots whenever they are needed.
# For more information about the recommended setup visit:
# https://docs.fastlane.tools/best-practices/source-control/#source-control

fastlane/report.xml
fastlane/Preview.html
fastlane/screenshots/**/*.png
fastlane/test_output

# Code Injection
#
# After new code Injection tools there's a generated folder /iOSInjectionProject
# https://github.com/johnno1962/injectionforxcode

iOSInjectionProject/
674 changes: 674 additions & 0 deletions LICENSE

Large diffs are not rendered by default.

57 changes: 57 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@


# vulcan
Open-source UONET+ app for Apple devices.

## Installation
### Manual
1. Clone the repo.
2. Replace every `please.change.me` occurrence with your designated Bundle ID.
3. Compile and run.

### Automatic
You might want to look into [AltStore](https://altstore.io) or (if you're jailbroken) [ReProvision](https://github.com/Matchstic/ReProvision).

## Functionality
### UONET+
- [x] Grades
- [x] Schedule
- [x] Tasks
- [x] Messages
- [x] Notes
- [ ] QR code logging in
- [ ] Message attachements

### Core
- [x] iOS app
- [x] iPadOS app
- [ ] watchOS app
- [ ] macOS app
- [ ] Today widget
- [ ] Cursor support
- [ ] Siri shortcuts/intents (*Handoff?*)
- [ ] Notifications
- [ ] Spotlight indexing

## FAQ
### Why the app isn't in the App Store?
**TL;DR:** I'm broke. Give me 99$ and it will be there.
**Slightly longer answer:** Uploading apps on the App Store requires being a member of the [Apple Developer Program](https://developer.apple.com/programs/), which costs 99$ per year. If someone is generous enough to pay for that, then I'm more than happy to upload the app to the App Store.

### Is it safe to use?
**I have no idea. You are using this app on your own responsibility.**

## Technical stuff
- There's no profiling, ads, weird libraries or other bullshit.
- The app is built using [SwiftUI](https://developer.apple.com/xcode/swiftui/), so the interface may sometimes be buggy. There's not much I can do about that.
- API is based on [uonet-api-docs](https://gitlab.com/erupcja/uonet-api-docs) and my own analysis.
- Network requests are made with [Combine](https://developer.apple.com/documentation/combine).
- Data is stored using CoreData - it was my first time using it, so I'm pretty sure there's a lot of stuff I could do better. Contributions are more than welcome!

## Credits
- [SwiftyJSON](https://github.com/SwiftyJSON/SwiftyJSON)
- [kishikawakatsumi/KeychainAccess](https://github.com/kishikawakatsumi/KeychainAccess)
- [erupcja/uonet-api-docs](https://gitlab.com/erupcja/uonet-api-docs)

## License
[GPL v3.0](LICENSE)
Binary file added Resources/Icon/Icon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/Vulcan.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/Vulcan.sketch
Binary file not shown.
Binary file added Resources/Icon/Vulcan@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/Vulcan@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_108pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_20pt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_20pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_20pt@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_24pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_27.5@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_29pt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_29pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_29pt@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_40pt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_40pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_40pt@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_44pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_50pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_60pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_60pt@3x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_76pt.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_76pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_83.5@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_86pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Resources/Icon/icon_98pt@2x.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
58 changes: 58 additions & 0 deletions Shared/UserDefaults.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
//
// UserDefaults.swift
// vulcan
//
// Created by royal on 08/05/2020.
// Copyright © 2020 shameful. All rights reserved.
//

import Foundation

extension UserDefaults {
struct user {
static var launchedBefore: Bool {
get { return UserDefaults.standard.bool(forKey: "launchedBefore") }
set { UserDefaults.standard.set(newValue, forKey: "launchedBefore") }
}

static var isLoggedIn: Bool {
get { return UserDefaults.standard.bool(forKey: "isLoggedIn") }
set { UserDefaults.standard.set(newValue, forKey: "isLoggedIn") }
}

static var userGroup: Int {
get { return UserDefaults.standard.integer(forKey: "userGroup") }
set { UserDefaults.standard.set(newValue, forKey: "userGroup") }
}

static var savedUserData: Data? {
get { return UserDefaults.standard.data(forKey: "savedUserData") }
set { UserDefaults.standard.set(newValue, forKey: "savedUserData") }
}

static var readMessageOnOpen: Bool {
get { return UserDefaults.standard.bool(forKey: "readMessageOnOpen") }
set { UserDefaults.standard.set(newValue, forKey: "readMessageOnOpen") }
}

static var hapticFeedback: Bool {
get { return UserDefaults.standard.bool(forKey: "hapticFeedback") }
set { UserDefaults.standard.set(newValue, forKey: "hapticFeedback") }
}

static var colorScheme: String {
get { return UserDefaults.standard.string(forKey: "colorScheme") ?? "Default" }
set { UserDefaults.standard.set(newValue, forKey: "colorScheme") }
}

static var colorizeGrades: Bool {
get { return UserDefaults.standard.bool(forKey: "colorizeGrades") }
set { UserDefaults.standard.set(newValue, forKey: "colorizeGrades") }
}

static var colorizeGradeBackground: Bool {
get { return UserDefaults.standard.bool(forKey: "colorizeGradeBackground") }
set { UserDefaults.standard.set(newValue, forKey: "colorizeGradeBackground") }
}
}
}
Loading

0 comments on commit 6eb130a

Please sign in to comment.