Info.plist 实战指南:从基础配置到高级应用

张开发
2026/4/15 10:13:15 15 分钟阅读

分享文章

Info.plist 实战指南:从基础配置到高级应用
1. Info.plist入门认识iOS应用的身份证第一次打开Xcode创建项目时系统会自动生成这个名为Info.plist的神秘文件。它就像你应用的身份证记录着从应用名称到权限要求的所有关键信息。我刚开始接触iOS开发时曾经完全忽略这个文件的存在直到应用因为缺少相机权限描述被App Store拒审三次后才意识到它的重要性。这个XML格式的文件实际上是一组键值对集合Xcode会把它编译成二进制格式打包进应用。你可以用文本编辑器直接打开查看但更推荐通过Xcode的图形化界面编辑。在项目导航器中找到Info.plist右键选择Open As→Property List就能看到清晰的分类视图。最基础的配置包括CFBundleIdentifier应用唯一标识符格式通常是反域名如com.公司名.应用名、CFBundleDisplayName显示在桌面的应用名称和版本信息。这里有个坑我踩过当你的应用名称包含特殊字符时必须在DisplayName里使用转义字符否则打包时会报错。keyCFBundleDisplayName/key stringMyamp;App/string !-- 符号需要转义 --2. 权限配置让应用合法访问系统功能当你的应用需要访问相机、相册或位置时必须在Info.plist中添加对应的使用描述。苹果的隐私政策越来越严格缺少这些描述会导致审核直接被拒。去年我帮朋友排查一个崩溃问题发现就是因为调用了相册API但没配置对应的权限描述。常见的权限键包括NSCameraUsageDescription相机访问说明NSPhotoLibraryUsageDescription相册访问说明NSLocationWhenInUseUsageDescription使用时定位说明NSFaceIDUsageDescriptionFace ID使用说明这些描述文本会直接显示在系统权限弹窗上所以应该用清晰的语言告诉用户为什么需要这个权限。比如不要简单写需要访问位置而应该写需要您的位置信息来推荐附近的餐厅。keyNSLocationAlwaysAndWhenInUseUsageDescription/key string我们需要持续获取位置来为您提供实时导航服务/string3. 深度链接配置打造无缝应用跳转体验URL Scheme是让其他应用唤醒你的应用的秘密通道。在电商类App中我们常用这个功能实现从H5页面跳转到原生App指定页面。配置方法是在Info.plist中添加CFBundleURLTypes数组每个元素代表一种URL Scheme。最近一个项目需要对接微信登录就遇到个典型问题微信要求URL Scheme必须全小写但我们项目规范要求包含大写字母。最后不得不用了个折中方案——同时注册大小写两个Scheme。keyCFBundleURLTypes/key array dict keyCFBundleTypeRole/key stringEditor/string keyCFBundleURLSchemes/key array stringmyapp/string stringMYAPP/string /array /dict /arrayUniversal Links是更现代的深度链接方案它不需要通过Scheme跳转而是直接使用https链接。配置起来稍复杂需要在Info.plist中添加Associated Domains同时还需要配置apple-app-site-association文件放在服务器上。4. 多语言适配让应用说用户的语言如果你的应用要支持多语言Info.plist里的本地化配置就至关重要。CFBundleLocalizations数组定义了应用支持的语言代码但实际显示名称需要在各语言的InfoPlist.strings文件中定义。有个容易忽略的细节iOS会根据设备语言自动选择资源但如果用户语言不在支持列表中会默认使用开发语言。我建议至少支持英语作为fallback否则在某些地区可能显示乱码。keyCFBundleLocalizations/key array stringen/string stringzh-Hans/string stringja/string /array在本地化实践中应用名称也可以本地化。只需要在不同语言的InfoPlist.strings文件中配置CFBundleDisplayName即可。比如中文环境下显示我的应用英文环境下显示My App。5. 安全配置保护用户数据安全App Transport Security (ATS)是苹果引入的网络安全机制要求所有网络请求必须使用HTTPS。但在开发过程中我们经常需要连接测试服务器的HTTP接口。这时候就需要配置ATS例外。我见过最极端的做法是直接关闭ATSNSAllowsArbitraryLoads设为true但这会导致审核风险。正确的做法是针对特定域名添加例外keyNSAppTransportSecurity/key dict keyNSExceptionDomains/key dict keyyourtestsite.com/key dict keyNSIncludesSubdomains/key true/ keyNSTemporaryExceptionAllowsInsecureHTTPLoads/key true/ /dict /dict /dict另一个安全相关配置是防止应用截图被系统相册保存。在金融类App中这通常是必配项keyUIApplicationSupportsAlternateIcons/key true/ keyLSSupportsOpeningDocumentsInPlace/key true/6. 高级技巧与疑难排查经过多个项目实践我总结了一些Info.plist的高级用法。比如使用变量动态配置参数这在多环境配置时特别有用keyAPI_BASE_URL/key string$(API_BASE_URL)/string然后在Build Settings的Preprocessor Macros中定义API_BASE_URL的值不同编译配置使用不同值。排查Info.plist问题时我常用的方法是检查XML格式是否正确特别是标签闭合确认键名拼写完全正确区分大小写查看Xcode编译后的最终文件在DerivedData目录下使用plutil命令验证文件有效性plutil -lint Info.plist发布前务必检查这些关键项版本号是否更新所有权限描述是否完整支持的设备方向是否正确图标文件是否存在URL Scheme是否冲突记得有次凌晨提交审核后被打回就是因为忘记更新版本号导致与上一个审核版本冲突。现在我的checklist里这一项总是用红色标注。

更多文章