1. 明确应用定义
    1. 列出所有你认为用户会喜欢的功能点
      1. 以帮用户采购食物的应用为例
        1. 创建购物清单
        2. 获取食谱
        3. 比较价格
        4. 寻找商店位置
        5. 标注食谱
        6. 获得和使用优惠券
        7. 浏览烹饪教程
        8. 探索不同的烹饪方法
        9. 查找可替代的食材
    2. 确定你的目标用户
      1. 以帮用户采购食物的应用为例
        1. 经常在家做饭 or 偏爱准备好的餐饮
        2. 喜欢使用优惠券 or 认为不值得花精力去弄优惠券
        3. 喜欢搜索奇特的食材 or 只眷恋基本的食物
        4. 严格遵守食谱 or 只把食谱当作灵感来源
        5. 采购少量多次 or 一次买很多
        6. 喜欢一次为多个目标集中采购食材 or 只想在回家路上顺便买几样东西
        7. 笃信品牌 or 方便就好,牌子无所谓
        8. 每次采购都买类似的东西 or 按照菜谱买东西
      2. 挑选三条最符合你目标用户的特征
        1. 喜欢实验新菜谱
        2. 采购很仓促
        3. 尽量节约(在不必花费太多精力时)
    3. 通过对目标用户的定义筛选功能点
      1. 好的应用应该像激光一样准确聚焦到目标用户想完成的任务上
        1. 最开始想到的功能点都很有用,但并不意味着每个功能点对用户同样有用
        2. 目标用户对这些功能点的喜爱程度也不一样
      2. 心里装着目标用户,再来检视功能点清单,最后能将应用聚焦在三个功能点上
        1. 获得菜谱
        2. 创建列表
        3. 获得和使用优惠券
      3. 现在可以定义你的应用了,精确地概括应用的功能以及目标用户
        1. 一个帮助喜欢烹饪、主张节俭的用户创建购物清单的工具
    4. 不要停下你的脚步
      1. 在开发过程中持续使用应用定义去判断功能点、控件和术语是否妥当
      2. 当考虑是否要添加一个功能点时
        1. 问问自己它对于你的程序以及目标用户来说是否足够核心
        2. 如果不是的话,把它放在一边,它可能是另一个程序的核心组成
          1. 例如,你已经确定你的用户喜欢发掘新菜谱,所以强调打包好的蛋糕和菜肴就有失妥当
  2. 针对特定设备定制应用
    1. 遵守 iOS 介面规范
      1. 控件应该能够被识别并点击
        1. 按钮、挑选器、滚动条等控件都有轮廓边界和亮度渐变,方便用户识别并点击
      2. 应用的操作简洁,容易上手
        1. 使用导航栏浏览层级内容
        2. 使用标签页来展示不同组的内容或功能
      3. 反馈应该微妙且清晰
        1. 使用精确流畅的动画来反馈用户的操作
          1. 使用进度条、活动指示器来指示状态
          2. 使用警告弹出框来提醒用户、呈现关键信息
    2. 确保程序在 iPad 和 iPhone 上同样优秀
      1. 为相应设备定制应用介面
      2. 针对屏幕尺寸调整图片
      3. 在不同设备上提供相同的核心功能体验
      4. 制作一个 iPad 版应用,不要让用户在 iPad 上直接使用 iPhone 版
    3. 重新考虑基于web 的设计
      1. 不要给用户太多选择,专注核心功能
      2. 确保你的应用能帮用户办事儿,而不是只能浏览信息
      3. 针对触摸设备重新考虑 Web 控件及其行为
      4. iOS 中滚屏很方便,不要把太多东西塞在第一屏里
      5. 不要把主页图标放在最上面,这妨碍用户点击顶部的状态栏
  3. 针对功能定制外观
    1. 在美观和实用间取得平衡
      1. 这个漂亮的拨盘实际拨打电话时会变成一个累赘
      2. 这个水平仪如果没有中间的那个气泡也能用,但是就不那么直观了
    2. 定制一定要是有据可循的
      1. 如果你的程序需要操纵大量的精确数据, 用户会偏爱易懂、标准化的控件以及流畅精炼的导航
      2. 如果你的程序用于浏览内容, 用户就不喜欢比内容还抢眼的界面
      3. 如果你的程序是个游戏,提供即时的、有情节的体验, 人们会期望进入一个充满漂亮图片、交互新颖的奇特世界
    3. 尽可能不要给用户增加认知负担
      1. 用户喜欢了标准化控件的使用方法和行为,这样他们不必停下来思考该怎么使用它
      2. 除非你那极富个性的控件能让任务变得很容易,否则用户会讨厌被迫学习只能在此程序中使用的新技能
    4. 保持内部一致性
      1. 如果用户花时间学会使用这些不熟悉的新控件,他们希望这些经验能在整个程序里通用
    5. 在控件和内容间保持差异
      1. 当你设计界面时,要确保它不会和用户关注的内容抢风头
      2. 对于播放控件来说,是否采用标准控件是次要的,更重要的是这些控件是否会在用户开始观看视频时渐隐,在用户轻触屏幕时重现
    6. 在重新设计标准控件前要三思
      1. 如果你计划重新制作标准控件,要确保你的控件提供与标准控件同样多的信息
        1. 如果你设计的按钮不是用户印象中那种方方的样子,用户甚至可能看不出它能点
        2. 如果你创建一个切换控件,却不能显示两种状态,用户可能不会意识到它能切换
    7. 确保对定制界面元素进行充分的用户测试
      1. 在测试中,观察用户是否能预测控件的功能,使用它是否很简单
        1. 如果你的控件尺寸小于40×40 像素,用户点击它就有困难
        2. 如果你的控件对水平滑动(swipe)和轻触(tap)的响应不同, 要确保此控件的功能值得用户花费额外精力去留意这些差别
  4. 应用原型和迭代开发
    1. 快速开发出应用原型以收集试用反馈
    2. 初期可以在纸上画,并注明不同视图的切换流程
    3. 实际试用带来的交互是纸上谈兵不能比拟的
    4. 选一个 Xcode模板,加入你想要的功能,然后安装到设备上以获取试用反馈
    5. 根据获得的反馈改进你的应用,然后再获取试用反馈,进行迭代开发