xcode 中 info.plist 键值对应关系

一.元信息

为了提供更好的用户体验,每个APP或bundle都以来于特殊的元信息(meta Information).

元信息用途有:

1)直接像用户展示信息

2)系统内部用来识别你的APP或其支持的文档类型

3)系统框架用来辅助APP加载

通过一种特殊的信息属性列表文件,APP向系统提供自己的元信息.

属性列表可用来构建任意数据,这些数据在运行时是可以访问的.每个属性列表都包含了一个bundle的配置信息.

文件中的keys和values,即键值对则是一些

配置的选项.xcode通常为每个基于bundle的工程自动创建该属性列表文件,并且提供许多合适的keys以及对应默认的values.

之后可以编辑该文件,添加任何工程所需的keys和values,亦或根据需要修改现有的keys和对应的values.


每个application都使用info.plist文件来存储以上的元信息,iOS用info.plist来决定bundle所显示的icon,当前APP支持打开的文档类型等等.

当然,我们也可以根据需要创建其他plist配置文件,并在程序中加载该文件.例如,当使用极光推送时,我们需要创建一个PushConfig.plist的配置文件,

再如当我们实现tabview加载菜单项时,如果选择用plist初始化,图标,菜单名称等信息时,即可用如下方式实现,创建一个UserCenter.plist

//获取属性列表文件中的全部数据

    NSString    *plistpath = [[NSBundle mainBundle] pathForResource:@"UserCenter" ofType:@"plist"];
    NSArray     *listArray = [[NSArray alloc]initWithContentsOfFile:plistpath];

//tabview初始化cell

    NSUInteger row = [indexPath row];
    
    NSDictionary * rowDict = [listArray objectAtIndex:row];
    
    cell.textLabel.text =  [rowDict objectForKey:@"name"];
    NSString *imagePath = [[rowDict objectForKey:@"image"] stringByAppendingString:@".png"];
    cell.imageView.image = [UIImage imageNamed:imagePath];

二.AppStore 审核时,3.1 应用或者元数据中提到其他任何移动平台将会被拒.

还有2.8安装或启动其他可执行代码的应用程序将被拒绝.

项目中有未执行的文件代码,应用程序将被拒绝.没有上线经验的,有关其他审核要求可参考appstore审核指南

英文:

https://developer.apple.com/app-store/review/guidelines/

中文:

http://www.cocoachina.com/appstore/20141011/9883.html

三.info.plist文件

Info.plist本身是一种结构化的文本文件,它包含了一些重要的配置信息。Info.plist文件多数情况下是以UTF-8进行编码,并且其内部的配置内容其实是以XML格式进行组织。XML的根节点是一个词典(dictionary),包含描述bundle各个方面的keys和values。系统读取该文件,并获取app的配置信息。

创建新工程时生成的Info.plist文件,默认情况下会提供支持app加载和运行所需要的多数重要的keys以及初始化对应的values。在App的加载运行时,系统会收集Info.plist文件中所包含的配置信息。

1)以Xcode7.3.1为例,默认含有键值对信息:

Localization native development region: CFBundleDevelopmentRegion该束的唯一标识字符串,该字符串的格式类似 com.yourcompany.yourapp 本地化相关,如果⽤户所在地没有相应的语言资源,则用这个key的value来作为默认

Bundle identifier: CFBundleIdentidier 该束的唯一标识字符串,该字符串的格式类似 com.yourcompany.yourapp

InfoDictionary version:CFBundleInfoDictionaryVersion Info.plist 格式的版本信息

Bundle name:CFBundleName APP安装后显示的应用名称

Bundle versions string, short:CFBundleShortVersionString ⾯向用户市场的束的版本字符串

Bundle version: CFBundleVersion 应⽤程序版本号,每次部署应用程序的一个新版本时, 将会增加这个编号。

Supported interface orientations:UISupportedInterfaceOrientations 程序默认支持的设备方向

Supported interface orientations (iPad):同上,用于iPad,如果不选择支持iPad可删除此配置

2)Info.plist中key的类型分类

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

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

3)常用需要添加的字段

字典NSAppTransportSecurity含一个布尔类型的NSAllowsArbitraryLoads字段,设置为YES



        ....
    NSAppTransportSecurity
    
        NSAllowsArbitraryLoads
        
    




当你应用添加webview时,若不添加如上信息,则会报错NSURLSession/NSURLConnection HTTP load failed (kCFStreamErrorDomainSSL, -9802)

或者:App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

原因是iOS9中新增App Transport Security(简称ATS)特性, 主要使到原来请求的时候用到的HTTP,都转向TLS1.2协议进行传输。这也意味着所有的HTTP协议都强制使用了HTTPS协议进行传输。

这段配置中的NSAppTransportSecurity是ATS配置的根节点,配置了节点表示告诉系统要走自定义的ATS设置。而NSAllowsAritraryLoads节点则是控制是否禁用ATS特性,设置YES就是禁用ATS功能。












你可能感兴趣的:(IOS)