Updates: Version 1.0 is currently available While I work on fixing an issue in Xcode 12.5+ with LazyVGrid, I recommend you build using Xcode 12.4 and below. |
What and Why?
OldOS is a testament to the days of yesteryear, showcasing what iOS once was ten years ago. The ethos of the app is to merge the technologies of today with a pixel-perfect recreation of the user experience of the past. The vast majority of apps in OldOS are fully functional β meaning they seamlessly integrate with the data on your phone to deliver a live, emulator-esque experience. What does this mean? Well, you can play your music in iPod, get directions in Maps, surf the web in Safari, view the current weather in Weather, and much more. By the same token, no shortcuts were taken in fully fleshing out the operating system. You can change your background, adjust settings, search apps, et cetera. There are a few apps still not ready for primetime but don't worry, they're coming soon.
With OldOS, you no longer need to worry about securing a legacy iPhone to experience nostalgia β it's available on your daily driver.
Part of the goal with OldOS is to enable anyone to understand how iOS works and demonstrate just how powerful SwiftUI truly is. For that reason, the entire app is open-sourced β enabling developers to learn about, modify, and add to the app. I thought building this over my last six or so months in high school and sharing it with the world would be a fun and productive endeavor.
What's Special
* π§βπ» Built almost entirely using SwiftUI.
* π¨ Designed to be as close to pixel-perfect as possible.
* π± Fully functional, perhaps even usable as a second OS.
* β€οΈ A testament to the work of Apple employees of both the past and the present.
* πΊοΈ Fully open source for all to learn, modify, and build on.
Where to Begin
The project is logically structured in files by app. Inside each app file, you'll see code and commentary behind it. Aside from main apps, there is the Common file. My mindset was to build the app in the same way Apple built interface builder β you have a collection of UI elements at your disposal that are bases. You can then make a copy in whatever other file you'd like if you require custom abilities. If you just need the generic version, you can use the generic. Hence, common, containing all your common UI elements. Lastly, there is HomeScreen, and LockScreen β essentially making up the Springboard. Lastly, in Assets.xcassets, you'll find all the image assets structured by app.
Imagery
Thanks
Thanks to all who decide to use, learn from, and modify this project. As well as all the creators of libraries imported. This was a blast to create and I hope you enjoy it. I built this project while I had a little bit of time before college. If you enjoy it, please consider providing any little bit of support you can β it truly means a million.
License
Creative Commons Attribution 4.0: https://creativecommons.org/licenses/by/4.0/