Mastering Mobile Application Development
This book is 100% complete
Completed on 2018-06-07
About the Book
Hundreds of books have been written on iOS and Android since the debut of these platforms some eight to nine years ago. Many of them are well-written by very capable authors. This leads to the inevitable question, why write another?
Both of us have both taught and developed on these platforms since they appeared, and also have worked on their predecessors (Java MicroEdition, Symbian, etc.) Over the years, we've made a number of observations. First, becoming proficient on either Android and iOS involves a fairly steep learning curve. To help with that of course, both Apple and Google provide very large and comprehensive sets of how-to guides and reference documentation. Second, while distinct in terms of programming languages, frameworks and basic vocabulary, these platforms actually have more in common than initially appears. Third, while developers tend to specialize on one or the other, it is not unusual for mobile app developers to become proficient on both platforms over time, as many production apps have both iOS and Android implementations.
Often we find ourselves in situations where we will be explaining a concept on one of the platforms to a student or developer in terms of what they already know about the other platform. Similarly, we will have students in one of our courses in which we are teaching iOS tell us they just got assigned to a new project at work involving Android or vice versa. At one point we attempted to teach a semester course in mobile app development teaching both Android and iOS at the same time. We realized very quickly that other than a few scattered blog posts, there was very little instructional material available that explored the platforms side-by-side in a comparative manner. Though we personally were proficient on both platforms, we had not spent enough time organizing our thoughts and materials in a way that would allow the learner to efficiently bridge concepts that related across the platforms, and simultaneously call out situations where a fundamentally different approach was called for due to intrinsic differences. Instead, our lessons tended to quickly diverge into the details and world of the specific platform and any conceptual overlap was completely obfuscated and lost to the students. The net result was that students spent an enormous amount of effort learning a little bit about both platforms.
These experiences and observations led us to the conclusion that we could do much better if we organized our thoughts and intentionally created a grand tour of both platforms that iteratively led the student from concept to concept in a logical manner, calling out the similarities and differences as we go. This vision, followed by a lot of discussion and hard work (and encouragement from students and colleagues!) has resulted in this book.
Our approach is to imagine a fictitious yet non-trivial app that is clearly representative of the many apps consumers currently use daily on their smartphones. Studying how this app is implemented on both iOS and Android in a logical step by step iterative fashion, exploring various facets of the platforms as we go. Each chapter therefore focuses on one a single key aspect of modern mobile apps and begins with a discussion of the concept itself, and a discussion of the commonalities and potential differences in iOS and Android, pertaining to that particular topic. Once the concepts have been fleshed out at a conceptual level, we then introduce concrete examples of how those features are implemented on both iOS and Android.
This comparative approach to learning a software-related topic is not without precedent. For many years accredited university computer science programs have offered courses in programming languages. These courses typically survey a variety of programming language principles, constructs, models, and styles, and illustrate them with concrete examples from a variety of programming languages. A common learning objective is to help the students understand programming language principles that lay beyond the mere syntax, and recognize the concept when it appears again in perhaps an entirely different syntax. Armed with these insights, the student not only learns to write better code in a particular language, but can also rapidly assimilate and learn new languages. For example, a student who has been exposed to lambdas in Ruby and who understand how Ruby implements such constructs, and when they are appropriate to use, will immediately recognize and understand closure expressions when they encounter them for the first time in Swift.
Given the enormous demand for mobile apps and the rapid pace in which iOS and Android are evolving (not mention the platforms that will soon appear on the horizon.) we believe this comparative approach that intentionally calls out concepts in a way that transcends the implementation details will serve the student aspiring to be a professional mobile app developer well. We believe this approach is also germane to the professional developer who is struggling to keep up with the constant avalanche of new mobile implementation frameworks, concepts, and in some cases even entirely new programming languages!
Hence our intended audience consists of both the computer science student, as well as the practicing professional developer. We believe this approach will help the mobile app newbie with no prior knowledge of mobile application development become rapidly proficient on both iOS and Android, and well-prepared to rapidly assimilate whatever our mobile app development futures may hold. We also believe this approach is an excellent way for the experienced developer who is already proficient on either iOS or Android and would like to become proficient on the other. By bridging the knowledge they already have to the other platform, they will quickly orient themselves and become productive.
1.1 Mobile Development Overview
1.2 iOS and Android Contrasted
1.3 Development Environment
1.5 Android Studio
2 Writing your First Mobile App
2.1 Traxy App Overview
2.2 Writing Your First Mobile Ap
2.3 Your First iOS App
2.4 Your First Android App
3 Mobile App Architectures
3.1 Mobile App Software Architecture
3.2 Archiectural Choices
3.2 App Lifecycles
3.4 The Android Manifest
4 Scene Transitions
4.2 Fleshing out Traxy for Login and User Signup
4.3 Scene transitions in iOS
4.4 Scene transitions in Android
5 User Interfaces
5.1 Laying out mobile user interfaces
5.2 Layout and styling on iOS
5.3 Layout and styling on Android
6 Collections of Data
6.2 Implementing UITableViews in iOS
6.3 Implementing Android RecylerViews
7.1 Consume or Produce?
7.2 CocoaPods: Integrating 3rd Party Libraries in Xcode
7.3 Library Management in Android
8 Cloud Datastore Integration
8.1 Mobile backends
8.2 Integrating Firebase with iOS
8.3 Integrating Firebase with Android
9 Working with Multimedia
9.1 Personal Media Players
9.2 Multimedia in iOS
9.3 Multimedia in Android
10 Working with Audio
10.1 Working with Audio in iOS
10.2 Working with Audio in Android
11.1 Accessing Web APIs in Mobile Apps
11.2 Integrating web APIs in iOS
11.3 Integrating web APIs in Android
12 More on User Interfaces
12.1 UI navigation considerations
12.2 Tabs and collections in iOS
12.3 Tabs and Grid Layouts in Android
13 Location and Maps
13.1 Location Aware Apps
13.2 Maps and Location on iOS
13.3 Maps and Location on Android
The Leanpub 45-day 100% Happiness Guarantee
Within 45 days of purchase you can get a 100% refund on any Leanpub purchase, in two clicks.
See full terms...