With iOS 13 right around the corner, I would like to give my take on it from a developer’s perspective. Not only is this update big for users, but for developers aswell. For this review, I will be focussing on my experience with updating Power Player to iOS 13, so without further a do, let’s dive into it.

One of the biggest new features is, without a doubt, dark mode. Personally, I think this makes iOS so much easier on the eye, especially at night. It is also fairly easy to implement when your pre iOS 13 app used the light interface style.
However, for dark interfaces, a little workaround has to be used. I have extended the UIColor class with so-called compatibility variables. If the iOS version is 13 or higher, use the semantic color. If not, use the hardcoded color. In addition, I also manually set the visual effect texture.

/// The background color with support for earlier iOS versions.
static var systemBackgroundCompatibility:UIColor {
    if #available(iOS 13.0, *) {
        return UIColor.systemBackground
    } else {
        return UIColor.black
    }
}

One of my favorite new API’s has to be the context menu. It works on both macOS and iOS, is more advanced than the UIAlertController’s ActionSheet, and on iOS, offers an awesome preview.
Still, not all is perfect. As I said earlier, the preview only works on iOS, not macOS. In addition, you can only call the menu using 3D Touch or a long press on iOS. In the future, I would like to see a tap option.

With iOS 13, Apple is bringing an enormous set of system icons to developers to use in their apps. Not only do the icons come in a variety of weights, they are also very easy to customize. Although I sometimes felt some icons were missing, having this enormous library at your disposal will save developers countless hours of icon designing, and eventually, make the iOS experience more uniform.

When initializing a UIView or UIViewController, the traitCollectionDidChange(_:) will no longer be called when added to the hierarchy. Instead, Apple recommends using the layoutSubviews(), viewWillLayoutSubvies() or viewDidLayoutSubviews() function. Although this is recommended for the majority of cases, I have decided to call a helper function upon initialization and during traitCollectionDidChange(_:), the reason being, viewWillLayoutSubviews() causes issues when going from the album subview to a detail, resulting in views not being layed out correctly.

The volume HUD before iOS 13 has become an annoyance for many people around the world and has been redesigned in numerous concepts. Fortunately, those days are over and from iOS 13 onward, Power Player will be using the standard volume HUD.
Due to unknown reasons, when presenting the albums detail as a subview, the items in it would unintentionally animate. I had to fix this by creating a view snapshot in advance.
Lastly, the routing button in the MPVolumeView has become deprecated in favor of the routePickerButton in the AVFoundation framework. I recently discovered this button and have quickly fallen in love with it thanks to its flexibility.

iOS 13 is an awesome upgrade for both users and developers. Developers can quickly update their light apps to dark mode, get an awesome cross platform menu API and get an enormous set of icons at their disposal. Users get to enjoy a dark interface, more beautiful context menu’s and a more consistent icon experience. I personally cannot wait until iOS 13 exists beta.