Problem: iOS app has unwieldy, unorganized and poorly named images
I've been working on a team that took over a good sized legacy iOS project where it's usage of images became a little unwieldy. Between the various app clones (targets), shared images, and images that aren't even used we'd like to reorganize, rename and just clean up the app in general.
But, one thing that makes me nervous is how easy it is to rename an image, forget or miss a magic-string that tries to load that image and now we've introduced a bug that may be difficult to diagnose or even discover that we introduced it.
Let's fail fast?
Failing fast in this context means, how can we, during development and testing time quickly fail when running the app to determine where an image attempting to be loaded does not.
Ideally we wouldn't even have these magic-strings to deal with. Using some tool to automatically generate a compile-time safe construct that we can use to load images. However until both A) I find the darn tool that I once-upon stumbled across that does this (please leave a comment to remind me if you find it before I do...) and B) we get sed tool integrated, I threw this little helper to quickly fail fast and help us find broken image references within our iOS applications.
How does it work?
It's a simple little Category that overrides the
imageNamed: selector of
UIImage and if the original cannot load an image (returns
nil) then it will fail with a helpful assertion message.
This utility allowed us to quickly find images that were missing while doing our big clean sweep.
How to integrate?
It should be as simple as adding the
.m files to your project and their respective targets and you should be off to the races.
For DEBUG mode only...
If you look closely you'll notice
#if DEBUG wraps the implementation so when we ship to the app store we don't end up causing a crash in production if a missing image sneaks by.
Happy Missing Image Bashing!