一.元信息
为了提供更好的用户体验,每个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
....
当你应用添加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功能。