Tinyfool的Blog

这就是我,Tinyfool,郝培强!身高180,体重240,标准的中年老胖子。 有妻有女,无房无车,现居上海,程序员。

Browsing Posts in 开发

WWDC 2010开幕那晚,我一夜无眠,但没有时间看任何直播,我正在赶一个项目的进度。一天后,我从podcast下了那夜的Keynote,然后隔了几天,项目不那么紧张了,我才有时间看。有很多数字让我很有感受,这些日子跟一些朋友、跟一些同事零星的聊了一下,现在也分享给大家,更重要的是给自己记录一下,免得忘了。

一、当然是在59天内卖出了200万台iPad,平均3秒钟卖出一台。这个数字非常惊人,要知道很多号称流行一时的手机总的出货量也就是百万左右。一个月前,当苹果公布28天卖出了100万台iPad的时候,有人称赞,有人怀疑,有人认为这一旺盛的势头会很快降低。现在数字再次证明了一切。说起来,我的《iPad革命:开发者的机遇和挑战》几乎是最早的正面表扬iPad的文章,可惜因为投稿的原因发布到我自己的Blog的时间比较晚。iPad发布以后最好玩的一个现象是,一开始没见到这个东西的真身时,各种猜测,各种批评满天飞,等到各大媒体的记者们、Blogger们拿到手了以后,每个人都是在表扬,呵呵。

二、短短的两个月的时间,App store里面已经有了8500个iPad程序,这些程序被下载了3500万次,按照200万iPad计算,平均一个iPad上安装了17个程序。说到这个数字的时候,Jobs老师连说了两遍“That is a great number.”

这组数字非常值得玩味,我手中没有iPhone的平均程序数。但我怀疑,这个数字可能并不高,甚至可能低于17或者仅仅是相当。因为我们知道很多人买了iPhone仅仅是为了打电话,也就是说,iPhone有一个杀手应用,打电话。而iPad不同,它没有任何的杀手应用,每个买了iPad的人都应该买点(也许花钱,也许免费)什么app,要不然这个iPad看起来就太傻了。

几个月前,huoju同学的那个号称是中国前10个iPad之一的iPad到达上海的时候,我们公司一群同事正在钱柜K歌,iPad到了,开封以后,大家先是很兴奋的围观,然后是讨论,最后是把它弃置一旁,原因很简单,没有任何应用和数据的iPad看起来好傻,毫无用处。

另外一个值得玩味的点在于,35,000,000/8500约等于4118,也就是说平均每个应用有4118次下载。这个平台简直就是狼少肉多的状态,不赶快杀过来太傻了。以上的分析我跟几个朋友讲过后,他们第一反应就是本来要先做iPhone版的决定先做iPad版;本来不想马上杀入苹果平台的,也准备先做个自己软件的iPad版本。

还有一点,就是从我得到的反馈来看,虽然iPad可以完美支持iPhone程序(如果你觉得不完美,我没话说),但是大家很少会喜欢在iPad上面安装iPhone程序。我不知道Jobs老师之前是否想到了这点。那天聊到这个问题的时候,我有朋友说,那未来苹果会不会直接关闭这个支持呢?我认为不会,虽然大家喜欢在iPad上面用iPad应用,但是遇到一些特殊场合,以及相应iPad版本确实还没有推出的时候,大家也会用iPhone版本的。例如,也许即使没有iPad版本的植物大战僵尸,你也不会在iPad上面去玩iPhone版本。但是网银程序呢?支付程序呢?这些东西也许你更在意的是方便,而不是体验。

这里多说一点,Jobs不是神,苹果也不是神。在苹果一个最牛的设计方法的Keynote里面,大大夸奖了某公司的生化危机类游戏,称里面的软操纵杆的设计很好,溢美之词铺天盖地,但是,从我得到的反馈来看,大家喜欢的游戏,往往都是有鲜明iPad/iPhone操作风格的游戏。简言之就是,看到什么点什么的游戏。我的女儿才1岁半,但是看到我们玩iPad版植物大战僵尸的时候,她会主动去点那些飘动的小太阳,原因就是那东西太直观了,完全不用教育,太好用了,完全不费脑子。这样的东西,在iPad/iPhone上最有生命力。

另外值得讨论的例子是FieldRunner游戏,此游戏很早就有iPhone版本,我玩过多次完全不感冒。但是现在有了iPad版本,什么都没有改变,操作方式没变,界面没变,甚至地图都没有变,分辨率提高以后,我爱不释手。而且在公司掀起了我们整个一个小组的游戏沉迷高潮,甚至有我们公司某大牛,业界著名的技术高手,每天中午吃饭的时候,都捧着iPad玩FieldRunner游戏,好吃的都被我们抢走了都不知道。

三、65天内,电子书下载了500万次,平均一个iPad上2.5本书,按照在iPad上面有书的美国前五大出版社的统计,iBookStore的市场份额已经达到了整个电子书市场份额的22%。

虽然统计方法也许不是最公允的,但是仅仅两个多月22%的市场份额显然是好的不得了的成绩。

我更关注的是这次iBooks里加入了PDF的支持。这家公司以前是不懂得怎么解析PDF么?显然不是。

其实iPad出现之前,我就考察过很多可以读PDF的iPhone电子书阅读器(很严肃的考察,很多都是我真金白银买的,有些是免费的),效果都完全不可接受。原因很简单,流行的PDF文件多半都是用打印方式生成,是基于排版格式的,不是流式文本。所以,内容很难重排,如果保持排版样式,显示全部则很难看清,显示局部则很难阅读全貌。基本上可以说,这类软件从技术上是可行的,从实践上是毫无意义的(当然那东西确实可以读,只是实在是一种折磨)。

而iPad的分辨率下,想得到完美的PDF显示效果那实在是太容易了。而熟悉Mac开发的同学们,应该知道Mac平台的PDF支持是相当的好,有现成的API可以解析生成等等,iPad的SDK(也就是IOS 3.2 SDK)里面也包含了支持PDF的各种API。那么苹果为什么不在iPad发布伊始就在iBooks里面支持PDF呢?

基于我对Jobs老师和这家公司的认识,我认为这是因为,他们在认为一个东西可以完美实现之前,是绝对不会拿出来的,比如复制粘贴,比如多任务(这个我未来会有专门的技术文讨论),比如这次的PDF。

他们在等的应该就是iPhone 4,在等iPhone 4的Retina屏幕,在这个分辨率下,屏幕虽小,但是PDF是可以完美显示的。

我认为,iBooks支持PDF,iBooks支持iPhone,iPhone推出Retina屏幕,这三件事情的时间点太过巧合,绝对是有紧密关联的。

Retina屏幕绝不是某些人想象的,刚好有了,就刚好被放到了iPhone里面,耍耍酷这么简单。这就跟iPhone的Cpu一样,iPhone 3G是无法支持新的多任务功能的,那个功能必须有Samsung S5PC100 ARM Cortex-A8(iPhone 3GS)或者苹果A4才能支持。所以,你可以想见,在3GS切换到A8的时候,也许刚刚被在IOS 4中发布的多任务功能就已经在策划或者实现中了。

四、每周有15000个程序被提交到AppStore,包含30种语言,95%的程序可以在7天内审核过。剩下的5%,有三种最大的可能性:

  1. 程序的功能和开发者描述的不一致,会被拒绝。
  2. 使用了私有的API,苹果不允许开发者使用私有API,因为升级系统的时候,私有API可能会失效,程序崩溃,用户会很不满意。(当然有时候开发者也是不得已为之,比如某功能苹果的程序可以实现,为什么我们就不能实现。有些问题上,最后苹果和开发者达成了妥协,私有API可以调用,未来可能会变成公开API,例如UIGetScreenImage();)
  3. 程序会崩溃,这当然会被拒绝。

这一段显然是Jobs老师在自吹自擂,当然从我个人的经历以及我收到的一些反馈来看,AppStore审核效率确实是有大幅的提高。但是遇到了一些事件的时候,还是会大幅下降,比如iPad发布那段时间,所有iPhone程序的审核貌似都放慢了。

这场keynote显然还有更耀眼的明星iPhone 4,就是这两天的消息,预售第一天就突破了60万订货量,看来一个新的销售神话要诞生了,:)。

这两天,腾讯推出了QQ for android。和QQ for iPhone的好评如潮不同,这款软件受到了很多批评,仅仅在Twitter上面我就看到了很多:

@LifeNT:怎么看都觉得腾讯的android qq很山寨!

@tonyq0802:原来官方那个的android的qq是固定在480*360分辨率的 据说milestone登录的时候那个qq企鹅就被拉成长企鹅了

@Beichen:QQ for Android 体验好差,登录界面不能横屏。

@siyet:当我用milestone进入qq 看到那张被生生拉长的小企鹅的时候 我的脸也长了~~~ 小公司不针对两个分辨率做优化也罢了 可是腾讯。。。丫的

我就不一一罗列了,大多数都是批评在milestone上面的分辨率问题。

我在twitter上面做了一些短评:

对Android QQ的抱怨颇多,证明了我说过的话,Android兼容性是个大问题。QQ不是游戏,但也有分辨率不匹配带来的用户批评了,而出问题的机器,开发者可能听说都没听说过。所以开发其实也更费钱,光买各种测试机就不少钱。

上次去豆瓣,他们经历也类似,iphone买了一个就够了,但给android开发者买的手机已经显得不够了,不仅不如新的好玩,而且不多买几个测试机的话,谁知道以后会遇到什么兼容性问题。

给qq做多分辨率适配多半不难,但是有两个问题,需要多少精力才能了解市面上所有的android,多少钱把测试机都买全,多少精力去测试。开发成本就这么上来了。

兼容性的另外一个问题是向前兼容,就算QQ现在做个完美的兼容所有市面上android手机的app,这时候横空出世一个完全不同的型号,QQ的开发者还是会被骂一顿。当然问题总能解决,一切最后都变成了开发成本。

QQ是家上市公司,这点开发成本不算什么。其实我也不太care腾讯的事情,但是,作为第三方开发者,这个案例是可以参照的。第三方开发者如果想以android为基础平台,难度,复杂度,兼容性,开发成本,要综合考虑。

如我前面一个文章的观点,我没有说android就纯粹是个垃圾。但是你需要了解里面的陷阱和困难。我自己的程序也会出android版本,但是至少在现在绝对不是我的重心所在,未来这个平台在兼容性和渠道上进步了,才会是,这个时候更多观望是更安全的。

其中,@quakelee和@virushuo同学提出有4sq这样做的很好的客户端。

@lordhong同学说:

android 自己有套处理多种屏幕的机制,虽然繁琐了点。但如果用相对布局来出来,大部分情况下界面还是过得去的。腾讯的android程序员要么不懂,要么就是太懒。

@hanlei同学说,分辨率不那么重要。

我觉得:

有处理多种屏幕的机制,也是开发成本。iphone和ipad也是有机制的,而且很平滑,而且是可以挣到不同的钱的,那个我不批评,因为人家是两款产品。

iPhone日历控件是由我贡献的,一个开源的类库,使用它你可以在你的iPhone软件里面插入一个日历视图。使用起来非常简单。

下载代码

如果你知道如何安装SVN,或者你的电脑已经安装了SVN,那么你可以简单的使用SVN来下载代码,在终端键入下列命令:

svn checkout http://iphonecal.googlecode.com/svn/trunk/ iphonecal-read-only

如果,你可以从以下两个链接下载代码:

http://iphonecal.googlecode.com/svn/trunk/TdCalendarView.h
http://iphonecal.googlecode.com/svn/trunk/TdCalendarView.m

创建一个iPhone应用程序项目

下载代码后,你需要创建一个iPhone应用程序项目。打开XCode,点击菜单”File”->”New Project…”,在打开的对话框中,选择View-based Application。

把项目命名为TestiPhoneCal(或者其他什么名字,无所谓):

创建项目以后,点击菜单”Project”->”Add to project…”,选择你下载的文件,注意选中”Copy items into destination group’s folder”选项。

设置view类

打开你的nib文件。

选择你要作为日历的view,把它的类设置为TdCalendarView。

好,现在运行你的程序,你就可以看到你的日历了。

如果你按照这个教程操作,遇到了困难,也可以使用我提供的Demo Code,作为自己代码的模版。下载地址:http://iphonecal.googlecode.com/files/TestiPhoneCal.zip

English Version

话说最近豆瓣很关注iPhone平台,他们刚刚推出了豆瓣电台iPhone版本(地址:http://douban.fm/app。我现在就正在使用,感觉不错,速度也很快,跟本地没区别,不过貌似歌对我这样的老年人来说有点太新,跳过一堆歌也没有找到我爱听的,或者我听过的。)。所以,豆瓣邀请了很多人去豆瓣聊聊关于iPhone和iPad开发的问题。

这次去见到了之前没见过的flycondor,在twitter上面已经认识的@hongqn,在ignite北京活动上认识的阿稳,很久以前认识的阿北@ahbei(其实说起来好久没见过阿北同学了,居然还记得我的ID,感动)。

在豆瓣我大侃了一通对iPhone开发开发的看法,所以的很high,可惜昨天晚上回来就给老婆做饭,然后晚上还有一堆事情,当天没时间整理思路写下来,可惜了。

以下是我刚刚整理出来的我的一些想法:

1、iPhone和Android哪个个平台更有前途

我更看好iPhone平台(包括iPhone,iPod Touch,广义也包括iPad),原因是我认为在移动平台未来取得成功最重要的是开放和标准。iPhone在硬件上面完全封闭,发行渠道上也很封闭,那么我为什么还看好它呢?

iPhone在硬件层面的封闭保证了产品的系列化,标准化,这是第三方开发者最应该珍视的。回想历史,摩托罗拉手机在中国的总销量可能是iPhone的百倍,但是虽然有这么多的用户,但是没有产生任何真正广泛流行的应用。那么是摩托罗拉没有智能手机平台么?不是,摩托罗拉是市面上几乎所有流行智能手机平台的大玩家。J2ME刚刚出现的时候,我下载的开发包,里面的模拟器就是基于各种款式的摩托罗拉手机的,当时摩托罗拉几十款流行手机同时都支持了J2ME。Nokia做Symbian的时候,摩托罗拉也是第一批合作厂商。Linux/Android/WinCE等平台也从来没有少过摩托罗拉的身影(最近好几款大火的Android平台手机就是摩托罗拉出品的)。

在iPhone横空出世之前,只有Nokia在Symbian上坚守S60、S40等的多产品系列的,标准化系列化的产品设计。回报就是在移动百宝箱的Java区,游戏、应用几乎都是for Nokia的。这就是市场和统一市场的区别,iPhone的用户数量,短期内决无可能超过摩托罗拉的用户数量,但是iPhone用户数量早已超过摩托罗拉任何一款手机(或者一个相关系列手机)的用户数量了,这是产生流行应用的必要土壤。

所以,因为产品的系列化,标准化,Nokia曾经有过自己在智能手机领域的辉煌。但是整个手机行业太固步自封了,Nokia太固步自封了。自从7650以来,我已经用了很多款Nokia的S60手机了,虽然性能越来越好,外观越来越酷,但是近10年了,真正的大改进并不多,开发仍旧困难,操作仍然笨拙。话说那天,我在地铁上看到一个美女用手写笔去拉动手机右边的滚动栏,恨不得大喊一声,“你改悔吧,别浪费生命了,买个iPhone吧!”。这其实就是iPhone出现前,手机行业固步自封的最明显表现。

我尤其珍视的是软件层面的开放,对第三方开发者的开发。这点可能也有人不同意,他们认为iPhone平台软件层面也很不开放,比如不能后台运行第三方程序,不能自行发行,不能开发第三方输入法等等。但是,这些种种的局限,有些我相信可能是阶段性的,有些是为了让发行渠道的利润更高。总体来说,我认为如果你要开发的应用在iPhone平台的种种限制下,能够做出来,那么iPhone平台就是对你来说,就是目前最好的移动平台,也是最开放的移动平台。开放是一个多层面的问题,不是说开源就一定最开放,iPhone平台目前丰富的应用,丰富的文档,方便的开发环境,这也是平台开放性的重要组成部分。

同时,iPhone平台的渠道优势也是完全不能忽视的。最近最火的一个相关新闻是,植物大战僵尸iPhone版本9天赚了100万美元,这款游戏的PC版本,在中国都早已经是白领中很流行的东西了。这家公司在这款游戏应该也早就挣到了很多钱,但是短短9天的销售获得100万美元,我想他们在很多平台都很难达到。这就是苹果公司精心打造的一键付费,方便的软件发行系统的功劳(甚至是他们很多令人不爽的苛刻规则的功劳)。

之前,我对中国到底有多少台iPhone一直犯嘀咕,这两天,我问了一个在国内很火的应用的公司里的朋友,他告诉我的数字是他们公司的app目前有100万左右的免费用户,有5%左右的付费用户。这样我就得到了一个很好的参考值,那么我可以斩钉截铁的说,中国的iPhone数量应该是100万以上。

据说豆瓣刚刚上线的电台iPhone应用的流量,已经占到了豆瓣电台总流量的一个相当比例了,而相应的Android版本目前还比较沉寂。我有个朋友做了一个很火的信息网站,年前他们做了一个web的iPhone优化版。于是我就毛遂自荐想帮他们做个官方的app,结果拿了api我还没动手。朋友告诉我已经出现了一个非官方的app,而且现在iPhone优化的web版和这个第三方app,目前已经达到他们总访问量的1/4了。

2、那么我是完全不看好Android平台么?当然也不是。

有人把现在Google领导的Android平台和Apple领导的iPhone平台的竞争比作当年PC机和Mac机的大战,不得不说,我也很喜欢这个比喻,确实有太多太多相似的地方了。在硬件方面,iPhone和当年的Mac机一样,是封闭的,没有兼容机,没有第三方硬件厂商。从软件上来看,iPhone平台是不开源的,Android平台是开源的。

那么如果以唯开放论的观点去看未来,Apple应该毫无机会,Google必胜。但,我不这么看。首先我们回顾一下历史,PC平台硬件确实是开放的,但是软件从来不是完全开放的,Cpu也从来不是完全开放的。这个开放系统的伟大胜利,我曾经有篇文章仔细分析过,有兴趣的可以看看《标准,要挣钱除了标准还是标准》。文中的道理简而言之就是,这个伟大的开发系统的胜利的缔造者IBM根本不是受益者,掌握了两个标准在手的微软和Intel才是胜利者。而今天我们仔细想来,这个开放平台开放的恰到好处,正式因为这两个关键标准的不完全开放,才保证了这个平台虽然很开放,但是一直都是一个标准化的产品。你在Dell的PC写的程序,可以运行在HP、IBM、甚至联想的PC,是这个高度标准化保证的。

所以,太多成功学的教材,只顾大谈开放,而不去提标准;或者只提标准而不提开放。我认为都是不对的,事实上在现在,一个系统要获得成功,我认为关键是要把握开放和标准之间的平衡,不能因为开放,而忽视了标准,反之亦然。

如今Android的战略中的每一点,我都很喜欢,但是它在标准化和发行渠道上,跟iPhone确实有巨大的差距。标准化和兼容性方面,最近有个很明显的例子,一款叫做Leech Killer的Android软件的作者@an0最近被Android手机间的不兼容性折磨得最终决定放弃这款软件的开发。他的写到:

我很伤心的宣布:Leech Killer 已死,有事烧纸。

是太多互不兼容的 Android 手机杀死了它。在如此混乱的世界中,涉及电话功能的工具软件已经无法由一个人维护。Leech Killer 在许多新款手机上无法正常工作,用户很生气,后果很严重。有人甚至说,它就是一坨:( 我很抱歉,朋友们,我真的已经努力了,但是我连你们的手机长啥样都不清楚 ─ 我不可能所有款式的手机都买一个。

安息吧,我的孩子,我会想念你的,你的那些老机器人朋友们也会的。

我一向认为这么多国际大牌厂商参与的,已经有10年左右的智能手机革命,十年不成的原因正是因为缺乏足够好的标准,所以客户端兼容性差。而现在Android这个单一平台,其本身的不兼容性问题已经开始成为了一个严峻的问题。开发一般应用,也许还好,凡是涉及到硬件的,酷的程序,以及游戏,一般来说都对兼容性有比较高的要求。

比如一个应用他需要一个快捷键,而某款手机缺少了一个键造成这个快键无法按下,等等。比如一个应用需要GPS+重力加速度传感器,但是有些手机只有GPS,而没有重力加速度传感器。更可能的就是一款游戏,你在某个分辨率下把有些做到精益求精以后,突然发现Android平台的新宠分辨率居然跟你的游戏不匹配,又要做无数的调整。相信这10年来,混迹于移动平台的第三方开发者都深有体会。

跟兼容性问题一样严重的就是,Android的市场并没有app store这么强的渠道能力,这也是目前不可忽视的问题。

从长远来看,我对这个世界的看法是越来越多元,同时因为多元也越来越美好。我认为iPhone平台和Android平台未来很有可能在很大的程度上分庭抗礼,有各自的核心价值,有各自不同的第三方开发者生态链。这不是PC机和Mac大战的结果,因为那个时代,整个世界也不足够多元(当然还有很多细节,今天就不分析这个老深坑了)。

但是Android如果想达到这样的局面,要在兼容性/标准化方面做出巨大的努力。还需要对发行渠道也就是他们的app市场上做出巨大的努力。

就目前为止,我想提出的建议是立足iPhone平台为主做开发,可以适当的付出一定的精力在Android平台,或者只是先观望Android而已。我乐见未来的世界,既是开放的,又是多元的。只有一种选择的用户是最可怜的用户。PC机这个号称最开放的平台,后来不也变成了让用户只能选择Windows的,OS层面不足够开放的平台么?索性我们有 Linux和Mac,大家才有了更多的选择,也才带动了Windows做出很多改进。

附,本文引发的一些相关的讨论:

  • iPhone和Android的开放问题
  • 招聘广告

    腾讯即时通信部门大力招聘 Mac/iPhone 平台开发人员,欢迎联系和推荐。
    工作地点:深圳腾讯大厦

    可以Mail简历给我,我帮你转发给腾讯有关人员。
    我的邮箱:Tinyfool@gmail.com