欢迎访问灵集科(kē)技有(yǒu)限公司
0471-4953016 nmgjoin@sina.com

手机 app 是怎样诞生的?10000 字带你读懂 iOS 应用(yòng)开发流程

发布时间:2024年03月12日    阅读次数:251

  ▍寻找灵感


  灵感来源于生活。许多(duō)视频博主都会做这样一个挑战,将地图贴在遠(yuǎn)处的墙上,蒙着眼睛扎飞镖。博主和观众约定扎到哪里就去哪里。本篇文(wén)章中,我们将以此為(wèi)例,构思一个随机地名生成器的应用(yòng)。二可(kě)以借此讲解独立应用(yòng)开发的完整流程,帮大家梳理(lǐ)出一份學(xué)习指南。


  明确大概想要做什么之后,接下来需要做的便是将抽象的地标生成器概念具體(tǐ)化。我们会将其转化為(wèi)可(kě)执行的应用(yòng)方案,并确认目标人群。开篇提到,本应用(yòng)的灵感来源于飞镖扎中地图上的地名,那么在手机上创建一个飞镖扎地图小(xiǎo)游戏合适吗?


  好像也不合适,当我们把地图显示出来,并给予用(yòng)户一个飞镖时,用(yòng)户还是可(kě)以根据地图位置判断可(kě)能(néng)被扎中的區(qū)域。进一步思考将其变成可(kě)行应用(yòng)的方法,可(kě)以考虑回到问题的本源来。我们想要的无非是给用(yòng)户一个具體(tǐ)的、可(kě)前往的城市名称。


  落到实处,我们可(kě)以创造一个能(néng)展示随机城市名的界面。提供一个随机按钮,用(yòng)户按下后,程序直接显示出城市名好像有(yǒu)些枯燥。那么用(yòng)带点赌博性质的游戏开箱子的机制如何?似乎更有(yǒu)娱乐性一些。我们可(kě)以将正面有(yǒu)随机城市名的卡牌背面朝上,当用(yòng)户翻牌时,卡牌不会立马反面,而是会播放一个小(xiǎo)动画拉高用(yòng)户期待。


  目标用(yòng)户Target Audience


  大想法已定,接下来我们需要考虑目标用(yòng)户。在本应用(yòng)中,我们的目标用(yòng)户是视频博主和热爱旅行但又(yòu)不希望总被热门目的地左右的背包客。这些潜在用(yòng)户去搜索,尝试一款随机地名生成器应用(yòng)的可(kě)能(néng)性更大。


  用(yòng)户画像Persona


  在产品设计中,有(yǒu)时会进一步描述目标用(yòng)户中的一个明确个體(tǐ),这一流程叫做制作用(yòng)户画像。用(yòng)户画像可(kě)以是设计中的一个理(lǐ)想的客户描述。本应用(yòng)的用(yòng)户画像则可(kě)以是一个20岁左右管理(lǐ)Bilbili频道的男性、他(tā)经营的是一款美食探索栏目,他(tā)比较喜欢尝试新(xīn)鲜事物(wù),看到目前比较火的随机目的地挑战,他(tā)也有(yǒu)兴趣参与进来,去一个未知的目的地拍一期视频尝试当地特色美食。


  ▍可(kě)行性验证


  有(yǒu)了灵感之后,你是不是着急着想要开始制作了?别急,在制定具體(tǐ)需求前,用(yòng)一个案例介绍几个与产品相关的重要概念。


  网友 BasilBricks制作的乐高迪士尼城堡模型-Reddit


  试想你在拼装一个迪士尼乐园的乐高玩具,比如上图所示,你会如何规划拼装流程呢(ne)?你也许会按照说明书一步一步来,先完成塔尖、完成大门、最后完成城堡的安装。城堡本體(tǐ)安装完成后,虽然距离迪士尼乐园建设完成的大业还有(yǒu)很(hěn)長(cháng)距离,但你已经可(kě)以看出这一项目的基本雏形。


  在以上的设想中,我们将具體(tǐ)的创作流程分(fēn)為(wèi)以下三个阶段。


  灵感萌芽Ideation


  基于你对生活的观察,你可(kě)能(néng)会发现身边不同领域存在的改进空间。在这一阶段,你可(kě)以使用(yòng)不同方法来完善一个灵感,比如头脑风暴。


  基本可(kě)行性产品MVP


  这一阶段则是验证灵感的最重要阶段,MVP的英文(wén)全称為(wèi)Minimal Viable Product,你可(kě)以将其翻译為(wèi)最基本的可(kě)行的产品。


  M代表着基本、最骨干的功能(néng),用(yòng)户看到后会知道你在做什么。


  V代表可(kě)行的,它意味着在此阶段,这些基本功能(néng)可(kě)以被一些用(yòng)户拿(ná)来进行尝试。程序设计者常犯的一个错误便是凭空猜测,假设用(yòng)户需要这些那些的功能(néng),并将自己所知的内容自然而然地当做用(yòng)户也知道。实际则不然,对于用(yòng)户来说,他(tā)们对你的想法、理(lǐ)念一无所知。制作完MVP之后,你就可(kě)以拿(ná)着你的MVP去请用(yòng)户盲测了。你可(kě)以自己设计一个简单的问卷,事先不作说明。拿(ná)着MVP产品去请用(yòng)户盲测,之后再按设计好的问题提问,来验证用(yòng)户的使用(yòng)流程是否如你预期,以及你所创作的产品是否可(kě)以满足用(yòng)户的实际需求。


  P代表有(yǒu)价值的成品。


  不太完美的MVP-Unsplash markkoenig


  对于乐高迪士尼乐园项目来说,MVP大概是你拼好了迪士尼城堡,把迪士尼乐园厂區(qū)的砖块放在大板子上的时候。虽然迪士尼乐园的其他(tā)地方还很(hěn)空旷,城堡本身的细节也没有(yǒu)拼装完美,但别人已经可(kě)以由你的迪士尼城堡看出其他(tā)區(qū)域建成后的样子。


  迭代周期Design Cycle


  在不同领域中,迭代周期的概念被广泛使用(yòng),重复推进这一循环的步骤,可(kě)以帮你更好地推进当前产品。收获了产品反馈后,做产品的人通常会选择两个方向继续前进。一类人会将MVP完善后直接推向市场,由市场反馈决定接下来的需求和迭代方向;另一类人会继续坐(zuò)下来完善产品,直到期望的所有(yǒu)功能(néng)都完成后再推向市场。


  无论你是哪类人,你可(kě)能(néng)都要面对产品迭代的周期,来对不同功能(néng)点,根据反馈评估,对产品进行更新(xīn),最终完善产品。这一流程一般来说是一个完整的设计、思考与评估闭环。


  对于应用(yòng)程序来说,新(xīn)需求可(kě)能(néng)来自你自己或用(yòng)户评论。你的用(yòng)户会提出许多(duō)他(tā)们想要的功能(néng),你需要根据产品在市场中的定位,来决定是否采纳这些功能(néng)建议。决定后,下一步便是创建归类描述不同需求的待办事项,并為(wèi)其功能(néng)进行设计,满意后便可(kě)以将代码落地并发布更新(xīn)。有(yǒu)些开发者还会选择诸如A/B测试来将同一种需求制作两个或多(duō)个变种,并根据用(yòng)户反馈来决定哪一种进入最终版。


  ▍记录需求


  在上一节可(kě)行性验证中,我们使用(yòng)乐高迪士尼乐园的案例,展开探讨了灵感可(kě)行性验证和产品迭代的思想。接下来将回到本文(wén)的核心案例,随机地名生成器例中,将具體(tǐ)需求记录下来。


  值得注意的是,应用(yòng)程序的开发从来不是一步到位的,我的建议是将需求拆成多(duō)个可(kě)执行条目,并制定阶段性目标。比如下图中,我将随机城市应用(yòng)的需求拆分(fēn),并放置在了GTD项目管理(lǐ)工具中,比如Things或OmniPlan。在制作你自己的独立应用(yòng)时,你也可(kě)以根据此方法归类,并适当调整需求排序,将最重要的需求放在前面优先完成。


  随机城市Things需求-王禹效


  核心需求


  需求记录中,你可(kě)以从MVP的角度来思考你的核心需求。什么是这个应用(yòng)程序最重要的部分(fēn)?在随机城市应用(yòng)中,最核心的部分(fēn)便是创作一个翻牌的界面,来实现翻牌并给出随机城市的功能(néng)。可(kě)是这好像还不够,我还希望MVP产品中用(yòng)户可(kě)以做些微的自定义,因此将切换「自己國(guó)家/全世界」的范围选择按钮也加入考量。


  优化需求


  我们在迭代周期中介绍过新(xīn)需求的来源。在应用(yòng)开发中,这些来源可(kě)能(néng)是一些符合基本用(yòng)户认知的需求、帮助程序发展的本地化需求、来自你自己的主观创意、应用(yòng)商(shāng)业模式需要的收益需求等等。在随机城市应用(yòng)中,我罗列的优化需求包括一个翻牌时的延迟动画、翻拍期间的声音与震动反馈、定价方案的制定等等。


  ▍设计考量及UI框架


  已经有(yǒu)了需求,接下来我们便来将需求对应的设计落地。这个应用(yòng)放在什么地方比较合适?便是对目标设备的考量,对于一款生成随机地名的应用(yòng)来说,最适合的使用(yòng)场景很(hěn)可(kě)能(néng)是离手边最近的手机,因此我们将其作為(wèi)主要考虑对象。


  Apple Watch似乎也是不错的候选对象,且应用(yòng)迁移成本较低,因此也纳入考虑。初版设计如下。应用(yòng)的核心部分(fēn)便是生成随机城市名的卡牌,因此占据最高的视觉权重。搜索的自定义范围作為(wèi)用(yòng)户的常用(yòng)功能(néng),被安排在了界面的下方。


  Sketch设计-王禹效


  你可(kě)能(néng)会发现我们这个随机城市应用(yòng)翻牌前后界面差异巨大,这便是得益于SwiftUI视觉框架可(kě)灵活拼装的特性。在iOS端,用(yòng)作生成应用(yòng)程序界面的代码我们称作UI框架,它的目的是把设计好的产品原型变成应用(yòng)可(kě)以执行的代码。比如上图中,我们的产品设计原型由Sketch制作而成,接下来,我们便需要将这个设计作為(wèi)代码落地。


  视觉框架


  在iOS生态系统中,常用(yòng)的视觉框架有(yǒu)三种。第一种叫做Flutter,它是由Google主导开发的Android与iOS跨平台UI框架,目前使用(yòng)此技术的代表应用(yòng)為(wèi)阿里巴巴的闲鱼。Flutter底层的语言是Dart,有(yǒu)额外學(xué)习成本;其次是Flutter并非Apple第一方框架,因此使用(yòng)中遇到的小(xiǎo)毛病不方便获取Apple官方支持,个人不太推荐。但若你感兴趣,Flutter描述性语言的特质与本教程學(xué)习的SwiftUI概念类似,你可(kě)以比较容易地做知识迁移。


  第二种UI框架叫做UIKit,它由Apple官方出品,是过去十余年iOS界面开发的主力军。在UIKit的世界中,UI适配各种不同机型屏幕尺寸机器的技术称作Auto Layout自动排版。因UIKit在iOS开发上占有(yǒu)特殊地位,你可(kě)能(néng)会在其它地方见到此技术的使用(yòng),我们简单介绍下。


  UIKit的视觉编辑器-王禹效


  上图便是UIKit的视觉编辑器,叫做Storyboard。顾名思义,它允许开发者将应用(yòng)程序的不同界面像制作故事板一样,依次排开在编辑器的界面中。左侧的是UI的大纲界面,开发者通过此面板来了解界面要素的层级关系。右下角展开的界面為(wèi)自动排版的面板。


  在UIKit中,开发者需要明确定义各界面元素之间的逻辑关系。任何一个界面元素,你都需要明确地告知它在界面元素中的位置。比如应用(yòng)中常见的分(fēn)类大标题文(wén)字,你需要人為(wèi)定义文(wén)本框的上边栏锚定在距机器顶部20px的位置,文(wén)本框左侧边栏在距离机器左侧20px的位置上。


  听我的描述,你可(kě)能(néng)会发现这个自动排版好像没那么自动。事实也确实如此,自动排版以人為(wèi)给定的一系列约束条件作為(wèi)运作原理(lǐ)。比如某一界面元素需要以另一个界面元素為(wèi)基准锚定在一起,宽度不得超过多(duō)少、位置需要居中等等。它需要开发者罗列出所有(yǒu)规矩,自动排版会根据这些规矩在不同设备上计算出UI界面的唯一解。


  NSViewController-Apple Developer Documentation


  自动排版的方案下,各界面元素互相依赖,后期想做设计调整也很(hěn)麻烦,可(kě)谓牵一发动全身。明确给出各种约束条件使这些规则约束的界面实际上非常不灵活。然而消耗开发者头发的事情到这里还没有(yǒu)结束,我们不能(néng)只将界面罗列出来,而需要為(wèi)界面元素添加功能(néng)。如上图所示,界面的要素管理(lǐ)由许多(duō)状态控制的函数决定。


  每个视觉元素在某件事情发生时都会提供一系列状态控制的通知函数,积少成多(duō),一个看似普通的界面往往需要几十个控制界面状态的函数堆放在一起以实现理(lǐ)想的界面逻辑。这些控制函数放在一起,我们称作ViewController视觉元素控制器。这一文(wén)件常常因為(wèi)控制界面状态的函数过多(duō)而变得非常大而被开发者戏称為(wèi)「过度肥胖」。


  当控制界面的函数过多(duō)时,就容易在开发者不注意的地方产生冲突,也就是程序Bug。当控制界面因函数过多(duō)而变得复杂时,我们便很(hěn)难继续处理(lǐ)好每一个界面间的关系,而需要投入大量精力来寻找原因。


  难道就没有(yǒu)一个更好的方法了吗?答(dá)案是有(yǒu)的,这便是第三种UI框架SwiftUI。SwiftUI是Apple官方于2019年发布的最新(xīn)UI框架,它在UIKit上更近了一步,不再是提供一套一致的界面来强行适配不同平台,而是根据不同平台因地制宜,在不同平台上,用(yòng)符合该平台设计规则的方式将界面元素呈现出来。


  还记得我之前提到的界面不够灵活、界面状态管理(lǐ)繁杂的问题吗?SwiftUI从根本上解决了这两个问题。SwiftUI不需要你明确给出每个界面具體(tǐ)受哪些条条框框的限制,你只需要描述出你希望的界面与其它元素的逻辑位置关系即可(kě)。


  比如上图中界面里的例子,我们希望左侧有(yǒu)一个Swift的图标,右侧是一段文(wén)字描述。具體(tǐ)到代码来说,我们只需要向SwiftUI描述:横向排版HStack{Image+文(wén)本Text}即可(kě)。使用(yòng)SwiftUI的流程更像是在和電(diàn)脑对话,你将你想要的界面描述给它,至于如何显示、间距、界面状态等复杂事物(wù)都由電(diàn)脑操心。也正因為(wèi)SwiftUI高度灵活、可(kě)自由组合的特性,我们才可(kě)以实现随机城市中翻牌后截然不同的两套界面。


  SwiftUI不在乎你的背景如何,非常易學(xué)易用(yòng),且具有(yǒu)极佳的跨系统支持。但同时你需要认识到SwiftUI是一款新(xīn)生框架,处在逐渐完善的过程中。比如UIKit所支持的CollectionView或者Activity Indicator这些成熟界面元素的替代品,SwiftUI在2020年才给出以上界面的官方支持。截至2023年,你所需要的绝大多(duō)数功能(néng),都已经能(néng)在SwiftUI上原生实现啦。


  在可(kě)预期的未来,SwiftUI都将是Apple生态系统下的重中之重,会受到官方的最优先的支持。基于以上优势,我们将在本教程中使用(yòng)这一最新(xīn)框架,来了解基于它的应用(yòng)构建方式。


  Apple平台-Apple Developer Documentation


  各平台的思考


  在产品定位时,创作者需要将发布的平台考虑进去。具體(tǐ)来说,你需要知道各平台的优劣与定位,并据此决定应用(yòng)是否要登陆不同平台。


  Apple Watch是用(yòng)户最亲密的设备,它具备一些最基本框架的支持。用(yòng)户長(cháng)时间举着胳膊并不是个很(hěn)好的體(tǐ)验,因此為(wèi)它开发应用(yòng)时,你需要将用(yòng)户与应用(yòng)的交互时间,以及耗電(diàn)量共同考虑进去。手表的表现力不像手机,若你强行将应用(yòng)的所有(yǒu)核心功能(néng)放置其中,性能(néng)会被大幅打折,导致用(yòng)户不愿意使用(yòng)。你的应用(yòng)所提供的,应该是一个适合手表端的简洁操作,这一操作可(kě)以是MVP的精华,也可(kě)以是对核心功能(néng)的补充。


  那么想放的各种功能(néng)应该放在哪里呢(ne)?这时你应该考虑iOS应用(yòng)。在Apple生态系统的15亿用(yòng)户中,iPhone用(yòng)户占大多(duō)数。因為(wèi)基数很(hěn)大,将应用(yòng)放在这里,基本上可(kě)以确保拥有(yǒu)广阔的市场发展空间。iPhone拥有(yǒu)的传感器最為(wèi)丰富,你想实现的各种功能(néng)都可(kě)以把它当作试验田。


  iPad是许多(duō)开发者忽视的设备类别。但实际上iPad平台具有(yǒu)独特體(tǐ)验,且用(yòng)户消费意愿很(hěn)高。这类设备通常能(néng)提供更高一个层级的性能(néng),購(gòu)买iPad的用(yòng)户常常对生产力应用(yòng)有(yǒu)更高需求。除此之外,值得注意的还有(yǒu)iPad所具备的更大屏幕,你的应用(yòng)程序如何设计才可(kě)以更好地利用(yòng)这些空间?无论你的思考為(wèi)何,切忌将iOS的应用(yòng)直接照搬,原封不动的照搬很(hěn)可(kě)能(néng)会导致原先精心设计的界面在大屏幕上显得杂乱无章。


  触摸板、键盘、多(duō)点触控、Apple Pencil、鼠标共同构建了iPad系统的输入方式。当你对这些输入方式进行更多(duō)优化时,当你对大屏幕的體(tǐ)验进行更多(duō)思考时,你的思考不会平白浪费。Apple在基础框架的构建上付出了很(hěn)多(duō)努力,许多(duō)问题你只需要解决一遍,就会发现这些功能(néng)在各平台上都完成了适配,这时你优秀的iPad应用(yòng)可(kě)以很(hěn)平滑地变成一个同样优秀的Mac应用(yòng)。


  最后要说的,便是國(guó)人不太熟悉,但海外有(yǒu)一定用(yòng)户基数的平台tvOS。Apple TV用(yòng)户选用(yòng)的屏幕往往是家中最大的那一块,因此它在影视游戏等方面都具备独特的先天优势。当你在思考tvOS应用(yòng)程序时,你考量的可(kě)能(néng)是如何将最核心的内容放在易于观看的大屏幕上。在你做这些努力时,你会发现你的代码在同一时间也完成了对使用(yòng)外接显示器用(yòng)户的适配。


  ▍寻找支持


  在前几个小(xiǎo)节中,我们探讨了随机城市应用(yòng)的需求与设计,那么務(wù)实地说,谁能(néng)让我们把这个应用(yòng)做下去?作為(wèi)独立开发者,这个应用(yòng)的最大助推者很(hěn)大可(kě)能(néng)是你自己。作為(wèi)对这个产品的定位、发展方向最了解的人,你要做好在没人支持情况下持续工作一段时间的心理(lǐ)准备。


  独立应用(yòng)开发对创作者多(duō)元能(néng)力的期望值较高。每个人的背景不同,强压着自己所有(yǒu)的部分(fēn)对于某些人来说可(kě)能(néng)不现实,效果可(kě)能(néng)也达不到你的预期。在这种情况下,你可(kě)以选择和你优势互补的人共同经营一个产品,发挥你的个人优势,并在短板处寻求帮助。在互联网时代,将你最薄弱的地方直接请擅長(cháng)的人来做也不失為(wèi)一种选择。


  作為(wèi)独立应用(yòng)的制作人,你不得不耐得住寂寞。前几个月应用(yòng)程序无人问津那是绝对正常的,独立应用(yòng)发布初期普遍会处在一个相对薄弱的竞争劣势上,需要你持续迭代一阵子才能(néng)达到一个能(néng)打仗的水平。再者而言,市面上应用(yòng)众多(duō),你的独立应用(yòng)不过是沧海一粟,用(yòng)户很(hěn)大可(kě)能(néng)根本看不见。


  Unsplash- micheile


  那么什么时候是寻找帮助和支持的最佳时机呢(ne)?在你的构思流程基本完成、可(kě)以阐述你的产品想法时,便比较适合向了解行情的人寻求建议与支持。独立应用(yòng)开发最大的消耗便是你个人的时间成本,当你的产品在MVP阶段时,便比较适合寻找孵化器或者天使投资人加入其中。具體(tǐ)如何寻找财務(wù)上的、技术上的帮助、怎么介绍你的产品等话题,我们会单独开文(wén)展开。


  也许你的初心便是创作一款心中所想的应用(yòng),但你必须意识到,与你自身不同,外来资本的介入需要投资回报,因此你必须让利。是否寻求外来资本的帮助与介入,需要你自己根据实际情况来做判断。本文(wén)中我们随机城市的例子规划格局比较小(xiǎo),因此不需要额外资本的介入。



  上文(wén)我们介绍了UI框架SwiftUI,在代码截图中你可(kě)能(néng)发现了SwiftUI常见的,诸如Text("文(wén)本")这样的写法。在本小(xiǎo)节中,我们将介绍独立开发代码落地阶段最重要的三片拼图,它们分(fēn)别是Swift、SwiftUI和系统框架。


  Swift


  编程时我们用(yòng)什么语言呢(ne)?你也许已经由SwiftUI的名字猜到了,我们要用(yòng)的是一款名為(wèi)Swift的编程语言。Swift是一款由Apple在2014年发布的跨Apple生态系统的编程语言,据淘宝开发团队统计,截至2020年,北美市场近80%的应用(yòng)都用(yòng)上了Swift。编程语言就好比乐高的积木(mù)块,是一切的基础。如同我们说话需要中文(wén)一样,与電(diàn)脑沟通时则可(kě)以使用(yòng)Swift语言。


  以随机城市这款应用(yòng)的核心需求為(wèi)例,我们需要一张卡片,共正反两面。正面是一个问号,背面是一个随机的地名。下图便展示了这个逻辑用(yòng)Swift语言的写法。我们创建了一个包含三个城市名称的列表,从中选出一个随机城市。当卡牌正面向上时显示问号,背面向上是显示随机城市的名称。


  上面代码中被标注為(wèi)粉色的文(wén)字比如var,let,我们将这些粉色的文(wén)字称作Swift语言的关键字。类似「let什么=什么」的这类书写结构,称作Swift语言的语法。在學(xué)习过程中,我们要學(xué)习和掌握的核心便是关键词与语法结构。若你现在还看不懂也没关系,我们会在讲解Swift语言的文(wén)章中具體(tǐ)展开。


  SwiftUI


  说完了Swift,那么与它名字相似的SwiftUI又(yòu)是什么呢(ne)?SwiftUI是一款DSL语言,全称為(wèi)domain-specific language,它具有(yǒu)专有(yǒu)语法来实现专有(yǒu)用(yòng)途。若你将Swift理(lǐ)解為(wèi)日常用(yòng)语,那么SwiftUI便好像是一系列专业术语。它依托于日常用(yòng)语,又(yòu)依靠独特词汇提供了日常语境中不涉及的专业内容。


  对于SwiftUI来说,它可(kě)以理(lǐ)解Swift的语法,因為(wèi)这是它的基础。与此同时,SwiftUI还具有(yǒu)一些专用(yòng)的语法结构,用(yòng)来实现UI界面的构建逻辑。


  上面你看到的便是将我们刚刚写好的最核心Swift逻辑放入SwiftUI界面中的效果。对于SwiftUI来说,任何我们在程序界面上所看到的东西都属于它的能(néng)力范畴。比如一个可(kě)滑动的视图,视图中滑动的手势、按钮、、动画效果、边的阴影等等都属其中。


  将Swift带来的逻辑与SwiftUI带来的UI界面相组合,我们便得到了此应用(yòng)程序的核心功能(néng)。上图中代码的运行效果如下。


  框架


  在代码落地的讨论范畴中,我们还缺最后一片拼图,这便是系统框架。那么什么是系统框架呢(ne)?系统框架也被Apple官方列在科(kē)技列表中,它代表的是一系列设备本身所具备的硬件能(néng)力。这些能(néng)力经Apple工程师之手规整好,之后将更容易理(lǐ)解,可(kě)直接使用(yòng)的函数直接开放给开发者,便形成了框架。这些框架可(kě)以由创作者根据自身需求自由选用(yòng)。


  框架的涉及范围也非常广泛,比如负责云数据同步的CloudKit框架、负责AR交互的ARKit框架、负责异步事件处理(lǐ)的Combine框架等等。以随机城市中我们想在翻牌时用(yòng)到的触觉反馈為(wèi)例,我们需要使用(yòng)的便是这些技术框架中的Core Haptics框架。这一框架允许我们自定义手机的振动方式,并像录制音频一样准备好一段非常独特的震动反馈。


  Technologies-Apple Developer Documentation


  目前Apple放开了233个技术框架给开发者,以后还会更多(duō)。从这些框架的数量上你也许不难发现,想熟练掌握全部框架几乎是件不可(kě)能(néng)、且没必要的事情。你可(kě)以将这些框架看作你的知识库,在应用(yòng)需要某个技术时,學(xué)习对应用(yòng)法即可(kě)。我们将在教程的第四章中详细探讨框架的用(yòng)法。


  本小(xiǎo)节中,我们介绍了将代码落地的三片拼图,现在你大概了解了它们在独立应用(yòng)开发的过程中所处的地位。Swift负责应用(yòng)程序逻辑,SwiftUI负责UI界面,系统框架负责提供让创作者使用(yòng)设备上不同功能(néng)的途径。对于以上这些话题,我们将在教程的二三四章中对这些技术一一展开。


  ▍应用(yòng)上架


  找到了需求,完成了设计,落实了代码。接下来便是将应用(yòng)程序分(fēn)享出去,让这个世界分(fēn)享你的创作喜悦。在本小(xiǎo)节中,我们来讨论应用(yòng)上架过程中你会遇到的几个重要概念。


  应用(yòng)打包


  对于开发者来说,许多(duō)工作都由Xcode和App Store代劳了,不需要额外操心应用(yòng)的分(fēn)发和瘦身等。开发者需要提供一个叫做IPA的应用(yòng)打包文(wén)件,这个文(wén)件包含了应用(yòng)程序為(wèi)不同设备所设计的所有(yǒu)美术素材、代码等内容,由开发者在Xcode中直接提交给应用(yòng)商(shāng)店(diàn)。


  商(shāng)店(diàn)审核


  应用(yòng)程序提交至应用(yòng)商(shāng)店(diàn)后,并不能(néng)直接上架。你需要等待大概1-3天的审核期,这个审核过程是需要Apple那边商(shāng)店(diàn)审核人员参与的,主要负责查验应用(yòng)是否符合一系列规则。在此期间,你会看到应用(yòng)程序处于「待提交,待审核,审核中,被拒绝,可(kě)销售」这几个状态中的一个。等到变為(wèi)可(kě)销售时,你的应用(yòng)程序便可(kě)以在世界上的应用(yòng)商(shāng)店(diàn)中显示出来,供用(yòng)户下载。


  App Store Connect


  这是你与Apple商(shāng)店(diàn)团队、以及用(yòng)户的衔接桥梁。应用(yòng)程序上架后,你可(kě)以在App Store Connect中做更新(xīn)内容的提交、用(yòng)户评价的反馈、销售数据的查询等事情。以下图中应用(yòng)「书空」為(wèi)例,你可(kě)以看到世界上哪些國(guó)家和地區(qū)的用(yòng)户在使用(yòng)你的应用(yòng)、销量、使用(yòng)情况等等。我们会在第六章中展开讲解这一系统中重要数据的意义。


  书空App Store Connect界面-王禹效


  应用(yòng)营收


  当你的应用(yòng)程序开始满足用(yòng)户需求时,用(yòng)户便会以不同方式来支持他(tā)们喜欢的应用(yòng)。常见的营收选择有(yǒu)一次性購(gòu)买、广告、应用(yòng)内購(gòu)、自动订阅等方案。针对应用(yòng)的属性,你也可(kě)以自由选择一种或多(duō)种营收方案的组合。每种营收方案适用(yòng)于不同类型的应用(yòng),我们会在第六章中详细探讨方案的要求与用(yòng)法。


  ▍获取用(yòng)户


  对于随机城市应用(yòng),我们的目标用(yòng)户与定位比较明确,為(wèi)有(yǒu)出行需求的用(yòng)户提供一个惊喜的旅行地点。但是在应用(yòng)程序上架后,很(hěn)大概率我们的应用(yòng)仍会无人问津。那么如何获取用(yòng)户呢(ne)?


  产品描述


  用(yòng)户见到你产品的第一印象便是在应用(yòng)商(shāng)店(diàn)中浏览,因此你的产品描述必须展示出应用(yòng)亮点。开发者常忽略对宣传文(wén)字、截图及视频的琢磨,而这恰恰是用(yòng)户决定是否下载的关键时刻。如下图所示,你会发现每个应用(yòng)最多(duō)可(kě)以有(yǒu)3个视频宣传和10张截图。取决于你的应用(yòng)功能(néng)多(duō)少,建议最少提供1个视频及4张以上的截图。


  俗话说「酒香不怕巷子深」,问题是在有(yǒu)海量应用(yòng)程序的今天,许多(duō)用(yòng)户也许压根闻不到你的酒香味。应用(yòng)程序的描述界面就好像餐厅进门的装修,有(yǒu)没有(yǒu)用(yòng)心用(yòng)户第一时间便会有(yǒu)明确感知,建议仔细考量。若你还想做得更好一些,可(kě)以根据用(yòng)户所在地的语言来定制每个地區(qū)商(shāng)店(diàn)页面的显示内容,让用(yòng)户感觉到开发者对当地用(yòng)户的切实考虑。


  广告


  為(wèi)你的应用(yòng)打广告一定会带来流量、关注、用(yòng)户群體(tǐ)。但是对谁广告、如何优化广告、花(huā)多(duō)少钱广告、在哪里广告都是你需要思考的范畴。在我看来,决定是否使用(yòng)这个广告商(shāng)的标准,便是开销小(xiǎo)于获取用(yòng)户的成本。若你的应用(yòng)程序由广告带来的用(yòng)户收益大于实际广告支出,则说明你摸索出了一个针对你应用(yòng)的可(kě)行广告方案。对于广告优化中常见的数据解读,我们将在第六章-如何宣传你的应用(yòng)中详细展开。


  多(duō)媒體(tǐ)渠道


  用(yòng)户获得信息的方式早已不局限于广告。仔细想想,上一次你装某个新(xīn)东西时,是不是某个人和你说「哎那个不错,要不你去试试?」当你的应用(yòng)成熟时,你可(kě)以考虑除传统广告商(shāng)之外的其他(tā)途径,比如网站媒體(tǐ)、视频博主等渠道宣传。市场上有(yǒu)非常多(duō)的人在做这些工作,也愿意与独立开发者建立互助关系。


  权重优化


  产品在应用(yòng)商(shāng)店(diàn)的排位决定了产品的曝光量,曝光决定了有(yǒu)机会看到你应用(yòng)的用(yòng)户数量,用(yòng)户数量决定了你的收益,收益多(duō)少决定了你的应用(yòng)是否覆盖投入,可(kě)以長(cháng)期做下去。而是谁决定了你的产品在商(shāng)店(diàn)中的排位呢(ne)?这便是关键词权重。


  那么什么又(yòu)是关键词呢(ne)?这便是与你的应用(yòng)程序相关,用(yòng)户可(kě)能(néng)搜索的词汇。你可(kě)以通过许多(duō)途径来判断目前使用(yòng)的关键词是否可(kě)以為(wèi)你带来用(yòng)户。以随机城市為(wèi)例,我们需要考量的不仅是应用(yòng)程序名,还有(yǒu)用(yòng)户用(yòng)来搜索的方式。


  蝉大师-搜索结果


  「去哪儿」可(kě)能(néng)是个非常不错的搜索词,且搜索权重很(hěn)高,但由于竞争对手太多(duō),新(xīn)应用(yòng)使用(yòng)热门关键词的排位会更低,以至于用(yòng)户根本关注不到你的应用(yòng),还会白白消耗关键词配额。建议你在考虑关键词时将当前关键词下应用(yòng)总数考虑进去,选择与你的应用(yòng)相关,但可(kě)能(néng)获得更高排位的相关关键词中。


  权重优化是一个相对来说需要花(huā)些时间,但回报颇丰的事情。作為(wèi)独立应用(yòng)开发者,你可(kě)以在每次应用(yòng)更新(xīn)时一并更新(xīn)你的关键词,并记录每次的效果。我们会在教程中单独开篇讲解关键词及权重优化。


  ▍更新(xīn)维护


  作為(wèi)开发者,你会希望更多(duō)积极的评论显示在应用(yòng)商(shāng)店(diàn)的评论區(qū);对于Bug反馈,则更适合直接反馈给开发者,以便及时修复。开发者与用(yòng)户需要交流反馈,然而正常使用(yòng)时,用(yòng)户不会有(yǒu)那么多(duō)去反馈的冲动;反而是有(yǒu)负面體(tǐ)验时想到商(shāng)店(diàn)评价。那么有(yǒu)什么解决办法呢(ne),其中一个可(kě)行方案便是在恰当的时机提出问题。


  在某个惊喜的功能(néng)推送后,是否询问用(yòng)户愿意帮忙反馈来让更多(duō)人发现你的应用(yòng)?在Apple提供的众多(duō)技术框架中,StoreKit负责用(yòng)户评价等事宜。你可(kě)以直接在应用(yòng)中向用(yòng)户收取商(shāng)店(diàn)的评分(fēn)或文(wén)字反馈,也可(kě)以考虑使用(yòng)不同的反馈方案,在用(yòng)户需要的时候為(wèi)它们提供直接能(néng)联系到你的方式。


  更新(xīn)公告


  在开发完整流程的最后,我们来讨论每个开发者都会面对的应用(yòng)更新(xīn)。更新(xīn)的具體(tǐ)原因有(yǒu)很(hěn)多(duō),但大致目的可(kě)能(néng)為(wèi)用(yòng)户提供新(xīn)功能(néng)、或要修复某个应用(yòng)Bug。


  更新(xīn)公告不应该敷衍了事,因為(wèi)你的用(yòng)户可(kě)能(néng)服務(wù)的某一个小(xiǎo)众用(yòng)户群,这些用(yòng)户真切的关注应用(yòng)发展,而更新(xīn)公告便是他(tā)们认知你这边更新(xīn)的主要途径。对于独立应用(yòng)创作者来说,你也可(kě)以把这些更新(xīn)公告当作对每件事的梳理(lǐ)。开发者需要对每一次调整用(yòng)户数据存储方式的更新(xīn)尤為(wèi)谨慎,对于这些更新(xīn)你需要仔细测试,确保用(yòng)户可(kě)以平滑地跨度到最新(xīn)的存储方案中。


  ▍总结


  Unsplash- jeremybishop


  在本文(wén)中,我们概括性地讲解了独立应用(yòng)开发中的常见概念。你可(kě)以把它看作是本教程的梳理(lǐ),也可(kě)以在制作自己的独立应用(yòng)时拿(ná)出来当做参考。


  做一个应用(yòng)真的像种一朵花(huā),在前期栽培时你可(kě)能(néng)除了辛苦付出什么也看不到,因為(wèi)种子还深埋在泥土里,在独立开发的流程中也适用(yòng)。但这场历程总是值得的,耐下心来,等待萌芽破土,花(huā)茎抬头,花(huā)朵一点一点绽放开来。就让我们一起开始这场创作之旅吧!


  原文(wén)链接:


  https://sspai.com/post/76333?utm_source=wechat&utm_medium=social


  作者:王禹效