7 Ways to Improve Your iOS App Today

Note: this post was originally written a few years ago, and some things may have changed since then.

There’s nothing more exciting than publishing your app to the App Store for the first time. Finally, after slaving away for months, it’s finally time to share your vision with the world.

The very first app I ever published to the App Store was a very, very simple project for myself, back in 2009 or so. You know how drivers at the airport hold up those signs with the name of the person they’re picking up? Well, I thought it’d be cool to do something similar as an iPad app. And my big innovation was that I wanted to make the text wrap to multiple lines AND be as large as possible. At the time, Apple’s basic label component had auto-sizing or multiline capabilities, but they wouldn’t work together. So I had to write some code to progressively increase the font size and calculate whether it would fit wrapped to multiple lines at that size, until it was as large as possible.

That’s it. That was the whole app.

I had a friend design me a logo and I released it for either $0.99 or $1.99, I can’t remember. And people actually bought it! I made maybe $500 over the years from that app. Pretty crazy, considering it was just a fun little project that I spent a few hours on.

At any rate, I was really excited to see my app live in the App Store, and in the years since then, I’ve helped dozens of startups and organizations experience that same excitement by helping them design, develop, and launch their apps.

But one mistake I see over and over, including from myself way back when I released SignPad, is failing to properly account for the ongoing maintenance, support, and improvements that every app requires. I think many founders assume that the initial development of the app is the most difficult part.


Or at least, hopefully wrong. Because hopefully you built an MVP with a very minimal set of features, and hopefully your app does well enough that you need to support and maintain it in the long run.

Depending on the app, you might spend as much on maintenance over two or three years as you spent on initial development. But even if you don’t spend that much, you WILL need to update your app to maintain compatibility with new versions of iOS and new devices from Apple, to fix critical bugs and issues, to address user feedback, and to update libraries, SDKs, and APIs that your app depends on to keep running smoothly.

For example, I built v1 of SignPad when only the very first iPad had been released, so there was no Retina screens. Once the Retina iPads were released, I had to update the app with higher resolution graphics. I also addressed a few bugs (yes, even my very simple app had bugs), added the ability to customize fonts and colors, and added some performance enhancements.

Now, I don’t mean to suggest that every improvement to your app will be time-consuming, difficult, and expensive. Sometimes there are some pretty easy tweaks that you can add that will give you outsized returns.

In this article, I’m going to give you 7 things that you or your developers can do in about a day to make your app substantially better.

You may have already done some of these, of course. If so, congratulations, you’re doing well!

Now, a word of warning: some of these items are technical and you won’t be able to tackle them without at least a basic knowledge of Xcode, Swift or Objective-C, and how to submit App Store updates. For those items, just forward this article to your developer and get an idea for how long it will take.

If you don’t have a developer, or if they’re busy with other things, you may be able to hire me to do it for you. I offer very affordable one-time and monthly maintenance plans where I’ll do these items and a lot more for your app so you never have to worry.

Optimize your App Store listing

Let’s start off with an easy one: making your App Store listing perform better. Now, App Store optimization (ASO) is an entire huge category in itself, so we won’t be able to tackle everything here, but I’d like to give you at least a few pointers that you can implement right now.

We have two goals with ASO:

  1. Get more people to see our app
  2. Convince them to download it

You can accomplish the first part by making sure that when people search for apps in our niche, ours is one of the ones that pops up. App Store search is how the majority of apps are found and installed by users.

This means that it’s critical that you get your app listing optimized for search rankings within the App Store. Unfortunately, Apple offers us little insight or control into how their search and ranking algorithms work, but there are a few things you can do to improve your chances of being seen.

1) Get more people to see our app

Add a keyword to your title

Assuming you have a primary keyword that you’re going to target, add it to the title of your app in the App Store. You should also try and pick a title that’s short enough that your title keyword will be visible to the user when they’re browsing the search results.

Next, you want to edit the keywords field to add all the other keywords you came up with in your research. Now hopefully when people search for things related to your app, you’ll pop up higher in the results.

Pick the right categories

Apple lets you select a primary and secondary category for your app, and this can have a big effect on your rankings. [IS THAT TRUE?]

2) Convince people looking at our app to download it

Once someone is looking at your app listing, you have a few different fields that you can tweak for maximum effect.


First of all, you have the screenshots of course. Now, don’t feel like these have to be standard screenshots. If you have the design chops, these can be a great place to show smaller versions of your key screens with some explanatory text below them, highlighting the key features.

But if you don’t have a designer, it’s fine to just use screenshots of the key parts of the app. I would recommend you try and use all the slots for screenshots.

You also have the option to upload a video of your app, and I’d encourage you to do this, particularly for apps that are hard to show off with just screenshots, due to very interactive features or critical animations, etc.


Next up is the description. You can make this quite long, but be aware that only the first few lines are visible by default unless the user hits “more”, which many won’t. So don’t waste a bunch of time on build up, make your first two sentences the number one selling point of your app, the thing that makes it different or better. Then delve into more detail later.

It’s fine to try and squeeze in some extra keywords into your description, just don’t go overboard to where it starts to sound like spam or something. It needs to flow and sound natural, no matter what keywords you use.

What’s New

Finally, something else I don’t see enough developers taking advantage of is properly using the “What’s New” area as a tool to market the app to potential users. The section is shown right below the description on the app listing on a user’s phone, with about the same amount of space, and it’s a great place to put additional info.

The info is taken from the release notes that you provide to Apple whenever you submit an updated version of your app, so you need to of course cover whatever’s new, but try and do it in a way that would make potential user’s more excited about the app.

For example, let’s say you have a tea timer app and you submit an update with a bunch of bug fixes and performance items, as well as some new features. The absolute worst thing you could do would be something like this:

  • Bug fix for timer sometimes pausing for a few seconds before sounding
  • Improved UX for managing preferences
  • Added compatibility for accessibility settings
  • Improved graphics for iPhone 6+ and iPhone 6s+
  • Added ability to easily time black, white, green, and oolong teas with one tap

You put the best new feature at the very end, and making things worse, only a few lines will show in the store, so most users will never even see that last line. Instead try something like this:

  • You asked and we delivered! You can now easily set a timer for all different kinds of tea, with just a single tap. We have buttons for white, green, black, and oolong tea. We think you’ll love this!
  • We improved the graphics on iPhone 6+ and iPhone 6s+. It looks even more amazing now!
  • Improved UX for managing preferences
  • Added compatibility for accessibility settings
  • Bug fix for timer sometimes pausing for a few seconds before sounding

Whatever your wording, put your most exciting updates and new features at the top, and be excited about them!


One other huge driver of conversions is the number and quality of your reviews. However, that’s important enough that we’re going to cover it in its own item below.

Setup Cocoapods to manage your dependencies

OK, now that we’ve gotten the App Store listing nicely optimized, it’s time for some technical work. Now, I would guess that if you’re reading this, you already have Cocoapods, Carthage, or the Swift Package Manager setup for your app, but if not, you really need to do it right now.

For maximum compatibility, I’m going to use Cocoapods here. If you have a strong opinion that Carthage or the Swift Package Manager is a better fit, you probably don’t need this guide.

In case you’re not familiar with Cocoapods:

Cocoapods is a dependency manager for Swift and Objective-C Cocoa projects. It has over ten thousand libraries and can help you scale your projects elegantly.

What does that mean? Well, most apps are made of a mix of open source code and custom code written by the app developer. It depends on the app of course, but a typical app might rely on one or two dozen different open source libraries for its functionality. Cocoapods makes it exceedingly easy to add many of those open source libraries to your project so you can start using them throughout your code.

I include this here because most of the rest of the tips I’m going to give you rely on external libraries, all of which have Cocoapods support. So if you have Cocoapods all setup, you can just add a line to your Podfile for each of the libraries I mention later in this article, run pod install on the command line, and those libraries will be available to be used in your project.

Technical integration details: So how hard is it to switch to Cocoapods? Well, you don’t have to “switch”, technically; you can just keep doing what you’re doing for your existing libraries and add new ones via Cocoapods. But it’d be better to switch everything over and shouldn’t be hard, unless you or your developers have been naughty and modified the open source code for libraries used in your app.

Here’s how to switch all of your dependencies over:

  1. First, you’ll need to install Cocoapods
  2. Next, go through your project and find any third-party libraries or tools. For each one, check to see if there’s a pod available. If so, note the version that you are using in your project (which can be tough to find in some cases), and remove the git submodule reference or delete the files from your project if they were added directly.
  3. Then create your Podfile, add the library to it, and run pod install.
  4. From here on, make sure to open the Xcode Workspace that Cocoapods generates for you, not the Xcode Project file.
  5. Repeat steps 2 and 3 for each library, making sure the project builds successfully at each step.

You can find a lot more detail here.

Improve your user onboarding experience

It would be ideal if every app was so well-designed and intuitive that you would never need any hints or directions for the user, but until that day comes, most apps need a simple way to teach the user the basics of the app and get them up and running as quickly as possible.

There are some really fancy, cool animated tutorials and walkthroughs out there, but these can be tricky to create and maintain, and require a deeper integration for your codebase. That’s outside of the scope of this guide.

Fortunately, almost every app can still be substantially improved by the addition of a simple tutorial flow after signup that just consists of a few images that you can swipe through to understand how things work.

There are a bunch of libraries for these onboarding slide shows, but I’d recommend Onboard by Mike Amaral. With your images and just a few lines of code, you can have something that looks like great.

As for where the images come from, you should definitely get your designer to whip you up 2-4 images that show the main functions of your app (but not more than 4!). If you don’t have a designer, you can still do a version yourself by taking a screenshot of the different screens in your app that you want to highlight and then opening those screenshots in your favorite image editor to add text and arrows. It’s OK if it’s a little rough around the edges 🙂

You can also do a background movie for all of your slides, and I’d recommend trying this if you can. You’d probably need a designer to make the individual slide images work well against a background movie, but it’s a very cool effect for users. You can find some great free background movies here.

Technical integration notes: Onboard works with either Swift or Objective-C, and you can add to your project with Cocoapods by just adding pod 'Onboard' to your Podfile. You’ll need just a line or two of code to setup each screen of your walkthrough, and then a few lines to display the whole thing after your signup flow is complete.

Get better reviews

The most sure-fire way to get good reviews from users is to ask for them. You’ve probably seen this done poorly in apps before, where they start hounding you for a positive review immediately when you open the app. That’s not really ideal, but fortunately, there is a great library called Appirater that makes it easy to do this the right way, so you ask the user for a review only after they’ve used the app a certain number of times, for a certain number of days or weeks, or taken a certain number of actions in the app. Or a combination of all of the above. If the user is constantly coming back to the app, they must not completely hate it, so asking them for a review is a relatively safe bet.

Integrating Appirater is very easy with Cocoapods, you just add to your Podfile, run pod install, and it’s integrated into your app. You’ll need to add a few lines to your AppDelegate to make it work with the defaults, which are pretty good to start with.

That’s it, you’re done.

Now, I have two advanced techniques for this that take a bit more work on the development end of things, but can pay off huge.

The first is to not show an annoying alert upon app launch that blocks the user’s intent. Rather, find a place to weave it into the app itself that makes sense for your particular use case.

For example, to go back to our tea timer app, instead of showing a popup asking the user to rate the app when they open it, and are trying to make some tea, why not have the “Time’s Up!” screen have an integrated section that asks them if they’d leave a review? They just finished timing their tea successfully, and are feeling good about your app as they drink their tea. Now is a great time to leave a glowing review.

Another example might be an email app, where it waits until you hit inbox zero and adds a “Congrats!” note to the empty inbox screen, along with a non-annoying note asking them to leave a review.

Try and predict when people will be feeling good about your app, and asking them for a review right then.

The second advanced technique is to not ask users for a review at all. Instead, ask them if they’re enjoying the app, with an option for yes / no.

If they say no, they don’t enjoy the app, then offer them a way to send feedback to you.

If the user says yes, they enjoy the app, then you ask them if they’d be willing to review it. You’ve already primed them for a positive review by making them decide that they do in fact enjoy the app.

This way you get immediate feedback from people who aren’t in love with your app as to why, and what you can improve to win them over. And it’s much better for both of you if they vent their issues to you instead of to the App Store. If they post on the App Store, everyone sees it, of course, which isn’t great for you. But it’s also not great for the user, because you can’t contact anyone on an App Store review. So you can’t ask them follow up questions or let them know when their requested fix is ready to go.

When used together, I’ve seen these techniques result in dozens of five star reviews over a period of weeks.

Setup analytics

I’m consistently amazed at the number of apps I’ve worked on over the years that had little to no analytics integration when I got involved. How the heck are we supposed to know what our users are doing and react accordingly if we don’t have good analytics?

And by good analytics, I don’t just mean tracking the number of users. I want to know where they came from, what they’re doing, why they’re doing it, how often they do it, etc.

Well, let’s put an end to that right now.

There are literally hundreds of various forms of analytics companies out there that you could integrate with, but rather than load your app down with all of that, let’s use Segment.

Basically, Segment has a mobile SDK that you can integrate with your app and use to push data to their servers. Then you can push to a variety of analytics services from their servers, without having to integrate each analytics service into your app. So if you want to use Mixpanel, Google Analytics, and Flurry for some reason, you can do all that on the Segment backend. You can also switch seamlessly between analytics services on Segment without needing to publish an update to your app.

Segment has a free plan that should work for most apps to start with. If you are pushing more events than Segment allows in their free plan and you don’t want to invest in it quite yet, you can always just integrate the analytics services directly.

As for what analytics services to connect via Segment, I’d recommend checking out Mixpanel. A lot of top apps out there use Mixpanel, and they also have a free plan where you can send a lot of events per month.

But then what should you track?

I’d recommend tracking just the major and most important actions in your app to start with. If you have any in-app purchases, you’d want to setup events to track each step of the process leading up to a purchase, so that you can create a funnel later in the Mixpanel dashboard.

Finally, both Segment and Mixpanel offer easy integration with your project via Cocoapods, so it shouldn’t take long at all.

Setup crash reporting

So we know what users are doing now, which is great, but what about when things go wrong? If a user has a problem and the app crashes, how will we know about it?

Enter crash reporting. There are a number of services for this, but I like Crashlytics, which is now part of Firebase by Google.

Another nice side benefit of integrating Crashlytics is that you get some free analytics from that as well. They’re not incredibly detailed, but they can give you some nice status on the number of daily active users you have, what percentage of your users have crash-free sessions, how long those sessions last on average, etc.

I’ve found it very useful for being able to see when crashes are happening and then see a full stack trace of the crash so I can submit a fix. Crashlytics has some nice features around filtering for crashes in specific versions, and automatically escalating crashes to higher priority levels if they’re happening to a larger proportion of your users.

Get customer feedback

Ok, we’ve got analytics for overall info on what users are doing. And we’ve got crash reports for spotting major issues.

But what about when things can be improved but it’s not a full-on crash? You really need a super easy way to let users provide feedback to you. You can just have a link that opens an email compose screen, sure, but where’s the fun in that? It’d be nice to have a super easy way for users to provide feedback from within the app in an anonymous method if they wish, including attaching screenshots.

Enter Instabug.

Instabug is an SDK that you integrate into your app with just a single line of code. When users shake their phone, Instabug takes a screenshot of the app and lets the user draw on it before sending it to you with a message about what went wrong or could be improved.

It’s super easy for users to use, which means you should get more feedback, and more useful feedback than before. It’s so much easier to see a screenshot with the issue circled by the user than to get a note that says “button is broken”. Ugh 🙂

Instabug is very easy to integrate with the default settings, and they have a free plan that is a great place to start.

The screenshot and comment from the user is just the start though. You also get a bunch of info about their device and app session that adds context to their issue, and Instabug can act as a basic bug tracker for your app as well, letting you set priority levels and mark bugs as fixed, etc. You can also forward them on to a more full-featured project management app like Asana or Basecamp.


And that’s it! If you’ve been following along or had your developer follow along, your app is already looking much better. Let’s review for a minute:

  1. Your app store listing is a little cleaner and more likely to turn up in search results, as well as more likely to convert those searchers to users.
  2. You’re setup with Cocoapods so that all of your dependencies (including the ones we added in this guide) are in an easy-to-manage single place that you can control and extend in the future.
  3. You’ve setup an onboarding flow to show your new users how to get the most out of your app and help ensure that they’ll be happy users for a long time.
  4. You’re asking your most engaged users to consider writing a review in the App Store, likely significantly boosting the proportion of users who review the app.
  5. You’ve got an analytics framework setup to track what users are doing in the app, and you can add new services and capabilities at any time, without having to push an update (for some things).
  6. You’re getting reports of any crashes that occur for users and information to help you or your developers debug and fix the problem.
  7. You’ve added an easy way for users to quickly give you visual feedback on any issues within the app.

Not bad for a day’s work, right? There are also some subtler benefits that you’ve gained:

1) You’re more familiar with your app now

2) You’ve taken control and are taking positive, proactive steps towards improving the app

3) You’ve started to build out a professional workflow for managing and improving your app over time in a systematic way.

I hope this has been helpful! Again, if you need help with the above, or if you’re ready to take your app to the next level, contact me.

Why you can’t build a startup for $30k

I recently had a potential client contact me with an idea for an app that he wanted built.

His total budget was $20k – $30k, which he had been told was reasonable by several different shops. He was shocked when I told him he needed at least 10x that amount to have a reasonable chance of success. To be clear, not all of that was for development, but that was small comfort.

To understand why the disconnect between what I was telling him and what other dev shops were telling him, we need to back up a little bit. I’ll explain how to determine what you need for a mobile app startup, and then give you some options for how to get there. Read More…

Hire App Developers Without Getting Burned

We all make mistakes, but a few years ago I made a big one in my business, the kind of mistake that makes you sick to your stomach years later.

The short version is that I hired a dev shop the wrong way, blew through tens of thousands of dollars, and had very little to show for it in the end.


The only good thing is that I learned from my mistake, and that’s what this post is about.

After this experience, I completely overhauled the way that I engage with clients as a software development consultant myself, and I’m going to detail it out for you in this post.

If you’re looking to hire a dev shop or freelancer to build you an app or website, this guide will show you exactly how to do it while saving time and money, and seriously limiting your risk. Read More…

Code Review on Hundreds of iOS Apps

I’ve been a freelance iOS developer since 2010, and during that time I’ve worked with 100+ clients on projects large and small, and I’ve evaluated even more for potential clients, friends, possible acquisition, etc.

As with any technology stack, there’s a wide range of technique, style, and talent in the iOS developer pool. This means that you never really know what you’re going to get 🙂 But I’ve gotten pretty comfortable learning how to dig into a new project and figure out what shape it’s in.

In this article, I’m going to walk you through some of the steps I use to evaluate the quality of an iOS app codebase. I won’t go through how to best refactor and clean up the code (that’s for a later article), but just to get a sense of what you’re dealing with (and maybe whether it’s worth dealing with at all). Read More…

Deploy and Manage iPad Kiosk Apps Remotely

For quick background, I’m an iOS development consultant, and I work primarily with funded startups who are building and growing their MVP app. Most of my clients are consumer-facing startups, so most commonly, the apps I help my clients build are destined for the App Store. However, I occasionally have a client who needs to deploy an application via Apple’s enterprise distribution model. This is a case study about just such an occasion. Read More…