Smart Invert is dark mode

Developers just don’t support it

Ever since iOS 7, iOS users have been calling on Apple to implement a system-wide dark mode in iOS. Many concepts have sprung up and showcased how iOS with dark mode would look like, and they look pretty neat.

In comes Smart Invert…

iOS 11 implemented Smart Invert, a system-wide feature that inverts the entire screen’s content (much like classic invert colors), but also inverts images and selected elements too to make them look normally colored (more on this below). Not many people know that this exists because Apple hid it deep within the settings, and if you want to try it out, it’s in Settings > General > Accessibility > Display Accommodations > Invert Colors > Smart Invert. Many users have criticized Apple for this move, calling it a lazy implementation, and voicing out that we may never see a dark mode on iOS, simply because Apple doesn’t listen to consumers.

The App Store app after Smart Invert.

So you think Smart Invert isn’t a dark mode…

But what if I told you that Smart Invert, implemented in iOS 11, is not just a step towards a system-wide dark mode, but rather, is the most perfect implementation of dark mode by Apple in the ecosystem’s current state? You’d be surprised. I’m pretty sure most people are too, as this is a very controversial opinion that not many people hold. I will explain briefly.


Point 1: Smart Invert is the smartest way to implement a dark mode

Developers who are ready for a dark mode expect a system-wide implementation that swaps out UI colors and inverses them, by for instance inverting the white UI elements and rendering them as black or dark gray, by completely having a separate UI implementation for a special dark mode, or even a unique implementation, such as the one Twitter’s app uses. In the real world, however, this will not work, due to the unique UI frameworks and implementations developers put into their apps. For instance, while WhatsApp uses a very standard iOS interface, an app like Uber does not. This means that a direct UI element change cannot affect those apps, and you’ll have to enter each app separately and toggle their dark mode on, if available.

Smart Invert, however, tackles this problem by indirectly allowing developers to select what not to invert. This means that even apps that don’t use standard iOS interface guidelines can support a dark mode without having to re-implement a separate dark mode into their apps. This can also save space, as app developers may not have to create new assets for their apps. For example, instead of recreating an entire interface definition with separate settings for font colors, images, and UI colors, I could simply apply the Smart Invert accessibilty tag onto any elements that should not be inverted, such as images.

This is what happens if you take a screenshot with Smart Invert on.

The only downside to this is that while it provides a seamless way for every app to implement a universal dark mode for iOS, many developers cannot, or will not implement it. This is especially true for game developers that use engines like the Unity Engine, as I don’t believe there is a way to implement accessibility tags in Unity apps yet. This means that most games will be inverted when Smart Invert is turned on. Apps like Discord and Reddit do not support Smart Invert, despite it being just a simple accessibility tag away. Developers not implementing Smart Invert means that Smart Invert, in the eyes of users, isn’t dark mode.

Point 2: Smart Invert is consistent

One thing I hate about ‘custom’ dark modes implemented in apps is that while these apps already have a dark mode, many of dark mode implementations have vastly different color schemes. For instance, Discord’s dark mode is a little gray-ish, Reddit’s dark mode is completely black, and Twitter’s dark mode is slightly blue. This creates for a very inconsistent experience, as these different colors create different levels of contrast. White text on a completely black background is really sharp and stands out, but white text on a slightly gray background is softer to the eyes.

I downloaded the YouTube app just to show you how fragmented custom implementations of dark mode are.

With Smart Invert, as long as your app’s background is white, the background will be black. It’s as simple as that. Unless, of course, you force your own app’s *ahem* YouTube *ahem* dark mode to be activated once Smart Invert is activated. But as the saying goes, don’t fix something that isn’t broken.

Point 3: Smart Invert is already universal

The biggest pains of having to use dark mode now is that you have to enter every app to activate dark mode. This activation process can vary from swiping a side menu (ugh) and pressing the moon shaped icon to having to dig around in the app’s settings to find the themes option. Sometimes, an A/B test also means that some users won’t even be able to use the app’s dark mode. This process is unnecessary with Smart Invert, as Smart Invert is a single universal toggle, available to every user in the Settings app. One toggle, dark mode for everything. Simple.

Dark mode? Turn it on. Don’t want it anymore? Turn it off.

Now I know, Smart Invert isn’t perfect. There are tons of things Apple can still improve on. Let’s take a look.

Point 1: Make it easier to implement in Xcode

While I did mention that Smart Invert is only an accessibilty tag away from being implemented correctly, it is still a little hard to find and implement. The accessibility tag must be exact, and developers have to type it into the ‘User Defined Runtime Attributes’ section of a control to implement it. This is complicated, and may discourage developers from implementing it at all. Some developers may not even realize that that is how it is implemented.

This is how Smart Invert is implemented. Took me a whole day of scouring the web to find it.

Here’s what I propose: make Smart Invert a simple check mark away from being inverted, and make it the default for any controls with images. This way, developers don’t have to fumble with the Apple developer documentation, or Stack Overflow to support Smart Invert. It’ll, simply put, ‘just work’.

Hypothetically, this is how it should be done.

Point 2: Make Smart Invert smarter… with AI (and user control)

Smart Invert, at its current state, isn’t ‘smart’. It’s just a bunch of booleans and system-level graphics doohickeys. With the emergence of CoreML, Apple could theoretically use AI to allow Smart Invert to locally ignore images, even in apps that don’t support it. Smart Invert can also be trained to ignore games, full-screen apps, and videos. And if the user so desires, let them white-list apps that simply don’t work with it. This will bring us a step closer to having a true dark mode experience on iOS, rather than having what everyone perceives as a quick hack to satisfy the majority.

Point 3: Prioritize Smart Invert before other graphical processing

As seen in the screenshot above, a screenshot taken with Smart Invert is shown inverted, while a screen recording is not. Smart Invert works by inverting any elements marked with the Smart Invert accessibility tag before inverting the screen (sometimes this looks the other way round, but it really is not the other way round). While this works perfectly, some graphical processing is still done before the inversion is done (think of it like layers). For instance, Night Shift cannot be used with both Smart Invert and classic invert colors due to it being processed ‘after’ the Night Shift filter, and even if you could, the entire screen is ‘blued’ out.

For some reason, Night Shift doesn’t show up on screen recordings. But this is roughly when each ‘layer’ is processed.

My proposal is for Apple to move Smart Invert to the very first ‘layer’, which means that Night Shift will work correctly, and screenshots will look like what they are after inversion. This will ensure a smoother experience using Smart Invert. It’ll also mean that there are less compromises while using Smart Invert, as I’d very much like to use Night Shift with Smart Invert.

Tip: To take a screenshot showcasing Smart Invert colors, take a screenshot, open the photo in the Photos app, and take another screenshot. This will invert the inverted image again.

Overall, I’d say I quite liked the Smart Invert experience on iOS 11, but I am not ready to use it on a daily basis, due to my interactions with games and apps that don’t support Smart Invert yet. If you primarily use Apple’s apps, I’d say Smart Invert is the perfect dark mode for you already. You can also add Smart Invert to the triple-tap home button accessibility shortcut to toggle it on/off whenever and wherever, but do keep in mind that it’ll delay the App Switcher’s trigger by a short moment. I do hope that Apple improves Smart Invert in iOS 12, with WWDC18 coming up. Just keep in mind that Smart Inver is dark mode for now until Apple implements otherwise.