SwiftUI UIKit CloudKit Combine WidgetKit WebKit Keychain

SwiftUI

SwiftUI

SwiftUI is Apple's declaritive UI framework and its used all throughout Dashify. Dashify is built on SwiftUI and requires much less code than its UI counterpart, UIKit. SwiftUI aslo made it much easier to target multiple apps in the same project. For example, the Widget extension uses the exact same files that the main app uses, making it much easier to manage and maintain both apps.

UIKit

UIKit

UIKit is Apple's imperative UI framework that offers much greater support for legacy features due to its longer life compared to the newer SwiftUI. UIKit was used many times throughout Dashify to enable features such as WebView or logging in, and much more.

Cloudkit

CloudKit

Cloudkit is Apple's BAS (backend as a service) framework that manages all of Dashify's backend. Dashify hardly uses Cloudkit for privacy reasons but it is used in two cases. It is used to save error logs from all users who opt in. And it is used to keep track of the API limits with Netlify. If limits are close to 0, I will be notified to reach out to Netlify for increased API limits.

Combine

Combine

Combine is Apple's declaritive Swift api that is used all throughout Dashify. It is particularly useful when it comes to upholding the MVVM architecture. I have built Dashify to use view model objects to build and manage the data of each view with dependency injection. Combine offers a powerful way to react to changes asynchronously. After reafactoring my code to use combine, I have dramatically increased readability and reusability, while also dramatically decreasing the clutter in each view. Combine was most helpful when it came to creating generic, reusable api calls.

WidgetKit

WidgetKit

WidgetKit is Apple's widget framework for iOS, iPadOS, and macOS. Dashify uses widgets with the user's token in Keychain to show relevant information at any given time. The widget is updated on a short timer interval. On tap of a Dashify item the widget opens Dashify with a deeplink to show the item in detail. Dashify's widget also uses intents to customize the widget. It can be customized to show 3 different item types, and enter a specific ID to show exactly what you want.

WebKit

WebKit

WebKit is Apple's API for integrating websites into your app. This is integral for Dashify's login system. This WebView had some challenges to properly confrom to AppStore Review Guidelines. One issue was that Netlify offers a 'Pro' plan but Dashify does not offer an in-app-purchase method for buying this subscription. The only way around this rule is a 'free standalone app acting as a stand-alone companion to a paid web based tool'. The only issue here is that there must be not one call to action to purchase a 'Pro' Netlify account from within Dashify. This meant that I had to lock down the login experience in Dashify to only show exactly what I want and nothing more. I was able to inject javascript at the end of each document to successfully remove all upgrade buttons. And if the user ever tries to leave the login process, the WebView will clear all cookies to sign them out and send them back to login.

Keychain

Keychain

Keychain is Apple's API for storing private data on the user's behalf. Keychain is very import to understand for any IOS developer as it is the safest option for locally storing small, sensitive data. Dashify uses Keychain to save, update, and delete the user's token across multiple apps (main app and widget). The access of these keychains have been changed to after first login to prevent errors with the widget fetching info while to device is locked.