Thuta Learning
BasicMobile Developmentintermediate

iOS Project Structure

Relax. We'll talk through this in plain words — no textbook voice.

What you'll walk away with

  • Understand iOS Project Structure, without any of the intimidation
  • Get hands-on running Xcode/SwiftUI code yourself
  • Apply this concept immediately in a real project

Let's think about this for a moment

`Info.plist` is your app's 'ID card' — it lays out the app name, permission usage descriptions (camera, location), supported orientations, and the minimum iOS version. `Assets.xcassets` is a resource catalog that organizes your images, icons, and colors — it auto-selects the right image variant based on the device's resolution (1x/2x/3x). `App.swift` (`@main struct MyApp: App`) is the entry point that runs first when the app launches.

Let's connect this to a real-world scenario

If you want to use the camera feature, you need to add the `NSCameraUsageDescription` key to `Info.plist` with a user-facing explanation string like 'Camera access is needed to take photos' — if you skip this and call the camera API, your app will crash immediately (this is stricter than Android's runtime permission request flow).

Let's look at it together

swift
// App.swift
import SwiftUI

@main
struct MyApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
        }
    }
}

// Info.plist (excerpt)
// <key>NSCameraUsageDescription</key>
// <string>We need camera access to let you take photos.</string>
You should see
You should be able to distinguish the roles of the three project structure files (Info.plist/Assets/App.swift).

Try it in 5 minutes

Open up `Info.plist`, `Assets.xcassets`, and `App.swift` in your Xcode project and jot down notes on what each one does.

A quick word of caution

If you write your `Info.plist` usage description strings too generically or vaguely (like 'App needs access'), Apple's App Store review can reject your app — be specific about exactly why you need each feature.

Easy traps

  • Forgetting to add a permission usage description string to `Info.plist` — calling a feature (like camera or location) without it can cause an immediate crash (a more severe failure mode than on Android)
  • Adding only a single resolution for an image asset instead of the full set of variants (1x/2x/3x) — this can look blurry on high-resolution devices

Now try it yourself

Open up `Info.plist`, `Assets.xcassets`, and `App.swift` in your Xcode project and jot down notes on what each one does.

You'll know it worked when: You should be able to distinguish the roles of the three project structure files (Info.plist/Assets/App.swift).

iOS Project Structure | Thuta Learning