Pass the lubricant as we're getting fucked by Apple too

Stories of developers being absolutely bent over the barrel and fucked hard aren’t new, but I’ve got no other recourse so I’m throwing Blunder Move‘s story into the ring. What makes our story different? I’m lucky enough to personally know people at the iTunes store. People who actually work at Apple that I drink beers with. I’m guessing most iPhone developers are in a different boat, but it doesn’t matter (just look at the Facebook app, which was featured in an iPhone commercial, taking 10+ days to get approved) that I know people there. At least Apple are equal opportunity ass fuckers.

A couple of months ago we released Chess Wars, which allows you to play your Facebook friends via Facebook Connect on your iPhone. When it was released we found a few show stopping bugs that neither us nor Apple found which kept new users from playing the game. Whoops. We pushed 1.1 a few weeks later only to find that there were problems for other new users. Again none of this was caught by us or Apple. As they say, shit happens. We quickly put together a release and submitted it to Apple about 6 weeks ago.

Silence.

Finally, after weeks of waiting I did what I’d tried hard to avoid at all cost; I contacted the friends I knew at Apple who told me to email the submitters. Canned response.

So here, like so many other iPhone developers, we sit getting ass raped on 1-star reviews, which will haunt our application forever, and no recourse. None. Nobody at Apple will respond to us. My friends at Apple can’t do anything. I can’t respond to the 1-star reviews.

To our users affected by this, I’m truly sorry. There’s absolutely nothing I can do about your horrible user experience and, as a developer who loves his users, nothing pains me more.

To Apple, please kindly extend the world class customer service I’m so accustomed to as an Apple fanboy to your developers.

UPDATE: A lot of the feedback around this post has centered around us getting what we deserved for shipping buggy code. I should mention we have about 50 beta testers and over 200 unit tests for this specific application so it’s not like we’re not testing. The two bugs were show stoppers for cases we didn’t think to test, but nonetheless affect most of our new users.

Secondly, we did hear back from Apple. They said they were rejecting the application because our in-game chat looked too much like Apple’s SMS application. I’ve asked if we changed our chat bubbles to look like Facebooks if we’d be allowed in. Our contact at Apple is going to be getting back to me soon.

What pisses me off most about this, and what I conveyed to our contact at Apple, was that it took a widely publicized profanity laced blog post to get their attention. I asked, specifically, why it took weeks to get such a simple response of “Hey, change the chat and we’re good.” back. To Apple’s credit they said I deserved an answer to that question and are looking into it.

UPDATE: Just got off the phone with Apple while I was writing this blog post and they told me, no joke, that the chat bubbles are, in fact, trademarked. Furthermore, they suggested I could, among other suggestions make them “less shiny.”

I wonder if they consider Facebook to be infringing on their trademark.

Chess Wars is live in the App Store

It’s taken a long time to get here, but the first version of Chess Wars is live in the App Store. It’s a bit awkward, but the general story is that Crash Corp was started to make these games, but switched gears when Matt Galligan and I teamed up to seek funding for other, more interesting, games. As a result, Blunder Move was born.

Chess Wars allows you to play your Facebook friends in chess using Facebook Connect. Here’s a list of features for Chess Wars:

  • No signup process. Simply log in with your Facebook account using Facebook Connect.
  • Play against your Facebook friends! Send challenges and invite your friends to play against you.
  • Works over WiFi, EDGE, or 3G. Play using your iPhone or iPod Touch.
  • A little rusty at Chess? Don’t worry it highlights potential moves when you select a piece.
  • Play and keep track of dozens of games with our simple inbox. Games are organized by game state (e.g. My Turn, Their Turn, New Challenges, etc.).
  • Our in-game chat system allows you to taunt your friends easily. Everyone loves rubbing a good move in!
  • Get notified on Facebook when a friend makes a move or sends you a chat message.
  • Scroll back through move history easily.

If you have any questions please don’t hesitate to contact us with your issues. We’ve got a lot of plans for next versions and will be releasing checkers and reversi next.

Changing your artist name in iTunes Connect

The short story is it’s not possible to change your artist name in iTunes Connect. The longer story is that, when you sign up for an iPhone developer account, you enter in your artist name and, likely, forget all about it. That is, until your app goes live in the App Store and you notice “I dunno” is what your app is listed under.

What makes this so frustrating is that there is absolutely no way to find out what your artist name is. It’s not shown in any of the certificates nor it’s not shown in iTunes Connect. Sure, your copyright holder, company name, etc. are all viewable, but that very important artist name, which your application actually gets listed under? Nope.

Luckily, I didn’t have to contact Apple through normal channels, which I hear takes 4 – 6 weeks to get a change done, but I did find plenty of things to be annoyed about.

  • You cannot preview your application in the App Store without actually publishing it into the App Store.
  • Your artist name is not listed anywhere in iTunes Connect so you cannot verify any changes.
  • You cannot view the status of a case number anywhere. You have no way of passively viewing the status of your case. You have to email them to find out if it’s closed or not.

Apple could easily fix all of these with very little effort. In fact, they offer a preview of what your applications will look like when you sign up, but not after you’ve submitted apps. I’d like to see three things:

  • The list of your applications in iTunes Connect should be switched to look exactly like they would be listed in iTunes.
  • In the applications overview it should show the artist name (even if I’m not allowed to edit it I should at least be able to see it).
  • Allow me to see a simple overview of any pending cases I have. Just something like a case number, when it was opened, and status (e.g. “In Review”, “Not Assigned”, “Waiting on Developer”, “Closed”).

Add this to the long list of things Apple should fix in iTunes Connect and the App Store for developers.

Jailbreak + SIM Unlock + Tethering + MMS on iPhone 3G w/ iPhone OS 3.0

!!!WARNING!!! The following post will very likely void your warranty and, quite possibly, completely break your phone. DO NOT DO THIS UNLESS YOU KNOW WHAT YOU’RE DOING!

I recently purchased an iPhone 3G for my upcoming trip to Europe with the express purpose of SIM unlocking it. Moving forward this will be my travel phone. When I get back I plan on purchasing an iPhone 3GS to use here in the US. Specifically, I ended up doing the following:

  1. Jailbreaking the phone with redsn0w.
  2. Doing a SIM unlock with ultrasn0w.
  3. Enabling the tethering option.
  4. Entering the appropriate settings for MMS.

Jailbreaking

The very first thing you need to do is install redsn0w. This was exceptionally easy to do. If you don’t have the IPSW file you need check out this post for download links for both the iPhone and iPhone 3G. Please note that none of this works on the newly released iPhone 3GS.

Gotcha: One thing I will note here is that I had problems updating Cydia. After rooting around a bit I found out that installing both Cydia and Icy can cause problems so don’t check the Icy box when running redsn0w. Interestingly enough, when I did another jailbreak with redsn0w, without checking Icy, it left Icy installed and fixed my Cydia problems.

SIM Unlock

The SIM unlock was super easy. You can find a great overview here. all  The basic instructions are as follows:

  1. Load up Cydia
  2. Add http://repo666.ultrasn0w.com as a source.
  3. Update your sources.
  4. Search for ultrasn0w.
  5. Install ultrasn0w.
  6. Reboot.

Tethering

All you have to do for tethering is go to http://help.benm.at/help.php and follow the instructions. This will enable the tethering menu under Settings > General > Network. After that pair your phone and your computer go to the Bluetooth menu on your computer go down to your iPhone 3G’s name and select “Connect to Network”. After this your iPhone should have a blue notification at the top indicating that tethering is on and working.

After I got tethering working speed tests were showing 1065 kbps downstream and about 200 kbps upstream. To me, it felt a bit snappier than my Verizon EVDO. Since I have a MiFi I don’t plan on using this often, but it’s nice to know it’s there.

MMS

Supposedly everything I need to have MMS working is enabled on my iPhone, but I can’t seem to actually send or receive an MMS. I assume there’s something I need to enable on my iPhone’s plan, but there was something curious about this that I’ll mention for others who have to edit their Cellular Data Network settings.

Gotcha: Mine was missing! I had no option under Settings > General > Network for Cellular Data Network. Getting this enabled was, without a doubt, a major pain in the ass. I’ll try and outline how I got it all working. PLEASE NOTE THIS IS FOR ADVANCED NERDS ONLY!

  1. Go into Cydia and enable OpenSSH.
  2. Find your IP address in your WiFi settings.
  3. $ ssh root@196.168.0.22 (Where 192.168.0.22 is the IP address found in Step #2. Use alpine as the password)
  4. $ scp root@192.168.1.135:"/System/Library/Carrier\ Bundles/ATT_US.bundle/carrier.plist" ~/Documents/
  5. You should now have a carrier.plist file in your Documents folder. Create a backup of this in case you break anything.
  6. Open it with Property List Editor (Which apparently only comes with XCode as it’s in Developer > Applications > Utilities).
  7. Under Root add a new sibling called AllowEDGEEditing with a Class of Boolean and set it to True.
  8. Under Root add a new sibling called IsMMSUserEditable with a Class of Boolean and set it to True. (You can check out a screenshot of what mine looked like here).
  9. Save your changes with File > Save.
  10. $ scp ~/Documents/carrier.plist root@192.168.1.135:"/System/Library/Carrier\ Bundles/ATT_US.bundle/carrier.plist"
  11. Go to Settings > General > Network > Cellular Data Network and edit your MMS settings according to http://help.benm.at/help.php.

Despite all of this I can’t seem to receive any MMS from friends nor do I see any MMS features exposed in the iPhone OS 3.0 UI at all. If anyone has any insights into this please let me know. I included this portion, mainly, to help anyone else with a missing Cellular Data Network panel.

UPDATE: Evidently, there’s an application in Cydia named APN Editing that will enable this for you without having to do crazy hacking.

Conclusion

That’s about it. My phone now works on any carrier, has VIM and a terminal application, supports OpenSSH, allows me to tether my MacBook Pro to it and, theoretically, allows MMS. This should make my Europe trip a lot more palatable. The following is a list of links I used to piece together this post and my iPhone hacks:

iPhone Tech Talk, San Francisco

Today I’m at the iPhone Tech Talk in San Francisco, CA today. The goal of the iPhone Tech Talk is to teach developers the differences and quirks of developing web applications for the iPhone version of Safari.

  • iPhone ignores all CSS screen types besides @media (e.g. @media { p.foo { text-weight: bold; } }). Sorry, that’s referred to as a “media query”, which appears to be CSS namespaces.
  • 10MB limit for text (HTML, JavaScript and CSS). 8MB for TIFF, PNG and GIF, 32MB for JPEG and 2MB for animated GIF’s.
  • 5 second limit on JavaScript execution.
  • window.open() and target="_new" open new windows with an 8 window max. Interestingly, you can open 8 windows, but they might get paged out of memory, which means that when the user switches back Safari will need to refresh this screen.
  • alert(), confirm() and prompt() all work fine (and look quite nice)
  • iPhone doesn’t support showModalDialog() or print()
  • Natively supports Excel spreadsheets, PDF’s, Word documens (YMMV), TXT and QuickTime audio and video. Does not support Java, SVG or Flash. Interestingly enough, it does support the <canvas> element.
  • Obviously, it doesn’t support a file system so people can’t download files to the phone.
  • Window sized to 980 x 1091 and then scaled to fit 320 (I assume 480 if in landscape). They treat .mobi domains differently; they’re not scaled. They scale it down immediately to fit 320/480.
  • Use <meta name="viewport" content="width=320" /> if you want fine grained control. Other options include initial-scale (1 is the default), minimum-scale, maximum-scale (which limits zooming in and out) and user-scalable (yes/no allows/prevents zooming).
  • Override text scaling with -webkit-text-size-adjust:none (other values include auto, which is the default and percentages).
  • You don’t get hover styles, but do get mouse events (click, etc.). Remember to leave room for a finger (Daniel Burka mentioned this in his notes about designing the Digg iPhone application).
  • Remember to box content for fingers. They look at the box text is in when doing intelligent zooming. For instance do <div><p>some text</p><p>some more text</p></div> will double tap nicely.
  • They send click, mousedown, mouseup, mousewheel (and one I just missed). Also, blur, focus, load, unload, reset, submit, change, and abor. You can’t call blur or focus, but they are called when it happens. You just can’t explicitly blur or focus because they don’t want a lot of jumping around going on when you’re working on a small device.
  • EDGE 70-135 Kbit/sec and bursts up to 200Kbit/sec, while WiFi is 802.11b/g and goes up to 54 Mbit/sec. YMMV will vary of course.
    • Send compressed content as the iPhone supports it.
    • Match image size to <img> height and width and minimize image use altogether if possible (e.g. use CSS and <canvas> if possible). Use CSS border, border-radius or Cavnas.
    • Use QuickTime reference movies (e.g. pull one move for WiFi and another movie for EDGE).
  • Do not redirect automatically to an iPhone specific site.
  • When creating applications use familiar layouts. They have familiar patterns on the developer website.
  • Use familiar animations.
  • Leverage existing libraries; iUi (by Joe Hewitt, which we used the prototype of for the Digg iPhone application), YUI, dojo and prototype.
  • Integrate with the built-in apps when possible.
    • Any maps.google.com URL loads the built-in Maps application.
    • You can explicitly use href="tel:+1 (800) 555-1212" to launch the telephone application.
    • Of course the mailto:foo@example.com?subject=subject+here&body=my+message. Also supports “cc”.
  • Use -webkit-border-radius: 8px to get the native rounded record border listings you see elsewhere.
  • Interesting that they use onclick events on the li‘s (which have that -webkit-border-radius on them) instead of an anchor tag.
  • Hide the address bar with window.scrollTo(0,1).
  • Go to bugreporter.apple.com to report iPhone bugs. Do you guys provide any information on when you’ll fix a bug or add a feature? “Um, no.” (Duh)
  • Interaction design tips
    • The mouse does not equal the finger. You don’t have multiple buttons, scroll wheels, etc. There’s no hover, rollover, scroll bars, etc.
    • Avoid an entirely interactive website; minimize animation, avoid distracting the user from the primary task, avoid hiding functionality behind rollovers.
    • Don’t require users to enter information; before something useful happens or something valuable happens.
    • Prevent zooming and constrain to vertical scrolling only.
    • Minimize text entry; use lists, pickers and use cookies for user information and where users where the last time they used the application.
  • Optimize for bandwidth; design light-weight pages, minimize the use of large graphics.
  • Optimize for user’s time; keep things clean, use standard iPhone paradigms, get users to primary content as quickly as possible.
  • Oohhhh “Managing Content and Synced Data for iPhone”. My interest? It be piqued. Leveraging current content on iPhone, producing iPhone friendly video and managing portable user data.
    • *sigh* This hs pretty much nothing to do with managing any kind of data as one might expect. I was hoping for something about Google Gears maybe or accesing content on the phone? No idea, but something more interesting than this. Instead I’ve been reading about a guy who got 10 years for selling grow lamps.