Today is the Seattle iPhone developer talk event. I'm headed for the ferry in a few minutes and figured I would give the Wordpress iPhone app a try. I'll update this post as I have time today.
Well, it was a long day! I used twitter a bit, but didn't have a chance for any longer updates here. Here are my impressions and short notes from the sessions
I attended. I attended 4 presentations: UI Design Essentials, Adding In App Purchase, Core Data, Testing and debugging and Networking.
All the talks were packed with good information. The speakers were of varying levels of energy. This means that it was sometimes hard to concentrate on the material because the speaker was a bit boring.
UI Design Essentials - Your icon is your business card and it will make or break the success of your app. Most users buy with their phones (this surprised me, I buy with iTunes) so all they see is your icon and the name of your app in their search results. The brain processes shapes and colors first, then texture and smaller details. This means your icon should have distinctive colors and a clear outline, not a complicated and cluttered design. You should be using sound in your app. People respond instinctually to sounds, they make your app more polished. You should support landscape mode. Studies show that those under 35 prefer two thumb landscape and those over prefer single finger typing. Read the Human Interface Guideline doc. It will tell you how to design an excellent User Interface. Too many people haven't read it, or have only skimmed it. (This could be said for most of Apple's documents, they have a huge amount of useful information available if people would only take advantage of it).
In App Purchase - This talk mostly covered the steps needed to enable and test purchases in your app. You can setup test itunes accounts to use to test the buying process. There are 3 types of purchases: Consumables, non-Consumables and subscriptions. It is up to you to track subscription information and expiration. You should give uses the option of restoring everything they have bought, for cases where they are setting up a new (ie. replacement) phone. Consumables are not restored. In App Purchase is a game changer. No more need for supporting 2 versions of an app.
Working With Core Data - This is the one where I almost fell asleep. Being right after lunch (Ham sandwich, potato salad, chips and an Apple) probably didn't help. Core Data is backed by SQLite. Don't put blobs in the db, the file system is much better at handling that. Normalized vs. denormalized. If you aren't careful you can end up with some messy tables. Table schema is private, no direct access, unless you want to break it. Core Data can batch results to save memory. Returns a NSArray looking object that will return more objects as you iterate through it but really only holds X in memory at one time.
Testing and Debugging - Covered how to add Logical and App Unit Testing with Xcode. Support is built in, but setup of the in-app one was a bit convoluted so I'll have to look it up. Static analysis using clang is awesome. Built into Xcode, uses the UI to show you how it came to its conclusions. Suggested that a new build target be created with it turned on since it does take longer than a normal build (and doesn't really need to be run every time). I was surprised it didn't cover Instruments. Covered ad-hoc distribution for beta testers, building and distributing the executable and provisioning profile. Also stressed the importance of saving the executable and dsym someplace safe -- when you get a crash report you must have the exact binary and debug symbols the user is running. It isn't enough to just rebuild them, so zip them up and stuff them into source control.
Networking - Covered 'normal' networking first. Use the highest level classes unless absolutely necessary -- you will end up writing unneeded code otherwise. Don't use threaded synchronous functions, use delegates instead. Covered Bonjour, registering a bonjour name, browsing for services on the LAN. Don't setup the discovered services when you find them, it is a waste of time and can slow things down dramatically. Wait until the user picks the device+service they want to connect to. Covered GameKit. Works with WiFi and BT, unless you are using PeerPicker, which only works with BT right now. Supports peer to peer voice chat, example source is still in the works. Lots of new and updated networking example code is available.
Overall I found the conference to be useful and informative. I would have liked them to have Q&A but the speakers always ran out of time. The environment was different than the open source conferences I have attended (LFNW, OSCON). There was no interaction with the audience, and very little interaction within the audience. At LFNW especially you have a lot of feedback in the audience, both with questions asked and questions answered by other attendees.
I was actually expecting the content to be a bit more over my head (I do not consider myself an ObjC expert), but I found it all to be understandable and accessible, but not too simplistic. I think Apple has done a good job of targeting the middle road of iPhone developers. There were a few times when I felt like the speaker was talking down a bit, but it likely was only because of the potential mixture of experience present.