修iPhone

Standard

把部门体验机的iPhone4s交回去后只能用回自己的iPhone3g,可这手机的屏幕摔坏了,插sim卡的地方也因为上次插错方向搞坏掉。晚上下班后到徐家汇修之,花了四百,home键不灵敏的毛病还是没修好。

记iPhone项目暂告段落

Standard

从4月初到今天,紧张得很紧张的公司iphone项目终于告一段落,让额欣慰的是结果还是不错的。回头想想,蛮不容易的。用数字来表示下,就是3个星期、7000行代码、90张贴图(不包含其他60多张高清贴图)。

从硬件说起,因为iphone的开发必须要在mac系统的xcode上,我们部门木有mac,就从影像组借了台,如果只在公司做不能连贯,最好是回到学校也能做,于是又在凯翔的帮助下,在我的T61机器上装了个黑苹果系统,由于黑苹果系统限制,sdk也不能装最新版的,而是3.1版本,这就造成比如给textview或textfield设输入view时不能简单自定义,项目的一个核心功能在这个版本的sdk里也没有。

不容易的点不只在硬件,账号也是个问题,如果要在iphone上真机调试程序,apple开发者账号是必须的。我们部门的账号申请从项目启动到现在都没能办下来,当初就申请了公司的开发帐号,绑定了我自己的iphone测试。这个月初,lilian提出为给托哥看最好使用iphone4,这点被证明还是很对的,iphone的高清屏和运算速度绝对是最好的项目展示平台,可随之而来的就是引入新设备的问题,但原有账号不能再次绑定,于是又在研究院的开发人员那里讨了他们的账号来用。只有账号也不顶用,还需要进行本地私钥和provisioning的公钥配对,前后搞了好几个回合才算最终找到了稳定的账号归宿,先后绑了三台设备上去。

最不容易的就算编程过程了。这里一定要首先感谢两位,一个Google,一个Richard。前者简直是现实版的骇客帝国中的插到人脑子里的那根管子,引用我们实验室一位博士指导某本科毕设时告诉对方的话:“Google能搜到的不要来问我”,这时英语还是很重要的,在国内的资料中,只有cocoachina上的内容还有些参考价值,国外的就又多质量又高了,就这么着,Google告诉我几乎我想知道的关于iphone开发的一切,但有些点还是要问Richard。Richard不是Baidu或者Bing,他乃一肉身爷们。Richard此人值得表一表,我对他的最初了解都是从Ryan和Steve对他神乎其神的描述中窥得一二,与他真正交流后才发现他猛的。他写过C#的书,apple apps也写了几个了,在A公司尽管主做设计但是被允许修改软件代码… 最关键的不是这些,这些他牛就牛去喽,关键的是他乐于与人交流,讲问题精辟到位,能在我不确定去问他时给我一个相当明确的答复,这种明确肯定的答复就好像迷雾中的明灯。有些问题交流起来就好办,比如上面的密钥问题,我们来回探讨提点,终于理解透彻。从这个过程中也总结出来,提问者最好对问题有过一定的思考,在提问时加入自己的理解,提得也会有针对性,解答者也能从你的提问里找出问题的来龙去脉,有针对性的解答。

具体来唠唠编程。尽管身为计算机专业人士,在做这次编程之前只用过VB和C++,以前用前者做过些东西,后者的使用只局限在实现科研论文中的方法,也都是蛮基础的程序。所以,在做完这次iphone程序编制后,都想专门写一个长文,给它起名叫《Everyone can code》,掌握些基本的编程想法就可以上手coding了。

我的iphone开发历程是这样的:早在去年11月项目开始之初就买了两本书,一本《Objective-C基础教程》,一本《iPhone3开发基础教程》,当时就想,自己C语言还是懂的,就直接看后面的这本好了。一开始照着上面做程序还是蛮简单的,拖拽一下,编两句就能做好。事后证明看这本书是错误的,它里面的程序和Interface Builder结合紧密,不太适合编制较复杂的程序,入门起来也会觉得怎么要到处连输出口,用鼠标左拖右拽的。而且看到后来,iphone的程序会多起来,如果objective-c再不是太懂的话,就更是一头雾水了。前一本书一直没碰过,直到寒假期间,iphone编程还是抓不出头绪,毕业论文也没着落,心里很是急。初五一过,实在不能忍了,于是给自己规定,一天看50页的《Objective-C基础教程》,前面还算基本,后面因为自己的oo编程底子不厚就有点看不懂了,为了完成50页的计划,有时要看到很晚,一直看到protocol这章实在走不动了,心里正烦时找来了个Sample Code,试试如果只看到这为止会看懂多少程序,结果是从此能看懂大部分程序了。

寒假返校返公司后,一边做我本职的交互设计,一边抽空搞app。设计任务一直不断,偶尔有空编下程序又会被打断,就这么相当稀松地搞了一个月,成果也只限于可以使用TableView读取bundle中的plist数据,能做几个view之间的切换。就这么转眼到了3月中旬,毕业论文不得不写了,可程序却只是个简陋的铺面,心想,两头烧一头都不会做好,干脆抓最重要的论文。Ryan和Lilian也放我回校了。

就在写论文写了10多天,论文写了20多页,整体框架也日渐清晰时,Lilian发来QQ信息说部门老大要来上海,希望能在iPhone4上给他做演示。对论文心里有些底的我决定还是先花两星期搞定这个app程序解决部门的问题先,也算给自己一个交代。

于是从4月初开始了新一轮的程序编制,去公司的话效率不高,选择了在学校起早贪黑地做。每天8点起床,晚上1点睡,除了吃饭就是搞app,一天起码12小时工作量,到了最后几天,更是14个多小时都在coding。功夫绝对不负有心人,终于赶在两个星期,也就是18号时发布了beta1版本。拿到公司后,先是得到项目组的一致惊喜,Lilian用超出预期形容,待到大家都体验完毕就开始了项目组内的pk,接下来的一个多小时真的吵到我口干舌燥,主要争议集中在我对内容详情页面的交互更改上,它是我按照对效果图的理解做的交互设定,也是我经过一定思考后做的设定,我极力坚持了自己的设计想法。最后会议室三块白板上写满了要修改的点。

回来后,又是一天的改进,并针对昨天争议集中的点找了改进方法做了进去,还咨询了Ryan和Jiexi对我做的交互设定的意见,他们表示可以接受,只是对title区域的交互还是有提升必要。这天相当充实,想交互、切图、写代码、找修bug… 第二天拿着改好的版本到公司真机测试,为了使改进了的交互更符合视觉需要,还迅速做了几种demo供选择,最后终于通过了。

这时,Jenkin做的Loading动画吸引了我,决定一定要把它做进去,再加上把高清切图放进去等等问题,又做了一两天的修改,最后终于在昨天22号有了一个Beta2版本,也就是这次暂告段落的版本。

昨天下班吃完Anna请的阿久火锅后去了龙之梦大大地购物犒赏自己,在crocs店里还帮服务员成功推销了两双鞋给一美国老外 :)

读写plist文件的问题想到的

Standard

在ios上读写plist格式文件的代码如下:

读:

BOOL success;

NSFileManager *fileManager = [NSFileManager defaultManager];

//网上流行的下面两行注释掉的方法不好使,对ios,直接用bundle就行

//NSArray *paths=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES);

//NSString *path=[paths objectAtIndex:0];

NSString *path = [[NSBundle mainBundle] bundlePath];

NSString *filename=[path stringByAppendingPathComponent:@”abc.plist”];

success = [fileManager fileExistsAtPath:filename]; Continue reading

iOS开发终于有些眉目了

Standard

iPhone的项目已经困扰我很久了~ 经过一段时间暴风骤雨般的学习,对Objective-C的OO编程终于找到了些眉目,蛮高兴,不为别的,只为身为CS人的心结~

周六我妹就从哈尔滨过来上海面试,今晚给她买好了下周回哈尔滨的机票,这次她来上海面试,成功的面很大,还是祝她顺利~ 小杰伦也说周六会到~ 一天天的事情好多!

iPhone App真机调试

Standard

iPhone 的真机调试需要很多步骤,在这之前,要么花99美金购买开发者权限,要么找个公司级的帐号挂靠。上个月的一次培训上认识了公司里一位iPhone开发的大牛,他做过ios系统上的qq、斗地主等app,他后来邀请我加入了公司开发帐号。公司开发帐号一步步和网上有的针对99美金开发者的很不一样,都需要帐号管理员逐步开通,后来辗转了两个人才算在今天早上最终搞定。

在真机调试里run我做好的todo软件demo,告诉我“Can’t install application”“The Info.plist for application at /Users/….app specifies a minimum OS version of 4.2, which is too high to be installed on *** 的 iPhone”,这就遇到了ios sdk 版本过高的问题。我在左侧“Groups & Files”中的项目名上点击右键“Get Info”,在列表中的“Development”中找到“IOS Development Target”,将它的值选成真机中的IOS版本。这样就能在真机上调试啦!