How is "simpler" "more powerful"?


The true power of WinterBoard is that it can hook almost any graphic on the system. Note "almost" any graphic on the system. In practice it is designed to find graphics loaded either from UIKit's mapped image caches (sometimes known as UIImages or ApplicationImages) and those found by offset from an NSBundle.

Unfortunately, this relies on the developers of applications to always use the most "correct" mechanisms to load graphics, which simply isn't something we can count on (Calculator being a worst case example of "failure" on this count).

In order to work around these problems, WinterBoard has slowly accumulated more and more mechanisms for attempting to recover metadata on a file's purpose as it is loaded, which has complicated its design and led to some performance problems. As of 0.9.2636-1 I no longer do any of that for unmapped graphics: I now have a single hook deep in the image loading mechanism that simply walks the filesystem looking for a bundle.

Frankly, I feel stupid I didn't think of this trick earlier. This may sound expensive, but I can actually cache it almost immediately for almost every folder that will ever be encountered in practice: its nearly free.

Please note that this may mean that I might fail to theme something that used to work, but I find that highly unlikely. If you find any such regressions, please send me an e-mail with the name of the affected theme and the problematic graphic.

(These changes are actually in addition to other "Serious Speed Improvements!" I made in the image caching mechanisms.)