Posts Tagged ‘iPhone’

Moving version control out of Xcode and into Cornerstone

Tuesday, May 26th, 2009

I have been using Xcode’s integrated subversion SCM for several months (against the advice of several articles). Overall, it has been pretty painless. Xcode has a simple set of svn functions, but meets 90% of my needs.  The biggest advantage is the integration within the IDE.  Moreover, if I needed advanced functionality, I could always go to the command line. So, I lived, and loved, with Xcode over the next few months.

I originally decided to try Xcode after some experience with Versions.app, my first SCM experience. Versions is a collaboration between Pico and Sofa. I used Versions during it’s beta. At this time, I was painfully inexperienced with version control. I frequently went back and forth between Versions and Terminal, picking up what I needed along the way.

Eventually, when Versions went 1.0, I made the decision to not purchase it. I could never get Versions to display all of the change logs of a working copy if it hadn’t existed locally since the creation of the repository. As I said, I wasn’t the best with svn at this time. I probably just couldn’t find the control to download the logs from the repository, but it shouldn’t have been that difficult nonetheless. This was something that should have happened “automagically”.  This and a few other quirks didn’t make a good value (for me) over Xcode and the command line.

Flash forward to last week when my repository host, beanstalk, sent a notice they were upgrading all repositories to subversion 1.5. This influenced me to look into upgrading my client side software to use 1.5 as well. At first, I figured I would just patch Xcode to use 1.5, but that seemed unnecessarily complicated. So once again, I decided to try an external solution, but armed with a much better understanding of my work flow and subversion itself.

I downloaded new demos of both Versions and Cornerstone. I had briefly looked at Zennaware‘s offering before, but this time I was able to examine it much more thoroughly. I setup Cornerstone first, and to be honest, I haven’t looked back.

Before I move on, this seems like a good place to get 2 (related) points of contention out of the way: DVCS (Git and Mercurial) and SCM GUIs.

I’ll address my need for a GUI first: I want a seamless and easy way to perform my version control. I already perform enough tasks extraneous to actual programming. I want this part of my workflow to be “point and click”, allowing me to focus more on delivering code.

As far as DVCS: I realize that Git is the new “hotness”. At this time, I operate primarily as a solo shop. Additionally, I now know how to get around svn just fine. For me there is no overwhelming advantage that switching to Git would provide at this time. I am almost never working out of internet range and I don’t collaborate very often. Moreover, there is no “great” GUI for Git yet. I am sure one is eminent, taking in account GitHub as an example of Git’s growth in both marketshare and mindshare.

Back to Cornerstone.

I really like its layout. It matches up extremely well with my “mental” picture version control.

The side bar is split: working copies up top, and repositories on the bottom. This is in contrast to Versions where the repositories are like “folders” and the working copies are subfolders.

voila_capture2

The main window contains a file browser for the selected repository or working copy. When I pressed the space bar, I got a nice surprise: Quick Look. Located along the top of the main window are quick filters for “changed”, “modified”, “unversioned”, etc… These make it super easy to filter a long list of files.

voila_capture5

When you make a commit, Cornerstone automatically asks if you want to begin versioning any files not added to the repository. Sweet.

By clicking a checkbox, you can automatically setup your repository with the default trunk, branches, and tags folders. You can also set ignore files just as easy.

Corenerstone has an entirely different window devoted to file history. Simply select one or more files within the file browser and click the history button. You are then presented with a graphical timeline with a “node” for each past revision. Select any 2 nodes and they are opened for file comparison.

voila_capture6

This presentation does have some drawbacks. Primarily, it just doesn’t scale well. Each file has its own timeline at the top of the window. This works well for a few files, as you can see. View many, though, can be cumbersome. It is possible to view a timeline for just the root folder of the repository which cleans it up a bit, but this wasn’t an immediately obvious solution.

Corenerstone has a decent comaparison engine built into the app. Versions performs its comparisons by using an external app of your choosing. I know many users love this because it enables them to use their favorite comparison tool. Personally, I prefer the speed of Cornerstone’s implementation. With a single click, I can compare any local changes to the latest revision.

When packing a large amount of information in to a GUI, some items will become focal points, while others will move to the periphery. For me, it appears as if commit messages and change sets are presented as second class citizens in this Corenerstone’s UI. They are regulated to a small info pane whose purpose wasn’t readily apparent. Versions, on the other hand, has the change sets and commit messages beautifully laid out in a seperate view.

voila_capture7

I imagine that when I stop working on a 13″ Macbook and have a larger 24″ desktop, it won’t matter so much. This will also allow me to evaluate Cornerstone’s ability to switch froma an all-in-one mode to a multi-window mode, ala Xcode. With a large and/or multi-monitor setup, these issues will likely disappear. My interface complaints are mostly my fault for developing on a contrained consumer laptop.

Speaking of hardware limitations, Cornerstone did not seem to be bothered by the specs of my development machine. Not that you would expect a subversion application to give a modern Mac any such issues. All the same, I haven’t noticed any interface delays, network hangs, excessive disk access, or any other performance problems. This clearly demonstrates the skill, care, and time investment of the developer, who from my understanding operates a single-man shop.

Cornerstone’s interpretation of the svn domain is the most solid out of the apps I have seen (although I admit to not diving as deeply into all other solutions). I am currently running Cornerstone in its demo period and plan to purchase it soon. It has definitely made subversion painless to use while packing a fair amount of power into its interface. If you are seeking a powerful GUI for subversion, Cornerstone is the best you can get.

Game Tutorials

Friday, May 22nd, 2009

In case you’ve been missing out, there are 2 really great tutorial series out in the blogeshere.

First, is an excellent series on cocos2d for the iPhone by Keith Peters at BIT-101:

cocos2d Tutorials – TOC

Second, is an in depth look at at OpenGL ES for the iPhone at Jeff LaMarche’s (of “Beginning iPhone Development” fame) aptly named iPhone Development Blog:

OpenGL ES From the Ground Up, Part 1: Basic Concepts

Enjoy!

My Greatest iPhone Development Resource

Wednesday, May 20th, 2009

Your ability to find, qualify, and digest development information is extremely important. Whether you are a new developer of a seasoned vet, you are always learning. You need to find information fast and effectively.

When you have a question, it is easy to type it into a search engine and find an answer. Sometimes, though, you don’t know what question to ask.

Enter development blogs. A steady stream of information, tips, tricks, tutorials and great open discussion. I subscribe to over 50 feeds from development blogs using Google Reader as my RSS reader of choice.

Besides “doing”, this is the best learning tool I have. I consistently read articles addressing problems I haven’t thought of yet. I find sample code I can stock pile now and use later. The Cocoa community is extremely helpful and talented.

Most developers carry their tedious attention to detail into their blog writing. This leads to infrequent, yet highly polished and information rich posts which are easily scoured in your feed reader.

So, what feeds do I read?

Below is the list of web sites of who I keep in Google Reader (in no particular order).

I’m sure I left out some, so let me know if you have any good blogs that should be on my list.

Cocoa Samurai »

Cocoa Convert »

NotTooBad Blogging »

revetkn.com »

Manton Reece »

71² »

Jayway Team Blog »

toxicsoftware.com »

UI and us »

47 Hats »

Software by Rob »

markjnet »

Joel on Software »

iPhone Development Blog »

inessential.com »

BIT-101 Blog »

Mac Fanatic »

Coding Horror »

Fraser Speirs »

Theobroma Cacao »

Cocoia Blog »

Mac Developer Tips »

iPhone Development »

How to Make iPhone Apps »

Cocoa with Love »

iPhone Developer Tips »

Cocoa Is My Girlfriend »

iphonedevelopmentbits »

iPhone SDK Articles »

iPhone Software Development »

Fiery Robot! »

iCodeBlog »

PrEV »

Trails in the Sand »

Mobile Orchard »

Red Sweater Blog »

NSCoriolisBlog »

Ben’s Dev Blog »

Hot Chocolate »

iApps Development Blog »

memo.tv – iPhone »

Ninth Division LLC »

coders »

Iphone Noob »

shanecrawford.org »

bbum’s weblog-o-mat »

BinaryMethod »

NSBlog »

Pieter Omvlee’s Blog »

Dubroy.com/blog »

Kickingbear »

Degutis.org »

Tech Thought »

Domain of the Bored »

Waffle »

Gus’s weblog, adventures in Flying Meat. »

stevenf.com »

Dave Dribin’s Blog »

Clickable Bliss Blog »

From a remote village »

rentzsch.com: Tales from the Red Shed »

Marc Charbonneau’s Blog »

Call Me Fishmeal. »

Lap Cat Software Blog »

Matt Legend Gemmell »

Michael Tsai’s Weblog »

I found Three20 and my lost weekend

Monday, May 18th, 2009

I’m currently involved in a project where I need to load some photos from the web and I need a UITableview with some thumbnails and with Photo.app navigation.

Enter Three20. Three20 is a framework written by Joe Hewitt that abstracts much of the functionality of UITableViews, UITableViewCells, and networking away from the programmer. The way the components are abstracted is clearly MVC, but done in a more “web application” way. I believe Joe commented in his recent interview on the Mobile Orchard podcast.

When you download Three20, there is a nice sample app included with just about everything you can create. This provides a great overview of what is included within the framework.

The functionality of the UIKit classes has been abstracted to the point that you never really touch the usual delegate and datasource methods. You create view and controller objects through a completely different programmatic interface.

You can create tableviews and photo galleries very easily by just adding creating a data source array and the view classes basically take care of themselves. This was very cleanly done. For instance, to determine the type of cell that will appear in your table, you populate your datasource with a specific type of *Field object. A TTTextTableField produces a text cell, a TTSwitchTableField yields a cell with a switch, etc…

To create a Photo Browser View and/or a Photo Thumb View is slightly more difficult. You will need to define your own Photo Datasource class. In the example code, there is a mock photosource class setup that provides a good starting framework.

Unfortunately, the requirements for my current project didn’t allow me to use the Three20 classes as is. I had to dig a little deeper into the framework and modify it to suit my needs.

When you dive into the code, you quickly find all the Cocoa classes have not been merely subclassed, but have had there behaviors completely altered. I could use the basic, high-level classes, but I could not understand exactly how they worked behind the scenes. I needed to subclass the TTThumbViewController and I had to understand what I needed change to make it work for me.

To be frank, it is complicated. So complicated, I considered giving up subclassing it several times during my adventure. As I began to decipher the interconnections and roles of different objects, some design patterns began to fall out. An interesting note is Three20′s use of delegates. There are many delegates and controllers and controller delegates and datasource delegates, etc…  This was one of the main reasons it was hard for me to fully comprehend the framework. I literally had to pull a notebook out and start drawing the connections between the classes.

After a few hours,  I felt I had a decent understanding of the underpinnings of the relevant classes which I needed to alter. I began to make my construct my classes and finally accomplished my goal of customizing the thumbs view to the following:

Thumbs Table View

I know, not very impressive on the surface. What I managed to do was add section support to the TTThumbsViewController. The stock class only supports a single section with no division between the rows of photos. Also, it only supports one photo source per view. I have changed it to allow a photo source per section (Even though it looks like one source, it’s actually 2 sources with the same data).

It’s not bug free yet, and [redacted] betas are a little picky. When I get a little more solid, I’ll see if I can get a fork going on GitHub and upload my additions there.

In the end, I think it was worth getting intimate with Three20 to get all of the networking and photo browsing goodness for free.

I encourage everyone to check out Three20. It works great for just about anything you want to do. If it was my decision, I would have just changed my design to accommodate the framework and save myself a weekend.

Let me know if any of you have used Three20 and what your experiences were.

Meet your personal research assistant, Stack Overflow.

Friday, May 15th, 2009

If you have any Cocoa touch or Objective-C questions, don’t just limit yourself to Apple’s Dev Forums. There is a thriving community of Cocoa developers on Stack Overflow at your disposal.

You will find a variety of questions from novice to advanced. Stack Overflow has a policy of “no stupid questions”. Which means you won’t get attacked for asking a “easy” question. Jeff Atwood and Joel Spolsky stated on their podcast (which is also phenomenal by the way) that they want to be like a programming “Wikipedia”. That is why the like and encourage all levels of questions.

Go to Stack Overflow and start posting, commenting, browsing, and, of course, as answering many questions as you can.

Uh Oh, A Tough App Store Mistake

Friday, May 15th, 2009

I learned this lesson the hard a way few weeks ago…

http://majicjungle.com/blog/?p=115

If you submit an update to iTunes Connect, do NOT change the available date of the update to a future time. It will remove the current version from the App Store.

I did this because I wanted to make sure my update didn’t get buried in the new releases list. Instead, my app Compounds, was delisted AND removed from the “New and Notable” section for the larger part of a day before I noticed.

After I got it re-listed, I immediately checked the New and Notable section to find that Compounds was not back in its place. I understandably panicked, but was more than relieved when it was back the next day. I estimate about a 70% loss in sales fo the day, however.

To make sure you get the best placement for your update:
The day your update passes review, simply log into ITC and change it’s available date to today. This will ensure that you’re app will be near the top of the new releases list.

Lesson learned.

Cash Rules Everything Around Me… Tracking My iPhone Benjamins

Monday, May 11th, 2009

As indy developers, we need to track our finances. Most of us can’t afford to staff an accounting department, so we look for software to fill the gap.

We need to track cash from sales of iPhone apps and/or iPhone contracting. I assume most of those reading my blog need both. (Side note: if you’re not in the iPhone contracting market, get there, another article…)

We have many contenders fighting for mindshare, loyalty, and sales, from the big boys to the indys. So how do we decide? What is important to us as iPhone developers, software vendors, and contractors?

Like good little programmers, we’ll logically split our problem into bite size pieces.  Here is what we need:

  1. Invoicing
  2. Job Tracking
  3. Project Tracking
  4. Bank Transaction Download or Import
  5. Double Entry Accounting (for tax purposes)

When I say project management, I don’t actually mean how we as developers track our project progress (scrum, agile, issue trackers, etc…). I am referring to a means to group jobs and invoices under a common “umbrella”, not only by customer.

It would seem to me, and to most of the financial software venders that we have three distinct problem sets. The products I have been demoing specialize in a some combination of invoicing, accounting, and/or banking.

This separation of responsibility leads to an additional requirement: exporting and importing data between apps.

I won’t be doing full blown reviews, there are many available on the interwebs written by better reviewers than I. Instead, I will give a quick impression, some key points, and links.

Without further adieu, a look at the products:

Invoicing, Accounting, and Banking

Quickbooks

Lets get the elephant out of the room first. For me, Intuit’s offering is overkill. It does everything, with all the flair a professional accountant could ask for. As developers in the digital age, we are not tracking inventory and tend to have few employees and a little office overhead. Our needs are small and I don’t feel such comprehensive tool is required for most ISVs.

AccountEdge

MYOB has two relevant products. AccountEdge is poised to compete with Quickbooks. Suffice to say, it is not exactly on my radar.

FirstEdge

MYOB’s slimmed down, small business oriented product is much closer to what I am looking for in an accounting app. If you are looking for a solid accounting app with more features than you will ever need, while remaining as simple and Mac like as possible, look no further. FirstEdge gets high marks from the usual review sites. It’s not as complicated as AccountEdge or Quickbooks, but it’s still very “formal” in the way it handles your data. I know many consider this a feature, but with my limited knowledge of accounting, I think we can go even leaner.

Money

This app by Jumsoft is really nice. It has that familiar iTunes / Mail.app feel. It’s a nice one window interface with a sidebar used for selecting and presenting relevant data. It has decent reporting as well.

It has a template editor for invoices to make you look more professional. One strange quirk of Money is splitting invoice templates between “Styles” and “Layouts”. Styles are non-editable preloaded templates and Layouts are templates you can edit. The downside? You can’t use Money’s professional Styles as a starting point for your own templates. Just weird.

Importing bank data is also not automatic. It does include a “Web Bank” option which launches your bank’s website (in Webkit) within the app, but when I tried downloading transactions this way, it didn’t work. This may have something to do with the Safari 4 beta or not. Bank connectivity is a definite sticking point in an otherwise great app.

Accounting & Banking

iBank

Sure it has a cliché OS X name, but it is a great app. It is similar to Money, minus invoices, plus direct bank downloads. Additionally, IGG Software built in automatic connectivity with their Accounting/Invoice app, iBiz.  This is a great selling point.

IGG  has positioned iBank as accounting and banking with iBiz handling invoicing (with a bit of Accounts Receivable). This puts your Accounts Receivable (money coming in) within a separate app from your actual bank accounts and Accounts Payable (bills). This presents an interesting division of responsibility some may like and some may not. A downside is it may be a few more steps to see your total financial picture.

You can, however, create an asset account representing Accounts Receivable in iBank to which you can then transfer your invoices from iBiz. This works, but is slightly clunky. First my invoices sometime are imported as a withdrawal, instead of a deposit. This seems odd so I may be doing something wrong here. Second, moving a transaction from Accounts Receivable to a real account (on payment) is not automatic. I have to add the transaction to the bank (or download) and then deduct the amount in Accounts Receivable. As you can see from all of my words, this is not the workflow that IGG intended and is involves much extra work.

Invoicing

A note: there are many invoicing apps available for OS X. I probably missed some, or just didn’t include them.

iBiz

I’ll cover this first to keep it close to iBank. As I mentioned briefly, iBiz is attempting a bit of double duty. It has full Accounts Receivable capabilities. It can track open invoices, and send payments to iBank. This workflow is pretty nice. I think the interface is a little lacking, especially standing next iBank, but it isn’t the worst I’ve seen. Also it has reporting, but it’s not dead simple an maybe expects iBank to perform the “heavy lifting”.

It has an invoice editor, but invoices are created using HTML. My job revolves around coding, I really don’t want to mucking around in HTML just to make an invoice. I really feel that any invoice editor should be WYSISWG. iBiz’s users aren’t necessarily coders. I have to think overly complex template editing alienates some potential users.

Profit Train (formerly Billable)

A great, dead simple, invoicing app. It doesn’t waste a single button or window. It allows you to have multiple businesses that you can invoice from. More importantly, switching from one to another is scary easy. It also tracks expenses, and you can bill clients for expenses. Profit Train is still in beta and not feature complete, so I can’t be give a definitive ruling as of yet. Even in beta, Profit Train is extremely solid, with what I feel is the best interface of all of the invoicing apps.

Billings

Market Circle has a great app that many swear by. It clearly divides the interface between work and billing. I think this is good, but I don’t quite like the implementation of slips. They seem needlessly complex. Not that I am saying reduce the functionality of slips, it’s just that the default slip UI should be simple. Billings does allow you to group slips by project and invoice multiple slips. Billings also has many, many reports. Another great plus is that Billings will soon launch a companion iPhone app. Billings also has one of the best invoice designers. Billings also has export ability, but I did not test it.

GrandTotal

GrandTotal is an interesting entry. It fills most of my invoicing requirements and has export capability. It’s interface is pretty nice, but something is a slightly off. I think the structure has layout has something great going for it, but just needs some polish. Not “bling”, which it uses effectively, just some shuffling around of controls. The invoice editor/designer is good, probably second to Billings. GrandTotal has a free iPhone companion app with MobileMe syncing. This is a solid all around pick.

On The Job

Another solid pick. Very simple, very Mac like. I think it has a great invoice designer except for the fact there is no “save”. Don’t mess up, because all changes are permanent! I think the straightforward thought interface goes a long way in this app. It’s hard to write much more about it, you just have to use it to understand what it brings to the table.

Involver, Invoices, Invoice, etc..

I’m not delving into these products for one reason or another. Most do somethings well, but may be unpolished or don’t differentiate themselves from the pack.

SAAS

I’m not really evaluating these, I don’t see a need to keep this data in the cloud. However these are viable options with many in the link provided.

(Long) Conclusion

Overall, I find that none of the solutions are ideal. I’m sure that this is most view their accounting software. I am probably being a little picky and will likely be told so in the comments, but I don’t think I am being too demanding. However, I am self-aware enough to realize I am a UI snob which is heavily infuences my software decision.

I applaud the developers of all these products for creating complex software that is expected to perform perfectly or it is deemed a failure. Customers have (understandably) high expectations when it comes to safeguarding their financial data. With that said, I think that small business accounting and invoicing apps are still going through major maturation.  As a Mac user, you and I have insist on a great user experience. Couple that with the complexity that is accounting, and it gives these developers a tough UI problem to solve. I think several of these apps are on a great trajectory with a lot of room for growth and polish.

So what will I do?

Well, I’ll have to settle on an invoicing app soon. I can’t keep bouncing back and forth.

I like the simplicity of Profit Train, but want to see it in it’s 1.0 (really 2.0) form.

On The Job has much of the simplicity of Profit Train, with a WYSISYG invoice editor.

GrandTotal is solid. It’s a little crashy (Safari 4 beta problems, I believe), but it has promise.

Billings has everything the above three do, a better invoice template editor, but a a lesser UI.

For a one stop shop, I think Money is really close. I want this to be the app. It just seems so odd not have automatic transaction downloads in 2009.

I’ll have to pick one of the above invoicing apps and hope I can export my data to an accounting application I select in the future.

In conclusion, I  have a lot of thinking to do… (And most likely a second post).

After your considerable time investment in reading this post:

Don’t forget to tell us what you use!

iPhone code snippet: Phone number formatter

Thursday, May 7th, 2009

If you have had to create a text field for a user to enter a phone number, you may have had to do this yourself.

If not, this snippet may save you 15 minutes. Set the keyboard type to phone pad and add these 2 methods to the delegate of your text field. This code does rely on a UITextField category method: fullRange. You can implement this yourself, it just returns an NSRange representing the entire string.

- (BOOL)textField:(UITextField *)textField shouldChangeCharactersInRange:(NSRange)range replacementString:(NSString *)string{

    NSMutableString *localText;

    if(range.length>0){

        localText = [[textField text] mutableCopy];

        NSRange deletionRange = [localText fullRange];
        deletionRange.location = ([localText length]-1);
        deletionRange.length = 1;
        [localText deleteCharactersInRange:deletionRange];

        phoneNumber.text = localText;
        [localText release];

    } else if([[textField text] length]<13){

        if([[textField text] length]>0){

            localText = [[textField text] mutableCopy];

            [localText replaceOccurrencesOfString:openParentheses withString:@"" options:NSCaseInsensitiveSearch range:[localText fullRange]];
            [localText replaceOccurrencesOfString:closeParentheses withString:@"" options:NSCaseInsensitiveSearch range:[localText fullRange]];
            [localText replaceOccurrencesOfString:dash withString:@"" options:NSCaseInsensitiveSearch range:[localText fullRange]];

            [localText appendString:string];
            self.phoneNumberString = [[localText copy] autorelease];

            [localText insertString:openParentheses atIndex:0];

            if([localText length]>3)
                [localText insertString:closeParentheses atIndex:4];

            if([localText length]>7)
                [localText insertString:dash atIndex:8];

        } else{

            localText = [openParentheses mutableCopy];
            [localText appendString:string];

        }

        phoneNumber.text = localText;
        [localText release];

    }

    return NO;

}

- (BOOL)textFieldShouldClear:(UITextField *)textField{

    phoneNumber.text = @"";
    return NO;
}

What’s on your home screen?

Saturday, May 2nd, 2009

As an iPhone developer, you need quick access to many tools.  Your iPhone is your “Swiss Army Knife”, providing the information you need, when you need it. The home screen holds your most useful and frequently used apps.

What tools are most important to you?

Here is a quick looksy at my home screen:

img_0059

In the Dock: Nothing special here, I have alternated Remember the Milk and Things Touch down here. I am currently deciding on my task management workflow, and will probably move the iPod back out when I make a decision. In the mean time, iPod has made a comeback. I find myself listening to many, many podcasts

Top Row: I like having my camera and photos handy. I use maps about every 5 minutes and weather almost daily (I like AccuWeather the best).

2nd Row: My internet row. These are the things I am using the most online. I think Google is a little better in the app that in Safari, but it’s debatable.

3rd Row: Gettin’ social. This is how I stay connected. I still use Twitterriffic (free) for my main Twitter app, but I am looking at going for Tweetie (I’m loving the desktop version) and Birdhouse when I get a little more active. Since I started blogging, I constantly use the WordPress app. The Facebook app has made me ever so slightly more active in Facebook land.

Bottom Row: On this row I track my vital stats, Analytics App (Google Analytics) , Mint for my money, and App Sales for more money. Last is Notes, which I use a lot. This may change when I get my task management in order.

So, what are you packing?

Does your app have a chance to make it in the App Store Top 100?

Friday, May 1st, 2009

Data from several sources has shown that just being in the top 100, and to a greater extent, the top 50 accelerates app sales. The list is a self supporting mechanism, rewarding those that make it.

So, how can you make it in?

That’s not exactly an easy question, nor are all cases the same. I swear I’m not trying to get out of the answer! What I can do is go over some data and see if it can give you and me any advantages.

I have been tracking the sales of Compounds comparative to it’s ranking within the Productivity category. Additionally, I have also been probing other categories to give me some insight into how our app sales measure up.

My first discovery was that the gaming and entertainment are by far the best selling categories. This isn’t exactly news, but it is relevant to figuring out how well you app must perform within it’s category to reach the top 100.

Here is Compounds’ ranking changed with sales:

Rev vs Sales

Compounds achieved it’s highest ranking on Sunday, Apr 19, when it reached the number 3 spot in Productivity. Unfortunately, this was NOT enough to make it in to the Top 100. It was close: the number 1 and 2 app in productivity are both in the Top 100. Even more, the previous number 3 app, was briefly in the Top 100.

For perspective: In the Entertainment category, the 11th ranked app can be found within the Top 100. An even crazier comparison is with the Games category.  The 63rd ranked game is just barely in the Top 100.

All these facts confirm what we already know, games and entertainment apps sell, a lot. If you release a productivity app, you are not going for the gold rush, you are going for a steady yet consistent climb. At least that’s what you should be thinking.

Productivity is a long term investment, with long term users. Some top selling entertainment apps won’t produce any revenue next month, but many productivity apps will still be chugging along. Each strategy has it’s merits and pitfalls. You must to decide what your goals are.

Now, back to the top 100, what can you do to make it in?

Here are some ideas that have I’ve read, came up with, heard, or just dreamed. Take what you will.

  1. Get noticed! Pick something and have an interesting take. Sure it may have been done before, but you can explore a different metaphor. Stand out.
  2. Get noticed, by Apple! Ahh, the easiest way. Well, not really. But if you follow my previous advice, you’ll have a fighting chance.
  3. Get noticed, again! Your icon is your face on the App Store and you need to give it the same treatment as your code. I recommend getting it designed. If you can’t, go to iStock Photo and learn some photoshop.
  4. Frequent updates. Get your releases out often to drive some sales. You’ll get a brief moment on the front of your app’s category page. Additionally, (more importantly) it looks good to potential customers to see frequent updates.
  5. Demos. Give them to any website or person that will have them. You need to do a lot of leg work, maybe more than you did to write your app.
  6. Review sites. Try and hit the big boys, but even a little buzz will land you some traffic.
  7. Get a real website. You need to pimp your app elsewhere, not just on the App Store.  To a customer: A solid website = A solid app.
  8. Do some research. Know the other apps you with who you will compete. How many reviews do they have? What’s there ranking? It may not e worth it ot enter the space without a great idea. You’ll need to look at data and make an informed guess.

You might not make it to the Top 100 with these strategies, but you don’t need to. Many apps make a respectable, stable income without ever sniffing the top 100.  If you a apply the concepts above, you can’t go wrong. You will have a rock solid app with more of a marketing strategy than 80% of the apps available.