Using an App Analytics service? You are violating Apple’s developer agreement

I’ve been looking into third-party app analytics services such as Mopapp and appFigures for a while now. There’s something that worries me about these services, though: they ask for your Apple ID and password.

Wait, what? Are you sure this is a good idea? Am I even allowed to give out this information? I’m not sure, so I decided to check. And here it is, straight from the horse’s mouth – Section 1 of Apple’s developer agreement (emphasis mine):

 The Apple ID and password you use to login as a Registered Apple Developer cannot be shared in any way or with any one. You are responsible for maintaining the confidentiality of your Apple ID and password and for any activity in connection with your account.

That seems pretty cut-and-dry. Sharing your login information is a violation of the agreement. So what’s the deal? Is it only ‘sharing’ if I give my login info to a person? Do we simply ignore the issue because these third-party analytics services are so useful?

Considering that you can get banned from the app store for violating the developer agreement, this seems like a pretty serious matter. Granted, fraud might be a completely different level of violation than sharing your login info, but given Apple’s history of somewhat arbitrary decisions, I’m not sure that I want to risk it.

What do you think?

iOS App Postmortems – Gym Calculator

Gym Calculator is now available on the app store.

This will be a rather short postmortem as it’s such a small application. But don’t worry, I have some things in the pipeline that will warrant much longer ones…


Gym Calculator is an app that does the math for you when you are at the gym. It lets you quickly add up your plates to figure out how much weight you are doing. You can also give it a target weight, and it will tell you exactly what plates to put on the bar to achieve it.

Development Time:

~7 hours.

Review Time (time spent in the iOS app submission queue):

9 days.

New technologies I learned and used:

There wasn’t anything particularly new here. I guess the most notable new ‘technology’ was that Gym Calculator was the first app I created from the ground up with the 4″ iPhone in mind.


The main challenges were not implementation issues, but small-scale design decisions. For example, the app supports conversion between pounds and kilograms, but metric and imperial olympic weight sets are different. Should a 45lb bar convert to a 20.4 kg bar (the mathematical equivalent), or to a 20 kg bar (the real-world equivalent)? I chose the latter.

Future plans:

Aside from bug fixes,  I don’t see too much development happening on Gym Calculator in the future. It’s such a small app that there’s not really too many other things I could do with it.

iOS Quick Tip – “Storyboards are unavailable on iOS 4.3 and prior”

Another day, another bizzare Xcode error.

While working on my newest app, Gym Calculator, I came across a very strange problem. I had initially set my Deployment Target to iOS 4.3. since I didn’t need any fancy new iOS 6 features. However, I couldn’t build, because my project was using Storyboards, which 4.3 doesn’t support. Xcode helpfully gave me the error message

Storyboards are unavailable on iOS 4.3 and prior

Right, no problem then! I’ll just switch to iOS 5 instead. And… same error. Ok, how about a clean and rebuild? Same error. Restart Xcode? Same error.

After some frustration and head-scratching, I stumbled across a long StackOverflow question discussing the problem. The answer that worked for me – hidden in a sea of less useful answers – was C Fraire’s:

The solution that worked for me was just to delete the 
~/Library/Developer/Xcode/DerivedData directory for my project.

So in case anybody else runs into this problem, here’s your solution! (Or at least one potential solution that did the trick for me)

Xcode 4.5 and ‘file is universal (2 slices) but does not contain a(n) armv7s slice’

After firing up Xcode 4.5 for the first time, adding 4″ iPhone support to 20 Rep Squats, and attempting to run it on my device, Xcode gave me a bizzare error:

file is universal (2 slices) but does not contain a(n) armv7s slice: /Users/Marty/Desktop/Projects/20 Rep Squats/libCorePlot-CocoaTouch.a for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)

So, what gives?

It turns out that Xcode 4.5 adds support for the armv7s architecture, as opposed to the standard armv7 architecture. If you are using a library that has not been compiled for armv7s, and your project is set to armv7s, you will get the above error. In my case, it’s the Core Plot library that is throwing the error.

Fixing the problem is simple. You just need to remove armv7s from the list of valid architectures.

-Select your project from the Project Navigator

-Select your target from the list of targets

-Select the build settings tab

-Find the ‘Valid Architectures’ setting. It should say armv7 armv7s.

-Double-click on it to edit it, select armv7s, and press the button.

The Valid Architectures setting should now look like this:

And that’s it! Your code will now compile correctly.