1. iOS developer essentials

- stuff you need to know

iOS developer essentials

Ever wondered what other developers use on daily basis? Maybe you are just a beginner iOS developer or you are just wondering what is missing in your developer's arsenal. Here are my iOS developer essentials that every developer should be familiar with.


You know what it is. The IDE where you can play and make your projects bring to life. But what you may not know is what is hiding in this IDE. Despite the fact that it has basic source code editing building capabilities, it also has a neat set of features that are handy during your workflow. Even though some of the features are not as quite good as some competitors have but about that later in some other post.

  • Source control integration (git)
  • Memory/CPU/...  profiling features
  • Simulators for iPads, iPhones
  • UI editor called Interface builder
  • Unit/UI testing capabilities

My advice for beginner developers is to start learn this and how to use it. Basically whole developer community is using this features in some form and it doesn't matter if you work for company that develops software for microscopes or aircrafts (OK maybe not for aircrafts they are probably 20 years falling behind with the rest of the world ;) )

Get familiar with the build process. It is nothing new or completely different that you might know from other languages but how to adjust it to your needs is a bit different. For example a creating a two versions of your app (free and paid) needs good understanding what is a target, scheme, build configuration etc.


If you think you can develop everything by yourself or you think that apple API is providing everything you need you are horribly wrong. Get familiar with coapods and carthage. Both have pros and cons and good balance is somewhere between. I prefer carthage because I can build it once and add it to project and forget about it. With cocoapods, if I slightly touch my project the Cocoapods is always trying to rebuild packages. (There is probably some special flag that you can pass and make stop cocoapods doing the rebuild, don't know). My rule is If I can find it in carthage I will integrate it with carthage, if not, will use the cocoapods.

Github - git


Nothing to say here, Just use github, whole iOS developer community is there and you won't be an exception. Github is not just a source control service but it also allows you to manage your project. You can plan your project, collaborate with others,  add tasks, write a wiki page (premium) or simple readme file. Everything is intuitive and really easy to use.

Github provides also cool integrations with third-party services like Toggl for tracking your time spent on a particular task. So in your project issue board on a github you will just click on issue and click "Start timer" button and it will start count your time. Easy as that.

Create couple of projects push it to github, create automated kanban board to know what is left for implementation, fork some frameworks that you can improve (don't forget to push request your changes back, so community benefits as well).

You need to do some research what will be your merging strategy. Proven one is that you will have your master and developer branch, do your work in developer branch and if your CI/CD system will tell you that your feature is OK you will push it to master so the master branch is always green and in releasable state.


You need some build system for continuous integration/delivery that will tell you that everything is committed right and you didn't forgot to push some important source file. It will run your Unit/UI test and give you the test result. A good candidate is Bitrise. It will allow you to create 200 builds (10min build) per month for free. I was even able to integrate my Vapor project so it is not strictly tight to mobile app development only.


This is just a tip of the iceberg. There is of course a lot of stuff around frameworks and how to develop the actual app but this should give you a good start. Try to remember as less as possible. Let the tools do the job so don't be afraid to create your own tools for example for scaling images from your designer etc.

Create, fail, redo, succeed.