Tracking Down Storyboard Warnings

Xcode seems to have this annoying problem where sometimes, most of the time for me, when I select a storyboard warning it will open the file, but won’t show me the item that’s affected. This is becoming a real problem now that layout margins and Automatic Preferred Max Layout Width on UILabels seem to be the default.

Reveal compiler output
Reveal compiler output with this thingy

I’m working on a project that contains a pretty huge storyboard where trying to find the culprit would be like looking for a needle in a haystack. Fortunately I discovered a trick. Not sure trick is the right word but whatever. Here’s what you do. Switch to the Report Navigator and select your most recent built. Make sure “All Issues” is selected and locate the storyboard that contains warnings. Then click the hamburger looking button to the right to see the compiler’s actual output.

Storyboard IDs
Compiler output shows the storyboard IDs

After expanding the compiler output, you should see a list of your warnings towards the end. These warnings include the storyboard path along with an identifier and the warning text. Copy the identifier for the warning that you want to investigate and then paste that into Find In Workspace (⌘⇧F).

Find In Workspace with storyboard elements
Find In Workspace with storyboard elements

Voila! Xcode should display the problem storyboard element as a result. When you click on the result it will open the storyboard and select the element in question allowing you to fix the edit.

Maybe this is a thing everyone already knows about but it was news to me when I accidentally stumbled across it a little while ago. Hopefully you find it useful.

Backwards Compatibility on the App Store

The imminent release of iOS 8 and the new iPhones from Apple got us thinking about updating our Quiet Spark apps to take advantage of some of the new features that will be available. Most importantly (at least to us) are the new adaptable UI APIs. First on that list, since it’s still fresh in my mind, is Terrella.

Terrella currently requires iOS 6.1 or greater. It supports 6.1 for a few reasons. First, 6.1 was the most recent release when I started on it. Although it would have been pretty easy to switch to iOS 7 when it arrived, my kids did not love iOS 7 and wanted to continue using iOS 6. I did too for that matter. I also wasn’t certain what the adoption rate would look like and I really didn’t need anything that 7 added. So I continued to design with support for iOS 6.1.

Back to the present. While I’m sure there is a way to add support for adaptive UI to Terrella and maintain compatibility with iOS 6.1 it would probably be messy and a pain. Also we were thinking perhaps we would be more likely to be featured if our game included support for all of the latest goodies. That’s what I’d always heard anyway, so we decided to take a look and see what everyone else was doing and the results were surprising.

First we looked at the Games category. Specifically we looked at the “Best New Games” and then the top 20 apps in the various Top charts. The Top charts may not represent the latest and greatest, but are still useful to see if users are specifically looking for apps that include support for features only available in the latest releases of iOS.

Side note: for whatever reason there were only 18 apps featured in Best New Games yesterday when we gathered this info.

iOS Version Best New Games %* Top Paid % Top Free % Top Grossing %
7.0 1 5.6% 0 0.0% 3 15.0% 1 5.0%
6.1 0 0.0% 1 5.0% 1 5.0% 1 5.0%
6.0 11 61.1% 2 10.0% 8 40.0% 2 10.0%
5.1 1 5.6% 2 10.0% 0 0.0% 4 20.0%
5.0 3 16.7% 6 30.0% 5 25.0% 8 40.0%
4.3 2 11.1% 9 45.0% 3 15.0% 4 20.0%

Not only do the vast majority of the featured Games only require 6.0, more than a third support 5.1 and earlier. Two of these new releases go all the way back to 4.3! This was a bit of a surprise. Only one of the apps in that list requires 7.0. While this is just one sample, it does call into question the notion that Apple is pushing more apps that run on the most recent release of iOS.

In the top charts support for older version of iOS is even more pronounced. Nearly half of the Top Paid games support iOS back to 4.3. You have to wonder if this is by design. There are some heavy hitters in the games category with the resources to determine if including support for these older versions make sense. While Apple claims that the iOS adoption rate is well over 90% I wonder exactly how that is measured. Perhaps there are more users running older versions of iOS, especially in the Games category. Consider that the Games demographic is likely skewed much younger than, say, the Productivity category. And, if other families are anything like my own, older devices tend to get handed down from child to child when the parents upgrade their devices. Could that be what’s going on here?

Next we decided to do the same breakdown by looking at the Overall category. The results here were much more in line with what I expected.

iOS Version Best New Apps %* Top Paid % Top Free % Top Grossing %
7.0 16 80.0% 1 (0) 5.0% 7 (1) 35.0% 3 (1) 15.0%
6.1 0 0.0% 1 (1) 5.0% 1 (1) 5.0% 0 (0) 0.0%
6.0 3 15.0% 6 (1) 30.0% 10 (3) 50.0% 4 (2) 20.0%
5.1 0 0.0% 1 (1) 5.0% 0 (0) 0.0% 2 (1) 10.0%
5.0 1 5.0% 6 (5) 30.0% 1 (0) 5.0% 7 (7) 35.0%
4.3 0 0.0% 5 (5) 25.0% 1 (1) 5.0% 4 (2) 20.0%

80% of the apps featured here require support for iOS 7 or greater and only 1 includes support for those still stuck on iOS 5.0. Here it very much seems that Apple is pushing apps that would also encourage users to adopt the most recent version of iOS. That or developers in other categories are not quite so concerned with the hand-me-down theory I mentioned earlier.

The overall Top charts aren’t as useful here as most of the apps here are games. The number in parenthesis is the number of apps that were games. Although it is interesting that in the Top Grossing category there are 2 apps supporting iOS 4.3 that are not games.

At the end of the day, this doesn’t make my decision to drop support for iOS 6.1 in Terrella any easier. In fact it’s even less clear to me now. The decision on which versions of iOS to support is much more nuanced that I originally thought. Especially if you’re creating a game.

Catching Up

Now that Terrella is done I can turn my attention to a bunch of other stuff I’ve been neglecting for far too long, not least of which are my other apps (working on it). But there are some things around here that I’ve updated recently as well.

First, the genealogy section of SGnTN has been updated from TNG v7 to TNG v10. Yeah I was a little behind with that. But hey it’s all updated and shiny now so if you’re one of my genealogy visitors please take a look. And if you’re looking to create you’re own genealogy site, definitely take a look at TNG. The software and the support are top notch.

Besides those interested in genealogy, I get a lot of visitors looking for information on iOS release and device compatibility. Specifically, this post I made 2 years ago. I’ve finally taken some time to update that information and give it a permanent home. Hopefully I’ll be updating it next week when the new iPhones are announced.

Now if I can just find a minute to update my circuit board wallpaper for iOS 7…

Creating Worlds

By now, if you read my blog with any regularity, you know that I made a game for the iPhone called Terrella that we released a couple weeks back. And you also know this was my first real attempt to make a game. I learned a bunch of stuff creating Terrella and one of the first things I learned was that designing and testing levels was going to take forever if I had to rebuild the app every time I made a change. The solution was to create a “world description” file and add support for opening these files from within the app itself. So I’d work on a level, save it to Dropbox, open it in Terrella, play test, repeat.

This functionality is still in the game. This means you could create your own levels if you knew the format of the world description files. It just so happens that you can find that information in this repo on github. User created levels are not in any way a first class feature of the app at this point. They are completely experimental and just a possible direction I left open to myself for future development. To make it really easy I’d need to make a level editor available (the one I made for myself is an embarrassment and also contains some features that I can’t make public), and I’d probably need to add some sort of level validation to the app. And maybe some central location where people can submit their levels and a way to rate them? That could be cool.

Whether or not I push forward with a level editor and work to make user levels a first class feature is dependent on time and interest. I’m pretty low on the former, especially given the response to the game so far. We’ll see what happens. If you have any thoughts, please let me know.

Gaming the App Store

I just finished up another 360|iDev, which was fantastic as always. One of the topics that came up several times, as it has since the App Store has been a thing, was discoverability on the App Store. Or more specifically the lack thereof. There seemed to also be some disagreement whether Apple could or should address the problem. Many people seemed to be of the opinion that the App Store’s purpose is simply a means to install / update apps which is does pretty well, and the app discovery problem should be solved elsewhere. Not sure I agree entirely, but everyone seems to agree that discoverability is hard and it would be great if someone somewhere made this better.

Well I have an idea. Actually I had this idea some time ago and started to put pieces of it together before realizing that I’m out of my element and set it aside. But hey maybe somewhere has the resources to do something like what I had imagined so I’ll leave it here for your consideration.

What if there were a site that created a sort of stock trading game where the “stock” represented shares in an app? Each app would receive some ticker symbol and the price would be determined by a combination of the same principles of supply and demand that drive the real stock market, plus the app’s actual performance in the app store. I’m thinking the price would actually be heavily weighed towards store performance in hopes that it would make it a little harder to game the system. There are a ton of details to work out, but that’s the basic gist. Personally I think it could be fun, but more importantly make it easier to discover apps based on merit and not necessarily on the size of their marketing budget.

A couple ways you could discover new apps would be:

Biggest gainers

Actually I might be helpful if Apple added this. I’m not talking about the overall top paid/free charts but those that have seen the biggest jumps (or declines) recently. This and the ability to filter by category, time period, etc. Would be handy.

Top traders

Those that are consistently able to spot those diamonds in the rough should also end up with the most valuable portfolios. By following these traders you should be able to more quickly discover those apps that are likely to be worthwhile. The only worry would be a sort of Warren Buffet effect where one trader’s influence effects everyone else’s and their predictions become self-fulfilling prophecies. But assuming that they continue to pick quality apps I can’t really say that’s a horrible thing.

Would this be fun? And could you prevent the gamers from gaming the game? I think it could be just as fun to explore and watch as it would be to play. It’s probably a site that I could waste ridiculous amounts of time on if done well. As for abuse, anyone with enough determination could surely figure out how to do that. To counter that, in addition to weighting the store performance most heavily when calculating the price, there could also be reputation system in place that would allow visitors to filter cheaters out of the Top traders list.

Okay so like I said, there’s a lot of hand waving over the details here, but it’s a starting point. As always, I’d love to get your thoughts on this. Or maybe something like this exists or has been tried and I missed it? Let me know!