Table of contents : Preface IDE Mobile Development Overview iOS and Android Contrasted Development Environment Xcode Interface Builder Integrated Debugger and Simulators Tools and Frameworks for Testing Xcode Documentation Managing Third Party Components with CocoaPods Android Studio Layout Editor Gradle Managing SDKs Android Emulators Test Framework and Debugger Managing Libraries Android Support Libraries Upgrading to Android Studio 4.0 Writing Your First Mobile App Traxy App Overview Writing Our First Mobile App Platform Similarities Your Initial iOS App Creating a Project in Xcode Laying out the screen in Interface Builder Adding Outlets and IBActions Internationalization Your Initial Android App Creating a Project in Android Studio Laying out the screen in Layout Editor Renaming the Activity and Validating the Login Form View Animations String Resource Editor Internationalization Source Code Revision Control Mobile App Architectures Mobile Software Architecture Process State Transitions Mobile Resource Constraints Application State Transitions Application Process: a Home for UIViewController/Activity Java Virtual Machine Architectural Choice Model View Presenter Model-View-ViewModel Lifecycles Android Manifest Android Architecture Components Scene Transitions Overview Fleshing out Traxy for Login and User Signup Scene transitions in iOS Adding new view controllers to the storyboard Adding new UIViewController classes Establishing the identity of view controllers in Interface Builder Adding segues in Interface Builder Completing the view controller implementations View Controller Lifecycles Scene Transitions in Android Adding New Activity Classes App Bar Menu Items Using Android Intents Android Activity Stack Finalize SignUpActivity and MainActivity Handling MainActivity Logout Menu Navigation Graphs Adding ViewModel Implicit Intents Unresolved Intents User Interfaces Laying out Mobile User Interfaces UI Styles and Themes Layout and Styling on iOS Auto Layout Overview Introducing Auto Layout Constraints in Interface Builder Adding Auto Layout to Traxy Styling in iOS Adding Styling to the Traxy App Layout and Styling in Android Which Layout? Login Screen in LinearLayout Login Screen in ConstraintLayout Laying out the Login Screen Applying Model-View-ViewModel Styling/Theme in Android Introduction to Material Theme Collections of Data Introduction Challenge 1: List does not fit on the screen! Challenge 2: Where's the data? A Framework for Rendering Lists Implementing Table Views in iOS Where's the Data? UITableView Overview and Some Housekeeping Implementing UITableViewDataSource Partitioning a Table View into Sections Making it Pretty via a Custom Cell and UITableViewDelegate Android RecyclerView Adapters and View Holders Your First RecyclerView Using ViewModel With RecyclerView Event Handling Custom CoordinatorLayout.Behavior Libraries Use or Produce? Traxy New Feature Using Google Places API Enhancing Traxy with Third Party Libraries Integrating Third Party Libraries in Xcode Using CocoaPods to Manage External Libraries Enhancing Traxy Library Management in Android Using Data Generator Google Play Services Libraries Using Google Places API Resolving Version Conflicts Cloud Datastore Integration Mobile Backend Creating a New Firebase Project Firebase Authentication Firebase Realtime Database Firebase Listeners Firebase Cloud Firestore Integrating Firebase with iOS Using Firebase Authentication for User Management Using Firebase Cloud Firestore as a Cloud Backend Firebase in Android Repository Logging Out Storing Data Into Firebase Cloud Firestore Retrieving Data From Cloud Firestore Kotlin Coroutines for Firebase Working With Multimedia Personal Media Players Codecs: Media Data Compressors The Need for Caching Privacy Concerns Enhancements to Traxy Multimedia in iOS Working with UITableViewController Presenting Action Sheets Working with Multimedia on iOS Capturing Photos and Videos Uploading Media to Firebase Downloading and Displaying Captured Photos and Videos Multimedia in Android Expandable FABs Taking Thumbnails Taking Full-Size Photos Selecting Photos from Gallery Uploading Media Files to Cloud Storage Recording Videos and Playback Media Streaming with ExoPlayer 2.x Working With Audio Working with Audio in iOS Audio Capture and Playback Saving Audio Journal Entries to Firebase Adding a Segue to AudioViewController Audio Processing in Android Recording Audio Audio Playback Audio Focus Networking Accessing Web APIs in Mobile Apps Network Programming Challenges General Guidelines for Networking in Mobile Apps Web API Data Representations Extending Traxy With Weather Data Networking on iOS Performing HTTP Requests From iOS Processing JSON Representations in iOS Extending Traxy with Weather Data From the Open Weather Web API Networking on Android HTTP Requests Using OkHttp3 HTTP Requests Using Retrofit User Interface UI Navigation Tabbed Applications Grid Layouts Extending the Traxy User Interface Tabs and Collections on iOS Adding Tabs to Traxy Handling Authentication and Refactoring Out Common Code Customizing UITabBarController to Handle Authentication Adding the Calendar Tab Adding Cover Photo Selection Tabs and Grid Layouts on Android Pager Adapter Update The Navigation Graph Adding Tabs Enhancing MainFragment Completing MonthlyFragment Adding Calendar Handling the Edit Button Querying and Displaying Photos Selecting Cover Photo Calendar Decorator Bottom Navigation Location and Maps Location Aware Apps Location Sensing Technologies Privacy Considerations Adding Location and Maps to Traxy Maps and Location on iOS Displaying and Interacting with Maps Maps and Location on Android Adding Maps to Traxy Handling Map Interactions Where am I? Mocked Locations in Android Studio Learning Swift Language Overview Variable Declarations Strings Collection Types Control Flow Functions Closures Tuples Optionals Objects Enums Structs Classes Protocols Extensions Further Study Learning Kotlin Inheritance and Overrides Constructors Static Members Data Class Implementing an Interface Child Class Constructor Variable Declarations Nullable Types and the Elvis Operator Using lateinit Lambda Expressions Control Structures Generalized ``Switch'' Functions Java Setters and Getters Java Setters and Getters