“老外学中文“-开发进度

完成作品重要,把这个过程记录下来也许同样重要。


2012.7.8-7.9

     完成程序的UI布局。主要是storyboard和segue的设计。

7.10-7.11

     使用测试数据,测试数据在界面上的显示。调整单元格的样式。

7.12-7.13

    使用TTS控件,完成汉字发音的测试。发现控件的一个bug(联网状态下进行语音合成后,断开网络再合成会造成程序在start函数处崩溃)。

这个bug在控件本身的演示demo中就存在。

    由于控件中包含的库文件使用的是ios4代码,不支持automatic reference counting的功能,所以需要在build setting中将该功能关闭。

    进一步理解delegate的含义,并学会自己定义delegate。

7.16-?

   采用xml文件存储数据。使用coredata和tableview进行交互,打通数据在界面之间的传递通道。使用样本数据进行测试。


7.22 终于会初步使用coredata来存储和提取数据了。  

1. coredata 的使用花了很长时间。

       边看着斯坦福的视频,边学习coredata的使用。发现视频中的代码在运行到performFetch的时候就运行不下去了。同时如果继承coredataviewcontroller会提示编译错误

原因还没有找到。

   决定换一种实现思路。学习ios4教材中coredata的sample code,初步完成了功能。

同时理解了代码中,为什么要把coredata相关的实现部分放到appdelegate文件中,而不是放到具体的viewcontroller中。这是为了代码复用的需要,如果还有另一个不同的viewController需要使用coredata的函数,就不必在自己的实现文件中重新定义了,只需要调用appdelegate中的函数就可以了,也许这就是appdelegate文件存在的意义。

2.临时变量在初始化时要赋值nil。

    NSError *error;

    self.result = [self.managedObjectContext executeFetchRequest:requesterror:&error];

    if (error) {

       NSLog(@"error is %@", [errorlocalizedDescription]);

    }

调试时,一直发现执行到NSLog处之后就不能往下执行。查了很久才发现是error应该赋值为nil。

3. navigator 到另一个视图,然后按下back回到当前视图的时候,当前viewController中声明的变量,如果没有赋值有可能是一个乱指针,造成debug程序的时候,程序停止在某一行然后不往下执行,也看不到出错信息。与2问题相同,此时都要考虑在变量初始化时赋初值的问题。


8.10 基本完成word 和 sentence的功能,只剩下review的功能了。

这段时间主要完成的事情。

1.和合作者谈条件的事情,还未圆满解决。蛋糕都没有,就要想着怎么分了,的确没有经验。

2.基本掌握,如何从coredata中存储,提取,查找,更新数据。

3.@property和@synthesize 的具体实现,了解@property(retain)的含义,并且要注意自己写的setter函数,对于新指针的retain和对于旧指针的release,避免内存泄露。

4.给代码加上source controll,这对于版本的维护有帮助,也方便自己查看修改了的代码。

5.尽量把公共的部分,例如speaker,coredata相关的 等,放到appdelegate中实现,并给出接口,这样在各个viewController中就可以方便的使用了。


8.12 完成各界面之间的串接及start study 功能,word 和 sentence 功能全部完成。明天开始编写review功能。


8.14 实现card flip功能。


8.19~8.21 软件功能基本完成,整理代码,使用instrument测试内存泄露,并修改完毕。(目前TTS控件本身有一个bug,会泄露16byte的内存,但不会持续增长。)

在去除内存泄露的时候学到了很多。

1.如何使用instrument进行内存泄露的测试。

2.去除代码中alloc 而没有release的地方。同时再熟悉内存管理,对象赋值和复制的内容。这两块是难点也是重点。

修改代码的过程也是理清概念的过程。去除了以前为了确保运行而做的很多不必要的 object copy。理解标准的getter函数一次初始化写法。

3.教材到xml文件的转换.发现处理拼音音调的方法可以如此简单,以前想复杂了。

4.斯坦福视频debug节提到的设置 Exception断点 非常有用。但是设置时需要点击设置action的动作,否则不生效。


8.22~?需要申请账号,和合作者沟通,产品上架及推广。同时自己也要搜集材料。

8.23  弄清 “发码”的意思,初步了解如何申请,发布国家的关系。

1.苹果为开发者上传的app提供了50个免费的激活码。可以用这个码,在itunes账户下拉菜单中的"兑换"填入激活码,下载app。

2.发布app是全球的。购买要看apple id的地址,更改id的国家,就可以下载相应国家的app。


8.28

和合作者谈得比较顺利,9月底还会正式谈一次。

社交和游戏,后续的完善都要考虑。

感觉有很多的事情要做,现在才刚刚开始。


1.开发者账号申请流程:

http://www.cocoachina.com/bbs/read.php?tid=13372

apple开发客服电话:4006701855

2.如何进行真机调试:

http://blog.sina.com.cn/s/blog_68e753f70100r3w5.html

上面的步骤弄好之后,在Xcode run菜单中选择iPhone设备。

3.如何将app放到appstore:

http://blog.sina.com.cn/s/blog_70e0fcf20100p6dz.html

http://jamesli.cn/blog/?p=1047


兼容性及TTS sdk问题:

1.兼容性

storyboard不适用于iOS4.3

base sdk与deployment sdk的含义 (http://www.iloss.me/2011/08/22/如何设置-base-sdk-和-ios-deployment-target-?/)

2.TTS SDK 已经发帖子询问,等待答复。


8.31

1.了解教材著作权相关法律知识,对知识产权相关问题还需要继续咨询。

由组织指定编写的,著作权归组织。引用图片需要著名出处,并获得著作权所有者授权。另外法律咨询热线很多是虚设的,需要亲自去询问。


2.加上sentence tips,使用UIImageView。

开始时图片一直不能加载,后来发现 既然已经在ib里关联了,那么就不应该再alloc,alloc出来的是新的,而不是你原来视图里的” 

只需要设置self.tipView.image 就可以了。另外如果使用[UIImage imageNamed:path] 这里的path不能使用文件路径,只能是bundle里的文件名,

而[UIImage imageWithContentsOfFile:path]这里的path可以指定文件的路径。


9,1-9.5 暂停

9.6


9.14 

1.加入图片到sentence中。

2. 申请开发者账号时,purchaseform 中漏填了expired date,重新填写和传真。下周等回复。

3. 加入了一个小游戏到review中。


9.16

游戏继续细化,美化界面。


9.17

偶然看到cocoachina上关于网络状态检测的代码,规避了连断网后TTS bug造成系统崩溃的问题。


9.19

开发者账号已经申请下来。


9.20

回过头来看自己的软件,不咋地嘛。对比别人做的东西少了很多东西。创意,美工,网络,客户需求都把握得不好。加油!



9.21~9.25

1.iphone 真机测试通过。

2.和合作者谈得还算顺利。

后续对提出的建议进行完善。

账号:共同管理的方式

admin和 financial成员可以查看财务报告。(iTunes Connect 里的文档


合同,内容:近期提供

对软件的建议。(要了解用户要求之后的目的,而不仅仅关注要求本身)

1)主页面

2)选择页面,目录,检索

3)搜索

4)复习提示

"X  O" 记号,错误率统计,点击“i”之后看到图片及note。

5)游戏的效果

6)   像pleco词典那样的创新,我有吗?


9.26

自定义界面元素

http://www.apple.com.cn/developer/iphone/library/documentation/UserExperience/Conceptual/MobileHIG/IconsImages/IconsImages.html


9.27-10.6

文字提取及翻译功能完成。视频部分的探索终止,需要更深入的掌握AVFoundation才行。目前时间不允许,留到后续完善。

后续完成界面完善及美化,以及功能分拆或者合并。

软件开始收敛。


10.7

加入TabBarViewController和启动页面。

联合账户?

需要问清楚,1. apple id里的卡是否可更改。2.是否可以绑定联合账户的卡。3.开设联合账户的具体细节。

1.apple id绑定的卡可更改,即使是公司的成员也可以修改。也就是说联合账户也没有意义。苹果只是提供一种方式。对具体版权的归属,还是要靠当地法律。

 

苹果软件投诉网站:

http://www.apple.com/legal/trademark/claimsofcopyright.html



10.12

关于private api

http://bbs.51cto.com/archiver/tid-846159.html

1.tabbar icon.

2.新手引导

https://www.oschina.net/p/stoverlay/similar_projects?lang=341&sort=view&p=7


后续主要是搜索。


10.15

句子搜索功能完成。后续完成词的搜索。

初步学会搜索,利用开源库。

认识一个开发的朋友,加入开发群,多和同行交流。

对网络功能大致思路有了解,后续版本可能会用到。

 

10.17

考虑支持Retina Apps 。


10.25

更改bundle identifier之后,需要重启模拟器才能调试。

   1.教材的获取。2。


11.7

1.png文件太大,采用什么格式存储。

2.UILable自动换行。


11.10

合同在一番磨合后终于签订,虽然和预想的不一样,但是先做着吧。以后的事情以后再说。

签订合同的时候忘记手写签名了,又得重新快递。。。


11.11

学会自定义tableview的cell。

现在发现以前做的界面太难看了。

优秀界面设计,需要靠平时素材的积累和精心打磨的,需要耗费大量的时间。

今天是光棍节,以前不明白为什么这个节日会这么火。现在自己也需要做营销了,才知道了节日的含义。

体会到,营销也是个有很高技术含量的系统工程,有它自己的方法。


11.13

实验将UIKit 和 cocos2d集合,demo已经可运行。

下一步,1.不使用storyboard,把shashamandarin主程序重新整合。

                2.使用cocos2d把游戏重新写过。

这两步完成之后,程序的兼容性和可扩展性就大大增强。

以后无论是主程序的修改,或者游戏的扩展,都可以在这个框架下进行。


12.8

1.主程序代码重写主体功能完成,coredata,mp3文件播放,UILable自动换行及文本不同部分使用不同颜色实验可行。

2.代码经过leak测试没有问题。在这个过程中 真正了解  1)类方法的含义及使用方法。2)对于简单的内存泄露也能修复了。

- (void)drawRect:(CGRect)rect

{

   // Drawing code

    if (self.text !=nil) {

       CGContextRef context =UIGraphicsGetCurrentContext();

       CGContextSaveGState(context);

        CGContextTranslateCTM(context,0.0,0.0);//move

        CGContextScaleCTM(context,1.0, -1.0);

       CTFramesetterRef framesetter =CTFramesetterCreateWithAttributedString((__bridge CFAttributedStringRef)attributedString);

        CGMutablePathRef pathRef =CGPathCreateMutable();

        CGPathAddRect(pathRef,NULL ,CGRectMake(0,0,self.bounds.size.width,self.bounds.size.height));//const CGAffineTransform *m

        CTFrameRef frame =CTFramesetterCreateFrame(framesetter,CFRangeMake(0,0), pathRef,NULL );//CFDictionaryRef frameAttributes

        CGContextTranslateCTM(context,0, -self.bounds.size.height);

       CGContextSetTextPosition(context,0,0);

        CTFrameDraw(frame, context);

       CGContextRestoreGState(context);

        CGPathRelease(pathRef);

        CFRelease(framesetter);

        CFRelease(frame);//少了这句,导致大量内存泄露

       UIGraphicsPushContext(context);

        

    }

    

}


12.14

界面给合作伙伴看,反应还不错。讨论数据格式,已经基本确定输入的文件格式。需要合作伙伴尽快完成。

在主程序中加入gesture的问题解决,gesture必须应用于UIView,不能直接作用在UILabel. 自己创建一个UIView类包含UILable解决了该问题。

基本上只要合作伙伴尽快给出输入数据,目前已经没有什么大的障碍了。尽快完成,然后投入到小游戏的开发中。

 

12.16

和合作者进一步讨论了数据的格式,同时review部分基本完成。游戏部分讨论之后,决定这一般先按以前的简单模型做。

虽然有了其它的更好的点子,但是还是需要美工配合的。后续版本的升级再用上。

下周从合作伙伴那里拿到数据,完成主程序部分。

 

1.3

1.游戏基本完工,游戏逻辑,音效,图片,菜单基本完成。后续就是细节的完善。

iphone4s的的大小是460pt*960pt,而普通的iphone是320pt*480pt.因此在准备图片时,需要准备两套。

iphone4s会自动识别使用 **-hd.png的图片。在为iphone4s准备图片时,需要按照460像素*960像素(每英寸72像素)的尺寸大小来准备。

但是在编程时,点的坐标的计算却不是按照像素来的。iphone4s中,仍然是320point * 480point。

据我的理解,所谓的retina屏幕的意思:就是比原来的像素多一倍,但是屏幕尺寸大小不变。

2.句子配套的数据和图片收到,虽然图片少了点,但还算过得去吧。

3.录音已经做过实验,去噪处理之后的声音还是可用的,要尽快拿到录音文件。

1.5

Adobe Audition去噪。发送去噪方法给合作者。
 

1.6

1.add sound and picture.

2.add user introduction


2013.4.7

使用testflight发测试版本给合作者之后,对方请了另一个画家重新设计,软件界面又要重新弄过。

这个项目已经拖了好长时间。

你可能感兴趣的:(iphone开发)