iOSCon China 2012

3月25日,由多个社区联合主办的iOSCon China 2012大会在上海及多个分会场(北京、杭州、武汉、广州、澳大利亚)顺利召开,现场及线上直播的总参与人数超过800人,多位国内知名的iOS开发者就移动互联网的发展趋势、产品设计以及开发技巧等诸多话题做了精彩分享。

大多数技术人员都不太了解如何与风投打交道,什么样的项目能吸引投资人的目光,本次大会的开场主题演讲就是由经纬中国的万浩基(@经纬Harry)带来的《经纬眼中的2012年移动互联网》,万浩基长期专注移动互联网和社区应用领域,而经纬更是在移动互联网领域投资了近30家公司,覆盖工具、游戏、社区、广告等领域,包括海豚浏览器友盟等等。

回顾2011年,美国的10家著名风险投资公司在移动互联网相关方面共投资了107个项目,占比25%,其中80个项目获得近16亿美金投资,社交类的项目最多,共有24个。万浩基认为传统互联网行业用了10年才从工具渗透进人们的生活之中,移动互联网用的时间会少得多。传统互联网行业在新世纪初期是大批工具类公司上市,2004年开始一大批游戏公司上市,2009年则是各种电商和服务行业的公司开始上市。移动互联网也会经历工具类、游戏类和SoLoMo/O2O这样一个阶段。无论是什么样的应用,开发者都应该先把功能做到极致,把早期的用户圈定下来。

  • 工具类,例如Camera360海豚浏览器和名片全能王,以满足用户需求为核心,要能抓住用户眼球,VC不一定关注商业计划和赢利能力。
  • 游戏类,最近主要投资重点在iOS和Android平台的游戏上,游戏的赢利可能很快,但是VC会更关注团队的基因,有没有能力持续赢利;有没有很有逻辑、实力的方法,把你的成功复制出来,能不停地做出赚钱的游戏。
  • SoLoMo/O2O(这个说法已经有点过时了),属于电商服务行业,将生活纳入到手机之中,让手机高度渗透入真实生活,需要与本地业务深度整合,与线下结合后的市场机会巨大,这样的团队需要“接地气”。

说到平台型公司,万浩基同样认为它们未来的发展空间很大,但并不是说VC一定喜欢这样的公司,平台不是这么容易做的。此外,还可以关注一下其他领域,比如旅游、教育、医疗、金融、母婴等等,垂直细分领域同样有着巨大的商机。

QA环节中有人问到无线产业链中从哪里切入比较容易?万浩基表示上下游都有这样的例子,比如从硬件入手的小米手机,针对消费者的,以及针对企业的应用。经纬主要投资在消费者领域,这个领域的竞争也最多,企业应用虽然起步较慢,但是2012年里可能也会比较有潜力。说到手机中的电子商务,并不是要做手机上的京东商城,可以帮助传统领域中的B2C商家,提升购物体验,比如导购,让用户在沙发上抱着iPad就能“逛街”,引导用户完成一系列购物行为,最终买单。

随后上场的iApp4Me创始人、知名iOS开发者郝培强(@tinyfool)为大家分析了2012年的iOS市场形势。首先谈到的是苹果的市值,苹果的市值2011年6月就已经超过了微软与英特尔的总值,谷歌的市值比苹果的低45%,而且苹果还有1000亿元的现金储备。其次是苹果的战略前景,从数据来看,iPhone的全球销量惊人,从2007年6月一代iPhone发布,到最新的iPhone4S,不断刷新着记录,2012年第一季度iPhone的全球销量是3704万部,iPhone4S第一天就有100万的预定;iPad的全球销量是5500万台,The New iPad上市3天的销量就有300万台。

苹果打破了行业惯性,之前大家都拼参数,可是结果就算参数再好,玩游戏还是会卡,苹果带来了革命性的用户体验。郝培强认为:

在好东西来之前,你理解不了生活是怎么样的,一旦它来了,你就再也回不去了。

在The New iPad发布前,郝培强在微博上做了一个调查,很多人说自己不会购买,但是发布会之后,很多人又说会买,他调查整理了一些原因。例如,家中的iPad一代已经很老了,该升级换代了;已经等视网膜屏幕很久了;家里需要再添置一台iPad。可见苹果的产品还是有着很大的吸引力的。

有人唱衰苹果,认为它会盛极而衰,但郝培强的观点并非如此。当一个公司代表的事业和行业发展方向没有改变时,它一般是不会倒闭的。苹果有着自己的模式:iPod+MusicStore,iPhone+AppStore、iPad+BookStore。他列举了一些数字做了说明:

时间 iOS设备销量 App下载量 App数量 每设备应用数 每应用用户数
2010年9月 1.2亿 65亿 25万 54 2.6万
2011年6月 2亿 140亿 42.5万 70 3.29万
2012年3月 3.15亿 250亿 58.5万 79.4 4.27万

此外,iCloud在2012年第一季度已经拥有了超过1亿用户,DropBox用了4年时间才达到2500万用户,而iCloud不到一年就到了1亿。有了iCould开发者再也不用为存储和存储相关的维护费用犯愁了,而且开发也会相对容易。说到后PC时代,2011年第二季度,PC产业增长率为-1%,而Mac则有28%的增长,当时苹果认为Mac是后PC;在2011年第四季度,iPad的销量超过了宏碁、戴尔、联想和惠普的PC销量,这时的苹果认为iPad就是后PC。也许iPad的销量超过PC两倍时,苹果可能会盛极而衰,但这还为时尚早。

最后,郝培强还介绍了一下当前中国市场的现状:

  • 黑卡/IPA破解。通常是黑了美国人的信用卡,而这张卡是中国人在消费。有些内支付游戏公司有个潜规则,就是把美国区关了,以此减少黑卡。
  • 刷排名。苹果手机不允许预装,它能反映用户真实的意愿,AppStore能让好的产品冒出来。
  • 无人付费。游戏的付费情况还好,但其他收费软件则情况不佳,苹果就算在中国一分不挣也不会倒闭,可是本地开发者不一样。
  • 渠道化,没办法让小公司的好产品脱颖而出,对市场的良性发展不利。

建议大家要有全球视野,把中国市场和国际市场区分对待,比如中国市场不要太考虑如何收费,而美国市场则可以直接收费。

现场有人问及iOS开发者的就业形势,多位嘉宾均表示目前国内iOS开发者仍然供小于求,缺口巨大,郝培强打趣到很多人想学iOS开发但不想买Mac,这也形成了一定的门槛。但无论是什么平台、什么语言,打好基础,练好内功才是最重要的。

iOS第一个输入法iCosta for iPhone以及iOS平台上的演讲工具AirSlides的作者之一杨武(网名:品雪,微博@pinxue),根据自己的实践经验,就移动产品的可用性设计和大家做了一些分享。

品雪先讲了一个AirSlides的故事,很多试用的演讲者进入画笔后不知如何退出,这个情况超出了开发者的意料。他建议大家要真正从用户角度出发,理解用户的使用习惯,让用户觉得这个东西好用。可用性的好坏和一个产品卖的好不好是两回事,影响一个产品成功的因素有很多,比如你的产品是独一无二的,无可替代的。一旦找准了市场和方向后,可用性会变得相当重要。

品雪解释了他理解中的可用性――可用性就是使用者的心理感受,可用性有三个水平,即有用、能用和好用,而可用性的要素则包括稳定、顺手和赏心悦目。

  • 稳定,稳定压倒一切。时刻都可能崩溃的应用不是好应用,不可靠的应用也不可能是好用的应用。
  • 反应快,界面流畅。用户等待的耐心是有限的,系统最好在100ms左右有反应,200ms用户还能忍,再高就不行了,实在不行,也别让用户等着,做个开场动画之类的东西。
  • 顺手。品雪在现场做了一个小调查,习惯Vim的开发者远远多于Emacs,并不是说哪款编辑器功能更强大,大多数时候只是用顺手了而已。
  • 赏心悦目。心理学上证明了好看的东西会让人觉得好用,PathClear的成功就是一个例子。

说到如何提高可靠性,品雪建议大家扮演一位有品位的用户,要有开放性的试用人群,针对可用性还可以进行一些测试,比如观察、记录,甚至使用调查问卷。

下午的演讲环节中,曾任职于苹果与腾讯的产品设计师端木恒(@hengdm),就产品的价值观与结构,与大家分享了如何设计有价值的移动产品。他认为一款产品真正对用户有价值的地方是这款应用能让用户做什么,要关注用户在使用时的感受。

We become what we behold. We shape our tools and then our tools shape us. ——Marshall McLuhan, 1964

作为工具的创作者,不能随便拿出一款迎合所谓的市场需求的工具,产品中应该能传达一种理念、价值观,苹果的产品就是如此。

  • 价值观。一个背后有强大精神力量的产品,用户一定会慢慢喜欢上它的。
  • 革命性。产品要有远大的目标,明确的方向,步伐坚定。像iPhone这样的革命性产品,也是从微小的细节积累起来的。
  • 纯粹。要坚定产品的定位,例如,Twitter就不会像国内的微博那样在时间线中插入太多的其他内容(视频、图片等),Dropbox对个人用户非常好用,但是它坚决不做仅针对企业的东西。
  • 责任感。不要停留在表面浮躁的工作上,思考什么是对用户有价值的东西,如何让用户在使用的过程中感到愉悦。不要盲目地追求短期利益的最大化,那只是看似光辉的昙花一现,企业的目的是创造社会价值,赢利并不是企业活着的目的。例如,腾讯曾经也搞过月捐计划。

他强调设计时的态度决定了很多东西,比如只许有一个按钮和按钮越少越好,能带来明显不同的结果。设计一款产品时,可以借鉴别人的东西,但绝对不要停留在抄袭和山寨的层次上。不要局限于中国的产品市场,要做无国界的产品,眼界要放的大一些。

产品设计是件重要的事情,别把设计不当回事,传统软件开发流程中,设计只占一小部分工作量,而苹果的应用开发流程中,设计占的比重一般超过一半以上。产品设计的流程主要有产品定义、产品功能设计、产品原型设计和设计优化组成,设计不是单独的步骤,需要很多人一起参与,除了产品经理和交互设计师,开发负责人和架构师一定要参与其中。如果团队较小,那么设计师最好是技术出身的。有好想法,但没有好的设计和实施,只是把东西堆砌在一起,最终的产品总会差强人意,产品不是一个功能的集合,它是一个解决方案。

在设计产品时,苹果会使用ADS(Application Definition Statement),列举产品与众不同的地方、解决方案以及针对的目标用户和场景。例如,苹果把桌面版的iPhoto功能精简到只剩几个核心功能,放在iPhone上,仅关注于照片分享,去掉了很多复杂的功能。简单是美,但在看似简单的表面背后,则充满了细节。随后,端木恒详细介绍了两个设计结构中的要素——信息结构与导航。

信息结构。苹果在设计产品信息结构时,会使用用户心智模型(User Mental Model),即用户在听到一个东西时的第一反应,确定对象、能做的事情、其他的概念,它们之间的关系和优先级。切记不要随意把信息分个类,然后丢给用户。

导航。导航不只涉及移动和切换,还涉及很多内容,信息结构会影响导航。iOS平台上常见的导航方式有翻页、列表、平行导航以及页签。应该尽量避免在应用内部采用网格的方式(九宫格)排布图标,图标位置的排布不可能适用全部用户,如果可以,让用户能自己来排布图标。

一个应用程序的界面应该让用户产生一种期待,所以要精心放置自己的功能。没有十全十美的应用,即使是像Path这样优秀的产品,也可能存在一些设计上的不足。

既然是iOS开发者的大会,肯定少不了技术方面的话题。iOS第一个输入法iCosta for iPhone以及RockPlayer for Android的主要开发者之一李亮(@holly_lee)在他的主题演讲中引用了大量数字分析了各个厂商、设备、系统以及地区的占有量,随后大致介绍了如何选择移动应用开发的技术路线:

  • 操作系统。关注系统本的能力,是否支持多任务、是否支持后台执行,操作系统是否有限制,在安全性和隐私保护上表现如何。
  • 设备本身。关注设备的计算能力、图形能力、各种数据采集设备、各种传感器、分辨率、键盘以及CPU指令集的差异。Android设备厂商众多,不确定性也多,而iOS设备规格比较统一。
  • 云端服务。云端能够提供的服务,带宽如何,需要自己搭建还是利用现有服务?
  • 平台。即平台的市场比率,成熟度、稳定性,是否有成熟的分发方式和支付方式。
  • Native应用还是Web应用?两者各有优劣,比如本地应用体验稍好,两者会长期共存。
  • 跨平台。是否考虑使用现有的跨平台方案,例如PhoneGap
  • 用户体验。这点现在越来越重要了,应用必须具备良好的用户体验,不能花哨,不能喧宾夺主。

来自盛大创新院的孔详波(@ventrua)为大家分享了在iOS开发过程中如何进行调试,他的内容让一些在场的听众表示能将调试做到这种地步,令人佩服。在介绍了iOS应用的启动过程之后,孔详波罗列了一些他所常用的工具:

名称 用途
file 确定文件类型
strings 从二进制文件中查找某个字符串
otool 查看程序使用的动态链接库
class-dump 分析Mach-O文件,查看Objective-C的运行时信息,例如头文件信息
nm 显示符号表中的名字

此外,针对Xcode项目的编译,除了会用到xcodebuild,还有gcc、clang这样的编译器,提取二进制符号的dsymutil,进行代码签名的codesign,打包发布的PackageApplication等大量工具。

分析代码时,分为静态分析与动态分析两部分。静态分析可以选择LLVMClang Static Analyzer。动态分析则主要以日志输出为主,在输出日志时有一定的技巧,例如,使用系统提供的预定义宏,如__func__ 、__LINE__、__FILE__;对标准的输出进行重定向;对日志输出做条件编译,调试时输出,在正式发布时不输出。通过iPhone配置实用工具可以看到系统及第三方应用的日志,在应用发布之后,设备连接iTunes后会同步一些Crash Reports到服务器上,这时开发者也能获取到这些信息。

如果遇到了UncaughtException也不用慌张,一般遇到EXC_BAD_ACCESS这种和操作系统相关的内存错误,系统会返回SIGBUS或SIGSEGV BSD信号,仔细分析总能找到原因;而SIGABRT这样的异常通常不会像前者那么“底层”,可能是数组越界之类的问题。他还推荐了一篇文章《Handling unhandled exceptions and signals》,其中给出了一个处理异常的范例项目

在调试过程中,Xcode提供了很多有用的功能,例如Run sysctl.app中的Enable Zombie Objects可以用来查看僵尸对象;Debug Workflow中的Show Disassembly When Debugging甚至还能显示汇编代码。XCode中提供了两种类型的断点——Exception Breakpoint和Symbolic Breakpoint,可以根据需要进行选择,调试区域内可以看到断点的堆栈信息。还有最近兴起的、苹果资助的调试工具LLDB,具备速度快、高效、准确、可扩展、可重用等诸多优点于一身。孔详波建议大家紧跟技术发展,GDB固然好用,但最好还是能使用新的工具和功能。当有人对LLDB不支持3.0这样的旧系统提出质疑时,他认为不能因为这些原因就对LLDB心存戒备,还是应该有所尝试,而且仅支持3.0的设备的用户也未必就是你的主要目标用户。

大众点评的移动研发首席工程师屠毅敏(mmin18)的演讲《iOS应用开发最佳实践》是整个大会的最后一场主题演讲。开篇他就指出如果精力有限,不要钻牛角尖,把精力放在用户看得到的地方,花大力改进一个单例的写法,用户未必能体会到。

策划一款产品时,不要只想着做平台,不要想着如何整合他人的资源;要让用户一眼就能明白这个应用是做什么的,尤其是产品的名字和图标是很重要的。设计时,一定要记住图标是最重要的UI元素,一定要在真实的设备下体验运行的效果,开发与设计是一个不断迭代的过程。

该演讲的重点是开发中的最佳实践。屠毅敏谈到了苹果力推的MVC框架,虽然看起来很美,一旦项目大了,难免会有一些混乱,因此在开发时要尽量避免横向的交互,例如同级的控制器不能直接相互调用。iPhone的屏幕大小未必就是固定的,偶尔在显示时下面会少掉一条,可能是20像素,遇到这种情况,可以在Interface Builder里设置Autosizing进行解决。针对键盘事件,iOS给了开发者很大的自由度,比如键盘的高度不是固定的,键盘可以跟随滚动条移动等等,他提供了一个范例,希望有更多的人能够协助一起进行完善。此外还提到了一些小技巧:

  • 代码中多使用property,少声明成员变量
  • 使用()作为Category,而不是(Private)的Category
  • dealloc写在@synthesize后面,一一对应,避免出错
  • init和dealloc中要避免副作用,直接置null可能会引起一些莫名其妙的问题
  • 赋值时先判断下可能会让人觉得麻烦,但不这么做又可能会有问题,可以用[foo autorelease],性能方面的影响其实不大
  • viewDidLoad可能会被调用多次,而viewDidUnload可能并不会被调用到
  • 使用NSNotificationCenter时,避免直接removeObserver:self,这样可能会把父类注册的东西都remove掉

新浪微博和大众点评的应用都采用了Native与Web结合的开发方式,屠毅敏认为采用Web方式能够实现快速开发、快速迭代,有很强的灵活性,并且能跨平台、跨版本,应用可以先从Web起步,逐渐迁移到Native上。在基于URL的应用中,应用能注册自己的URL,实现不同应用的互相调用(比如支付宝安全支付),这样的调用方式更加直观,还可以看到URL栈,统计用户行为。在重Web轻Native的应用中,还需要使用JavaScript Bridge,Web调用Native时采用URL Bridge,Native调用Web时则是JS注入。

网络速度也是一个重要的因素,每秒对人均PV的影响是15%,应该尽量将响应时间控制在4秒以下。对于小数据量传输而言,2G和3G的区别并不大,响应速度才是关键。尽量在同一时间段内、在一个HTTP请求中传输所有数据,充分利用移动连接“预热”后的那段时间。

说到参考资料,多位嘉宾都说苹果的官方文档就是最好的学习材料,有能力的话最好能够阅读英文的材料。另外可以关注WWDC所放出的大会资料,从中可以学习到很多东西。

Posted in 故事.