CodeFights and Re-Learning About Bit Manipulation

Find me on:

Doug Watkins

iOS Developer at Doug Watkins Development
Developer of My Food Storage and Go Coder, available now on the app store. Owner of
Find me on:

never-memorize-something-that-you-can-look-upSince my background at Uni started in Computer Engineering and Computer Science, I know more than most people about how computers work. I understand things that few people – even people who use computers well and frequently – understand. Remember this because it is the real reason I am writing today.


I recently clicked on an ad on Facebook – it does happen sometimes, usually only to ads that are highly targeted with things I’m actually interested in – that brought me to I was intrigued about coding against bots, and I love testing my ability to solve coding problems. So I signed up – its free – and wrote some code.

Because of the way that I work, and learn, I can’t tell you exactly how to do something off the top of my head. I learn that things exist, and I learn how to implement them. But if I don’t need to implement something frequently – every time I sit down to code – I usually forget the specifics about implementation.

Thank you Internet, because now I can leave that brain shelving space open for other things. Now, when I come upon a problem, I know that there is a way to accomplish some small part of the task, and I know how to search and find the exact details required to implement it.

A simple Google search remind me of exactly how to use what I know exists. And in the case that I don’t know something exists, Google again comes to the rescue. This is the reason I included the quote above, I believe strongly in this way of thinking.

Now that we understand how my development process works a little, lets get into more detail about a specific challenge I had the other day.

Bit Manipulation

While taking digital circuits at USU, almost everything we did involved bits and bit manipulation. But since changing my major to MIS Database Administration, I haven’t had a reason to put any of that information to use. Nor have I wanted to.

I changed majors because I hated the process of solving problems for Computer/Electrical Engineering. I had greater highs from the work, but also lower lows – and more of them.

I’ve mostly forgotten that information/ability or put it on the back shelf of my brain.

I’ve also never had to actually manipulate bits directly in my Computer Science studies. Nor have I had to use it to write the software that I write.

I understand much of what my software is doing in the background – but I don’t write software that directly controls that since I’m not writing game engines. I usually have my chosen language do it for me.

When I took digital circuits we had to design and implement a CPU – it sucked but was totally awesome at the same time. So I understand the basics of how programs are actually executed.

The Intersection of CodeFights and Bit Manipulation

Now that we have a little back story, we can get into what I actually experienced.

I was on CodeFights going through the arcade section which are small coding challenges to accomplish specific tasks. The first MANY of these were exceedingly simple, at least for me. Things I would consider basic programming. Manipulate an array or basic logic and program control structures like loops and if statements.

They don’t tell you how to solve the problem, so it can seem more complicated if you don’t have a firm grasp of Computer Science basics. The problems themselves are pretty straightforward, and usually are solved with less than 10 lines of code.

Then I hit a snag. I started the arcade section called “The Intersection of 0’s and 1’s”.

The first problem through me for a loop. I needed to check to see if a specific bit was set – a 1 – and if it was I needed to unset it – to 0 – and return the result as an Int.

Ok, I’m not sure how to do this. I have literally NEVER manipulated bits in this manner, not in code at least. So I start coding some sort of if statement to check for the set bit – figuring I’d add the actual code to check the bit in a minute after some Googling – and add a 0 return value to just try compiling the code. I was thinking that maybe I could print some things out and hobble my way along till I get it working. Click “Run Tests” aaaaannnnndddddd

Error – I can only edit the that followed the return statement. So the whole program has to run on a single line. Crap.

Finding a Solution

So I start to Google. I find familiar faces in the Swift documentation – bitwise logic and math operators – but none will do exactly what I want.

So I started to search the forums on CodeFights to see if anyone posted anything about this challenge.

I found something about a different challenge. One answer posted a link to a blog post about Low Level Bit Hacks.

At first, it seemed like all the same things I found in the Swift docs, but then I realized something.

I was reading about using the bitwise AND – & – to change a number. You & two numbers together, and every time a specific bit is a 1 on both numbers, the result number is a 1, otherwise its a zero. Great, except in the problem I’m not sure how to use this to only check, and change 1 bit – not only that, but I need the bit to be a 0 not a 1 which is the output of &.

Lightbulb Time

I could use two three things at the same time to accomplish what I want to. Using & and shifting 1 the necessary number of times.

Using 1<<x allowed me to create a binary number of 1 followed by x 0’s -> 1<<3 creates 0b00001000. This I could use to & the original number with – except that this doesn’t do me any good by itself. I have to first NOT – ~ – the shifted number. Now the shifted number becomes 0b11110111 – thus allowing me to make sure that the xth bit is 0.

&ing this works because all bits are 1 except the one I want to be zero. All bits that are 1 in the original number will be ones, and all zeros will be zeros, except that one bit I want to change which will always be a zero now.

Needless to say, this was an interesting experience. And I’m glad I did it, because now I am a slightly better programmer – even though I’ll probably never use this information again, though I might.


I guess the reason I’m writing this is because I want programmers out there to know that you don’t need to know everything. All you need to know are the basics, and how to find the information you want.

Being able to do things like this without looking them up comes with time, but in the end it only makes you a slightly faster programmer.

What is more important is being able to write solid code – code for all edge cases, code for scalability, code for reusability, and code for stability <I’m sure there are more> – and know how to fill in any gaps you have in the language you are using currently.

That being said, what about you? What experiences have you had where you discovered something new? Or rediscovered something you forgot? Or just plain old did it without being able to spout out the answer from memory? Let me know in the comments below.

Also, if you sign up for CodeFights, add me as a friend.

If you like what you see and want to keep updated, as well as be informed about when I release new freebies, sign up for my newsletter below for more tips and advice on growing an app business.

Firebase Account Creation Failure Without an Error

Find me on:

Doug Watkins

iOS Developer at Doug Watkins Development
Developer of My Food Storage and Go Coder, available now on the app store. Owner of
Find me on:

Why I Decided to Use Firebase, and an Interesting Error I Got Because of 3 Characters

Before I get into the Firebase error I got, or more appropriately the error I didn’t get but should have gotten, lets discuss why I chose Firebase in the first place.

firebaseI recently decided to use Firebase to do authentication and database storage for a few apps I am working on. Both for myself and some freelance clients. Firebase was my choice for three reasons:

  1. The backend for the auth and database storage is already done and well tested.
  2. I planned to sell the apps, so paying money for Firebase if I go over their free limits isn’t a big deal.
  3. Parse is no longer an option. I had been planning to use it for these apps for a while and was disappointed to find out it was being discontinued.

While researching Parse alternatives, I came across a tutorial on Ray Wenderlich’s site, and became intrigued by Firebase. Finding out it was a Google product increased my interest, since in my experience Google puts out fairly good products.

So, after doing a little research, I decided upon Firebase and set to work creating an abstract project. Once done I’m turning it into a framework, and then a cocoapod, for use in future apps. This app would do user login/authentication, user account creation, password reset requests, and database communication.

My Journey With Firebase

simulator-screen-shot-oct-13-2016-3-57-56-pmFirst I started working on the sign in screen and user creation screen.

The UI is pretty simple for both. It is just a series of TableViewCell’s with text inputs used to create, or sign in to their account. I had to add some extra inputs on the creation screen because I want to add new users to my email list unless they opt out.

Because I planned on the entire project being used for multiple projects in the future, it was fairly simple to abstract everything out and make the data collected by the app adjustable by simply changing certain constants all contained within a specific file.

Now that I have everything abstracted, but also concrete by setting the specific constants to what I plan to use for several apps, I was ready to finally test creating an account. Once I had an account created I could start testing the login screen – an important thing to note here is that I didn’t want to create an account through the webpage console for Firebase, I wanted to do it solely through the app … remember this point because it become significant.

simulator-screen-shot-oct-13-2016-3-58-02-pmTesting the Account Creation

So, I’m ready to go, run the app click the account creation button, and fill out the form.

Because I am doing this on my phone, I really dont want to type all my actual information out. So I used strings like “asd” for both names – the name fields were just random letters. The email was “” because it was quick and much easier to type than my real email.

The last part of the form is a password which I didn’t want a full, long, real password for testing, so I used “bim” because it was short and I could remember it.

I finally clicked “Create Account” and waited for the magic, which never happened.

Dang! Now I get to pore through documentation and find out whats going on.

What Went Wrong, and What I Did to Fix it

Usually the Google machine and Stack Overflow keep me going. If something doesn’t work, they almost always have the answer. This moment marks the second time I’ve been let down by the two of them. Though SO did eventually rescue me from the first one, but I had to actually ask a question instead of just search through answers.

Firebase documentation states specifically that if there is no error returned by the create account call, then the account was created successfully. The only problem was I was getting no error, nor was the account being created! I FRIGGIN BROKE FIREBASE!?!?!

Almost, but not exactly. After searching for multiple hours for a solution, and finding zero helpful information, I accidentally stumbled upon the problem. I tried to create the same account on the website – the thing I wanted to avoid doing – and got a freaking error.

What The Crap Google! Here I am not being sent an error – but the website is throwing an error. Everything was the same on the app and the website.

So, what went wrong you may be asking yourself … The password was the problem.

Firebase Password Documentation

The Firebase docs say that any password authentication needed to be done by me before creating the account. For these particular apps I am currently working on, I really don’t care if people use a 1 character password – so I assumed that since it was left to me, there were no restrictions placed by Google, but there are.

Firebase passwords must be 6 characters or more. This is the error message I finally got while trying to create a password online. Tried this in the app and bam, works like a charm.

Why oh why does this not throw an error – or at least have a mention in the documentation somewhere. I am actually going to write Google about the issue and ask them to update the documentation or cause an error to be thrown by the app.

In the meanwhile I am putting this here – as well as Stack Overflow. That way any other unsuspecting people can find a possible solution to their problem.

If you like what you see and want to keep updated, as well as be informed about when I release new freebies, sign up for my newsletter below for more tips and advice on growing an app business.

App Marketing Wake Up Call Infographic

Find me on:

Doug Watkins

iOS Developer at Doug Watkins Development
Developer of My Food Storage and Go Coder, available now on the app store. Owner of
Find me on:

App Marketing Wake Up Call

During my research today I found this interesting infographic. The date from it is from 2012, so the exact figures on it are likely to be wrong, but I would bet the trends are the same. My reason for saying so is because I am one of the developers that, up until recently, has spent little – actually almost no – time marketing my apps.

When My Food Storage first was released, I did a press storm. I created a press release, and cold pitched it to everyone I could think of. That increased my downloads by about 50 that week. Not exactly awesome numbers. I think that of the 100+ PR’s I sent out, maybe 3 places did anything to review or post my app anywhere. I literally haven’t done anything with Go Coder, besides a couple of tweets that were test tweets that were actually seen by a few people.

Personally, I don’t think that I will need to spend any money – actually I hope this with all my heart because I have no money to spend – to do the marketing needed to get apps in front of more people. But I do believe that without spending money I will need to spend a significant amount of time marketing my apps.

Well, enough about why I am where I am – for now – lets get to the infographic. Hopefully this will help some people understand what we need to be doing to get our apps in front of people. Enjoy ?.

App Marketing Wake Up Call

Do you have something else to add? Is there something missing I should know about? How has your marketing been working for you? I would love to hear success stories with marketing mobile apps, but either way look forward to hearing from everyone!

If you like what you see and want to keep updated, as well as be informed about when I release new freebies, sign up for my newsletter below for more tips and advice on growing an app business.

5 Steps To Create A Quality Phone App

Find me on:

Doug Watkins

iOS Developer at Doug Watkins Development
Developer of My Food Storage and Go Coder, available now on the app store. Owner of
Find me on:

5 steps to creating a quality phone app

Quality Phone AppsLooking to Create a Quality Phone App? Look no Further.

Everyone wants to know what they need to do to make a quality phone app, though this can apply to other software as well. There are thousands of new apps added to the app store every day. What can you do to get noticed in such a sea of options?

First, let me tell you what this page is not about. I am not going into the marketing/advertising/App Store Optimization of making a quality phone app, and these are all necessary things to get noticed. I am focusing more on the development and design aspects of your app. I myself am just getting really started with the marketing part of the process – something I thought was less necessary than it really is – so I can not as of yet inform you of these critical steps. BUT! I am working on it and will post some information on the subject once I’ve increased my downloads. I’ll post about each step and what my results were – that is a major reason for this blog actually.

The following can be used as a checklist:

[list icon=”check-square-o” font_size=”16″ icon_color=”00ff00″ columns=”1″ bottom_margin=”10″]

  • Have a great idea
  • Simplify the User Interface/Maximize the User Experience
  • Quality Content
  • Quality Code
  • Quality Imagery


If you can look at the above list and say “Got It!” to all of these things, you are well on your way to making some money, or at least getting your app in front of a lot of people. If not, I’ll go through each option and give you some tips to help you create a quality app.

One other major point that applies to all of these steps, something I learned, you get out of it what you put into it. My high school auto shop teacher taught me this while we did body work on his pickup. Take your time, get it right. Of course after spending a year fixing his truck and doing all the body work to get it perfect, he decided to paint it neon pink – because he had a bunch of that for free – and did the paint job in about 10 minutes. The absolute WORST paint job I’ve ever seen, overspray, drips, and everything else you could do to make it look like crap, he did. Ruined a car in 10 minutes – but thats a story for another time.

The take away here is that these things take time. There is no magic bullet, or quick fix when it comes to quality, thats why quality is so desirable, it says to the recipient “Hey, this person really cares about this, they took a lot of time to make sure they got it right. Sounds like something I want to use.” And guess what, they would be right. Personally I feel that anything worth doing is worth doing right, so take the time to plan out your app, and these 5 parts of that process, before you start pounding out code or creating artwork. The results will certainly be better than if you don’t.

One last thing before we get into it, don’t skip any of these steps. Skipping a step will almost certainly lead to crappy quality, and thus angry customers or no customers. That truck looked better covered in Bondo than it did after a slipshod paint job. Up until then people saw that and said “He really wants that truck to look good”, after the paint job the best responses were “He must have been drunk when he painted that”, all because he skipped the last step of doing a quality paint job – even the color could have been overlooked if he had done a decent job with the paint.

Come Up With A Great IdeaHave a Great Idea

Step one, and the one step I can’t really help you with very much, is to have a great idea – not OK, passable, or even a good idea. If you come up with something that is mediocre – you will get, at best, mediocre results. If you want to make an app that NOBODY will use, then … well … nobody will use it. Before you take the time to do everything else, ask around. See if the people you know will actually use such an app.

It’s ok to develop a phone app for a small audience, just understand that you will only every be used by people in the audience you develop for, so make sure you really want to get in front of a small group before you say yes to such an app.

If people you know do like the app idea, refine it as much as possible. Get peoples opinions on what should be in the app. If multiple people request a certain feature, you should seriously consider adding it – along with this goes learning what your platform is capable of, Apple limits what a developer can access, so many things that are possible on Android are impossible on Apple.

Once you have a refined idea, sit down and write up your requirements – which features you will need to implement. Also write down a list of cool features you want to look into and see if they fit in your scheme. Lastly, think about your goals for your phone app.

An example is with My Food Storage – which I wrote. I wanted the user to be able to add an item in less than 10 seconds, this was an important metric for me, which meant that in the long run, I needed to do some serious trimming to my features. I wrote the app, had it almost finished, and then had my family test it.

I realized I was at closer to a minute to add a food item, unacceptable since most people have hundreds of items to add. So I had to go back and cut away many features, I had to decide what was truly important and what was nice, and keep only important things.

Another example of this is in relation to my app Coder. I was browsing my preferred news site, and saw an article about an app to learn JavaScript, intrigued I downloaded the free app and played with it. The first tutorial was free, the second was free with a social share, the others cost money. They had a pretty good set of tutorials – a little slow for my particular taste – but they didn’t have anywhere to test the code.

You couldn’t learn something and immediately put it into action. I’ve used before, and you learn and code at the same time. Plus from personal experience, I don’t actually learn programming concepts until I’ve actually used them, sometimes not until I’ve used it several times.

This seemed like a fundamental flaw in their good idea for an app. So I created my own app. First as a proof of concept that people could create HTML, CSS, and JavaScript files in a project folder and then run them on the device. I also was interested in learning Swift – I had done only Objective-C till this point for iOS apps – so I taught myself Swift while creating this app, in a week, working 3 hours a day max.

This ended up being incredibly simple, and yet within 24 hours of releasing it – with no marketing – I had received multiple emails from people thanking me for making the app. I haven’t even published the real reason I made it in the first place – a set of tutorials that you could read and then instantly put that knowledge into action, without any network connectivity or a computer in front of you.

My analytics on the app is weird, so I’ll be replacing it, but from my ads being displayed, I know people are using that app a lot. Some people are finding a real use, because I saw an opening and an opportunity. I saw an app that was performing, and made – at least in my opinion – a better version of the app.

Coming up with great ideas that fill a real need for users is the first, and possibly most important, factor in creating a quality app.

For more information on coming up with great app ideas, see this post.

Simplify the UI/Maximize the UXSimplify the User Interface/Maximize the User Experience

UI and UX go hand in hand, developing one is developing the other – though not always in a positive way, but they both impact each other. UI is probably the biggest design decisions you will make. The code/features design decisions are probably the only bigger ones.

The reason functionality is higher is because those requirements are needed before you can design your interface. The reason UI is second is because this is what your users see and interact with – the interactions being the UX part – and so if your UI is poorly designed your users will feel it. Proper UI design also ensures all features are accessible. What use is adding a feature, and its required code and testing, if you can’t even get to that feature!

UI is the controls and visuals you put on the screen, the UX is what the user feels/thinks/loves/hates/connects with while looking at and using your UI. A simple UI generally improves the UX. Think about an app with  100 different options in the menu. That would be extremely overwhelming. Now picture the same options shown as 5 options – this would be like having sub menus for instance. The user opens the menu and only 5 things to choose – no more users deleting your app because it is too complex.

It doesn’t stop here though, because simplifying won’t necessarily do it. Your UI needs to be simple, but also intuitive. People need to pick up your app and within 10 seconds, know how to use its basic functionality – which should be 80% or so of your app. If they can’t figure out the basics without help, you need to simplify.

There are always edge cases – cases which are unlikely but possible – with this. You don’t need to worry about edge cases – such as 90 year old grandmas – being able to do this with your app, you include help, tutorials, and FAQ’s for them to get up to speed.

I personally use my parents as my test for the intuitiveness/simplicity of my designs. If my parents can figure it out on their own, then the majority of people can do the same. Understand that my parents aren’t stupid, or technologically slow, but programmers they are not, and so they don’t have my understanding of technology either. I guarantee you know somebody that would be perfect for you to use as a usability tester.

There can be uses of your app that people won’t just know they can do, and that is ok too, as long as the core use of your app isn’t lost to those who don’t know these secrets. Something like Apple’s mail app, you can swipe right to mark an item as read. I didn’t know this for over a year, but I still knew how to use the app’s core features.

That being said, I would include a place somewhere – maybe on your website – where people can go and see all the cool, quick access features that aren’t obvious. Include the obvious ones too so that your edge case users can find all the help and instruction they can want, without needing to email you for help.

The take-away here is to make sure that people can open your app for the first time, and very quickly understand how to use it.

Create Quality ContentQuality Content

What you put into your app has to be top notch quality itself. How can you expect to have a quality app if any area of your app is not high quality? Going back to the beginning, you get out what you put in. The quality of your content will sometimes be determined by the quality of your idea. But sometimes you will do something like my Coder app, which has content that I have created – namely tutorials in this case – which are added to the app.

I spent a large amount of time researching what information was important to include in my tutorials, changing the ordering of information – sometimes it didn’t make enough sense because you needed to know something else before getting to a certain piece of information – and working on the pacing of the tutorials. You also need to take the time to do your research and fact checking, make sure that what you put into your app is something that people will want, and will want over and over again.

I tried to avoid really long tutorials – meaning I had a set amount of content to cover, but didn’t want an individual tutorial to be too long. I wanted it to be as easy to read as possible, but I still needed the information to be there and be quality information.

This means you need to have adequately researched your content – it needs to be correct – and take the time to create flow in your content, and between your content and other areas of your app. Make sure people can get to what they want in a way that makes sense. Your content should be in line with your apps goals and intentions – this is images, words, and functionality – don’t put obscure references to something that has no bearing on the app.

An example from My Food Storage app could be: Adding a link to purchase a baseball bat on Amazon when the user pulls up their grocery list. This has no bearing on my app – if I really needed to add some sort of affiliate link there, adding a link to something like a crockpot or a grocery delivery service would make sense, and could add value to my app for my users. Everything in your app should be adding value to your users, and value they would expect and want.

All of your users should understand your content, don’t use slang unless the target audience expects it – such as an app for teenagers. Don’t use euphemisms or cultural references – again unless your audience expects it – as this can be confusing, especially for someone who is from a different country or culture. An example would be saying “You hit it out of the park” because this is a distinctly American phrase, and someone from a different country might have no clue what you mean.

Spell things correctly. Use proper grammar. This effort is sometimes missed, and can lead to instant uninstalls – because it makes you look like an idiot. This one thing can make you look stupid faster than anything else, so take the time to not only run spell checks on your content, but proof read everything else afterwards – they’re, there, and their are not the same words and will make you look extra stupid because you don’t seem to know how to use the english language properly.

Dont steal information or content – images, videos, articles, ANYTHING! Apple can reject your app for doing such, and even if it gets by them, you lose trust with your users. If you use open source stuff, or content with permission of the owner, don’t forget to attribute properly. Some people don’t care for attribution, but some care mightily. Don’t upset your sources by forgetting to attribute them to the information – somewhere in your app.

Create Quality CodeQuality Code

This can be harder for some people to spot or know if their code is quality. The first item here is make sure it runs. Go through all possible uses of your app, anything anyone can think of to do, and test for it. Get your app in front of as many test users as possible. Make sure that when you sign your name to it and submit to Apple that you have tested as many possible uses as you can think of.

Don’t EVER let your users beta test your app – by this I mean, don’t just put it in the store and let your paying customers be the ones to find your bugs. If you have a beta run you want to do, this is different – just don’t do it in the store.

We all have bugs in our code – even projects that look bug free have bugs, they just haven’t been found yet. There are so many variables in what could cause a bug that you could never write bug free code, but take all reasonable steps to get rid of as many bugs as possible. I read somewhere once upon a time that if you can get your app in front of something like 6 people you will find 80% of bugs – I don’t remember where that information came from to quote it directly, only that I learned it while doing my Senior project – a software engineering class at uni. So make sure you have several people help you test. Not only will you find more bugs, but you can also test the UX of your app while at it. The more you can test your code, the better its quality will be.

Also do other things like commenting your code, so that you understand what is going on when you come back. Removing old code you commented out to test something with. Formatting your code properly. Using proper indentations and naming conventions. Be consistent throughout your projects in your naming conventions. Learn the proper way to use the tools you have.

One thing that can help with code quality is to find open source projects that perform part of what your app is. You can’t just take an open source project and label it as your own and post it straight into the store, but an example from my My Food Storage app is the barcode scanner I used.

I don’t have the skills, actually experience would be a better word, in image processing to make my own barcode scanner. So I found an open source project and included it in my project – which required some customizing of their code on my part – and then added the entire license definition and links to the open source documentation within my project. I made sure everyone knew that I used a specific piece of code for that, plus I didn’t have to worry about writing and testing that – other than making sure it worked within my app.

If you can code in pairs, this helps code quality go up significantly. If you can’t, but can have a friend look over your code – after comments are thoroughly implemented – then you can likewise increase your codes quality. More eyes see more bugs.

Another development convention that can increase code quality is learning to use OOP and OOD principles – if you don’t know what those are, google them and begin to learn because these are must knows in the mobile app development world. Specifically I am thinking of code hiding, and using classes properly. If you can create a class that performs a set of functions, and you can test that class completely, you can use it in other projects and know that it works. Also, you can know that the code within it works right. Test each function on its own, then you know you can trust its output.

Being able to test each function on its own goes a long way toward high quality code, because you leave out the possibility of weird edge cases causing code failure. Hiding properties and some methods inside of a class also keep code cleaner, making sure that another class can’t try and do something stupid with your code. You may think you don’t need to hide code from yourself, but doing so creates cleaner code that is less likely to introduce bugs.

Create Quality ImageryQuality Imagery

Part of this is under the quality/simple UI, but you will have all sorts of images to use – buttons, backgrounds, thumbnails, etc. – and these all need to be as high of a quality as you can manage. This doesn’t mean you need to hire a graphic designer, but if you can afford one then you should.

Imagery helps to inform the user – it can even cross language barriers – and thus is super important. When people look at something for the first time, their eyes first go to images. After they absorb the image a bit, then they will start to look for words. So if your image can tell the users what they need to do, then your app will be that much more intuitive, and users will be that much happier.

Learn to use Gimp and Inkscape to create your own graphics.  Or if you have the money, invest in Photoshop and Illustrator, there are more opportunities to learn these than the free options. Either way they need to look good.

Don’t settle for almost good because you are tired or frustrated with your tools. Take a break and come back after you are less stressed. Along with images used inside the app, your app icon is incredibly important. It should be simple, and tell people what your app is about. It doesn’t need to tell this on its own, but between the title and the icon users should understand your app’s purpose.

Sometimes you can find images that work for you project on the internet. Just make sure you don’t just google something and grab images, this is stealing most of the time. You can use Google to find free images. Know what the license is for any image you choose to use, and that you follow the license terms. Some images require attribution – telling people where you got the image – and some require that you don’t edit the image at all. Find the license information for any image you want to use, and follow their terms strictly, or you could be in trouble.

Also, something that is important for phone apps is to only use appropriately sized images. Don’t scale images in a phone app, it will be noticeable and does not look quality. No matter which way to scale the image it will look pixelated. We are well past the 80’s and their associated 8 bit images. That being said, you can create games with the 8 bit image style, as long as it is a choice and you still make sure your images are appropriately sized.

Trust me when I say that this is an extremely important step. It can take a good looking image and make it look like crap. On iPhone you can name your images appropriately and the app can select the appropriate size based on which device is running the app.

Your app’s icon is another super important piece of imagery. Users need to see your icon and have an understanding of what your app is about. Your icon needs to make sense. It should also be the highest resolution you can make it. Vector images are really best for creating an icon, since they scale perfectly within the editor to create pixel perfect icons. Your icon also needs to be unique. It should stand out on all kinds of backgrounds.

Generally, simpler is better when it comes to icons – games are about the only thing that can get away with really busy icons. Apples icons are a great idea place for icons. They are simple, usually one or two colors, and you understand what the app is about just by looking at the icon.

In the end, my final test is “How does this look?” Will users see this and say, “Hey, I like this.”? If not, you still need to refine, or go a different direction.

Go and Do

Now you have an understanding of what are 5 crucial areas necessary to making a quality phone app, so go and make something awesome. I’ll be posting later with some advice for marketing your app and getting it in front of people – both things I did on accident without understanding and things I have learned since that are important.

What other tips do you have for others reading this about improving the quality of your tablet and phone apps? Comment below to let me know if I need to update my post.

If you have any questions for me about this post, or anything else related to app development, please post a comment down below or send me a tweet @iOSDoug. I look forward to hearing from you guys.

If you like what you see and want to keep updated, as well as be informed about when I release new freebies, sign up for my newsletter below for more tips and advice on growing an app business.