This repository has been archived by the owner on Feb 12, 2021. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit 6eb130a
Showing
153 changed files
with
11,186 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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/ |
Large diffs are not rendered by default.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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) |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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") } | ||
} | ||
} | ||
} |
Oops, something went wrong.