当前位置: 首页 > 编程日记 > 正文

转:从零开始做app需要做的事情列表

https://qdan.me/list/VaXl7N8emfv1ayWg

从零开始做App的Bootstrap

做一个App,需要很多东西。

不定期更新。

  1. 团队

    工欲善其事,必先利其器。

  2. 需求管理

    支持版本、迭代、需求的创建与管理。

    产品经理在上面录入需求,开发参照开发,测试参照写测试用例,并进行状态流转。

    国内大厂如腾讯都有内部自己开发的管理平台如tapd。

    小团队可以使用轻量级的平台如:

    国外:Trello、Basecamp、Jira、Asana

    国内:Tower、Teambition、FengChe

    也可以使用较传统的重型工具如 禅道(真的很丑,但是流程和大公司内的比较像)

  3. 缺陷管理

    测试在上面录入从各个渠道收集到的bug,分配给开发,并进行状态的流转。

    在诸如tapd、禅道这样的传统平台上,都包含缺陷管理模块。反而在上文中的轻量级的项目管理平台里,缺陷管理并不是非常容易做,简单的还好,复杂的归类、人员间的流转就不容易了。

    传统的解决方案如Bugzilla等太老旧不利于使用,目前没看到特别好的方案。

  4. 代码托管

    一流小团队用Git,买GitHub或者自建GitLab或者用第三方的代码托管甚至云开发平台,如Coding之类。

    不入流的大多用SVN。

  5. 云服务+CDN

    选定云服务商和CDN服务商,不再自己买机器租机房。

    国外主流用Amazon家,国内主流用阿里云,腾讯百度也有云但是稳定性不说了。新浪的云是打酱油的。也有青云之类做的不错。

    CDN选择就更多了,云CDN是主流,国外如Akamai 、CloudFlare,国内阿里云的CDN最广泛。

  6. 持续集成与分发

    大多数团队在初期都会忽视持续集成,然后它很重要。

    每次有代码提交到主干或每日特定时间,都应自动以最新代码编译一次出一个app版本,并上传到分发渠道上,如 TestFlight。这样产品、测试和其他外围人员随时可以安装并检查最新版本。

    传统的持续集成有Jenkins/Hudson,自己部署自己设定,iOS的话还有Xcode Server的bot。但云持续集成也在逐渐流行起来,Travis CI就是其中的典型。

    内部分发渠道上,TestFlight在Apple买了之后就不是那么好用。国外还有HockeyApp,国内Fir.im、蒲公英则是使用的比较多的分发渠道。

    而将持续集成和分发渠道联系在一起,除了自己写脚本外,也有第三方工具如http://nomad-cli.com 和 https://fastlane.tools

  7. 设计资源交付与共享

    设计师与开发之间需要一个平台来共享设计稿、切图、标注等资源。

    有些团队是给设计师代码权限,让设计师直接把切图提交到代码里,也有些团队是用Dropbox等云盘来和开发分享切图。

    另一方面,还有Sketch+Zeplin这样的工具来分享设计稿、自动批量切图并支持自动查看标注,把设计师从标注中解放出来。结合上面提到的云盘,可以实现自动切图+标注+同步到开发一气呵成。

  8. 内部沟通工具

    内部沟通工具和传统IM不同,讲究的是:

    1. 自带组织构架、人员查找

    2. 方便发起群组讨论

    3. 多人文件共享场景更多

    4. 和邮件、持续集成等其他系统的互通互动更重要

    5. 手机和桌面版本同样重要

    不入流团队爱用的QQ微信就不说了。

    以前腾讯的RTX用的比较多,但明显缺点是RTX的Mac版问题很多,Windows版也很老旧(不是腾讯内用的新版),手机版也很差。

    后起之秀如Slack、瀑布IM、BearyChat等值得尝试,特点是支持大量第三方服务。

    阿里也有做钉钉,但针对的是传统企业,功能臃肿不实用。

  9. 邮件系统

    在保守乃至正常的工作流程中,邮件都是有效的事务推动和留痕工具。需要具备:

    1. 和组织构架打通

    2. 清晰的邮件组划分

    3. 和日历、会议邀请挂钩

    4. 与沟通工具的互通。

    目前只看到微软的Exchange可以满足此类需求。

  10. 开发、测试、线上环境及快速上线流程

    设定三个不同的环境,确保数据同步。并且支持每个小的代码变动可以自助式的在三个环境逐个部署并验证,最终可以在短时间内快速上线。避免传统式的开发一大坨、部署一礼拜的情况。

  11. OA系统

    外围事务,如请假、调休、事务投票、个人信息补全等。与核心业务无关,但是能避免杂事影响效率。

  12. App

    一个App需要有的基本模块

  13. 账号体系+第三方登录

    email/手机号短信验证是主流的注册账号体系,有需求可再加微博、微信、QQ的第三方登录。涉及到在三者的开放平台注册并通过审核拿到api key。

    第三方登录有第三方的SDK可以支持,但其中还不乏一些不靠谱的平台。

    登录时

  14. 版本更新提示与强制更新

    在早期版本就需要预埋好的功能。尽管 Apple 不允许 App 内出现检查更新字样,但仍然可以在有更新的时候弹出更新提示。并且为以防版本出现重大bug,需要支持对老版本可以封停的能力,也就是强制更新,不更新不给用。

  15. Push服务

    一个强健的Push服务后台,支持高效率的大量Push发送,以及对每条Push打开率的统计。大多数团队自己开发的后台都做不到,包括发送效率和打开率统计。额外从运营层面还会需要支持预设定时发送Push等功能。

    因此大多数情况下,建议使用第三方的方案。国内做的主要有百度云推送、极光、云巴、个推、腾讯信鸽、友盟,据传百度云推送团队已经没了,极光的后台感觉粗糙,个推貌似新浪微博也没再用了送达率低,云巴不知道,此外知乎用的是LeanCloud的推送。

  16. 短信下行服务

    手机号注册等功能涉及验证码短信下行,需要有一个低延迟、高送达率、不受运营商白名单影响的短信服务商接入。

    国内的短信服务商多如牛毛,收费也从1毛到5分不等,但基本上处于便宜没好货的状态。除了送达率的问题,还有对于17*的新号段常有支持不好,以及运营商有白名单,名单中的用户容易送达不到。

    最简单的方式是直接和移动等运营商谈,价格不贵且专线保证送达率。其他服务商的免费体验账号都存在上述问题,客服一般反馈都说付费了就好了。

  17. 邮件发送服务

    重邮件的业务,一定需要一个强大的邮件代发业务,因为:

    1. edm邮件需要统计到达率和打开率等,需要支持针对特定用户发送,传统的邮件服务器并没有这些功能。

    2. 大多数邮件代发服务提供足够多的样式,可以快速编辑产出

    3. 国内许多邮件商对发送IP等都有过滤限制,邮件代发服务则提供白名单的途径可以避免被过滤。

    常用的邮件代发服务有:Mailchimp、Mailgun、Sendgrid、SendCloud。其中SendCloud是国内做的比较不错的。

  18. 数据上报与统计

    支持App内的各类规模类、点击类数据上报,并且有支持各种复杂分析的后台,最好能与用户账号挂钩。

    这方面国内算友盟做的最有名,其他还有TalkingData、百度统计等,但做的都一般,国外的Flurry、Localytics更为成熟,Google Analytics for Mobile也很强大。

    一般建议一个App接入至少两个数据上报平台,在也就是在App内封装一层。

  19. 内测问题反馈

    用于在内测(甚至正式版本)用户发现问题时,可以简单快速的将当前问题反馈到开发团队。需要支持截图和注释。

    目前已知有Instabug支持此项功能,但是Instabug的管理功能很差,幸好他家支持自动与其他缺陷管理平台集成。

    建议配置成尽在内测版时启用该项功能。

  20. 用户互动

    在App中放置入口,允许用户向开发团队反馈问题或提意见,并且可以收到开发团队的回复。一般以聊天或私信的形式。

    国外主要有UserVoice、ZenDesk等,国内LeanCloud中包含该服务,还有逸创云客服算是对ZenDesk复制的比较好的,比其他的更多的是有帮助中心页面可用;此外还有Udesk和美洽。

    其他App如知乎等则选择将该功能和自己的私信功能和在一起。

  21. Crash上报&质量监控

    收集每个版本上线的同类Crash的log和堆栈。后台应支持快速转入缺陷管理。

    此类服务国外Crashlytics较有名,国内则有腾讯的Bugly做的不错。同时也可以选择自己架设相关上报Server,也有足够多的开源方案。

  22. 官方网站+博客

    如有网页版,那么网站会有额外的工作。

    1. 搜索引擎优化,这里涉及到的除了传统内容,还有和iOS 9相结合的地方

    2. 登录时的机器识别,避免被批量注册号码。这里的服务有比如geetest等。

  23. App分享

    允许用户从App内简单分享当前App到微信、微博等。由于微信的存在,需要开发一个承接页用来判断是否在微信中打开,是则跳转至应用宝的产品页。

  24. 内容分享

    允许分享应用内内容到微信、微博、QQ等。大多数团队选择用第三方的SDK来实现一次性支持多家分享。但目前大多数第三方SDK的使用交互和样式都非常非常烂。

    考虑到分享出去的网页存在不断被转发的情况,所以需要支持Open Graph protocol让微信等app可以正确的读出预览图片、描述而不是显示一个默认的链接。

转载于:https://www.cnblogs.com/jhj117/p/5153455.html

相关文章:

uniapp自定义导航栏样式,自定义导航栏组件使用说明,兼容小程序和H5及各端

实现思路: 把底部导航做成一个组件,点击导航显示的页面也做成组件,在启动页面引入这四个组件,点击封装的导航组件就显示相应的组件页面,这样就不会出现页面重新加载的问题了,有个弊端就是导航页面不能使用…

javascript优化_如何通过使用服务人员来优化JavaScript应用

javascript优化Every now and then we hear about optimizing something. There are different kinds of optimizations we can do to make our apps faster and more efficient, or to save time or memory. This article will cover one of those methods — service worke…

【视觉SLAM14讲】ch3课后题答案

1.验证旋转矩阵是正交矩阵 感觉下面这篇博客写的不错 http://www.cnblogs.com/caster99/p/4703033.html 总结一下:旋转矩阵是一个完美的矩阵——正交矩阵。①行列式为1,②每个列向量都是单位向量且相互正交,③它的逆等于它的转置。 2.罗德里…

【转载】邻接表表示法

图的邻接表表示法 图的邻接表表示法类似于树的孩子链表表示法。对于图G中的每个顶点v i ,该方法把所有邻接于v i 的顶点v j 链成一个带头 结点的单链表,这个单链表就称为顶点v i 的邻接表(Adjacency List)。 1. 邻接表的结点结构 &#xff08…

宝塔的服务忽然挂掉解决方法

先登录宝塔看内存是否满了 如果满了就点击文件,找到大文件进行删除,然后清空回收站,重启服务器,就解决了。 清空回收站:点击首页,打开终端,输入下面命令, 清空回收站的命令是&#…

免费创办网站_足够好的工程来创办一家互联网公司

免费创办网站I gave a guest lecture in an undergraduate software engineering class (CSCE431) at Texas A&M University in March 2019. Now I’ve turned this lecture into a blog post here, and hopefully some people on the Internet will find this useful.我于…

centos7下安装docker(11容器操作总结)

这段时间主要是学习了对容器的操作,包括:容器的状态:start,stop,restart,rename,pause,unpause,rm,attach,exec,kill,logs…

Js插入元素到数组的头部和尾部 unshift push

我们经常会使用JS 数组插入数据,下面看一下常用的 1. 在数组头部插入元素 var arr [1,2,3]; arr.unshift(0);arr 输出结果: //arr [0,1,2,3] 2. 在数组尾部插入元素 var arr [1,2,3]; arr.push(4);arr 输出结果: //arr [1,2,3,4]

测试用例设计白皮书--正交实验设计方法

一.方法简介利用因果图来设计测试用例时, 作为输入条件的原因与输出结果之间的因果关系,有时很难从软件需求规格说明中得到。往往因果关系非常庞大,以至于据此因果图而得到的测试用例数目多的惊人,给软件测试带来沉重的负担,为了有效地,合理地减少测试的…

ios单应用模式_如何为iOS 13暗模式设置应用

ios单应用模式Apple launched the much-awaited iOS 13 updates globally on September 19 across all iPhones launched within the past 4 years (back to the iPhone 6s). 苹果于9月19日在全球发布了期待已久的iOS 13更新,该更新适用于过去4年内发布的所有iPhone…

BZOJ1965 [Ahoi2005]SHUFFLE 洗牌 快速幂

欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1965 题意概括 对于扑克牌的一次洗牌是这样定义的,将一叠N(N为偶数)张扑克牌平均分成上下两叠,取下面一叠的第一张作为新的一叠的第一张&#xff0c…

uniapp 长链接 socket 封装

App.vue <script>import socket from @/util/IM.jsexport default {watch: {$route: function() {var page = getCurrentPages();console.log(watch-监听路由, page);}},globalData: {ImAuth: socket.connect(),},onLaunch: function(e) {},onShow: function() {socket.…

react项目开发步骤_成为专业React开发人员的31个步骤

react项目开发步骤我为达到可雇用水平而进行的每个项目和课程。 (Every single project and course I took to reach a hireable level.) Before I learned how to code, I used to ask developers how much time it took them to learn their craft — and how they managed t…

P1979 [NOIP]华容道

【问题描述】 小 B 最近迷上了华容道&#xff0c;可是他总是要花很长的时间才能完成一次。于是&#xff0c;他想到用编程来完成华容道&#xff1a;给定一种局面&#xff0c; 华容道是否根本就无法完成&#xff0c;如果能完成&#xff0c; 最少需要多少时间。 小 B 玩的华容道与…

JS计算两个时间相差多久,相差年,月,日,小时,分钟

计算一个时间戳距离当前的时间&#xff0c;例如&#xff1a; 几年前&#xff0c;几个月前&#xff0c;几天前&#xff0c;几小时前&#xff0c;几分钟前&#xff0c;刚刚。 输出效果 代码&#xff1a; function getDistanceDay(time) {let stime new Date().getTime();let u…

replace 使用函数作为第二参数

var sToChange “The sky is red.”;var reRed /red/;var sResultText sToChange.replace(reRed, function(sMatch) { return “blue”;}); sMatch 指的是被匹配到到的对象&#xff0c; return 返回替换的对象 var reBadWords /badword|anotherbadword/gi;var sU…

如何在Visual Studio Code中编译C ++代码

PS: This was published on my Blog here. PS&#xff1a;这已发布在我的Blog 此处 。 C is a statically-typed, free-form, (usually) compiled, multi-paradigm, intermediate-level general-purpose middle-level programming language.C 是一种静态类型的&#xff0c;自由…

敏捷冲刺每日报告四(Java-Team)

第四天报告&#xff08;10.28 周六&#xff09; 团队&#xff1a;Java-Team 成员&#xff1a; 章辉宇&#xff08;284&#xff09; 吴政楠&#xff08;286&#xff09; 陈阳&#xff08;PM&#xff1a;288&#xff09; 韩华颂&#xff08;142&#xff09; 胡志权&#xff08;1…

终止forEach的循环

上代码&#xff1a; let list[1,2,3] try {list.forEach(item > {if (item1) {console.log(等于1就跳出循环)throw new Error("EndIterative");}}) } catch (e) {}

大学可以学前端开发_所有开发人员在大学中应该学习的东西

大学可以学前端开发忘记“代码行” (Forget About "Lines of Code") Source资源 As a developer, youll hear a lot of crazy, unbelievable theories about what "lines of code" signify. Believe none of them. Lines of code is a ridiculous metric …

20162325 金立清 S2 W8 C17

20162325 2017-2018-2 《程序设计与数据结构》第8周学习总结 教材学习内容概要 二叉查找树是一棵二叉树&#xff0c;对于其中的每个结点&#xff0c;左子树上的元素小于父结点的值&#xff0c;而右子树上的元素大于等于父结点的值。 最有效的二叉树是平衡的&#xff0c;所以每次…

H5画布不显示图片的问题解决

在onReady 执行 <template><view class""><canvas style"" canvas-id"myCanvas" id"myCanvas"></canvas><!-- <view class"container"><img :src"tempFilePath" /></…

javascript十六进制数字和ASCII字符之间转换

var hex"0x29";//十六进制 var charValue String.fromCharCode(hex);//生成Unicode字符 var charCode charValue.charCodeAt(0);//获取指定字符的十进制表示. var hexOri"0x"charCode.toString(16);;//将int值转换为十六进制 alert("hex:&q…

html5编写网页代码_freeCodeCamp.org的未来-从向世界传授语言到编写代码的5年经验...

html5编写网页代码freeCodeCamp went live in October 2014. In the five years since, weve done quite a bit.freeCodeCamp于2014年10月上线。在此之后的五年中&#xff0c;我们做了很多工作。 In this article, well explore:在本文中&#xff0c;我们将探讨&#xff1a; …

程序员眼中的英文单词是这样的

来源&#xff1a;Jackie Han英语中一个单词可能有很多不同的意思。很多中国开发者外语本来就不好&#xff0c;概念是往往先入为主。甚至在不清楚一般意义的情况下&#xff0c;先记住了特定环境中的意思。 转载于:https://www.cnblogs.com/agileai/p/5166982.html

linux系统无法挂载U盘

插上U盘 [ 2407.650440] usb 1-3.3: new high speed USB device number 7 using s5p-ehci [ 2407.887332] usb 1-3.3: New USB device found, idVendor0951, idProduct1666, bcdDevice0100 [ 2407.894249] usb 1-3.3: New USB device strings: Mfr1, Product2, SerialNumber3 […

小程序输入框上推页面不上推

样式问题&#xff0c;把样式去掉就行

面试:你了解中兴吗_HTTP简介:您需要了解的所有内容

面试:你了解中兴吗In this article, I will walk you through how the world wide web works at a fundamental level.在本文中&#xff0c;我将向您介绍基本的万维网工作原理。 The core technology is HTTP - Hypertext Transfer Protocol. Its the communication protocol …

img-responsive class图片响应式

在BootStrap中&#xff0c;给<img>添加 .img-responsive样式就可以实现图片响应式。1<img src"..." class"img-responsive">转载于:https://www.cnblogs.com/zouyun/p/7761393.html

小程序开发卡券

前期准备 小程序内领取卡券 1.开发者须有一个有卡券权限的公众号&#xff08;服务号&#xff09;和认证后的小程序账号&#xff1b; 2.开发者须申请一个开放平台账号&#xff0c;并将小程序和公众号绑定在同一个开放平台账号下&#xff0c;关于开放平台的介绍请参照&#xff1…