App Programming Guide for iOS -&
每个新Xcode项目都为能正确的运行在iOS模拟器上或者设备上进行了配置。但是只是简单的运行在设备上并不意味着你的应用已经准备好在App Store上销售。每个应用要求有一定量的定制来确保为用户提供良好的体验。自定义的范围能包含从为应用提供一个图标,到制定关于应用如何呈现和如何使用信息的架构级决策。本章描述的行为,是所有应用都期望处理的,并且你应该在计划阶段就开始考虑。
提供所需的资源
每个你创建的应用必须有下面一系列的资源和源数据,这样它才能在iOS设备上正确显示:
- 一个information property-list(信息属性列表)文件。Info.plist文件包含关于应用的源数据,系统使用这些来与应用进行交互。Xcode根据项目的配置和设置自动为你创建这个文件。如果你想直接查看或者修改这个文件的内容,你可以在项目的Info选项卡中进行。关于编辑这个文件以及你应该包含什么键的建议,参见The Information Property List File。
- 应用要求的功能声明。每个应用必须声明运行所需的硬件能力或者功能。App Store使用这些信息确定在特定设备上用户能否运行你的应用。你能在项目的Info选项卡的Required device capabilities条目中编辑应用的需求列表。关于如何配置这个键,详见Declaring the Required Device Capabilities。
- 一个或多个图标。系统在用户设备的主屏幕上显示你的应用图标。系统也在Setting应用或显示搜索结果的时候使用其他版本的图标。关于如何指定应用图标的信息,详见App Icons。
- 一个或多个启动图片。当应用被启动,系统显示一张临时的图片,直到应用能够显示它的用户界面为止。这张临时图片就是应用的启动图片,它给用户提供一个即时反馈,让用户感觉到应用已经启动并很快就会完成准备。你起码要为你的应用提供一张启动图片,并且你或许需要为特定的屏幕提供额外的启动图片。关于创建启动图片的信息,详见App Launch (Default) Images。
这些资源是所有应用都需要的,但不是唯一你应该包含的资源。默认情况下,有很多键Xcode并没有包含在应用的Info.plist文件里。一旦你合并特定的功能到你的应用,很多额外的键就会很重要。例如,应用使用麦克风就应该包含NSMicrophoneUsageDescription键,并向用户提供关于应用会如何使用它的信息。
应用程序束(Bundle)
但你构建iOS应用的时候,Xcode把它打包成一个bundle(束)。一个束是一个在文件系统中的目录,它把相关的资源分组放在一起。一个iOS应用程序束包含应用的可执行文件和支持资源文件,例如应用图标、图片文件、以及本地化内容。表1-1罗列了一个典型iOS应用程序束的内容,出于演示目的,这个束被称为MyApp。这个例子仅用于说明目的。表中所列的某些文件或许不会出现在你的应用程序束中。
表1-1 一个典型的应用程序束
文件 | 例子 | 描述 |
---|---|---|
App executable | MyApp | 可执行文件包含应用的编译代码。应用的可执行文件的名字和应用的名字就多了一个.app扩展名。 该文件是必须的。 |
The information property list file | Info.plist | Info.plist文件包含app的配置数据。系统使用这些数据来决定如何和应用进行交互。 这个文件是必须的,且必须命名为 Info.plist。更多信息,参见The Information Property List File. |
App icons | Icon.png Icon@2x.png Icon-Small.png Icon-Small@2x.png |
图标在设备的主屏幕上代表的是你的应用。其他图标被系统用在了合适的地方。文件名带有@2x的图标适用于带有Retina显示器的设备。 应用图标是必须的。关于特定的图标图片文件的信息,参见App Icons。 |
Launch images | Default.png Default-Portrait.png Default-Landscape.png |
当应用启动的时候,系统使用这个文件作为临时的背景。一旦应用准备好显示它自己的用户界面的时候,它会被移除。 起码要有一张启动图片。关于特定启动图片的信息,参见App Launch (Default) Images。 |
Storyboard files (or nib files) | MainBoard.storyboard | Storyboard包含应用显示在屏幕上的视图和视图控制器。在storyboard中的视图被呈现它们的视图控制器组织。storyboard还识别将用户从一组视图带到另一组视图的转换(称为segue)。 当你的项目创建的时候,Xcode设置了一个名为main storyboard的文件。你可以通过分配一个不同的值到 Info.plist文件中的UIMainStoryboardFile键来改变这个名字。应用使用nib文件代替storyboard可以通过将UIMainStoryboardFile键替换为NSMainNibFile键,并把这个键指定为主nib文件实现。 使用storyboard(或nib文件)是可选的,但是建议使用。 |
Ad hoc distribution icon | iTunesArtwork | 如果你正在临时分发你的应用,那么就需要包含一个512 x 512像素版本的应用图标(icon)。这个图标通常由App Store从你提交到iTunes Connect中的资料中提供。但是,因为应用是临时分发,不经过App Store,所以你的图标必须存在于你的应用程序束中。iTunes使用这个图标来表示你的应用。(如果你的应用通过这种方式分发,那么你指定的文件应该和你想将要提交到App Store中的一致。) 这个图标的名字必须是iTunesArtwork,并且不能有扩展名。这个文件必须用于临时发布,但是可以没有这个图标。 |
Settings bundle | Settings.bundle | 如果你想通过Settings应用公开自定义应用首选项(preferences),你必须要包含设置束(settings bundle)。这个束包含属性列表(property list)数据和定义应用首选项的其他资源文件。Settings应用使用这个束中的信息来组合应用所需的元素界面。 这个束是可选的。更多关于首选项和定制一个设置束的信息,参见Preferences and Settings Programming Guide。 |
Nonlocalized resource files | sun.png mydata.plist |
非本地化(nonlocalized)资源包括应用使用的图片、声音文件、电影、以及自定义数据文件。所有这些文件应该位于应用程序束的顶层位置。 |
Subdirectories for localized resources | en.lproj fr.lproj es.lproj |
本地化资源必须位于特定语言(language-specific)项目目录中,它的名字由一个ISO 639-1语言所写加上.lproj后缀组成。(例如, en.lproj, fr.lproj, 以及 es.lproj目录包含本地化的英语、法语、以及西班牙语的资源。) 一个 iOS应用应该是国际化的,并且为它支持的每种语言提供一个 (语言.lproj)目录。除了提供应用的自定义资源本地化版本,你还可以通过在特定语言项目目录中放置同名文件来本地化应用图标、启动图片、以及Settings图标。 更多信息,参见 Internationalizing Your App。 |
注意:iOS应用程序束不能包含一个名为Resources的自定义目录。
更多关于iOS应用程序束结构的信息,参见Bundle Programming Guide。关于如何从你的束中加载资源文件,参见Resource Programming Guide。
属性列表(property list)文件信息
在编译的时候,Xcode使用来自项目的General、Capabilities、以及Info选项卡中的信息为应用产生一个信息属性列表(Info.plist)。Info.plist文件是个结构化的文件,它包含关于应用配置的关键信息。它会被App Store和iOS用来确定应用的功能,以及定位关键资源。每个应用都必须包含这个文件。
尽管Info.plist文件通过Xcode提供了所有必须条目的默认值,但是大多数引用需要一些更改或添加。只要有可能,使用General和Capabilities选项卡来指定应用配置信息。这些选项卡包括了大多数应用可用的一般性配置选项。如果你在这两个选项卡中没有看到特定的选项,那就使用Info选项卡。
对于Xcode没有提供自定义配置界面的选项,你必须使用Xcode属性列表编辑器来直接提供合适的键和值。在Info选项卡的Custom iOS Target Properties部分包含了所有在Info.plist文件中的条目的摘要。默认情况下,Xcode显示期望功能的可读描述,但每个功能实际上对应Info.plist文件中的唯一键。很多键是可选的且很少用到,但这里有几个键需要你在定义一个新项目的时候考虑:
- 在Info选项卡中声明应用所需的功能。Required device capabilities部分包含了应用运行所需的关于设备级别功能的信息。App Store使用这个条目提供的信息来确定应用的功能,并且阻止不支持应用要求的功能的设备安装它。更多信息,参见Declaring the Required Device Capabilities。
- 要求持续Wi-Fi连接的应用必须声明。如果应用通过网络和服务器对话,你必须添加Application uses Wi-Fi条目到项目的Info选项卡。这个条目对应Info.plist文件的UIRequiresPersistentWiFi键。将此键设置为YES,阻止iOS在长时间不活动的时候关闭Wi-Fi连接。此键推荐所有使用网络和服务器进行通信的应用使用。
- Newsstand应用必须自己声明。包含UINewsstandApp键来表明应用提供了来自Newsstand应用的内容。
- 定义了自定义文档类别的应用必须声明这些类型。使用Info选项卡中的Document Types部分来为你支持的文档格式指定icons和UTI信息。系统使用这个信息来识别能处理特定文件类型的应用。更多关于向你应用添加文档支持的信息,参见 Document-Based App Programming Guide for iOS。
- 应用能声明任何它支持的自定义URL方案。使用Info选项卡中的URL Types部分来指定应用处理的自定义URL方案。应用能使用自定义URL方案来彼此通信。更多关于如何实现折现功能的信息,参见Using URL Schemes to Communicate with Apps。
- 应用必须为访问用户数据和某些应用功能提供目的字符串(有时候被称为“使用描述”)。当应用访问用户数据或者设备功能涉及到隐私内容的时候,iOS提示用户并代表应用请求许可。应用必须通过在Info.plist文件中定义目的字符串来向用户解释为什么它要请求访问。如果你试图在没有提供相应的目的字符串就访问,应用推出。需要用户许可的数据和功能在表1-2中描述。目标字符串在Information Property List Key Reference的Cocoa Keys章节被描述。
关于你能在Info.plist文件中包含的键与值的具体信息,参见Information Property List Key Reference。
声明所需的设备功能
所有应用必须声明它们运行所需的特定设备功能。Xcode在项目的Info选项卡中包含一个Required device capabilities条目并用最小需求填充。你能给这个条目添加值来指定应用的额外需求。 Required device capabilities条目在Info.plist文件中对应UIRequiredDeviceCapabilities键。
UIRequiredDeviceCapabilities键的值可以是数组也可以是字典,它们包含包含识别特定应用所需功能(或特定的禁止)的额外的键。如果你使用数组指定键的值,存在的键表示这个功能是必需的;不存在的键表示这个功能不是必需的,且应用可以在没有它们的时候仍可运行。如果你使用自店,字典中的每个键必需有一个布尔值来表示这个功能是必需的还是被禁止的。值true表示这个功能是必需的,值flase表示这个功能必须不能出现在设备中。如果给定的功能对于应用是可选的,不要包含字典的对应键。
可以包含在UIRequiredDeviceCapabilities键的值的具体信息,参见Information Property List Key Reference。
应用图标(icon)
每个应用必须提供图标用来在设备的主屏幕上和App Store中显示。应用实际上可以为不同情况指定多个不同的图标。例如,当现实搜索结果时应用要提供一个小图标,而对Retina显示器则提供高分辨率的图标。
新Xcode项目包含一个访问应用图标图片的图片资源入口。想要添加图标,分配合适的图片文件到项目的图片资源中。在构建的时候,Xcode添加相应的键给你的Info.plist文件,并在应用束中放置图片。
关于设计应用图标的信息,包括这些图标的尺寸,参见iOS Human Interface Guidelines。
应用启动图片
当系统第一次在设备上启动应用的时候,它会在屏幕上临时显示一张静态的启动图片。这个图片是你的应用启动图片,它是一个你在Xcode项目中指定的资源。启动图片提供给一个即时反馈,表明你的应用已经启动,正在准备初始化用户界面。当应用窗口配置完毕并且准备好显示的时候,系统会用这个窗口来替换启动图片。
当最近的应用的用户界面快照可用时,系统会使用这个快照而不是启动图片。当应用从前台转换到后台的时候,系统会的到应用用户界面的快照。当应用返回到前台的时候,只要有可能,它就会使用这个图片代替启动图片。在用户杀死了应用进程或者有太长时间没有使用的情况下,系统会丢弃这个快照而再次使用启动图片。
新Xcode项目包含一个访问应用启动图片的图片资源入口。想要添加启动图片,分配合适的图片文件到项目的图片资源中。在构建的时候,Xcode添加相应的键给你的Info.plist文件,并在应用束中放置图片。
关于设计应用启动图片的信息,包括这些图标的尺寸,参见iOS Human Interface Guidelines。
(未完待续......)