IOS之Info.plist文件简介

元信息简介

    为了提供更好的用户体验,IOS 和 OS X的每个app或bundle都依赖于特殊的元信息(meta Information).

    元信息有多种用途,包括

  • 直接向用户展示信
  • 系统内部用来标识你的app或其支持的文档类型
  • 系统框架用来辅助app的加载
      通过一种特殊的信息属性列表文件,app向系统提供自己的元信息。 

      属性列表可用来构建任意数据,这些数据在运行时是可访问的。每个属性列表都包含了一个bundle的配置信息。文件中的keys和values描述了许多要应用于该bundle的行为以及配置选项。Xcode通常会为每个基于bundle的工程自动创建该属性列表文件,并且提供许多合适的keys以及其对应的默认的values。之后可以编辑该文件,添加任何工程所需的keys和values,或修改现有的keys所对应的values。 

Info.plist文件  

      每个application都使用Info.plist文件来存储以上的元信息,从名称上也可以判断出Info.plist就是以上提到的“属性列表”。IOS用Info.plist来决定bundle所显示的icon,当前app支持打开的文档类型,等等其它的信息。正如以上所提到的,Info.plist本身是一种结构化的文本文件,它包含了一些重要的配置信息。Info.plist文件多数情况下是以UTF-8进行编码,并且其内部的配置内容其实是以XML格式进行组织。XML的根节点是一个词典(dictionary),包含描述bundle各个方面的keys和values。系统读取该文件,并获取app的配置信息。 

      按照约定,属性列表文件的名称就是Info.plist。该文件名称时大小写敏感的,并且首字母必须是大写的"I".在IOS的apps中,当新工程创建完毕后,会自动创建一个名为-Info.plist文件,该文件位于bundle目录(Supporting Files)的顶部,在工程构建时,该文件用以生成Info.plist文件,之后添加至bundle中。我们以TestPro为例,当用Xcode创建名为TestPro工程后,其目录结构如下: 

IOS之Info.plist文件简介_第1张图片

     我们以TestPro为例,当用Xcode创建名为TestPro工程后,其目录结构如下

IOS之Info.plist文件简介_第2张图片

在Info.plist中添加key

     创建新工程时生成的Info.plist文件,默认情况下会提供支持app加载和运行所需要的多数重要的keys以及初始化对应的values。在App的加载运行时,系统会收集Info.plist文件中所包含的配置信息。根据App的需要,我们可以添加所需的额外的keys,当我们选中每行配置选项时,在key所属列的右侧,会出现“+”“-”示意的标记,
IOS之Info.plist文件简介_第3张图片
    单击加号,会在当前行的下一行插入新行,之后可以选择性的添加新key,并设置其value.plist的type一栏提供了value的可选数据类型,包括:String,Date,Array,Number,Data,Boolean,Dictionary。

IOS之Info.plist文件简介_第4张图片  
       因为plist也属于文本文件,并以XML格式进行内容的组织,我们可以用任何支持UTF-8的文本编辑器打开并对其进行各种编辑操作。但因为Xcode本身提供的对于plist文件内容的操作已经非常方便,基本上利用Xode编辑plist还是首选。要查看XML下plist文件的内容我们可以选中TestPro-Info.plist文件然后右键——>Open As ——>Source Code 

IOS之Info.plist文件简介_第5张图片

     之后打开的文件格式如下:

IOS之Info.plist文件简介_第6张图片

Info.plist中key的类型分类

根据功能的分类,Info.plist文件的keys大致划分为以下几类

           Core Foundation Keys                 

          该类的keys的特点是以CF为前缀,用以代表Core Foundation,描述了一些常用的行为项

          Lanch Services Keys  
            加载服务项,提供了App加载所依赖的配置,描述了app启动的方式选择。 

          Cocoa Keys  
            Cocoa框架或Cocoa Touch框架依赖这些keys来标识更高级别的配置项目,如app的main nib文件,主要类。这些key描述影响着Cocoa和Cocoa Touch框架初始化和运行app的运行方式 

          UIKit Keys  
            描述IOS Apps的行为,每个IOS应用都依赖于Info.plist的keys来与IOS系统通信。Xcode提供了生成的plist文件提供了所有app所需的那些比较重要的keys。 
            但app可能需要扩展默认的plist来描述更多的信息,如定制app启动后的默认旋转方向,标识app是否支持文件共享等等。 

          OS X Keys 
            描述了Mac Apps的行为,本章不描述。 

Info.plist配置项说明

1、设置启动图标(CFBundleIcons)

1
2
3
4
5
6
7
8
9
10
11
12
CFBundleIcons

  CFBundlePrimaryIcon
  
      CFBundleIconFiles
      
          Icon
          Icon@2x
          Icon_120@2x
      
  

2、设置启动闪屏图片(UILaunchImages)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
UILaunchImages

  
      UILaunchImageMinimumOSVersion
      7.0
      UILaunchImageName
      Default
      UILaunchImageOrientation
      Portrait
      UILaunchImageSize
      {320, 568}
  
  
      UILaunchImageMinimumOSVersion
      7.0
      UILaunchImageName
      Default
      UILaunchImageOrientation
      Portrait
      UILaunchImageSize
      {320, 480}
  

3、设置版本号相关

(1)设置Bundle的版本号(Bundle versions string, short)。

一般包含该束的主、次版本号,这个字符串的格式通常是“n.n.n”(n表示某个数字,如1.1.1)。第一个数字是束的主要版本号,另两个是次要版本号。该关键字的值会被显示在Cocoa应用程序的关于对话框中。该关键字不同于CFBundleVersion,它指定了一个特殊的创建号。而CFBundleShortVersionString的值描述了一种更加正式的并且不随每一次创建而改变的版本号。

1
2
CFBundleShortVersionString
1.0

(2)设置应用程序版本号(Bundle version)。

每次部署应用程序的一个新版本时,将会增加这个编号,用于标识不同的版本。

1
2
CFBundleVersion
1.0

4、设置字体相关(Fonts provided by application)

在iOS应用中需要使用系统提供的字体之外的字体,可以将字体文件(.ttf/.odf)复制到项目文件中,另外需要在Info.plist中添加Fonts provided by application的项,对应的源码文件如下:

1
2
3
4
5
6
UIAppFonts

  华文行楷.ttf
  华文新魏.ttf
  黑体_GB2312.ttf

P.S关于如何使用系统支持的字体信息:

(1)在调用字体的时候,要使用字体名。字体名不是文件名,而是字体的Family Name。Family Name可以在Font Book中查看。

label.font = [UIFont fontWithName:@"字体名称" size:16.0];

(2)遍历出系统支持的全部字体

1
2
3
4
5
6
7
8
9
10
11
NSArray *familyNames = [[NSArray alloc] initWithArray:[UIFont familyNames]];
for(int indFamily = 0; indFamily < familyNames.count; ++indFamily)
{
  NSLog(@"Family Name: %@", [familyNames objectAtIndex:indFamily]);
  NSString *fontFamilyName = [familyNames objectAtIndex:indFamily];
  NSArray *fontNames = [[NSArray alloc] initWithArray:[UIFont fontNamesForFamilyName:fontFamilyName]];
  for(int indFont = 0; indFont < fontNames.count; ++indFont)
  {
      NSLog(@"   Font Name: %@", [fontNames objectAtIndex:indFont]);
  }
}

5、设置应用名称(Bundle display name)

1
2
CFBundleDisplayName
应用程序名称

可以通过在InfoPlist.strings中使用配置让应用在不同的语言环境下显示不同的应用名称,如在English中使用CFBundleDisplayName="Hello World";配置应用程序的名称为Hello World,在Chinese的环境下使用CFBundleDisplayName="你好世界";配置应用程序的名称为你好世界

6、设置应用标识号(Bundle identifier)

1
2
CFBundleIdentifier
com.devzeng.demo

7、设置应用支持的屏幕方向(Supported interface orientations)

iOS应用程序支持以下四个方向的设置:UIInterfaceOrientationPortrait(默认竖直方向,HOME键向下)、UIInterfaceOrientationLandscapeLeft(横屏靠左)、UIInterfaceOrientationLandscapeRight(横屏向右)和UIInterfaceOrientationPortraitUpsideDown(竖直方向倒置,HOME键向上)

对应的配置源码如下:

1
2
3
4
5
6
7
UISupportedInterfaceOrientations

  UIInterfaceOrientationPortrait
  UIInterfaceOrientationLandscapeLeft
  UIInterfaceOrientationLandscapeRight
  UIInterfaceOrientationPortraitUpsideDown

8、设置应用程序是否支持后台运行(Application does not run in background)

通过UIApplicationExitsOnSuspend可以设置iOS的应用程序进入到挂起状态下是否立即退出,设置为YES表示不支持后台运行退出到后台立即退出,设置为NO表示支持后台运行。

(1)设置支持后台运行

1
2
UIApplicationExitsOnSuspend

(2)设置不支持后台运行

1
2
UIApplicationExitsOnSuspend

参考资料

1、《Information Property List Key Reference》

2、《iOS工程中的info.plist文件的完整研究》

3、《在iOS程序中使用自定义字体》

你可能感兴趣的:(IOS之Info.plist文件简介)