Astro - Mobile App
Astro is a Sun and Moon phase tracking application designed for mobile devices. Astro was designed with a simple goal in mind, what time is sunrise/sunset for any date and what phase will the moon be in for any date. One of the main requirements for this app was offline capabilities, since there's no guarantee that you will get GPS data all the time from a device. Currently Astro is available for iOS and Android devices, with support for Windows Phone and a Web version planned for a later release.
Astro was designed to provide a cohesive interface and design so that no matter what platform is used, the same overall experience is achieved. The following components were used across all platforms:
- Icons8 - Large library with various versions designed for each specific platform.
- Idealist Sans Font - A simple but easy to read font that looked good with the rest of the UI/UX.
Astro for iOS
Astro for iOS was written in Swift and built for the latest iOS version (at this time 11.0). I decided to use Carthage for my package management since it was building faster than the Cocoapods version. The following libraries were used in the iOS App:
- Chameleon - An easy to use color framework (especially for the gradients used in the app).
- SwiftDate - Probably one of the easiest ways to deal with and manipulate dates.
- SwiftLocation - Best alternative to CoreLocation services.
- SQLite.swift - A great way for working with SQLite databases.
- Notificationz - Easy way to work with NotificationCenter.
- ClusterKit - For creating the clustered icons on the map screen.
- LatLongToTimezone - TimeZone Mapper using Lat/Lng coordinates.
Astro for Android
Astro for Android was written in Kotlin and built for the latest Android version (at this time 27). In it's current design Astro works for most devices, but new layouts will be needed for smaller screens. The following libraries were used in the Android App:
- koda-time - Joda Time extensions for Kotlin
- Android-ReactiveLocation - Wrapper for Google Play Services into RxJava Observables
- RxJava - Reactive extensions for Java
- RxAndroid - RxJava bindings for Android
- RxPermissions - RxJava wrapper for Android Permissions.
- android-sqlite-asset-helper - Android helper class for dealing with SQLite databases.
Outside of the libraries used in each platform, and the common components shared by all projects I have to thank my family for encouraging me to take on this challenge to better myself as a developer. Astro is the first project in a personal challenge so it was interesting to see where I can improve in my development process.