TumbleOn Code

We’ve open sourced a variety of IOS Utilities and published them to our tumbleon-utils project over on bitbucket.

All code is licensed with the Apache license, which like BSD or MIT, is a non-viral non-complicated license.

Utilities included in tumbleon-utils:

  • FileUtil – file IO and filename related utilities
  • FrameUtils & UIView+FrameUtils – simplifies CGRect frame operations
  • OperationManager – fixed capacity operation queue with weak or strong target pointers
  • PrimitiveWrappers – simple classes wrapping a mutable primitive value
  • TableViewHelper – simplifies UITableViewDelegate implementation
  • TouchDelegatorView – UIView that delegates all touch events (and long press gestures) to a delegate
  • UIWebView+Clean – simplifies UIWebView cleanup before deallocation
  • WeakWrapper – simple wrapper class with a weak pointer to the inner object

Thus far, we’ve released about half of the code we currently intend to release there, with even more surely coming in the future.

Our product, TumbleOn, is the #1 paid Tumblr client for IOS.

TumbleOn would have required a significantly more work and time investment had there not been great open source libraries out there to help us accomplish our goals. We have an extensive list and links to libraries we use and highly recommend over on our tumbleon-utils page.

We hope your project will benefit from some of the utilities we’ve put together over the past couple of years, as well as the great libraries we link to.

Making objective-c blocks synchronous

Many IOS libraries require you to do things asynchronously. Some of the better libraries provide both asynchronous and synchronous models to work with, but some do not.

IOS’ ALAssetLibrary is a good example of a library providing only asynchronous processing. The ALAssetLibrary allows you to fetch images, videos, and the like from a user’s camera roll, and you’re required to work with things in blocks, using a forced asynchronous method. In most cases, you’ll want asynchronous processing when working with the ALAssetLibrary, but sometimes that may be overkill.

If you want to synchronously reason about a series of assets in the library, you’ll want to wrap the async block mess in something synchronous. For example, in my case, I wanted to synchronously check if asset URLS previously stored are still valid.

OmegaDelta’s How to wait for iOS methods with completion-blocks to finish shows you how to synchronously reason with ALAssetLibrary, or any other asynchronous block for that matter.

I’ve wrapped OmegaDelta’s example into a utility method that suits my specific use case in a utility called AssetURLChecker.

View or Download the AssetURLChecker utility code.

You can use this example code to easily wrap any asynchronous call into something synchronous, for simplified reasoning.

Careful though, synchronous code will not be as performant as asynchronous code, be sure you know what trade-off you’re making for your simplification.

App store rejection for immediate crash

One of the apps I work on, TumbleOn, had a new version of the app rejected during review because it “crashed immediately”.

The troublesome part with the rejection was, we couldn’t reproduce it. Every device we could find and hook up to xcode would run the app beautifully.

If you’re experiencing a similar problem, the problem doesn’t show up when your app is being installed from the run menu of xcode. The crash only occurs when the archived .ipa file is dropped on to the device via xcode’s organizer.

In our case the fix to this problem was to update from xcode 4.3.x to 4.4. We found some threads on stack overflow saying this may be related to arc migration (something we had done), specifically something about armv6 and armv7 compiler settings in the project.

However, after fixing the problem and doing an svn diff on our project’s files, we found no such change to any project properties by our xcode 4.4 upgrade.

So, in summary, just upgrade to 4.4, that may fix your problem.

Idea to iPhone Product, App Promotion

In my last post (Idea to iPhone Product, The Last Mile), I covered the ins and outs of pushing the final build of your application to the app store. That process will take anywhere from 1 to 2 months. That downtime will be a great timeframe to start up your promotional phase, if you haven’t already.

I strongly recommend that you pick up a copy of the The Business of iPhone and iPad App Development: Making and Marketing Apps that Succeed book by Dave Wooldridge and Michael Schneider. The book contains a wealth of beginners information on branding, marketing, and the like.

The book recommends different ways to get what you want from marketing: interest. It’s easy to put your app out there and spam your friends, family, and the whole wide world on Facebook, Twitter, and so on. It’s easy to build great feedback mechanisms into your app that encourage users to contact you, tweet about your app, share your app with others via e-mail, and review your app. What’s not so easy is getting traction.

Most successful software products are not an instant/over-night success, and app promotion is kind of gambling situation, so the easiest way to gain traction is to improve the odds in your favor as much as possible. That is, you want to promote your app in as many ways as possible. Really marketing the app takes time and dedication.

At a bare minimum, I would recommend that you create a website for your application. Go register for a nice domain name for your app and/or company on godaddy, and find yourself a web host such as dreamhost. Then create a website, from scratch if you prefer, or better yet, build something beautiful easily with a great CMS like wordpress.

Next, make it easy for users to contact you. Users are less likely to give your app bad reviews if they can easily figure out how to contact you from within the app itself, so setup a support email address and build easy feedback functionality into your app. When your users email you to suggest features or report a bug, email them back as soon as possible with a personal message thanking them for reaching out to you. Fix the bugs fast, and email the user back when the update ships, again letting them know how valuable their input has been toward making your product better.

Next, make a video of your application, and link to it from your website, app description on the app store, and app’s help screen. This 1 or 2 minute video will be the major selling opportunity for your app to potential buyers and reviewers.

With the website, email, and video in place, your next step is to promote the app by submitting it to websites that review applications. Prepare a press release detailing what your app is, how it’s better than the competition, and provide links to your website, your app video, and your app’s app store listing. Mention in your press release that promo codes are available upon request for lesser known websites, and go ahead and give promo codes to the big sites.

Promo codes are codes your users can use on the app store to get a free copy of your application. You can obtain them through the iTunes Connect website. You only get 50 promo codes per app version, and each promo code expires in 28 days, so be prepared to provide larger sites with another promo code later if/when your app makes it through their long list of apps to consider for review.

Don’t forget to give promo codes to your friends, family, and beta testers. Tell your fellow developers, designers, friends of friends, etc about the app and always give the promo codes away freely. The network effect of one person enjoying and talking about your app to their friends is worth more than $1.50 in app royalties that you may get if your friend pays.

The next level of free/easy promotion is the social networks. Open social network accounts on Facebook, Twitter, and so on. Make a Facebook page for your company and/or App, and make a company twitter account. Search twitter for people having problems with a competitors app or for people looking for an app like yours, and directly tweet to them about your offering. If the user expresses interest, give them a promo code so they can have your app for free (and, hopefully, tell their friends and family about it).

Finally, if you have the funds, you should consider paid advertising avenues. Look into google adwords, or advertising opportunities on community websites for your target audience. There are a few magazines with an iPhone/mobile focus, these are also great advertising mediums.

Promoting the app beyond these easy steps will be time consuming, be sure to keep touch with app review websites each time you release a new update or feature for your app, and continue to find other ways to promote your app and get the word out.

With the right promotional avenues in place, your app should be set up for success. Success may come quickly, or perhaps slowly, or maybe not at all. What’s important is that you make your app’s information easily available and accessible for your next customer to find.

In the next article in this series, I’ll cover a wealth of resources for iPhone and iPad development and app promotion.

Idea to iPhone Product, The Last Mile

In the last post in this series, Idea to iPhone product, a brief howto, I covered the basic information you’ll need to get from a basic idea to a 1.0 product ready for app store submission. This post covers the “last mile” from the 1.0 build to your app being listed in the app store.

Simply put, you’ll need to do the following:

  1. Form a business.
  2. Create a business bank account.
  3. Create your apple developer account.
  4. Upload your app.
  5. Promote the app.

Each of these steps from 1.0 to “go” will take a bit of time, so prepare yourself to hurry up and wait.

Step 0: Get a Lawyer, And A Tax Guy

Before you start down the path to starting your business and figuring out how you think taxation will work for you, do yourself a favor and find a real lawyer and a real tax guy.

You can save a bit of money by educating yourself before you meet with the lawyer and the CPA, but books, friends, and even this article are no substitute for a professional’s advice.

Step 1: Forming A Business

You can make a Sole Proprietorship, a Limited Liability Company, a Corporation, or a variety of in-between type business structures.

You may consider a Sole Proprietorship if you’re alone in your business, but beware that that type of business structure makes you personally liable for issues with the business. If the business goes bankrupt or gets sued, your personal assets are up for grabs, even personal assets totally unrelated to the business such as savings, houses, cars, etc..

Limited Liability Company business structures are a step above Sole Proprietorship in terms of liability. An LLC make sense if you’re worried about personal liability, or if you have a few business partners going in on the business with you.

Finally, a Corporation is a business structure in a wholly different league above LLC. There’s a bit more paperwork, formal meetings, and hurdles with a Corp than an LLC, but if you want to have stock or eventually sell the company, a corp looks better than an LLC, or so I’ve heard.

Choosing your business structure will be difficult without doing some research. I highly recommend the Form Your LLC book by Anthony Mancuso (an Attorney). The book helps you understand the difference between Sole/LLC/Corp and greatly simplifies the LLC formation process for you.

No matter which business structure you go with, you’re going to do some or all of the following:

  1. Write up some organizational contractual papers.
  2. Get your contractual papers notarized (Apple may demand this later..).
  3. File some paperwork with the state to form the business.
  4. File some tax paperwork with the state.
  5. Pay the state fees for the formation. ($300 in Texas for LLC).
  6. Sign up for a FEIN (Federal tax identification number).

You may not be required to do all of those steps. For example with an LLC you’re not necessarily required to write up contractual organizational papers and have them notarized, but if you don’t, your company will be subject to state law defaults should any court case arise.

You also may be able to get away with using your SSN instead of signing up for a FEIN, but it feels a bit safer to be giving various companys a FEIN rather than your personal SSN when you can.

Forming your business is not a one-shot deal, once you’ve formed the business you’re going to be required to behave like a business should. You will need to keep capital account ledgers, write down plans and meeting minutes, comply with any federal and state tax legislation that a business must fulfill, and more. That LLC book, Form Your LLC, covers these topics in detail for LLCs.

Furthermore, you’ll need to hang on to any and all paperwork associated with the business, such as forms you received from the state, and so on. Banks and Apple will want you to email copies of those things later.

Step 2: Acquiring A Business Bank Account

After the state has acknowledged formation of your new business, you’ll be able to open a bank account. An important rule of thumb for businesses is to keep business funds separate from personal funds. This simplifies accounting on your part, and is simply a basic rule of running a legitimate business.

The establishment and type of account you’ll sign up for will depend on your needs. For our LLC, my pocket sized giraffe partners and I did a bit of research. First, we discussed what we wanted and needed from a bank..

Our basic criteria for our bank account were the following:

  1. We needed a FDIC insured bank.
  2. We needed a checking account with a debit card to pay Apple and others.
  3. We did not need or want any savings, credit, or investment accounts.
  4. We wanted online banking, as well as brick and mortar stores (because our personal banks charge way too much to wire-transfer to online-only banks).
  5. We wanted to minimize banking fees.

We found that Bank Of America suited our needs, though Wells Fargo was almost identical in its offerings. With BOA, we have a business checking account with zero fees as long as we have more than $3,000 in the account. The account came with a debit card, free online banking, FDIC insurance, and everything else we wanted.

Signing up for the account online was easy. We filled in personal info for our LLC members (including names, addresses, and SSNs), as well as info about our newly formed business. A few days later the bank emailed us asking for faxed copies of various bits of LLC formation paperwork. Then we were asked to agree to various terms & conditions contracts online like you have with any banking account. Then, a week or two later, our debit card came in the mail.

One non-obvious thing we noticed with BOA was that you’re not automatically enrolled in online banking for your new bank account. When you login to see how your account status is going, you’ll see some vague instructions about seeing a link to sign up for online banking. The non-obvious bit is, that link is a few pages away from where you are. Click around through the menu system on the top part of the page until you find a page that has a link that mentions online banking (but doesn’t really sound like “sign up for online banking!”).

Step 3: Creating the Developer Account

In Idea to iPhone product, a brief how-to, I recommended that you create a throw-away personal developer account to get your product on test hardware. Assuming you did that, it’s now time to fork over another $100 for the legitimate business developer account.

Signing up for the business developer account will be as easy/tedious as the bank account was. You’ll create the new account, and fill in most of the same information the bank account asked about the business and members. Then Apple will instruct you to fax them most of the same documents you faxed to the bank (make sure Organizational contracts not filed with the state are notarized). A week or more will pass, and someone from Apple will get back to you on the phone to let you know the account is open or ask you for more paperwork/information.

Step 4: Uploading Your App

After your developer account is open, you’ll create an iTunes Connect account. This is created via the Developer Portal, by clicking around until you find it (I think you click IOS Developer, then it’s on the right somewhere..).

The iTunes Connect account may be the part where you send Apple paperwork and wait for a while, rather than the developer account, I can’t recall 🙂

Anyway, once you have the iTunes Connect account, you’ll want to login there and enter your bank account information on the “Payments and Financial Reports” page, so Apple can pay you.

Next, you’ll create the app information and prep for upload. This is a little confusing the first time around, so here’s the basics:

  1. Review the Apple App Store Review Guidelines and the HIG, make sure your app doesnt break anything that will get it rejected.
  2. Create test accounts for the Apple reviewer/tester if your app uses online accounts in any way.
  3. Go to the IOS Dev Center, click “IOS Provisioning Portal” on the right.
  4. Click “App Ids” on the left, and create the basic information/keys for your application. Various docs on the Provisioning Portal will guide you through these steps. You’ll generate crypto keys on your box, upload them, download different keys, import them, and so on for several steps. At some point the App Id for your application will be ready for the iTunes Connect steps..
  5. Login to iTunes Connect, and create your application using the App ID information you created earlier in the Provisioning Portal. Here, you’ll fill in various bits of application info such as title, urls, description, test account info, and screenshots. Then, when you’re ready, you’ll mark the application as “Ready for Binary Upload”.
  6. Open your project in XCode, and edit the various settings required for upload, archive, and upload the app using the XCode 4 organizer. Apple docs on this process are currently out of date, you should follow this amazing step by step tutorial instead: Creating and Uploading a distribution build with XCode 4.
  7. Wait for a week (or however long average review times seem to be taking), while your app makes its way through the review queue.
  8. Fix anything Apple rejects your app for. Rinse, wash, repeat
  9. Publish your app, and celebrate!

Step 5: Promoting Your App

While you’re waiting through the month or two delay of waiting on bank accounts, Apple accounts, and app reviews, you’ll have plenty of time to come up with brand and marketing strategies.

I’ll cover application marketing options in the next article in this series.