iOS 开发 Info.plist 详解
Info.plist(Information Property List)是 iOS/macOS 开发中核心的配置文件,用于存储应用的元数据、系统权限申请、功能开关等关键信息。系统在安装、启动、运行应用时,会优先读取该文件的配置,决定应用的行为(如是否允许推送、支持的设备方向、权限弹窗文案等)。它本质是一个 XML 格式的属性列表文件,Xcode 会自动生成基础模板,开发者需根据需求补充配置。
一、Info.plist 的基础信息
1. 位置与默认名称
- 默认路径:在 Xcode 项目的
TARGETS > [你的项目名] > Info面板中可视化编辑,对应的物理文件位于项目目录的[项目名]/Info.plist(若使用 SwiftUI 生命周期,可能在[项目名] > [项目名] > Info.plist)。 - 名称规则:默认名为
Info.plist,不可随意修改(系统会默认读取此名称的文件);若需多环境配置,可通过 Xcode 的「Build Settings > Packaging > Info.plist File」指定不同环境的配置文件(如Debug-Info.plist、Release-Info.plist)。
2. 核心作用
Info.plist 的配置直接影响应用的合法性、功能可用性、用户体验,主要作用包括:
- 向系统声明应用的基础信息(如 Bundle ID、版本号、支持的系统版本);
- 申请系统敏感权限(如相机、定位、相册,必须配置“权限弹窗文案”,否则应用会崩溃);
- 配置应用的运行规则(如支持的设备方向、是否允许后台运行、是否开启 ATS 网络安全);
- 关联系统功能(如推送通知、分享扩展、URL Scheme 跳转)。
二、Info.plist 关键配置项详解
Info.plist 中的配置项以「键(Key)- 值(Value)」形式存在,Xcode 中可通过“Human Readable Name”(易读名称)或“Raw Key”(原始键,XML 中实际存储的键)编辑。以下按“功能分类”介绍高频关键配置:
1. 应用基础信息(必配项)
这类配置决定应用的“身份标识”,缺少会导致应用无法编译或上架。
| 易读名称(Human Readable Name) | Raw Key(原始键) | 含义与配置说明 |
|---|---|---|
| Bundle identifier | CFBundleIdentifier | 应用唯一标识,格式为 com.公司名.应用名(如 com.apple.mail),需与 Apple Developer 账号中的 Bundle ID 一致,否则无法签名、测试或上架。 |
| Bundle name | CFBundleName | 应用的“短名称”,默认显示在手机桌面图标下方(若未配置 Bundle display name,则用此值),建议不超过 10 个字符。 |
| Bundle display name | CFBundleDisplayName | 应用的“显示名称”,优先级高于 Bundle name,用于桌面图标和系统弹窗(如权限弹窗中的应用名),需避免过长(iOS 桌面最多显示 12 个字符,超出会省略)。 |
| Bundle version | CFBundleVersion | 内部版本号(Build 号),用于开发者区分编译版本,必须是纯数字或点分隔的数字(如 1、1.0.1、123)。上架 App Store 时,每次提交的 Build 号必须大于上一次。 |
| Bundle short version string | CFBundleShortVersionString | 对外版本号(Version 号),显示给用户(如 App Store 详情页、应用内“关于”页面),格式通常为 主版本.次版本.修订号(如 1.0.0、2.1),可与 Bundle version 相同,但建议保持逻辑一致(如对外 1.0 对应内部 100)。 |
| MinimumOSVersion | MinimumOSVersion | 应用支持的最低 iOS 版本(如 12.0),需与 Xcode 中 TARGETS > Build Settings > Deployment Target 一致。低于该版本的设备无法安装应用。 |
2. 系统权限配置(核心必配项)
iOS 对“敏感权限”(如相机、定位、相册)有严格管控:必须在 Info.plist 中配置“权限申请弹窗文案”,否则调用权限相关 API 时应用会直接崩溃。文案需清晰说明“申请权限的目的”(如“需要相机权限以扫描二维码”),不可模糊(否则可能被 App Store 拒绝)。
| 权限类型 | 易读名称(Human Readable Name) | Raw Key(原始键) | 配置示例(Value) |
|---|---|---|---|
| 相机 | Privacy - Camera Usage Description | NSCameraUsageDescription | "需要访问相机以扫描二维码,完成登录验证" |
| 相册(读取) | Privacy - Photo Library Usage Description | NSPhotoLibraryUsageDescription | "需要访问相册以选择头像图片" |
| 相册(读写,iOS 11+) | Privacy - Photo Library Additions Usage Description | NSPhotoLibraryAddUsageDescription | "需要保存图片到相册" |
| 定位(前台) | Privacy - Location When In Use Usage Description | NSLocationWhenInUseUsageDescription | "需要获取您的位置以显示附近的门店" |
| 定位(后台,需额外配置) | Privacy - Location Always and When In Use Usage Description | NSLocationAlwaysAndWhenInUseUsageDescription | "需要在后台持续获取位置,以实时更新您的运动轨迹" |
| 麦克风 | Privacy - Microphone Usage Description | NSMicrophoneUsageDescription | "需要访问麦克风以录制语音消息" |
| 通知 | Privacy - Notifications Usage Description | NSNotificationsUsageDescription | "需要发送通知以提醒您订单状态更新" |
| 蓝牙 | Privacy - Bluetooth Always Usage Description(iOS 13+) | NSBluetoothAlwaysUsageDescription | "需要蓝牙权限以连接智能设备" |
| 通讯录 | Privacy - Contacts Usage Description | NSContactsUsageDescription | "需要访问通讯录以快速选择联系人发起聊天" |
3. 应用运行规则配置
这类配置决定应用的“运行行为”,如支持的设备方向、后台模式、网络安全等。
(1)设备方向(Supported Interface Orientations)
控制应用支持的屏幕旋转方向,Raw Key 为 UISupportedInterfaceOrientations(iPhone)和 UISupportedInterfaceOrientations~ipad(iPad,单独配置),Value 为数组,可选值如下:
UIInterfaceOrientationPortrait:竖屏(默认);UIInterfaceOrientationLandscapeLeft:左横屏;UIInterfaceOrientationLandscapeRight:右横屏;UIInterfaceOrientationPortraitUpsideDown:倒竖屏(iPhone 通常不支持,需手动开启)。
(2)后台模式(Background Modes)
若应用需要在后台持续运行(如音乐播放、后台下载),需先在 TARGETS > Signing & Capabilities 中添加「Background Modes」能力,再在 Info.plist 中配置对应的模式(Raw Key 为 UIBackgroundModes,Value 为数组),常见模式:
audio:后台音乐播放(如音乐 App);fetch:后台数据刷新(系统定期唤醒应用拉取数据);remote-notification:后台接收推送(收到推送后唤醒应用处理数据);location:后台定位(如导航 App);downloads:后台下载(如 App 内更新资源)。
(3)网络安全(App Transport Security,ATS)
iOS 9+ 引入 ATS,默认强制应用使用 HTTPS 网络(禁止 HTTP),若需支持 HTTP(如对接旧服务器),需在 Info.plist 中配置例外:
- 关闭 ATS 全局限制(不推荐,App Store 可能拒绝):添加 Key
NSAppTransportSecurity(字典类型),内部添加 KeyNSAllowsArbitraryLoads,Value 设为YES; - 指定 HTTP 域名例外(推荐):在
NSAppTransportSecurity下添加 KeyNSExceptionDomains(字典类型),内部添加具体域名(如example.com),并设置NSIncludesSubdomains(是否包含子域名,YES)和NSExceptionAllowsInsecureHTTPLoads(允许该域名 HTTP,YES)。
(4)启动页相关(iOS 13+ 推荐用 LaunchScreen.storyboard,旧版用 Info.plist)
UILaunchStoryboardName:指定启动页故事板名称(默认LaunchScreen);UILaunchImages(旧版):配置不同屏幕尺寸的启动图(已被 LaunchScreen.storyboard 替代,不推荐使用)。
4. 系统功能关联配置
(1)URL Scheme(应用间跳转)
用于实现“其他应用跳转到当前应用”(如微信分享后返回、第三方登录回调),配置方式:
- 添加 Key
CFBundleURLTypes(数组类型),数组内每个元素是字典; - 字典内添加
CFBundleURLName(URL 标识,如com.yourapp.urlscheme,可选)和CFBundleURLSchemes(数组,存储自定义的 Scheme,如yourapp); - 调用时,其他应用通过
urlscheme://格式跳转(如yourapp://callback?code=123)。
(2)推送通知(Push Notifications)
除了配置权限文案(NSNotificationsUsageDescription),还需配置推送相关标识:
UIBackgroundModes中添加remote-notification(后台接收推送);- iOS 10+ 若使用 UserNotifications 框架,无需额外配置;若需支持旧版,可能需配置
UIRemoteNotificationTypes(已废弃,推荐用新框架)。
(3)应用图标(Icon)
虽然图标通常在 Assets.xcassets 中管理,但 Info.plist 中会自动关联图标配置:
CFBundleIconName:指定图标在 Assets 中的名称(如AppIcon,默认);CFBundleIcons(旧版):配置不同尺寸的图标路径(已被 Assets 替代,不推荐)。
5. 其他常用配置
- 应用退出后保存数据:添加 Key
UIApplicationExitsOnSuspend,Value 设为YES(iOS 6+ 已废弃,默认应用退到后台时进入挂起状态,不退出); - 支持的文件类型:若应用需要打开特定文件(如 PDF、Excel),添加 Key
CFBundleDocumentTypes(数组),配置文件类型的CFBundleTypeName(名称)、LSHandlerRank(处理优先级,Owner表示优先)和LSItemContentTypes(文件类型标识符,如com.adobe.pdf); - iOS 16+ 锁屏小组件配置:添加 Key
NSSupportsLiveActivities,Value 设为YES(支持锁屏实时活动,如外卖进度)。
三、Info.plist 的编辑与注意事项
1. 编辑方式
- 可视化编辑:在 Xcode 中选中 Info.plist 文件,直接在面板中添加/修改 Key(通过下拉菜单选择预设 Key,避免拼写错误);
- 源码编辑:右键 Info.plist 文件,选择「Open As > Source Code」,直接编辑 XML 代码(适合批量配置或复制粘贴)。
2. 注意事项
- Key 拼写严格区分大小写:Raw Key(如
CFBundleIdentifier)不可拼写错误,否则配置无效; - 权限文案不可省略:敏感权限必须配置
Privacy - Xxx Usage Description,文案需“真实合理”,不可欺骗用户(如申请相机权限却用于定位,App Store 会拒绝); - 适配不同设备/系统版本:部分配置支持“设备/系统版本后缀”,如
UISupportedInterfaceOrientations~ipad(仅 iPad)、NSCameraUsageDescription~ios13.0(仅 iOS 13+),格式为Key~设备标识或Key~系统版本; - 上架前检查:提交 App Store 前需检查 Info.plist 配置,避免冗余配置(如未使用的后台模式)或违规配置(如无理由关闭 ATS)。
四、总结
Info.plist 是 iOS 应用的“身份证”和“说明书”,其配置直接影响应用的合法性、功能可用性和用户体验。开发者需重点掌握“基础信息配置”(确保应用能正常安装)、“权限文案配置”(避免崩溃和上架拒绝)和“运行规则配置”(适配业务需求,如后台、网络),并养成“按需配置、不冗余”的习惯,确保应用符合 iOS 系统规范和 App Store 审核要求。
需要我帮你整理一份「Info.plist 常用配置模板」吗?模板会包含基础信息、常用权限文案、ATS 例外等核心配置,你可直接复制到项目中修改使用。