lipeiqiang 2013-01-30T01:52:01-08:00 kejinlu@gmail.com Tech Study 2013 2013-01-29T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2013/01/tech-study-2013 时间过得太快,现在已经是1月底马上进入2月份。之前在twitter上说了自己2013年的学习计划是摄影和写个自己的APP。这两个都还没有开始。如果我不详细计划一下的话,2013年过去的时候,可能我都没有完成。

首先列一下需要学的技术: 1.Mac软件开发 有了iOS的开发经验,Mac的软件开发不是难事儿。我已经接触了一些,很多Framework以及类库,iOS和Mac的都是相同的。目前来看,主要是Mac APP UI 控件需要多熟悉一下。

2.LNMP开发

PHP的开发了解到一些皮毛了,在SAE上开发无什么障碍。但是如果让我自己在Linux上搭一个环境,还是比较折腾的。下一步要熟悉一下。如果技术差不多以后买个VPS玩玩。

3.HTML,JS前端的一些东西

主要是网页开发的。我准备学习一下,最好能够建一个小站。

4.设计学习 重点研究五款APP的UI和交互,形成笔记放在博客上。 仔细学习《Hack Design》每一课;

具体的一些计划 1.APP

写APP的目的不是为了赚钱(想赚到很难。。。),主要是为了试验一下自己的想法吧。我始终觉得APP存在的第一要务就是有价值,其它设计,营销什么的都是在此之上的。所以我准备写一个对自己有用,对其它人有用的APP,功能简单,设计上以简洁(我也不懂设计)为重。

APP暂定为Mac端的Appstore工具。功能只做三个:

1.关键词优化 输入APP的关键词列表,查询APP在各个关键词下的排名。

2.AppStore榜单 支持总榜和各个分类榜;支持按国家查询;支持查看APP的排名。

3.review查看 输入APP可以查看Appstore Review;支持按国家查看。

基于之前工作中用到的一些技术,功能都很容易完成。交互和设计是我最需要考虑的,计划花两个月的时间进行设计,期间绝不写一行此APP的代码(主要是为了想透交互和UI)。

2.web

重构之前写的taozhekou查询网站。改成调用Taobao JS库实现,看看有没有办法做成可以返利到指定淘宝账号?

写一下Appstore工具的web版(有没有必要?) 或者写一个博客网站。 或者其它有价值的小的网站?

总之这些东西说多不多,说少不少,尽力而为。

]]>
Ios Dev Tips 2013-01-24T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2013/01/ios-dev-tips === iOS Development Tips 最近看了一篇博客《iOS Development Tips I Would Want If I Was Starting Out Today》,其中很多观点和我相似,特偷懒将摘要放在我的博客。

1 Use ARC!

ARC真是超级棒,开发者不用再去处理复杂的内存管理。需要注意的是ARC并不是内存的自动回收,只是把之前需要开发人员手工写的retain,release,autorelease,在编译阶段的由编译器自动添加。 做为有经验的iOS开发者,也请一定要用ARC,对于开发的速度是有很大提升。而iOS新手,用了ARC可以避免很多的内存问题。目前,越来越多的开源代码也采用了ARC。

2 尽可能使用Block Block可以减少很多的代码,让你的代码更干净。 目前iOS原生API里面也大量的采用block。

3 避免循环Retain,尤其是在Block中 这个问题一定要注意。这里有篇文章专门讲这个问题,A Quick Gotcha About Blocks

4 忘记 Thread吧,多用GCD。 GCD用起来很容易,把耗时的操作放在异步的queue里面,记得把UI的操作放在main queue里!

5 Singletons/Shared Objects

+ (MyClass *)sharedClass {
        static MyClass *_shared = nil;
        static dispatch_once_t onceToken;
        dispatch_once(&onceToken, ^{
        _shared = [[MyClass alloc] init];
        });   
        return _shared;
}

6 Story Boards 只是为了做快速原型

7 只用XIBs处理基本的Layout

对于6,7我一直没有在项目中采用Interface Builder,主要是IB做出来的界面适应性不够强,代码也不容易读。 对于这两点我没有太多发言权,看个人喜好了。

8 组织好工程代码

9 拥抱开源代码 这点我是深深赞同,不要重复造轮子,把优秀的代码拿来直接用,可以大大提高开发效率。 我有两篇文章专门介绍了iOS的优秀开源项目。 iOS实用开源代码推荐(一)

iOS实用开源代码推荐(二)

10 Dependency Management

11 多用Stack Overflow 这个没的说,只要你用google搜索一些iOS的问题,最终大部分会指向Stack Overflow。

12 Graceful Degradation

优雅的向下支持?我不太赞成支持太老的系统版本。只要支持最新版本和向前一个版本就好了。如果是新开的项目直接只支持最新的系统版本吧!

13 自定字体 这个很简单,不过中文字体免费的不多,并且比较大。如果不是阅读APP,真不想增加字体。

14 从一开始就要支持多语言 嗯,国际化很重要。即使你不支持中文以外的语言,我也建议你一定要遵循iOS的Localization。这样你想支持其它语言的时候,很容易就可以添加了。

15 Crash报告 HockeyAPP和TestFlight可以提供比iTunesconnect更好的Crash report。

16 Anayze 可以解决很大一部分潜在的问题,解决掉它们。

17 Instruments 发布前一定要跑一下Instrument,把消耗CPU的地方优化一下。Instruments查找内存泄漏和僵尸指针也很有一套,这个需要经验。改天我会写一篇如何使用Instruments。

18 跟踪Appstore的用户Review 原作者写了个Appbot[http://appbot.co/]专门干这件事儿,网址是http://appbot.co/ 这里算是他的广告吧,哈哈。

]]>
使用SKStoreProductViewController显示Appstore内App详情(iOS6) 2013-01-18T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2013/01/show-appdetail-inapp === 使用SKStoreProductViewController显示Appstore内App详情(iOS6)

iOS新增了一个StoreKit,其中提供了一个可以在程序内显示Appstore中的App详情界面的ViewController。对于推荐自家应用非常友好,可以在这个界面直接点击下载,不需要再跳到Appstore了。

``` - (void)presentAppStoreForID:(NSNumber )appStoreID inView:(UIView )view withDelegate: (id)delegate withURL:(NSURL *)appStoreURL {

if(NSClassFromString(@"SKStoreProductViewController"))
{

    SKStoreProductViewController *storeController = [[SKStoreProductViewController alloc] init];
    storeController.delegate = delegate;

    NSDictionary *productParameters = @{ SKStoreProductParameterITunesItemIdentifier : appStoreID };


    [storeController loadProductWithParameters:productParameters completionBlock:^(BOOL result, NSError *error)
     {
         if (result)
         {
             [self presentViewController:storeController animated:YES completion:nil];
         }
         else
         {
             //Warning
         }
     }];
}
else
{
    [[UIApplication sharedApplication] openURL:appStoreURL];
}

} ```

]]>
ARM IT指令解析 2012-12-27T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2012/12/arm-it-instruction ===ARM IT指令解析

最近研究iOS程序的反汇编,重新学习了ARM的指令。其中,IT指令着实让我费了点时间,差了一些资料总算明白。特记录于此,防止自己日后忘记。也期望能够帮助其它不理解这个指令的朋友。

RealView的《汇编指南》对IT指令的解析如下: http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0204ic/Chdhcfbc.html

IT (If-Then) 指令由四条后续条件指令(IT 块)句组成。 这些条件可以完全相同,也可以互为逻辑反。
IT 块中的指令(包括跳转)还必须在语法的 {cond} 部分中指定条件。
无需在代码中编写 IT 指令,因为汇编器会根据在后续指令中指定的条件为您自动生成这些指令。 不过,如果确实   需要编写 IT 指令,则汇编器会根据后续指令中指定的条件对 IT 中指定的条件进行验证。
编写 IT 指令可确保您会考虑如何在代码设计中放置条件指令以及选择条件。
在汇编为 ARM 代码时,汇编器会执行相同的检查,但是不会生成任何 IT 指令。


限制
不允许在 IT 块中使用下面的指令:
IT
CBZ 和 CBNZ
TBB 和 TBH
CPS、CPSID 和 CPSIE
SETEND
使用 IT 块时的其他限制有:
跳转指令或修改 pc 的任何指令只能是 IT 块中的最后一个指令。
无法跳转到 IT 块中的任何指令,除非在从异常处理程序返回时。
不能在 IT 块中使用任何汇编器指令

举个例子

if (R4 == R5)
{
  R7 = R8 + R9;
  R7 /= 2;
}
else
{
  R7 = R10 + R11;
  R7 *= 2;
}

汇编如下

CMP R4, R5
ITTEE EQ
ADDEQ R7, R8, R9    ; if R4 = R5, R7 = R8 + R9
ASREQ R7, R7, #1    ; if R4 = R5, R7 /= 2
ADDNE R7, R10, R11  ; if R4 != R5, R7 = R10 + R11
LSLNE R7, R7, #1    ; if R4 != R5, R7 *=2

IT语法

语法
IT{x{y{z}}} {cond}

IT后面最多可以跟4条指令,其中xyz只可以用T或者E,T就是Then,条件为真时执行,E是Else,条件为假时执行。 ITT后面就是两条指令,ITTEE就是四条指令。

]]>
我的2012 2012-12-23T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2012/12/my-2012 我的2012

  1. 学习了一些新技术 一直做客户端开发,服务端是个瓶颈,很多想法受制于server而无法实现。如今,基于SAE,BAE平台可以很方便的进行开发不必再去购买vps,配置服务器等等一些麻烦。So,看了几天Python和PHP我就可以在SAE上开发出自己想要的东西。 在SAE上放了一个自动抓取Appstore的程序,准备做一个微信的接口,可以自动回复App的排名。 在BAE上用Python做了一个获取淘宝折扣返利的网站,主要给自己用,最近两个月已经为自己返利300多块了。由于淘宝API的限制,已经没办法填写淘宝账号返利了。下一步准备开源,提供给其它人自用。 2013年准备实现自己的一到两个小想法。

  2. 也有失望 年初一直反响不错的App在2012年由于各种原因,几乎到了没人用的地步。花费了那么多的心血,本不应该到这个地步的,实在令我心痛。不知道公司其他人有没有反思或者总结过其中的得失与经验。我从中学习了不少技术上的东西,产品上的失误也能给很多启示,避免以后走冤枉路。

  3. 做个展望 一定要做一款有意义的,真正受用户喜爱的产品。如果用户量上做个目标的话,我希望周活跃用户可以达到10万! 业余按自己的想法做一款有价值的产品放到Appstore,免费。下载量能够达到20万。

]]>
Appstore关键词工具 2012-11-26T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2012/11/appstore_keywords_optimize Appstore的关键词的重要性毋庸置疑,如果产品不能进入排行榜,又没有很好的利用关键词,那么结果就会在Appstore的APPS的红海中无法被人发现,每天只有个位数的下载量。

如何进行关键词优化?这个我也没有多少经验,有篇英文的分析,可以参考一下。为了评估每个关键词的质量,要看自己的软件在这个关键词搜索结果中的排名。自从iOS6的Appstore改版以后,搜索结果每页只能一个,用户只能滑动去找下一个。这样的情况下,你觉得用户会向下翻多少个?如果你的软件在某一关键词的排名在20之后,就不如另外想个别的关键词。

好吧,进入整体,我这个脚本工具,就是查询你的软件在每个关键词结果的排名,然后根据排名进行取舍。 代码是PHP的在Git上,有兴趣的可以去试试,看看自己的关键词如何。 github,

]]>
如何开始写一个iOS APP 2012-11-10T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2012/11/how-to-make-an-ios-app 本文是根据个人经验所总结,主要是写给没有iOS开发经验但是准备投入到iOS开发行列的开发者, 希望能够减少前期的准备工作,把精力用在产品上面而不是不停地到处咨询一些琐碎的开发问题。本文的前提是具有Mac电脑和iOS设备,黑苹果也不在本文讨论范围。

首先,申请一个IDP账号

需要有一张VISA信用卡,然后到Apple开发者中心https://developer.apple.com/ 注册一个账号,然后选择99美元开发者计划即可。当然,你也可以在产品开发的差不多的时候再去申请, 但是如果需要在iOS Deviece上进行调试的话,是必须有iDP的。

Objective-C和iOS入门

iOS Dev Center最近上线了一篇中文的开发文档,《马上着手开发 iOS 应用程序 (Start Developing iOS Apps Today)》,初学者一定要看看。

加快开发速度的框架

  • AFNetworking or MKNetwork 推荐使用AFNetworking,这是一个非常简洁,功能又十分强大,作者还保持频繁更新的网络框架。使用AFNetworking 可以大大减少网络部分的开发工作量。强烈推荐使用。

*MBProgressHud

这又是一个iOS APP常用的控件,非常方便的等待框,样式很多,并且使用很方便。强烈推荐使用。
  • SDWebImage 如果你的APP需要用到很多网络图片,SDWebImage必不可少。SDWebImage可以方便加载网络图片,并且自动处理缓 存,大大提高程序的流畅度。接口简单,使用方便,可以节约很多工作量。

产品测试

Testflight进行测试和收集用户统计 使用Testflight可以方便的分发给测试用户,测试用户可以直接通过邮件的URL下载安装测试包,不再需要放到iTunes里面同步,并且可以收集用户反馈意见。借助脚本,Achive以后可以方便的上传到Testflight,可以大大提高测试的效率。 使用Testflight也可以方便知道测试用户有没有安装,使用了哪些接口,特别方便。

发布以后的产品监测

  • Flurry 如果你是个人开发或者小团队,建议不要再搞自己的数据后台了,浪费时间又不一定比Flurry的功能多。如果你对国内服务放心的话也可以使用友盟。

赚点广告钱

  • ADMob和iAD 广告平台很多,只是列出两个,如果你的产品用户比较多的话,可以考虑一下其它的平台。如果专注于国内,可能国内的广告平台更方便一些。

    以上可以大大提高开发的速度,如果你有更多服务或者技术分享,可以联系我,互相学习。

]]>
CodeIgniter 去掉URL中的index.php 2012-11-09T00:00:00-08:00 lipeiqiang http://lipeiqiang.github.com/2012/11/codeigniter-remove-index.php-in-url CodeIgniter 去掉URL中的index.php

在CI根目录下创建一个.htaccess文件 内容如下:

    RewriteEngine on   
    RewriteCond $1 !^(index\.php|images|js|css|robots\.txt)
    RewriteRule ^(.*)$ /index.php/$1 [L]    

上面第二行,是为了设置这些文件和目录可以直接访问。

在Mac上创建.htaccess文件

     sudo touch .htaccess

然后修改权限,通过vim上面的配置内容。

检查apache配置,httpd.conf文件 * 是否加载了LoadModule rewrite_module modules/mod_rewrite.so * 打开配置文件

    sudo vi /etc/apache2/httpd.conf
查看var/www/html目录是否

    <Directory "/usr/local/www/html">
    Options FollowSymLinks
    AllowOverride All
    Order allow,deny
    Allow from all
    </Directory> 

以上完成,就可以去掉URL中的index.php了。我是在Mac OSX 10.8.2下操作的。

]]>
iOS实用开源代码推荐(二) 2012-09-06T00:00:00-07:00 lipeiqiang http://lipeiqiang.github.com/2012/09/ios-opensource-recommend-2 iOS实用开源代码推荐(二) 本篇相对第一篇来讲,更加实用,主要是一些很基础的工具,经过改造已经融入到自家的框架之中。

1.SDWebImage

Asynchronous image downloader with cache support with an UIImageView category

简单几行代码就可以解决图片异步下载,缓存的问题,可以直接用到代码中,可以大大节约时间。

https://github.com/lipeiqiang/SDWebImage

2.MBProgressHUD

MBProgressHUD + Customizations

MBProgressHUD is an iOS drop-in class that displays a translucent HUD with an indicator and/or labels while work is being done in a background thread. The HUD is meant as a replacement for the undocumented, private UIKit UIProgressHUD with some additional features.

https://github.com/jdg/MBProgressHUD

3.InAppSettingsKit

This iPhone framework allows settings to be in-app in addition to being in the Settings app

程序内设置很容易被实现,大大节约开放时间,并且非常灵活。

https://github.com/futuretap/InAppSettingsKit

4.Nimbus

来自于Three20,文档很丰富。

https://github.com/jverkoey/nimbus

5.AFNetworking

轻量级的Network Framework,支持iOS和Mac。

https://github.com/AFNetworking/AFNetworking

]]>
iOS实用开源代码推荐(一) 2012-09-06T00:00:00-07:00 lipeiqiang http://lipeiqiang.github.com/2012/09/ios-opensource-recommend-1 iOS实用开源代码推荐 列了一些自己将来可能会用到的比较使用的一些开源的代码,都很不错,即使用不到也可以学习一下。

1.MIMChart-Library

提供了以下几种统计图表

1.Pie Chart

2.Line Graph

3.Wall Graph

4.Bar Graph (Simple, Grouped, Stacked)

5.Fragmented Pie Chart

https://github.com/ReetuRaj/MIMChart-Library

2.PrettyKit

UIKit 的自定义美化,尤其喜欢其中的自定义的GroupTable。

https://github.com/vicpenap/PrettyKit

3.PepperUI Library(商业授权)

Free-to-try version of commercial PepperUI library for iOS.

https://github.com/torinnguyen/PepperUIDemoFree

http://www.binpress.com/app/pepperui-for-ios/960/downloads

4.Dazzle

A demonstration of particle effects in iOS 5 with CAEmitterLayer and CAEmitterCell — Read more

https://github.com/lichtschlag/Dazzle

5.iCarousel

A simple, highly customisable, data-driven 3D carousel for iOS and Mac OS —

https://github.com/nicklockwood/iCarousel

6.MPFoldTransition

Easily add custom folding and page-flipping transitions to UIViews and UIViewControllers — Read more

7.SVPullToRefresh iOS目前最好用的下拉刷新和自动加载更多的控件 之前用过很多的下拉刷新的开源代码,在之基础上也做了很多自己的修改。但是看到SVPullToRefresh以后义无反顾的抛弃了之前的代码,这是我见过iOS上最好用的开源控件,简单易用,不拖泥带水,几行代码就可以搞定。最强烈推荐。 https://github.com/samvermette/SVPullToRefresh 下一篇文章主要写已经融进自己的iOS框架的开源项目,更基础更实用。

]]>