Update (04/27/2016):我争取每两星期(通常是每周)发布一个新版本,不断迭代这个 iOS App。这是 App 的更新日志。本文的截图与实际 App 的长相已经偏离比较远了,请到 App Store 去看最新的 App 版本的长相:)
这是关于湾区日报 iOS App 的故事。
标题党了。解释一下:两天四夜 = 周六、周日两天 + 周六晚、周日晚、周一晚、周二晚,4个晚上。
什么是湾区日报?
如果是新读者,请参考这篇博文:【湾区日报是如何运作的】
为什么湾区日报需要做 App?
有几个理由:
- 移动设备是大势所趋。湾区日报的网站此时的访问情况如下图,大部分都是移动设备的访问了:
- 借助微博、微信等社交网络推送网页,有很大的局限性:国内读者访问国外的网页比较慢,而且很多网站被墙。
- 我是工程师,动手做东西是一种乐趣。也正好想尝试一下做 App。
为什么只做 iOS 不做 Android?
我是 iPhone 用户。为什么?因为几年前碰巧买了 iPhone。没特别强烈的理由换 Android。在我看来两者差不多。如果一开始我用的是 Android,应该也没强烈理由换 iPhone。
做一个每天自己也会用到的东西是很不错的感觉。所以我就做一个 iPhone 上能用的 App。
以后可能会做 Android app 吧,如果有时间的话。以前我也是 Java 程序员,所以也能写得动 Android 代码的。
这个 iOS App 到底长什么样?
两个功能我觉得比较有用:
- Push Notification,每天推送5条链接。
- “易读”功能。我服务器事先把原网页中的文本抽取出来,所以 App 可以只读纯文本,而不用再打开原网页。这还(某种程度)解决了有些网页被墙了的问题。只要湾区日报的服务器不被墙,你就能读原网页的文本,而不用访问原网页。
为什么 App 做得这么烂?
两天四夜,初学 Swift,能力有限,也只能这样了。
或者换一个问题:你该如何才能把这个 App 做得好一点?有几种办法:
- 回到过去,告诉几年前的我,千万别读 PhD,一门心思学做 App;找工作的时候,专找做 App 的职位。遵循 10000 小时定律,熟能生巧。然后到了2015年的时候,你就能做出职业水准的 App。
- 或者,从今年起,好好在 App 开发方面努力一把。别人12岁开始编程,用功十年,22岁成功。咱今年老大不小了,但也不怕花时间;以XX岁高龄,新手入门,全身心投入 App 事业中。
- 维持现状,白天还是做与 App 不相关的工作,晚上回家后如果有空写点 App 的代码、每天进步一点点,慢慢改进。进度会比较慢,相信5年后,在 iOS 14.0 推出的时候,我的 App 应该不那么烂了。
- 花钱外包给专业团队 — 此方案已经被家里的领导给否决了。。。
好吧,可能第3条比较适合我的现状。任何东西都是得花时间的。我也很希望一天能有48小时。
这个 App 有哪些有趣的事实?
两天四夜上线 App Store
服务端的 API 部分以前做过类似的,代码重用一下,很快就搭好了。
App 的部分是用 Swift 写的,边学边写。大部分代码是五月底的周末两天窝在家里写完的。周日晚上边看“Game of Thrones”的时候,把 App 分发给10个朋友试用(需要手动添加 UDID,比较费时间)。周一晚上和周二晚上修复了一下bug、做了截图,然后提交 App Store 审核。
插一句,怎么快速用一个压根就没用过的语言写程序?我一般是简单看一下 Style Guide,然后开始写真的代码。。。比如 Swift,我看的是这个 https://github.com/raywenderlich/swift-style-guide 。App 上线后,我才找了一本书,系统地学起来。
用到了哪些技术?
- XCode 6.3 + Swift
- 服务端:Python / Django,Postgres,Celery + RabbitMQ 发 Push Notification,传统老套的 Nginx 与 Supervisord
- App 的访问统计:Google Analytics
- 跟踪 App Crash 的情况:Crashlytics
- App 的分发(上线 App Store 前分发给朋友试用一下):Crashlytics Beta
- Dependency management:Pod
- 图标设计、简单美工:Sketch
- 生成 App Icon:makeappicon.com
- 生成 App Store 上的屏幕截图与跟踪App Store的Review:http://launchkit.io
- App Store 上的 demo 视频是用 QuickTime 录制,iMovie 剪辑成30秒视频。
- App 里用了一些第三方的 Library:Spring做特效、FontAwesomeKit做图标、Appirater提醒用户去App Store给App打分、PSUpdateApp提醒用户升级新版本、UIScrollView-InfiniteScroll滚动更新往期文章、微信的SDK做分享到微信的按钮(这个需要提前几天向腾讯申请)。
App 的版本号
湾区日报 App 的版本号不用Semantic Versioning,而是用日期。比如湾区日报第一版的 App 的版本号是 2015.06.02,下一个版本是 2015.06.16。目前计划是两周提交一次。用日期做版本号是跟 Wealthfront 的 App 学的。用日期做版本号的好处是?其实我不清楚诶;但至少可以一眼看出这个 App 有多新(或有多旧)。
在 App Store 里审核的过程中,被拒了一次。修复了一番、再提交,中间又耽搁了几天。从提交到真正上线,前后十来天。
听说还有一个 Apple Watch 上的 App?
对,这是两天四夜以外、又额外用了两个晚上做的。目前还在 App Store 里审核。
手表上的 App 有用吗?有人会用吗?不知道。只是单纯想试试看写 Apple Watch 上的 App 是什么感受。至少我自己是不会用手表读文章的:(
在Apple Watch上还没发现有什么特别好、特别需要的App。
有什么感想没?
- 你能做的事情比你想象的要多得多,特别是在一段很短的时间里。这就是为什么很多Hackerthon上可以看到很不错的作品一样:由于时间限制,就能高度集中精力、高效地开发。
- Swift 很好上手、很好用。期待能在服务端写 Swift 脚本。
- 你要的不是源代码,而是思路。有了思路后,剩下的东西基本都能靠 Google、Stackoverflow和Github来帮你完成了。当然,我之前也跟几个做 App 的同事打听了应该用什么工具、用什么库的事情,所以中间少走了不少弯路。
- 做 App 不容易。顿时对做 App 的工程师、设计师们肃然起敬。太多细节要把握了。很多普通用户想当然的东西,都是要推敲很久才能弄出来的。
最后,欢迎iPhone用户下载试用:App Store