Think about your smartphone. It wasn't too long ago that the smartphone market was only emerging. Before, we had to hop onto a laptop or desktop just to do a quick Google search, and for some of us, this made up even a significant portion of our lifetime. Now everyone is carrying a personalized digital Swiss Army knife in their own pocket. These days, the average person no longer has need to carry around a flashlight or a camera. And the most exciting part about it all is that you, as a mobile software engineer, can develop the skillset to build the apps that go on these devices.
Mobile development is an interesting subfield of programming, as it calls on you to think about the visual design of the front-end client you are building, while bearing in mind the restrictions of the hardware you're building it for--from battery life to network connectivity.
There are many tools available for mobile developers, and the first division to consider is the distinction between native and hybrid platforms. What does this mean? Native indicates the toolsets published and maintained by Apple and Google for their respective platforms. On the flipside, we have hybrid frameworks available that allow us to develop for both Android and iOS with the same codebase. Such frameworks include Flutter, React Native, and Xamarin, among many others.
Here, we will focus primarily on native mobile development tools. This is a beginner-friendly list of curated resources and tips for aspiring engineers in both iOS and Android. More advanced developers can still take advantage of this list as a way to organize a variety of the resources available (and are more than welcome to contribute).
Where other lists tend to focus primarily on one platform or the other, this guide aims to reconcile the similarities and differences between both. Native cross-platform development is a powerful alternative to hybrid development, but it can be daunting to learn the nuances of both platforms, especially for beginners. There are a lot of resources in this guide, but it is not meant to be consumed all at once. As you continue through your journey to become a better engineer, you can use this guide as a reference for resources as you encounter different problems to tackle along the way.
Click to expand
Name | Description |
---|---|
Official Developer Documentation | |
Material Design | Visual design guidelines to adhere to as an Android developer |
Google Style Guide for Java | |
Official Android Style Guide for Kotlin | |
Ray Wenderlich Style Guide for Kotlin | |
Google Codelabs for Android | |
Google Developers Community | |
Android Developer Roadmap | |
Overview of Dependency Injection | |
Must Have Libraries | Detailed guide to using essential third-party Android libraries |
Name | Description |
---|---|
Dagger 2 | Dependency injection framework for Java and Android, see also: Hilt |
Glide | Image loading and displaying library |
Gson | Tool for serializing and deserializing JSON strings into objects |
Koin | Service locator for Android |
LeakCanary | Memory leak detection and analysis for Android apps |
OkHttp | Client for making HTTP requests in Android |
Parcelabler | Web tool for generating Parcelable objects |
Retrofit | Wrapper for OkHttp for making HTTP requests |
Robolectric | Simulates instrumented environment within Android unit tests |
RxAndroid | Layer built on top of RxJava for Android-specific components |
RxJava | Asynchronous programming through observable streams for JVM |
You may have noticed tools like Dagger, Hilt, and Koin. As an Android developer, it is important to understand this common technique's significance in reducing code complexity. It is also helpful to note the distinction between a dependency injector and a service locator. For further information, refer to the dependency injection article in the Android documentation.
Click to expand
Name | Description |
---|---|
Official Developer Documentation | |
Apple Human Interface Guidelines | Visual design guidelines to adhere to as an iOS developer |
Google Style Guide for Objective-C | |
Google Style Guide for Swift | |
Ray Wenderlich Style Guide for Swift | |
Xcode Shortcuts | |
iOS Developer Roadmap | |
Apple Developer App | |
Swift Evolution | Document of history and proposals for enhancing and evolving the Swift programming language |
Name | Description |
---|---|
Alamofire | Library for making HTTP network requests in iOS |
Build Time Analyzer for Xcode | macOS tool to analyze Xcode project build times |
Control Room | GUI tool built on top of simctl to control Simulator |
Quick/Nimble | Behavioral testing framework as an alternative to XCTest |
Resolver | Dependency injection framework for iOS projects |
RxSwift | Asynchronous programming through observable streams, see also: Combine |
Swiftify | Auto-converter from Objective-C to Swift |
SwiftLint | Linting tool for Swift files in Xcode |
Timelane | Xcode Instrument to visually profile tasks from Combine and RxSwift |
- Code Completion
- Launched
- More Than Just Code
- Swiftly Speaking*
- Swift by Sundell Podcast*
- Swift Over Coffee
- Swift Unwrapped
- The iPhreaks Show
* Personal recommendations
Click to expand
Name | Description |
---|---|
Code Passionately Podcast | |
Coffee + Coding Podcast | |
Inside Facebook Mobile | |
Lyft Mobile Podcast | |
Mobile DevOps is a thing! | |
Square Developer YouTube Channel | |
Swift is like Kotlin | Side-by-side comparison between Swift and Kotlin syntax |
The Polyglot Developer Podcast | |
The raywenderlich.com Podcast |
Name | Description |
---|---|
Design+Code | Subscription-based website to learn design for programmers and code for designers |
Name | Description |
---|---|
fastlane | Build and release automation tool for mobile apps |
Postman | GUI client for simulating API requests independent of code |
Postwoman | Web client that with the same functionality that Postman provides |
Name | Description |
---|---|
GitFlow | |
Learn Git Branching | Helpful interactive GUI to practice Git |
Git GUIs | Fork GitKraken Sourcetree |