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
// 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 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.