IOS开发Info.plist详解

493 阅读8分钟

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.plistRelease-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 identifierCFBundleIdentifier应用唯一标识,格式为 com.公司名.应用名(如 com.apple.mail),需与 Apple Developer 账号中的 Bundle ID 一致,否则无法签名、测试或上架。
Bundle nameCFBundleName应用的“短名称”,默认显示在手机桌面图标下方(若未配置 Bundle display name,则用此值),建议不超过 10 个字符。
Bundle display nameCFBundleDisplayName应用的“显示名称”,优先级高于 Bundle name,用于桌面图标和系统弹窗(如权限弹窗中的应用名),需避免过长(iOS 桌面最多显示 12 个字符,超出会省略)。
Bundle versionCFBundleVersion内部版本号(Build 号),用于开发者区分编译版本,必须是纯数字或点分隔的数字(如 11.0.1123)。上架 App Store 时,每次提交的 Build 号必须大于上一次。
Bundle short version stringCFBundleShortVersionString对外版本号(Version 号),显示给用户(如 App Store 详情页、应用内“关于”页面),格式通常为 主版本.次版本.修订号(如 1.0.02.1),可与 Bundle version 相同,但建议保持逻辑一致(如对外 1.0 对应内部 100)。
MinimumOSVersionMinimumOSVersion应用支持的最低 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 DescriptionNSCameraUsageDescription"需要访问相机以扫描二维码,完成登录验证"
相册(读取)Privacy - Photo Library Usage DescriptionNSPhotoLibraryUsageDescription"需要访问相册以选择头像图片"
相册(读写,iOS 11+)Privacy - Photo Library Additions Usage DescriptionNSPhotoLibraryAddUsageDescription"需要保存图片到相册"
定位(前台)Privacy - Location When In Use Usage DescriptionNSLocationWhenInUseUsageDescription"需要获取您的位置以显示附近的门店"
定位(后台,需额外配置)Privacy - Location Always and When In Use Usage DescriptionNSLocationAlwaysAndWhenInUseUsageDescription"需要在后台持续获取位置,以实时更新您的运动轨迹"
麦克风Privacy - Microphone Usage DescriptionNSMicrophoneUsageDescription"需要访问麦克风以录制语音消息"
通知Privacy - Notifications Usage DescriptionNSNotificationsUsageDescription"需要发送通知以提醒您订单状态更新"
蓝牙Privacy - Bluetooth Always Usage Description(iOS 13+)NSBluetoothAlwaysUsageDescription"需要蓝牙权限以连接智能设备"
通讯录Privacy - Contacts Usage DescriptionNSContactsUsageDescription"需要访问通讯录以快速选择联系人发起聊天"

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(字典类型),内部添加 Key NSAllowsArbitraryLoads,Value 设为 YES
  • 指定 HTTP 域名例外(推荐):在 NSAppTransportSecurity 下添加 Key NSExceptionDomains(字典类型),内部添加具体域名(如 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 例外等核心配置,你可直接复制到项目中修改使用。