Info.plist:是什么、必需键及启动配置

作者: IT Sectr 发布日期: 2026-05-31 阅读时间: 8 分钟

Info.plist 是 iOS 和 macOS 应用的 XML 配置文件,包含元数据、权限和启动设置。它在应用代码初始化之前由系统处理。根据 Apple Developer, 2025,如果没有正确配置 Info.plist,应用将无法通过 App Store 审核。Info.plist 定义了捆绑包标识符、构建版本、请求的权限以及支持的屏幕方向。

要点

  • Info.plist — 包含 iOS/macOS 应用配置键的 XML 字典,格式为 plist
  • Bundle identifier — 苹果生态系统中用于签名和服务的应用唯一标识符
  • 隐私键(NSCameraUsageDescription)是访问相机、麦克风和地理位置所必需的
  • 自定义 URL 方案 通过 CFBundleURLTypes 键配置用于深度链接
  • UIRequiredDeviceCapabilities 设置从 App Store 安装的最低设备要求

什么是 Info.plist

Info.plist 是一种 XML 格式的文件,根元素为 dict,包含属性列表形式的键值对。它位于应用捆绑包内部,在每次启动时由系统在代码执行之前读取。plist 格式支持字符串、数字、数组、字典、日期和布尔值,从而能够描述复杂的配置。

Apple 使用 Info.plist 来定义应用的标识、功能和需求。更改某些键需要重新构建 捆绑包,因为它们会影响 App Store 在加载构建时检查的元数据。例如,发布后更改 CFBundleVersion 或 CFBundleIdentifier 可能会中断应用的更新过程,因为 App Store Connect 使用这些值来标识版本。

基本键在 Xcode 中创建项目时会自动生成,但大多数 设置 随着应用功能的开发而手动添加。Xcode 提供了带有标准键下拉列表的图形化 Info.plist 编辑器,从而降低了拼写错误的风险。然而,对于 Scene Manifest 或 Background Modes 等复杂配置,建议直接编辑源 XML。

Info.plist 必需键

某些 Info.plist 键是发布到 App Store 所 必需 的。缺少它们会导致构建在验证阶段被拒绝。Apple 在通过 Xcode Organizer 或 Transporter 上传存档时会自动检查这些键。开发人员必须在提交审核之前确保所有必填字段已正确填写。

捆绑包标识符

CFBundleIdentifier 键以反向域名表示法(com.company.appname)设置应用的唯一标识符。它用于代码签名、推送通知、CloudKit、App Groups 以及许多其他 Apple 服务。发布后更改标识符会被 App Store 视为新应用,现有用户将不会收到更新。因此,标识符应在应用的整个生命周期内保持不变。

xml
<key>CFBundleIdentifier</key>
<string>com.itsectr.myapp</string>

应用版本

CFBundleShortVersionString(显示版本)和 CFBundleVersion(构建编号)键由 App Store Connect 和系统用于管理更新。版本以 major.minor.patch 格式指定。构建编号必须随着上传到 App Store Connect 的每个构建而增加,即使应用版本没有变化。Apple 使用 CFBundleVersion 来确定构建是新构建还是已上传构建的副本。如果构建编号与先前上传的匹配,则会显示 ITMS-90161 错误。

xml
<key>CFBundleShortVersionString</key>
<string>1.2.0</string>
<key>CFBundleVersion</key>
<string>42</string>

支持的界面方向

UISupportedInterfaceOrientations 键定义了 iPhone 支持的屏幕方向。对于 iPad,使用带有设备后缀的单独键 UISupportedInterfaceOrientations~ipad。每个方向由一个字符串指定:UIInterfaceOrientationPortrait、UIInterfaceOrientationLandscapeLeft、UIInterfaceOrientationLandscapeRight、UIInterfaceOrientationPortraitUpsideDown。如果应用仅支持竖屏方向,App Store 将拒绝该构建,除非它仅适用于 iPhone 并且仅为 iPad 指定了竖屏。

xml
<key>UISupportedInterfaceOrientations</key>
<array>
    <string>UIInterfaceOrientationPortrait</string>
    <string>UIInterfaceOrientationLandscapeLeft</string>
</array>

权限和隐私键

从 iOS 10 开始,Apple 要求通过带有 NS(NeXTStep)前缀的键 描述 每个请求的权限。描述在首次请求访问私有 API 时在系统对话框中显示给用户。在调用需要权限的 API 时缺少相应的 NS 键会导致应用立即终止并抛出异常,该异常仅记录在崩溃日志中。

用途
NSCameraUsageDescription访问相机以拍照和录像
NSPhotoLibraryUsageDescription访问照片库
NSLocationWhenInUseUsageDescription在使用中的地理位置
NSMicrophoneUsageDescription访问麦克风以录制音频
NSContactsUsageDescription访问设备联系人

每个隐私键必须包含用户可理解的请求原因 描述。空的或模板化的文本,例如“为了应用运行”或“需要访问”,会导致被 App Store 拒绝。描述应解释具体功能:“需要访问相机以扫描二维码和创建个人资料照片”。建议通过 InfoPlist.strings 文件为每种支持的语言使用本地化的描述版本。

在调用具有私有数据访问权限的 API 时缺少所需的 NS 键会导致应用 崩溃。系统以异常终止进程,这仅在 Xcode 或 Firebase Crashlytics 的崩溃报告日志中可见。用户只能看到应用突然关闭而没有任何解释。因此,在添加使用相机、麦克风或地理位置的新功能之前,必须先在 Info.plist 中添加相应的隐私键,然后实现 API 调用。

自定义 URL 方案和 App Links

CFBundleURLTypes 键注册用于应用中深度链接的自定义 URL 方案。这允许通过 myapp://profile/123 形式的链接从浏览器、电子邮件或其他应用打开应用。每个方案唯一标识应用:如果两个应用注册了相同的方案,系统会向用户显示选择对话框。

xml
<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLName</key>
        <string>com.itsectr.myapp</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>myapp</string>
        </array>
    </dict>
</array>

要支持 Universal Links,需要在 Entitlements 文件中使用 com.apple.developer.associated-domains 键,而不是在 Info.plist 中。Universal Links 仅在服务器上存在配置的 apple-app-site-association 文件(将域与应用关联)时才能工作。与自定义 URL 方案不同,Universal Links 不显示确认对话框,也不与其他应用冲突,因为它们使用 HTTPS 链接而不是自定义方案。但是,它们需要具有有效 SSL 证书的域。

自定义方案可能与 iOS 标准 方案 冲突。建议使用长度至少为 4 个字符的方案,以最大程度地减少与其他应用的冲突。例如,„fb” 方案太短,可能会导致冲突。最好使用反向表示法:myapp:// 而不是 app://。还要记住,如果应用被删除但另一个应用注册了相同的方案,用户在通过链接导航时可能会遇到意外行为。

启动配置和后台模式

UIBackgroundModes 键声明应用的后台能力。每种模式都需要在 Info.plist 中进行相应描述并在 Xcode 项目的能力中进行确认。如果没有指定模式,系统可能会在 30 秒后或资源不足时强制终止后台任务。

xml
<key>UIBackgroundModes</key>
<array>
    <string>fetch</string>
    <string>remote-notification</string>
    <string>location</string>
    <string>processing</string>
</array>

UIApplicationSupportsMultipleScenes 键启用 iPad 和 Mac Catalyst 上的多任务支持。没有此键,应用无法使用 SwiftUI ScenePhase 或 UIKit UISceneDelegate 来管理多个窗口。在 iPadOS 上,用户可以打开同一应用的多个窗口,在它们之间拖拽内容,以及使用 Split View。如果应用不支持多窗口模式,将此键设置为 false 将禁用相应的功能。

LSRequiresIPhoneOS 键禁止在 iPad 上安装应用。用于不支持 iPad 界面或未适应大屏幕的仅限 iPhone 的应用。但是,Apple 不建议在不需要时使用此键,因为用户期望应用能在所有运行 iOS 和 iPadOS 的设备上运行。如果应用仍然仅限于 iPhone,请确保此要求在技术上是合理的,并在 App Store 描述中注明。

UIViewControllerBasedStatusBarAppearance 键控制状态栏的样式。如果设置为 NO,状态栏样式通过 Info.plist 中的 UIStatusBarStyle 键全局设置。如果为 YES(iOS 7 以来的默认值),每个 ViewController 可以通过覆盖 preferredStatusBarStyle 来管理自己的状态栏。对于现代应用,建议保留 YES,以便在不同屏幕上有不同的状态栏,例如在深色背景上使用浅色,在浅色背景上使用深色。

UIApplicationExitsOnSuspend 键强制应用在切换到后台模式时完全退出而不是暂停。很少使用,仅用于安全要求高的应用:银行应用或处理机密数据的应用。在这种情况下,用户失去了快速返回应用的能力,每次启动都从干净状态开始。App Store 可能在审核时要求对此键的使用进行证明。

NSAppTransportSecurity 键管理应用的网络连接。从 iOS 9 开始,App Transport Security(ATS)默认阻止所有 HTTP 连接,要求使用 HTTPS。要临时允许对特定域的 HTTP 请求,使用 NSAppTransportSecurity 内部的 NSExceptionDomains 字典。在开发中,允许通过 NSAllowsArbitraryLoads = true 完全禁用 ATS,但 Apple 需要理由,并且没有充分理由不会通过此类构建。在生产构建中,必须对所有与用户数据交互的域启用 ATS。

常见问题

如何在 Xcode 项目中找到 Info.plist?

Info.plist 文件位于与应用名称相同的项目文件夹中。在 Xcode 中,它显示在 Supporting Files 组内的项目导航器中,图标为蓝色小册子。也可以通过项目中的 Spotlight 搜索找到它。

可以手动编辑 Info.plist 吗?

可以,Info.plist 可以在任何文本编辑器或通过 Xcode 的图形界面进行编辑。手动编辑提供了对内容的完全控制,但需要注意 XML 语法:每个 opening 指令 <key> 必须有对应的 </key>,数据类型必须符合 Apple 的期望。

在 SwiftUI 项目中 Info.plist 是什么?

在 SwiftUI 项目中,Info.plist 的工作方式与 UIKit 项目完全相同。此外,如果项目不使用 App 协议来管理场景,可能需要 UIApplicationSceneManifest 键来配置 Scene Configuration。SwiftUI App 协议会自动生成场景配置,但自定义需要手动添加键。

如何在 Info.plist 中添加自定义键?

在 Xcode 中打开 Info.plist,点击加号,然后输入 的名称。对于自定义键,使用公司前缀以避免与 Apple 系统键冲突,例如 ITSCustomKey 而不是 CustomKey。值类型(String、Number、Array、Dictionary)根据预期的数据格式选择。

为什么 App Store 由于 Info.plist 拒绝了构建?

典型原因:缺少请求 权限 的隐私键、错误的 CFBundleIdentifier、Info.plist 和 App Store Connect 中的版本不匹配、NS 键值为空。检查所用 API 的所有 NS 键,并确保每个描述包含应用本地化语言的有意义的解释。

总结

  • Info.plist — 带有元数据、权限和启动设置的 iOS/macOS 应用的 XML 配置
  • CFBundleIdentifier 和 CFBundleVersion — 用于在 App Store 中标识和发布的必需键
  • 隐私键(NSCameraUsageDescription)是访问相机、麦克风和其他私有 API 所必需的
  • 自定义 URL 方案 通过 CFBundleURLTypes 配置,Universal Links 通过 Entitlements 和 apple-app-site-association 配置
  • UIBackgroundModes 声明应用的后台能力以在后台正确运行
  • 缺少 必需键会导致应用崩溃或 App Store 构建拒绝
  • 编辑 Info.plist 可通过 Xcode 界面或带有 XML 语法检查的文本编辑器进行

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读