完成作品重要,把这个过程记录下来也许同样重要。
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发测试版本给合作者之后,对方请了另一个画家重新设计,软件界面又要重新弄过。
这个项目已经拖了好长时间。