AppStore: 2个人,18个月,200万

又标题党了。如@洪亮狗豆所说,It’s a show business。

其实标题说的是事实,展开介绍一下:

  • 基于Appstore发行产品,以iPhone产品为主,全球市场,都是应用,没有游戏
  • 2个人,一个工程师,一个设计师
  • 30几个客户端(免费+收费)
  • 从一起工作的第一天到现在,正好18个月
  • 800万下载安装
  • 3个产品拿过免费总榜第一(十个左右不同国家的商店)
  • 成本 < 40, 000,利润 > 2, 000, 000。单位RMB
  • 免费+IAP+广告
  • 0推广,试图做过一些推广,没任何效果
  • 没刷过榜

做的产品很不起眼,也没有拿到任何投资。之前两个人都是在一家iPhone游戏公司任职,算是摸着石头过河吧。本来很多东西想说,想想还是不要贻笑大方了。独立开发者比我们做得好的大有人在,跟一些团队更是比不了。

说起来,这是我做过的第二个不赔钱的生意。幼儿园时候赊账,后来发现要还。小学一年级上课时1毛钱1根卖红肠,赔大了。小学5年级炒过邮票,没赚多少,赚的钱都买煎饼果子了。高中毕业后搞过家教中介,赚了点零花钱和学费。总之都挺有意思:)

刚刚过完了27周岁生日,越来越奔三了:) 这18个月,我结了婚,而且马上就要迎接一个新生命了。明年和今年肯定不一样,谁知道呢?这样才好玩。

最后感谢家人(尤其是老婆)和Jobs。不啰嗦了,陪老婆去散步。

附小广告一则:唱吧iOS团队诚招iOS工程师,推荐成功即奖励6000元现金或iPhone 6一部,详见这篇blog


如何利用LLVM 4的Auto Synthesize特性

从Xcode 4.4开始,默认的编译器为LLVM 4.0(Xcode 4.5 GM版本的默认编译器是LLVM 4.1)。LLVM 4.0+提供了Auto Syethesize功能,只需要声明property,在编译期由LLVM自动添加@synthesize,生成等效的代码。

Less code, less bug。懒惰一点没有坏处。那么如何利用这一特性呢?

  • 检查你的Xcode版本为4.4+(Xcode->About Xcode)
  • 检查你的编译器版本为LLVM 4.0+(Build Options->Compiler for C/C++/Objective-C)
  • 删除所有的@synethesize声明标识,重新build

有的开发者可能像我一样会遇到编译错误Use of undeclared identifier ivar, did you mean _ivar?。这是因为若LLVM 4.0之前的编译器,很多人没有使用形如@synthesize ivar=_ivar的命名习惯。LLVM 4.0+默认生成的ivar的形式是_ivar,即默认生成@synthesize ivar=_ivar

解决办法:Cmd+',之后’Enter’使用Quick Fix。

附小广告一则:唱吧iOS团队诚招iOS工程师,推荐成功即奖励6000元现金或iPhone 6一部,详见这篇blog


如何适配新的iPhone 5分辨率

昨天安装了Xcode 4.5 Golden Master版本,也见到了4.0寸的iPhone 5模拟器。开发者需要做什么才可以保证旧的应用可以运行在iPhone 5上呢?

必须要做的事情

你需要一个名为Default-568h@2x.png的启动画面,568h表示568个点的高度。你不需要无@2x后缀的png文件,因为iPhone 5是DPI 326的Retina屏幕。

什么也不做

如果什么也不做,iPhone 5多出来的88个点的高度,会被均分2份。屏幕的上下是黑边,中间是应用。有传言说上下两部分可能被苹果放广告条,不过我不信。

如果只打算支持iOS 6

你可以省去很多麻烦,但会失去很多用户。我建议开发者朋友们至少在明年4月左右再考虑以iOS 6作为基准。如果面向的是中国区用户,那么这个时间还得往后推迟。

你可以利用iOS 6新增了一个特性:Auto Layout。你不需要硬编码,只需要指定相对位置。而且Auto Layout在Interface Builder里也有完整的支持。

兼容iOS 4.3+的设备

Xcode 4.5 GM版本的最低Deploy Target是4.3,以前的设备不需要考虑了。如果应用使用的是UITabBar/UINavigationBar这些标准控件,那么只需要指定view.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;即可(也可以在Interface Builder里面设置)。利用这个resizing mask,可以使内容自动向两边和上下填充。

我没有使用标准控件

我一样要面对这个问题。我没有想出好办法,目前只是在viewDidLoad里面,在运行时覆盖掉xib文件的坐标设置。我建议你使用[[UIScreen mainScreen] bounds],利用一个方法返回frame的height,并把它封装在一个singleton中。接着Find/Replace掉所有的硬编码的480(记得Preview)。

需要面对的更多问题

不管使用哪一种方法,我相信这做起来不容易。为了达到更好的体验,很多应用定制了一些控件。赶快与你的设计师沟通,确定哪些UI资源是需要改的。我建议由工程师来引导并推动这个事情。(如果你是个今天就可以推动这件事情进展的设计师,请与我联系,很高兴认识你。)

游戏怎么办

游戏的问题可能更复杂,这取决于你的产品。我最近没有制作游戏,但我根据订阅的RSS Feed获得的信息,cocos2d-iPhone,cocos2d-x都已经发布了最新的develop-branch来解决这个问题。建议第一时间去相关的社区获得信息,作出应对。

拥抱变化

软件开发唯一的不变就是变化。每次变化是让你的产品脱颖而出的相会,也是暴露团队问题的机会。不管你需要维护多少产品,如果在15-30天内还搞不定这些事情,你可能更要担心的是工作流程、沟通方式和团队寿命。

呼吁开发者不要利用那88 points放广告条,对用户和自己好点。

附小广告一则:唱吧iOS团队诚招iOS工程师,推荐成功即奖励6000元现金或iPhone 6一部,详见这篇blog


书评:深入浅出的《Node.js开发指南》

我是在图灵买的19.99的电子版,这本书是看后即扔的类型。不是因为写得不好,而是写得太好,不需要再回头看了。这本书的思路有些Head First系列的味道,我很喜欢。分章节介绍一下吧。

  

第一章:Node.js简介

javascript算是我系统学过的第10门语言。因此我对一项技术,往往更关心它的来龙去脉。每隔两、三年,就会产生几门语言,被吹嘘成the next big thing,结果都不了了之。我建议读者一定要好好看看这章,学习一项技术是要投入很多时间和精力的。   

第二章:安装和配置

中规中矩,这种章节没法出彩。   

第三章:Node.js快速入门

最关键的一章,讲得很容易懂。其中“异步式 I/O 与事件式编程”、“模块和包”、“调试”这三小节,一定要理解概念。   

第四章:Node.js核心模块

这一章介绍得不够丰满,希望作者在再版的时候可以增加一些核心模块的介绍。   

第五章:使用Node.js进行Web开发

最让人头疼的一章,样例代码使用的express.js 2.x,初学者很难把样例代码跑起来。但绝对不能归咎于作者。Node.js是一个快速演进生态。其中最流行的web框架express.js在3.x版本的变化比较大。建议读者参考meteoric_cry的这篇文章   

第六章:Node.js进阶话题

其中模块加载机制,讲得很清楚。Node.js部署这一小节所介绍的方法可行,但未必符合所有人的生产环境需要,但也值得一读。

附录

Javascript高级特性和Node.js编程规范,是重要的参考,不能错过。   

我的技术背景:

  • 擅长iOS应用和游戏开发
  • 常用python, bash写一些脚本
  • 懂一些Java, .NET, 原来做过一些企业应用开发
  • 熟悉C/C++但不常用
  • web前端知识较少,但了解基本概念

最后附上经过修改过的兼容express.js 3.x的书中样例代码

附小广告一则:唱吧iOS团队诚招iOS工程师,推荐成功即奖励6000元现金或iPhone 6一部,详见这篇blog