规划你的 iOS App

如果你刚接触 iPhone 软件开发,请花些时间来熟悉将要用到的工具和技术。Apple 提供了你入门所需的一切,各种 iOS 技术也能帮助你实现 App 的理想功能和性能。

含有 iOS App 新创意的故事板。

    探索无限可能

    在为 iPhone 创建 App 时,初始开发路径会影响你随后要做的许多决定。在挑选路径时,要立足于你要提供的内容类型以及你希望内容呈现的外观:

    用标准视图合成 UI

    利用 iOS 中内建的按钮、文本标签以及其他标准视图和控件,快速地构建 App。自定控件的外观或创建全新的视图,以独特的方式展示你的内容。这种做法适用于大多数 App,而且还能缩短开发时间。

    使用标准 UI 元素来构建视图的 iPhone Donut App

    亲自绘制屏幕上的一切

    全面掌控你 App 的外观,亲自绘制屏幕上显示的一切。使用自定 2D 或 3D 环境,创建游戏或沉浸式体验。利用 Metal 等技术,以高帧率渲染你的内容并制作动画。

    使用标准 UI 元素来构建视图的 iPhone Donut App

    在为 App 选定了大方向后,请进一步思考你可能需要的其他功能。除了一些核心技术外,你还可以根据需要采用许多技术来支持特定的功能。iOS 技术不仅可让 App 不必考虑低级硬件细节,还为你提供一个稳定的基础来打造 App 的其余部分。

    从何处着手

    软件开发从 Xcode 开始,这是 Apple 的集成式开发环境。Xcode 提供一套齐全的软件开发工具,包括项目管理支持、代码编辑器、可视化 UI 编辑器、调试工具、面向不同设备的模拟器,以及用于评估性能的工具,等等。Xcode 还包含一整套系统代码模块 (称为框架),以辅助你开发软件。

    Mac App Store 下载 Xcode

    Xcode 包含适用于 iOS、iPadOS、macOS、Apple tvOS 和 watchOS 的 SDK。

    要在 Xcode 中创建新项目,请选取“File”(文件) >“New”(新建) >“Project”(项目),然后按提示操作。Xcode 会根据你的初始 App 类型来提供一些选项。你选取的选项决定了项目的初始配置,包括 Xcode 提供什么样的默认代码。App 类型也定义了用于创建 App UI 的方法。例如,选择“Game”(游戏) 选项可利用几种图形技术之一来绘制 App 的内容。有关如何使用 Xcode 的更多信息,请查看 Xcode 文档

    采用 Swift

    在设置项目时,请考虑你要使用哪一种编程语言。Swift 是首选,因为其语法非常简洁,从设计上保证安全,而且还有让代码更富表现力的现代特性。此外,Swift 代码能够生成运行速度飞快的软件,并可与 Objective-C 互操作,因此你可以在同一项目中同时包含这两种语言的源代码文件。

    《Swift 编程语言指南》

    《Swift 编程语言指南》 全面概述了 Swift 编程语言,是你 Swift 学习之旅的理想起点。

    挑选 App 构建器技术

    你还应在早期做出另一个选择,即你准备将哪一种 App 构建器技术用于你的界面。Apple 的 App 构建器技术提供了 iOS 与你的 App 通信所需要的核心基础架构。它们也定义了编程模型,供你用于构建界面和处理事件等。

    SwiftUI

    SwiftUI 是首选的 App 构建器技术,因为它为构建 UI 和 App 基础架构提供了一种与平台无关的现代方法。通过使用 SwiftUI,你能够以编程方式指定界面,并让系统动态显示和更新这个界面,在 Xcode 编辑器内也一样如此。如需有关使用 SwiftUI 的引导式演示,请查看“SwiftUI 简介” 教程。

    UIKit

    通过使用 UIKit,你可以在代码中以编程方式构建你的界面,或者使用 Storyboard 以可视化方式来构建。UIKit 为构建 App 提供了一种更加传统的方法,让你能够全面掌控界面元素的管理。编写更新视图和控件所需要的代码,更改它们的配置,并将更改传达给 App 的其余部分。如需使用 UIKit 构建 App 的演示,请查看“Today 入门” 教程。

    如果不确定从何处着手,请选取 SwiftUI 作为你的 App 构建器技术。SwiftUI 和 UIKit 都可为你提供编写 App 所需的一切,但 SwiftUI 能让你的开发之旅有一个更好的起点。此外,SwiftUI 和 UIKit 是可以互操作的,因此选择其中一种技术不会妨碍你在同一 App 中使用另一种。你可以在同一视图层次结构中轻松地混合使用 SwiftUI 视图和 UIKit 视图。

    SwiftUI 和 UIKit 可与 Apple 的数据管理技术无缝协作,为你的界面创建提供助力。Swift 标准资料库Foundation 框架 提供了数组和字典等结构类型,以及字符串、数字、日期和其他常用数据值等值类型。对于你定义的任何自定类型,可以采用 Swift 的 Codable 支持 将这些类型持久保留在磁盘上。如果你的 App 管理大量的结构化数据,Core DataCloudKit 提供了面向对象的模型来管理和持久保留你的数据。

    设计用户体验

    App 通过提供引人入胜的体验来留住用户。为创造这种体验,你的 UI 需要外观精美、布局易于理解,并且凸显恰当的内容。此外,UI 交互也要直观明了,并与现有的模式吻合。最重要的是,在 iPhone 上呈现的界面要感觉自然。

    《人机界面指南》

    Apple 的《人机界面指南》 提供了宝贵的信息,指导你设计 App 界面、导航内容,以及管理 iPhone 上的交互。在探索 iOS 生态系统时,务必重视并仔细阅读这些指南,使用相应的 Apple 设计资源来深入设计你的 App。

    谨慎处理不同的 iPhone 尺寸、显示方向和外观自定。iPhone 提供诸多尺寸选择,而且用户可能会以竖屏或横屏方向使用 iPhone。他们也可能会通过更改一些系统设置来自定 App 和系统的外观。要支持所有这些自定,你要确保采用以下功能:

    场景

    场景是一种程序级对象,可以管理你的 App 的界面。将场景对象用作 App 核心基础架构的一部分,并用它们来调整 App 在重要时刻的行为。iOS 依托场景来同时运行你的界面的多个实例。如需有关如何支持场景的信息,请查看 SwiftUIUIKit 文档。

    自动布局

    与其手动调整视图位置来适配不同的屏幕尺寸、显示方向和配置,不如告诉系统如何相对于当前安全区域 进行这些调整。SwiftUI 采用自动布局,作为其 UI 设计方法的一部分。要在 UIKit 视图中采用自动布局,请为你的界面添加自动布局约束

    外观变体

    构建你的 UI,支持系统层面的外观变化。用户可通过深色模式选取浅色或深色 UI,也可通过辅助功能设置来选取高对比度 UI。不同的外观依赖于不同的调色盘和图像素材,你可以借助素材目录 来管理它们。对于 UI 的其余部分,可使用系统 API 来判断何时需要在浅色、深色或高对比度内容之间切换。如需相关信息,请查看“在你的界面中支持深色模式”

    动态类型

    用户可能会要求系统使用大号字体让文本更易看清,或使用小号字体在屏幕上容纳更多信息。这时也需对 App 的文本进行相应调整来匹配这些字号更改。采用标准文字样式 来自动做出这些更改,或者使用系统 API 手动更新包含自定字体的文本。在 SwiftUI 中,请从视图的环境 获取新的文本大小。在 UIKit 中,请从特征集合获取新的文本大小。

    可缩放图像

    融合 SF Symbols,让你的 App 更自如地适应更改。“SF Symbols” App 提供一个由可配置的矢量图像组成的庞大集合,这些图像能够自然地适应外观和尺寸变化。它们也能与 San Francisco 系统字体完美搭配,在不同 Apple 平台上形成统一的外观。请查看“在你的 UI 中配置和显示符号图像”

    你可能不觉得 iOS App 需要菜单,但不管如何,请添加它们。给你的 iOS App 添加菜单,用户就能选择从连接的键盘操控你的 App。另外,如果你使用 Mac Catalyst 为你的 iOS App 创建 Mac 版本,你也能在 App 的 Mac 版本中使用这些菜单。如需更多信息,请查看 SwiftUIUIKit文档。

    让 App 的界面体验在每次启动时保持连续性。每当用户启动你的 App 时,让它恢复之前的状态和外观,以便用户从最近一个停止点继续。这种连续性是不可或缺的,因为系统可能会终止后台 App 以收回内存和资源。如需更多信息,请查看“使用 SwiftUI 恢复 App 的状态”(SwiftUI) 或“在各次启动之间保持 App 的 UI 不变”(UIKit)。

    在开发期间采用最佳做法

    以下做法能帮助你为每个用户提供最佳体验:

    保护用户的隐私

    隐私非常重要,因此请告知用户你将如何使用他们的数据。如果你收集数据,请提供隐私声明来阐述你将如何使用这些信息。如果你使用会操作个人数据的 Apple 技术,请附上使用说明,以便系统在首次使用时显示。如需更多信息,请查看“保护用户的隐私”

    保护你收集和储存的数据

    如果你确实要收集数据,请务必保护这些数据免受恶意攻击。采用通行密钥,作为替代密码的一种保护方法。将个人身份信息、财务数据或其他敏感数据储存在用户的加密钥匙串 中。使用磁盘加密 或其他 Apple 安全技术 来储存其他个人数据。使用 Apple CryptoKit 对你储存在本地或发送到 App 外的数据进行加密。

    审查你的辅助功能支持

    Apple 已将辅助功能支持直接内置于其各项技术中,但屏幕阅读器和其他辅助功能仍需依赖你的 App 提供的信息。SwiftUI 和 UIKit 可以描述 UI 的每一部分,但只有你知道这些部分是如何在一起协同工作的。检查辅助功能标签和其他描述,确保它们提供了实用的信息,并确保基于焦点的导航简约且直观。如需更多信息,请查看“辅助功能”

    打造国际化和本地化的 App

    针对其他地区和语言打造本地化的 App,拥抱全球化市场。利用 Foundation 框架 准备你的 App,它可提供代码来根据不同语言和地区对字符串、日期、时间、货币和数字进行格式调整。确保你的 UI 对从左到右和从右到左 的语言都有良好呈现。将 App 资源本地化,并将它们添加到你的 Xcode 项目中。如需有关国际化和本地化流程的信息,请查看“本地化”

    为每个人而设计

    在开发内容时考虑社会和文化方面的差异,避免使用对你的部分受众隐含负面或贬损意义的图像和词语。如需更多信息,请查看“包容性”

    全面测试和调试 App

    在开发环节,使用内建 Xcode 调试器在出现问题时进行调试。使用 XCTest 构建自动化测试套件并在每次构建时运行,以验证新代码的运行是否与预期相符。使用 Xcode Cloud 的持续集成系统,实现自动构建你的 App、自动完成测试循环及向 QA 团队自动分发。

    优化你的 App 性能

    利用 Xcode 附带的 Instruments App,排查代码中的瓶颈和其他性能问题。对运行代码进行性能测试,查找内存泄漏,分析资源使用,以及进行更多其他检查。如需有关使用 Instruments 收集指标的信息,请查看“提升 App 的性能”

    为 App 选择商业模式

    通过各种商业模式在全球范围内分发你的 App,包括免费、免费但提供 App 内购买项目、付费下载等。你所构建的界面应能提供一致性的体验,并支持你所选择的商业模式。如需更多信息,请查看“为 App 选择商业模式”

    面向多个平台构建

    如果你在 iOS 上开始开发,不妨同时添加对 iPadOS 的支持。iOS 和 iPadOS 共享许多相同的技术,同一个可执行文件能够轻松地同时支持这两个平台。

    此外,也可利用你为 iOS 编写的相同代码支持其他平台。App 中几乎所有基于结构和数据的代码都可在任何 Apple 平台上重复利用。Apple 技术也让你能够轻松地重复利用你 App 的 UI 和其他部分:

    在所有 Apple 平台上重复利用 SwiftUI 视图和 UI

    SwiftUI 的普遍适用性使它成为一个理想的开发选择,并且缩短了在不同平台上交付 App 的自定版本所花费的时间。

    使用 Mac Catalyst 快速创建 iOS App 的 Mac 版本

    使用 Mac Catalyst 为你的 App 重新构建一个在 macOS 上运行的版本。你的其余时间可投入于调优 App 的体验,使它更加自然地契合 Mac 平台。如需更多信息,请查看“Mac Catalyst”

    无需修改,在配备 Apple 芯片的 Mac 上运行你的 iOS App

    如需相关信息,请查看“在 macOS 上运行 iOS App”

    如何更进一步

    当你的 App 准备就绪并能正常运行时,请探索更多方法来进一步完善用户体验。小小改变也能带来大不同 — 哪怕只是加入一个特定功能,或者换一种方式呈现你的内容。例如:

    添加“钱包”和 Apple Pay 支持

    利用“钱包”和 Apple Pay,让用户更轻松地使用你的 App 服务。如果你的 App 提供积分卡、登机牌、门票、充值卡或其他类型的数字卡,可以将它们添加到用户的“钱包”,以便可以更方便地访问它们。为了让用户能更轻松地为商品和服务进行支付,请给你的 App 添加 Apple Pay 支持。

    向用户提供与情境相关的适当内容

    思考用户会如何使用你的 App,想办法快速呈现重要的内容。使用位置数据 或当前日期和时间来筛选结果,或生成重要的通知。使用机器学习分析数据,提供更优秀的解决方案。动态调整你的界面布局,让常用内容更加便于访问。

    协助用户找到 App 的内容

    聚焦搜索 提供的项目描述应尽量全面,使这些项目变得更容易找到。当用户选择某个搜索结果时,请使用提供的用户活动对象 将你的 App 置于恰当状态来显示这个结果。

    考虑其他输入方式

    用户使用触控输入来进行大多数交互,但 iPhone 也支持其他输入类型。SwiftUI 交互类型UIKit 交互对象能够处理复杂的事件序列,以实现拖放操作、频段选择和随手写输入等。Core Motion 框架 利用设备内建的加速感应器和陀螺仪支持基于动作的输入。AVFoundation 框架 利用内建摄像头和麦克风来支持音频和视频采集。游戏可以采用 Game Controller 框架 来支持外部游戏控制器硬件。

    围绕新功能添加运行时条件检查

    当你更新 App 以支持 iOS 新版本时,请在面向新功能的代码附近添加运行时条件检查。运行时检查可以消除发布 App 不同版本的必要:一个版本面向运行 iOS 新版本的用户,另一个面向运行旧版本的用户。所有人都运行相同的 App,并且运行 iOS 新版本的用户可以使用你增加的新功能。如需有关添加运行时检查的信息,请查看“在特定平台或操作系统版本上运行代码”

    App 以外的功能

    要与你的内容交互,App 不是唯一的途径。采用以下技术,将 App 的范围拓展到系统的其余部分。

    将你的内容与其他系统服务集成

    一些系统服务融合了 App 相关信息,并使用 App 扩展来收集这些信息。例如,小组件 App 扩展允许你在主屏幕或锁定屏幕上显示你 App 的内容。iOS 支持许多类型的 App 扩展,包括用于支持自定键盘、Siri 集成和通知等的扩展。如需扩展列表和更多信息,请查看“App 扩展”

    添加轻 App 以提供对 App 功能的快速访问

    轻 App 是你 App 的轻量版本,让用户能够测试你 App 的一些功能,无需下载和安装完整版 App。例如,自行车租赁服务可以提供轻 App 来让用户租赁自行车。当用户扫描你的服务的轻 App 码时,系统会下载并显示你的轻 App。如需更多信息,请查看“轻 App”

    支持在其他设备上延续任务

    通过“接力”,用户可以在一台设备上开始一项活动,然后在绑定到同一 Apple Account 的另一设备上的相同的 App 中继续这项活动。例如,用户在 iPhone 上开始某项活动后,可以在他们的 iPad 或 Mac 继续这项活动。你可以定义你希望在不同设备之间接力的活动,并在其中某一项活动发生时告知系统。如需更多信息,请查看“在你的 App 中实现‘接力’”

    支持 App 内容的通用链接

    如果你的网站和 App 提供类似的内容,请给你的 App 添加通用链接支持。借助通用链接,你不必为打开 App 中的内容而创建单独的 URL。只需一个 URL,就能打开你的 App (若已安装) 或你的网站 (若未安装 App)。如需更多信息,请查看“允许 App 和网站链接你的内容”

    探索更多

    进一步了解各种技术,它们不仅带来独特的功能,还可与不同 Apple 平台紧密集成,形成一个无缝的生态系统来帮助 App 和游戏跨平台运行,包括 iOS、iPadOSmacOSApple tvOSvisionOS watchOS

    分发你的 App

    当你准备好分发 App 时,可以通过 App Store 将你的 App 提供给世界各地数以亿计的用户。了解将 App 提交到 App Store 的准备工作。

    了解 App 提交