08.17
I have recently been looking into best practices for iPhone applications. I have two applications in the pipeline, both require settings but are very different in their type. After looking into the options I’ve decided Apple’s settings application could use some fixing.
According to Apple’s developer documentation, the Settings application should be used in “productivity-style applications”.
Adding your application preferences to the settings application is most appropriate for productivity-style applications and in situations where you have preference values that are typically configured once and then rarely changed.
The documentation goes on to say that applications should not duplicate the functionality of the settings application, nor should they be used in utility style applications or applications with few preferences.
I think this is the wrong approach all together. This breaks application flow, and in many cases, preferences despite proper verbage, will not always be 100% clear. In some cases a user may want to switch a preference, see how the application’s functionality has changed then switch again.
There are also preferences that fall under the “set once” category and some that fall under the “depends on my mood” category. My favorite IM application Beejive IM suffers from this problem, preference schizophrenia. Take Beejive IM’s “More” tab.
Beejive IM
There are no settings in this tab, although, you can set the application’s wallpaper here. This is a good example of a setting that a user will try out quickly, but schizophrenia lurks around the corner. Clicking the Support tab brings up an FAQ. There is a question in the FAQ “Where are my settings?” that points the user to the settings application.
The settings application has a bit of a lag when loading in 3rd party applications, and because of this, coupled with it not being natural to change application settings outside of an application, I rarely notice these. When directed here looking for Beejive IMs settings I found settings to applications I was unaware had settings. Either I had checked here after installing it, and they were added in a later update or I just missed them altogether.
Application Settings
Inside the Beejive IM settings pages there are a ton of settings, some of which are closely related to the wallpaper setting that is located inside the application. Changing the wallpaper could make text unreadable, and require me to quit the application, change the color scheme from settings and relaunch Beejive IM and hope I do not have to repeat. “Status Icons” and “Table Divider” are both settings which I need more instant visual feedback to make a decision. When preferences are outside the application and I am not 100% certain how they work, I am less apt to play around with them.
Beejive IM Settings
Now do not get me wrong. From a developer stand point the SDK provides a really easy way to create preferences. The new file dialog has a “settings bundle” which creates a easy to edit and understand XML file. From there accessing the preference values is as simple as two lines of code (replacing “typeForKey” with the proper type int, bool, etc…)
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults typeForKey:preference_key];
It is obvious that Apple is trying to solve the issue of preference interfaces being horrendously designed as well as trying to keep everything in one neat and tidy location. Fixing the the issue of the user not being aware of preferences could be solved with a badge icon for updated settings bundles at application install time. This would notify the user of settings needing to be set, and get some of the first time settings out of the way. Apple’s own documentation says this area is for settings that will be touched once. The setting buttons for 3rd party applications should launch the settings pages in the application in question so as to alleviate the issue with switching back and forth and trying out settings.
TL;DR version
Disadvantages
- Breaks application workflow.
- Confusing to users used to desktop style settings.
- Hard to “try out” preferences quickly
Advantages
- Very easy for developers to implement.
- Attempts to keep bad settings UI design away from the user
Possible Solutions
- Badge notifications for updated / added 3rd party preferences when an application is installed or updated
- Settings part of the SDK allows for creation of a settings page collection that is viewed and accessed inside the application itself.
- Clicking the application from the settings application opens the settings pages inside the 3rd party application.
Heh, when I responded on Twitter I didn’t actually follow to this blog post link. (Hence my Twitter post being redundant.)