360iDev Conference – Day 2


March 3rd – Day 2

360iDevBreakfast – Oatmeal, muffins, and fruits.

Session 1: Azeem Ansar – 30,000,000 Downloads – Data-Driven Insights into iPhone Application Distribution

Azeem Ansar is from Pinch Media. Pinch Media provides developers with an analytics library to monitor app usage – unique users, sessions, usage time, etc. Since the AppStore launch they have also been collecting every bit of detail possible from the AppStore, rankings, price changes, you name it. They then ty it back to their analysis.

Discussion Topics:

How do I get ranked? – Get in the App Store, getting ranked = more exposure = more downloads. There are multiple lists for top 100, 25, 20 by categroy. These list change every 24 hours, 3 days, and 5 days. Currently, to maximize change of ranking, assume within 24 hours. If you are in the top 100 list, you get an average of 2.3x the users that see your app.Greater gains result from appearing in the top 25 and top 10 lists. These top lists are not permanent. You don’t want to get over exposure, but you need exposure to be successful. Azeem went over three different case studies of how changing price can affects different application downloads. Holiday’s where good for Apple, downloads increased 200%. For free apps, to be in the Top 100 you need 1,000 a month and for the Top 25, you need about 10,000 a day. This is all dependent of the category.

Do I have a recurring user base? – You have an app and a million download, now what? You need to examine the use of your app by your users. For Free or Paid apps, usually 100% return users do not return to the app for reuse. For free apps, 20% users with reuse the app withing 20 days. For paid app, 30% will return to the app for reuse within 20 days. Long-term, 1% of total downloads use the average application on any given day. Entertainment app usually last better for long-term usage. Sports app are better for short term usage.

How long are they using my app? – For overall apps, day 0, users are using the apps for 7 minutes. By day 60, users use the app for about 4 minutes. Paid apps usually get about 1 minute more time used. Games by far get used more than other categories, about an average of 10 minutes. Entertainment are used the second most, average of 5 minutes. Lifestyle category apps are the most consistent at 4 minutes straight average.

So should I give it away or not? – For the top free applications, advertising is an option. The biggest advertiser for apps is AdMob. The ideal strategy is to release paid, install analytics, understand your audience, and then make an informed decision about advertising. Different parties make different claims on advertising CPMs, but in the current ad market, this is difficult to achieve. On average an app needs to achieve a $7.78 CPM for an app that would normally be sold for $0.99. Advertising isn’t always a bad idea through. Some applications, generally, ones catering to people with money, can command better advertising rates than normal.

Contact: azeem@pinchmedia.com (215-837-3447)

Web Site: http://www.pinchmedia.com/
Demo: http://demo.pinchmedia.com/
Developer: http://developer.pinchmedia.com/

Session 2: Tim Burke – Deep Geek Diving into the iPhone OS and Frameworks

Tim wrote the software called Nu (http://programming.nu/), which is another library used for calling into framework library. He used the libdl framework. He also wrote multiple other applications. One app is Obama! Tim also created a Facebook app called My iPhone, an app used to show other users what applications you have on your phone. It can also be used to promote your app.

Tim discussed the topics around Jail Breaking your iPhone. His main point was that if you want to truly understand the OS framework, you will want to jail break your iPhone. He discussed how the jail break process works and where to download the software. One concept is that there are two users for the iPhone OS, the root user and the mobile user. Each of these users have unique access. If we use the official iPhone SDK, your application will be running as the mobile user, aka the limited user of the two.

sqlite is, of course, the built in database used on the iPhone. All developers should learn the sqlite command line and how sqlite works, it’s strengths and weaknesses.

otool is another tool that developers should use to read header files and/or disassemble applications. classDump is a tool that creates header files.

Objective-C is now open source from Apple.

A good book to read: Programming in Objective-C 2.0

He also created Open Radar, which is a community of people that can submit their ticket with Apple’s Radar (bug ticketing tool), and the community can discuss and see the status of the ticket. If you do not use this service, only you (the first person that created the radar ticket) will be able to see the status of the ticket. Anyone else reporting the same issue will have their tickets marked as a duplicate and you will never get to see the status of the original ticket created. The community website was created to resolve this issue for Apple, or until Apple opens radar more.

Contact: (twitter timburks)
Web Site: http://www.tootsweet.com/ or http://blog.neontology.com/
Presentation: http://www.slideshare.net/timburks/deep-geek-diving

Lunch Session – Round Table pizza and sodas

Session 3: Jeff LaMarche – Using SQLitePersistentObjects: Getting the Advantage of SQLite Without Writing SQL

Project Source Download: http://code.google.com/p/sqlitepersistentobjects/

Wouldn’t it be nice if Objective-C data objects just knew how to save and load themselves, just like Core Data? It’d be nice if you could just call “save” and trust that your object would save itself properly somewhere, and that when you wanted to load it back in, you could just call a class method to retrieve the object or objects you wanted?

What does it do?

It lets you create Objective-C classes that know how to persist themselves into a SQLite database. Not only that, but it completely hides the implementation details from you – you do not need to create the database, create the tables, or do anything else except work with your ojbects. you simply subclass SQLitePersistentObject and create Objective-C 2.0 properties for every data element you want persisted. When you create an instance of this object and send it the save message, it will get saved into the database.

How does it work?

Every subclass of SQLitePersistentObject gets its own table in the database. Every property that’s not a collection class (NSDictionary, NSArray, NSSet or mutable variants) will get persisted into a column in the database. Properties that are pointers to other objects that are also subclasses of SQLitePersistentObject will get stored as a reference to the right row in that object’s corresponding table. Collection classes gets stored as child tables, and are capable of storing either a foreign key reference (when the object they hold is a subclass of SQLitePersistentObject) or in a field on the child table.
Can all properties be stored?

No. But most can. This currently does not support properties that are c-strings, void pointers, structs, or unions. All scalars (ints, floats, etc) get saved into appropriate fields. When it comes to Cocoa objects, any class that conforms to NSCoding can be stored in a column. It is also possible to provide support for specific classes by adding a category on the class you wish to support that tells the system how to store and retrieve that object from a column’s data. There are provided categories for NSDate, NSString, NSData, NSMutableData, NSNumber, and (of course) NSObject. Creating new ones to let other objects be persisted is relatively easy – just look at one of the included categories and implement the same methods. The methods are documented in NSObject-SQLitePersistence.h.

Classes that don’t have direct support (the ones listed above or any that you add), will use NSObject’s persistence mechanism, which archives the object into a BLOB using an NSKeyedArchiver. This is inefficient for some objects because you can’t search or compare on these fields, but at least most object can be persisted. Some classes like NSImage, this method actually works quite well and there’s probably no reason to add a specific category.

Can I create indexes?

You just need to override a class method and then implement it. +(NSArray *)indices;

You should return an NSArray of NSArrays. Each array contained in the returned array represents one index, and should contain the name of the properties to build the index on. Use the property names – although, in some cases, the names are changed, this method should return the actual property names, not the database column names.

Contact: jeff_lamarche@mac.com (twitter: jeff_lamarche)
Web Site: http://iphonedevelopment.blogspot.com/
Presentation: Key Notes

Session 4: Collin Donnell – Using the Addressbook

There are two main frameworks for the AddressBook, which are AddressBook and AddressBookUI. Collin walked use through multiple code examples and definitions of the methods for the AddressBook(UI) frameworks.

Four basic data types: Address Book, Records, Single value properties, and Multi-value properties.

Using the AddressBook framework, you will having use CF coding. Using AddressBookUI is much easier and makes your app look exactly like the Apple address book app views.

Probably the most confusing part about the AddressBook is multi-value properties. This is because the AddressBook is the only place these are used. This is mutable and immutable mutli-value properties.

Contact: collindonnell@mac.com (twitter: collindonnell) – Sacramento Native…
Phone: 707-303-6357
App: FollowUp

Session 5: Scott Michaels – Lessons from the Trenches, Porting

Scott is the Vice President of Atimi which is a Vancouver bases company that ports applications to a mobile platform. They port almost any type of app from almost any platform, to any mobile device.

The first part about porting is to evaluate what libraries you have and want can be used on Mac. Can you reuse these libraries or do you have rewrite the libraries? What iPhone does not have (java, flash, animation libraries, Open GL)? What iPhone does have (server side components, Mac framework, helpers suck as Unity 3D, the Playfirst SDL, MapNinja, and many more projects)?  Incomplete frameworks or performance issues can be deal breakers for porting your app. You should evaluate your code, by using Instruments and/or Clang. Keep in mind that there are limitations. You have to know what you can and can’t do within your app. Also, if there are workarounds to the limitations, make sure you plan for them.

Common Mistakes – Outdated graphics or sounds, shake for the sake of shake, not capturing metrics, not prepping for App reviews.

Interruptions on mobile devices – Calls, SMS, and App Notifications, Test on Actual Phones, Saving states, Notification Server Good Citizen, Prepping for bad press.

Apple Push Notification Service – It’s coming… You need to be able to adapt to these notification. This looks to be a dangerous issue for some apps. Make sure you always shutdown your application correctly and that you follow Apples programming practices.

Testing – Make sure you test in the simulator, check for memory leaks, and test on all valid SDK versions. Try not to always code (compile) on the newest version but make sure you app works on the newest version.

Contact: scott@atimi.com

Evening Events – Meet and greet with attendees and vendors. Food, drinks, and entertainment (Rockband 2 or Guitar Hero III) supplied.

,

  1. No comments yet.

You must be logged in to post a comment.