Skip to content

jerielng/mobile-guide

Repository files navigation

Cross-Platform Mobile Guide for Native iOS & Android Developers

Overview of Mobile Development

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.

How to Use This Guide

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.

Android

Click to expand

References

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

Tools

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
A note about dependency injection

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.

Blogs

Podcasts

iOS

Click to expand

References

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

Tools

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

Blogs

Podcasts

* Personal recommendations

Miscellaneous Resources

Click to expand

Cross-Platform Resources

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

Design Resources

Name Description
Design+Code Subscription-based website to learn design for programmers and code for designers

Tools

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

Version Control

Name Description
GitFlow
Learn Git Branching Helpful interactive GUI to practice Git
Git GUIs Fork
GitKraken
Sourcetree

About

Curated list of resources and tips for aspiring cross-platform mobile developers

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published