🌍 Mobile App Development · subject

Mobile App Development Native iOS Development Syllabus

The Native iOS Development syllabus for Mobile App Development in full: 6 chapters and 24 topics, every one listed below, plus 51 Native iOS Development flashcards with answers.

6Chapters
24Topics
51Flashcards

Native iOS Development syllabus: all 6 chapters

Expand any chapter to see its topics and sub-topics.

  1. Xcode and Project Setup

    4 topics
    • Xcode IDE and Interface Builder
    • Project Structure and Targets
    • Simulators and Devices
    • Asset Catalogs and App Icons
  2. SwiftUI

    4 topics
    • Views and Modifiers
    • State and Data Flow
    • Navigation and Presentation
    • Animations and Transitions
  3. UIKit

    4 topics
    • View Controllers and Lifecycle
    • Auto Layout and Constraints
    • Table and Collection Views
    • UIKit and SwiftUI Interoperability
  4. Concurrency and Networking

    4 topics
    • URLSession and REST Calls
    • Async/Await and Structured Concurrency
    • Combine Framework
    • Codable and JSON Parsing
  5. Data Persistence on iOS

    4 topics
    • UserDefaults and Keychain
    • Core Data
    • SwiftData
    • File System and Caching
  6. Apple Platform Services

    4 topics
    • Push Notifications (APNs)
    • Core Location and MapKit
    • Sign in with Apple
    • In-App Purchases and StoreKit

Mobile App Development Native iOS Development flashcards — 51 questions with answers

  1. In Xcode, what is the difference between Interface Builder's Storyboard and a XIB (NIB) file?

    A Storyboard describes multiple view controllers and the segues (transitions) between them in one file, capturing app flow. A XIB/NIB describes a single, standalone view or view-controller hierarchy with no flow information.

  2. What Xcode file bundles the settings that tell the compiler and linker how to build a product, and how does it relate to a target?

    Build settings (the Build Settings tab / .xcconfig files) define compiler/linker flags. Each target owns its own build settings, and a target defines one product (app, framework, test bundle) built from a chosen set of source files and resources.

  3. In an Xcode project, what is the distinction between a Project, a Target, and a Scheme?

    A Project is the container of files and settings. A Target produces a single build product from a subset of those files. A Scheme defines which targets to build and how (Run, Test, Profile, Archive configurations).

  4. What is a Build Configuration in Xcode, and name the two default ones.

    A named collection of build settings applied during a build. The two defaults are Debug (unoptimized, with debug symbols) and Release (optimized, for distribution).

  5. What is the purpose of the Info.plist file in an iOS target?

    It is a property-list dictionary of runtime configuration metadata: bundle identifier, version, display name, supported orientations, required device capabilities, and usage-permission strings.

  6. What is the difference between the iOS Simulator and a physical device for testing?

    The Simulator runs the app in a macOS process using host CPU/RAM, so it is fast but cannot test hardware-only features (camera, GPS accuracy, real performance, Bluetooth) or true ARM performance. A physical device gives real hardware behavior and requires code signing / provisioning.

  7. Why can't the iOS Simulator reliably test app performance and memory pressure?

    The Simulator uses the Mac's (typically far more powerful) CPU, GPU, and memory, so timings and resource limits do not reflect the constrained ARM device environment.

  8. In an Asset Catalog (.xcassets), what is an Image Set and why does it contain multiple slots (1x, 2x, 3x)?

    An Image Set groups the resolution variants of a single image asset. The 1x/2x/3x slots hold the same image at different pixel densities so iOS automatically picks the correct one for each device's screen scale.

  9. What is the recommended way to provide app icons in modern Xcode, and what format allows a single image?

    Use the App Icon set in the Asset Catalog. Modern Xcode supports supplying a single 1024x1024 image and letting Xcode generate all required sizes.

  10. In SwiftUI, what is a View and what single requirement does the View protocol impose?

    A View is a lightweight, value-type description of a piece of UI. The View protocol requires a computed property `var body: some View` that returns the view's content.

  11. In SwiftUI, what is a modifier and how does chaining order affect the result?

    A modifier is a method that returns a new view wrapping the original with an added behavior or style. Order matters because each modifier wraps the previous result; e.g. applying `.padding()` before vs after `.background()` changes whether the background includes the padding.

  12. In SwiftUI, distinguish `@State`, `@Binding`, and `@StateObject`.

    `@State` is source-of-truth value state owned locally by a view. `@Binding` is a read/write reference to state owned elsewhere. `@StateObject` creates and owns an observable reference-type model instance for the view's lifetime.

  13. In SwiftUI, what is the difference between `@StateObject` and `@ObservedObject`?

    `@StateObject` instantiates and owns the object, guaranteeing it survives view re-creation. `@ObservedObject` merely observes an object owned elsewhere and is re-subscribed each time the view is recreated (so creating one here risks it being deallocated).

  14. In SwiftUI, what does `@EnvironmentObject` provide over `@ObservedObject`?

    `@EnvironmentObject` reads a shared observable object injected into the environment by an ancestor view, so it doesn't need to be passed explicitly through every intermediate view's initializer.

  15. What protocol must a SwiftUI reference-type model conform to so views update when its properties change, and what marks the observable properties (pre-iOS 17)?

    It must conform to `ObservableObject`, and properties that should trigger updates are marked with `@Published`.

  16. What does the iOS 17 `@Observable` macro replace, and what is one advantage?

    It replaces the `ObservableObject` + `@Published` pattern. An advantage is fine-grained tracking: a view only re-renders when a property it actually reads changes, rather than on any published change.

  17. In SwiftUI, what is the difference between `NavigationStack` and `.sheet`?

    `NavigationStack` pushes destinations onto a hierarchical stack with a back-button drill-down. `.sheet` modally presents a view sliding up over the current context, dismissed independently of the navigation hierarchy.

  18. In SwiftUI's `NavigationStack`, what is value-based navigation using `navigationDestination`?

    You push data values (e.g. via `NavigationLink(value:)` or by appending to a bound path), and `.navigationDestination(for:)` maps each value type to the view to display, decoupling navigation from view construction.

  19. In SwiftUI, what does `withAnimation` do and how does it differ from attaching `.animation(_:value:)`?

    `withAnimation { ... }` animates all view changes caused by the state mutation inside the closure (explicit animation). `.animation(_:value:)` implicitly animates a view whenever the specified value changes.

  20. In SwiftUI, what is a `matchedGeometryEffect` used for?

    It links two views across a state transition so SwiftUI interpolates their frames, creating a seamless hero-style animation as one element appears to morph or move into another.

Show the other 31 Native iOS Development flashcards
  1. In SwiftUI, what is a `transition` and give an example.

    A transition describes how a view animates in and out when it is inserted or removed from the hierarchy, e.g. `.transition(.opacity)`, `.slide`, or `.scale`, applied within an animated state change.

  2. List the ordered UIViewController lifecycle callbacks from creation through appearance.

    `loadView` → `viewDidLoad` → `viewWillAppear` → `viewWillLayoutSubviews` → `viewDidLayoutSubviews` → `viewDidAppear`.

  3. In UIKit, what is the key difference between `viewDidLoad` and `viewWillAppear`?

    `viewDidLoad` runs once when the view hierarchy is first loaded into memory (good for one-time setup). `viewWillAppear` runs every time the view is about to become visible (good for refreshing data on each appearance).

  4. In UIKit Auto Layout, what does the equation of a constraint express?

    Each constraint expresses a linear relationship of the form $item_1.attribute_1 = multiplier \times item_2.attribute_2 + constant$, with a relation of $=$, $\leq$, or $\geq$.

  5. In Auto Layout, what is a constraint's priority range and what does required priority equal?

    Priorities range from $1$ to $1000$. A required constraint has priority $1000$; lower priorities create optional constraints that the layout engine satisfies only when possible.

  6. In Auto Layout, what are content hugging priority and content compression resistance priority?

    Content hugging priority resists a view growing larger than its intrinsic content size; compression resistance priority resists a view shrinking smaller than its intrinsic content size.

  7. What is `translatesAutoresizingMaskIntoConstraints` and what must you do with it when adding constraints in code?

    It converts a view's autoresizing mask into implicit constraints. When defining your own constraints programmatically you must set it to `false` to avoid conflicting auto-generated constraints.

  8. Compare UITableView and UICollectionView.

    UITableView shows a single-column vertical list of rows grouped into sections. UICollectionView supports arbitrary layouts (grids, flow, custom, compositional) via a layout object, generalizing tables to two-dimensional arrangements.

  9. Why do UITableView and UICollectionView reuse cells, and which method provides a recycled cell?

    Reuse avoids allocating a cell for every item, keeping memory and scrolling performance bounded to on-screen cells. `dequeueReusableCell(withIdentifier:for:)` returns a recycled (or newly created) cell.

  10. In a UITableView data source, what do `numberOfRowsInSection` and `cellForRowAt` each return?

    `numberOfRowsInSection` returns the count of rows for a given section. `cellForRowAt` returns the configured `UITableViewCell` for a specific index path.

  11. What is a modern Diffable Data Source and what problem does it solve?

    `UITableViewDiffableDataSource` / `UICollectionViewDiffableDataSource` drive updates from immutable snapshots of sections and item identifiers, computing and animating differences automatically, eliminating manual `insert/delete` batch-update crashes from inconsistent counts.

  12. How do you embed a SwiftUI view inside a UIKit view controller?

    Wrap the SwiftUI view in a `UIHostingController` and add that controller as a child view controller (or use its `.view`).

  13. How do you embed a UIKit view or view controller inside SwiftUI?

    Conform a struct to `UIViewRepresentable` (for a UIView) or `UIViewControllerRepresentable` (for a UIViewController), implementing the make/update methods and optionally a Coordinator for delegation.

  14. In UIViewRepresentable, what is the role of the Coordinator?

    The Coordinator is an object that acts as delegate/data source or target-action handler for the wrapped UIKit view, bridging UIKit callbacks back into SwiftUI state.

  15. What is the basic sequence to perform a GET request with URLSession using completion handlers?

    Create a `URL`, build a `URLRequest` (or use the URL directly), call `URLSession.shared.dataTask(with:) { data, response, error in ... }`, then call `.resume()` to start the task.

  16. In URLSession, why must you call `.resume()` on a data task?

    Tasks are created in a suspended state; `.resume()` starts execution. Forgetting it means the network request never fires.

  17. What is the async/await equivalent of a URLSession data task, and what does it return?

    `let (data, response) = try await URLSession.shared.data(from: url)` (or `data(for: request)`), returning a tuple of the response body `Data` and the `URLResponse`.

  18. In Swift concurrency, what is the difference between `async let` and a `TaskGroup`?

    `async let` binds a fixed, statically known number of concurrent child tasks awaited later. A `TaskGroup` spawns a dynamic number of child tasks (e.g. in a loop) and collects their results, all with structured lifetimes.

  19. What does the `@MainActor` attribute guarantee?

    It guarantees the annotated code (property, method, or type) runs on the main thread/main actor, which is required for updating UIKit/SwiftUI UI.

  20. In structured concurrency, what does it mean that child tasks have bounded lifetimes?

    A parent task cannot complete until all its child tasks have finished (or been cancelled), so task lifetimes are nested within the enclosing scope, preventing leaked or orphaned work.

  21. What is the difference between `Task { }` and `Task.detached { }`?

    `Task { }` inherits the current actor context, priority, and task-local values. `Task.detached { }` creates an unstructured task with no inherited context, running independently of the enclosing scope.

  22. In the Combine framework, what are a Publisher and a Subscriber?

    A Publisher emits a sequence of values over time along with a completion or failure. A Subscriber receives those values and the terminal event; `sink` and `assign` are common subscribers.

  23. In Combine, what is the role of an operator, and give two examples.

    An operator transforms, filters, or combines values in a publisher chain, returning a new publisher. Examples: `map` (transform each value) and `filter` (drop values failing a predicate); others include `debounce` and `combineLatest`.

  24. In Combine, why is `AnyCancellable` important?

    Subscribing (via `sink`/`assign`) returns an `AnyCancellable`; you must retain it (e.g. in a `Set<AnyCancellable>`) or the subscription is cancelled and deallocated immediately.

  25. In Swift's Codable, what is the difference between Encodable and Decodable?

    `Encodable` lets a type serialize itself to an external format (e.g. JSON). `Decodable` lets a type be created from external data. `Codable` is the typealias `Encodable & Decodable`.

  26. How do you decode a JSON payload into a Codable struct, and how do you map differing JSON key names?

    Use `try JSONDecoder().decode(MyType.self, from: data)`. Map differing names either with a `CodingKeys` enum or by setting `decoder.keyDecodingStrategy = .convertFromSnakeCase`.

  27. In JSONDecoder, what does `dateDecodingStrategy` control and name a common value?

    It controls how JSON date values are parsed into `Date`. Common values include `.iso8601`, `.secondsSince1970`, `.millisecondsSince1970`, and `.formatted(_:)`.

  28. What is UserDefaults appropriate for, and what should it NOT store?

    UserDefaults stores small amounts of lightweight user preferences and settings as a property list. It should not store large data or sensitive secrets (it is not encrypted).

  29. Why use the Keychain instead of UserDefaults for storing passwords or tokens?

    The Keychain is an encrypted, access-controlled secure store backed by the Secure Enclave/hardware, whereas UserDefaults is stored in plaintext in the app container and is not secure for credentials.

  30. In Core Data, what are the roles of NSManagedObjectContext and NSPersistentContainer?

    `NSManagedObjectContext` is the in-memory scratchpad where you create, fetch, modify, and delete managed objects and then `save()`. `NSPersistentContainer` sets up the whole Core Data stack (model, coordinator, store, and a main-thread viewContext).

  31. In Core Data, what is an NSFetchRequest and how do you constrain and order its results?

    An `NSFetchRequest` describes a query for a given entity. You constrain results with an `NSPredicate` and order them with an array of `NSSortDescriptor` objects.

Mobile App Development Native iOS Development FAQ

What is in the Mobile App Development Native iOS Development syllabus?

Mobile App Development Native iOS Development is split into 6 chapters: Xcode and Project Setup, SwiftUI, UIKit, Concurrency and Networking, Data Persistence on iOS and Apple Platform Services. Together they contain 24 topics.

How many chapters are in Mobile App Development Native iOS Development?

6 chapters, containing 24 topics. The largest chapter is Xcode and Project Setup, with 4 topics.

Are there flashcards for Mobile App Development Native iOS Development?

Yes — a 51-card Native iOS Development deck, printed in full in the flashcards section of this page and available in the Examius app with spaced repetition. The free plan covers one exam of your choice, including its flashcards; Examius Pro, a one-time purchase, unlocks every other exam and deck.