解决iOS开发中zxing在release下不能正常工作的问题

zxing是一个开源类库,用于解析条码二维码(1D/2D),实现语言为Java,但其中也提供了Objective-C的一个包,Objective-C的实现只能读取QRCode。

我们最近的一个iOS工程需要在手机上识别我们的二维码,所以我采用了zxing,按照zxing的文档将ZXingWidget工程导入自己的工程,过程比较顺利,在我的iPhone上调试也没什么问题,但当我打成AdHoc版交付测试时,测试发现程序不能识别二维码,我挺奇怪,就在网上搜索,在zxing的FAQ上确实有这个现象的解释

Why does my application decode okay in debug mode on iOS but not in release mode?

You’re compiling with an old version of llvm-gcc or clang. If you use Xcode 4.2, either supported compiler should be fine with optimizations turned on. Older compilers, shipped with Xcode 4.1 and earlier, had an optimization bug in llvm that miscompiled ZXing. If you are using Xcode 4.1 or older, you should use gcc to compile ZXing, not llvm-gcc or clang.

意思应该是说可能使用了老版本的编译器,Xcode4.2之前都存在问题,但我的Xcode已经是4.3了,应该不存在问题,继续搜索其他资料,基本都是英文,但说的也不是很明白,应该是编译器的Optimization问题,后来我将项目引用的ZXingWidget工程的Optimization Level设为None,即-O0,再打AdHoc就没问题了。

具体为选择ZXingWidget工程的Targets中选择Build Setting,将Optimization Level设为None,即下面的Debug和Release都设为None。

关于星点无线1.8.1

星点无线已经升级到1.8.1版本了,其功能也转变成以O2O为主,消费者使用星点无线客户端直接购买商品或服务,获得二维码凭证,到商家门店出示二维码,通过我们给商家提供的二维码扫描设备验证,即可获取商品或享受服务。

星点无线现在同时发布iPhone和Android版本,1.8.1的UI有了很大的改变,由原来的蓝色系改为了橙色系,功能上增加了游客浏览、离线电子票,集章卡的展现也有了很大的改进。

iPhone版App Store地址 http://itunes.apple.com/cn/app/id448294946?mt=8
Android版安装文件 http://www.xingdian.com/downloads/starrymobile.apk

 

 

 

 

游上海月湖雕塑公园

4月30日,趁着5.1假期,我带着老婆孩子和老妈,去了一趟上海月湖雕塑公园,上海月湖雕塑公园位于上海松江区佘山国家旅游度假区林荫新路1158号,同一区域的还设有著名的“欢乐谷”,我们星点网独家在线销售月湖公园的门票,所以我也是为了体验一下我们网站的整个电子票服务。

首先在星点网购买月湖雕塑公园的门票(或是使用星点无线购买),我们网上成人票的价格是80元,而如果到公园售票处购买,则要120元,所以还是很合算的,购买成功后,可以将电子票打印出来,也可以直接用手机上的星点无线应用,到公园入口处出示电子票的二维码,入口处服务人员会使用我们星点网的二维码验证设备验证电子票的有效性,验证通过后即可入园了,验证过程快的,我们入园时也没有遇到任何障碍,我们这套验证体系还是让用户满意的。

月湖雕塑公园的特色是雕塑,公园里有多个有特色的雕塑,富有美感,公园中央是很大一片湖,月湖就是指此湖吧,整个公园分为春岸、夏岸、秋岸、冬岸,对于小孩子来说,最感兴趣的还是夏岸,这里有一大片沙滩,小孩子们可以挖沙子,同时还有多个儿童游乐设置,特别是那个“跳跳云”,让大人小孩玩的不亦乐乎,在夏岸附近,有个烧烤区,我们中午就是在这里烧烤,收费为4人一桌一个炉子,60元,不限时间,如果要加碳的话,每包碳20元,还是比较实惠。

总的来说,月湖雕塑公园公园风景优美,非常适合带着孩子亲子游,小孩能玩的东西比较多,还能烧烤,天再热一些的时候去就更美了:)

沙滩

沙滩

跳跳云

这就是跳跳云,耗资6500万日元由日本进口全世界最先进的环保高弹性材料制作而成。

创业之2011年总结

现在已是2012年的1月底了,似乎现在写2011年的总结有些晚,但还是写一下吧,也算一个心灵备忘录。

2011年我仍然在创业路上,相比2010年,11年确实有了不少的进步,首先表现在团队方面,在去年的上半年,我都还在为团队头疼,主要是人力缺乏,招不到人,同时已有成员能力不足,详细可见我之前的一篇文章《创业之用人之困》,到后半年,经过不断的大浪淘沙,研发团队的骨干力量终于开始形成了,出现了几个优秀的可以挑起大梁的人物,剩下的年轻工程师虽然经验有限,但在态度上和责任心上表现的不错,也非常上进,愿意学习,我终于可以把手中的一些事情交给他们去做了。

产品方面,我们除了已有的星点调查,在2011年,推出了社会化网络营销平台–“星点网”和移动互联网应用–“星点无线iPhone版”,“星点网”还在不断深入,“星点无线”也即将推出Android版本,总体来说,产品布局在2011年已经形成。

个人技能上来说,主要的提高是掌握iOS开发技术,已经独立的开发公司的iOS应用,并在App Store上架了2款应用,分别是“星点无线”和“星点调查 for iPad”,Java方面没有过多的研究,似乎新的框架和技术出来的也比较少。PHP一直在用,我们使用的框架也比较固定,不会生疏。一直很想对NoSQL有更深入的研究,比如我们已经在使用的MongoDB,和现在非常热门的Redis,由于平时太忙,没有做更多的测试。在系统架构方面,现在表现尚可,但也想做更多的测试,以验证当前架构的稳定性,特别是将来会遇到的大访问量情况的应对策略。

一年中,时刻感受着创业的各种压力,应对各种之前没有遇到过的问题,创业确实是对人最大承受力的考验,我的最大感受是,不是每个人都能创业,在不能创业的大多数来说,能成为人才的人也很少,优秀的人才都是大家求之不得的。

在2012年中,我仍然要着力做的事情是团队建设,只有团队真正起来了,我们创业的目标才能实现,同时要专注、专注、专注,沉下心来把各个产品做好,真正的满足用户的需求,在无线和O2O领域有所建树,同时在运营方面也多参与,找到突破点。总的来说,还是要建设优秀的企业文化,我们公司已经成立快2年时间了,只有优秀的文化才是我们真正前进的动力。

支付宝无线商户接入遇到的问题总结

最近我在为“星点无线”产品增加手机支付功能,支付当然首先想到的是支付宝,而且也在其他类似无线产品里看到集成支付宝应用。

首先在支付宝无线商户平台里签约,我们分别签了“手机网页支付”和“手机应用内支付”,所在行业的费率会有所不同,请根据实际情况选择,“手机网页支付”和“手机应用内支付”的费率也不同,“手机应用内支付”低一些。

最开始,我只想简单一点,在iOS应用里内嵌Web,采用手机网页支付,服务器端是用PHP,手机网页支付,采用MD5和RSA两种签名方式,MD5相对简单,但安全性不如RSA,我最开始测试MD5,而且之前在网站上集成支付宝,也没啥问题,开始是比较顺利的,到支付宝支付时,支付宝默认选择了短信支付方式(可能和我们签约的分类有关),也就是支付宝会通过手机短信发送一个验证码,然后回复验证码,支付宝再会发送一个短信,短信里包含一个URL,点击这个URL,会提示支付完成,然后转到我们网站的回调地址,我方程序完整成个订单,但支付宝提供的这个URL,有时候打开会报错误,而且也不是每次都错,非常的奇怪,更大的问题是在成功后回调我服务器程序时报签名不对,我仔细检查了配置,没有问题,只能一点点排错,最后发现支付宝提供的Demo包里alipay_function.php的para_filter方法有问题,这个方法会漏掉回传的out_trade_no参数,非常的奇怪,只有修改这个方法为

function para_filter($parameter) {
  $para = array();
  foreach ($parameter as $key=>$val) {
    if($key == "sign" || $key == "sign_type" || $val == "") {
      continue;
    } else {
      $para[$key] = $parameter[$key];
    }
  }
  return $para;
}

签名问题解决,但由于短信支付最后这个URL的诡异表现,我为此专门询问支付宝客户支持,得到的回答是他们也发现这个问题,但不知道是什么原因造成的,技术也解决不了,竟然也有支付宝解决不了的问题啊!

这个问题不能解决,确实对用户的体验不太好,我只能选择“手机应用内支付”,支付宝提供了iOS的集成代码,文档也算详尽,但iOS的签名采用RSA,所以在服务器端先要改为RSA的(RSA的alipay_function.php para_filter方法有同样的问题),生成公钥、私钥的方法在文档里比较清楚,就是注意上传商户公钥时一定要删除文件头“—–BEGIN PUBLIC KEY—–”与文件尾“—–END PUBLIC KEY—–”还有空格、换行,变成一行字符串并保存为TXT文件,商户私钥在PHP程序不需要转为PKCS8格式,而在其他语言里(比如Objective-C)需要转为PKCS8格式,并在iOS应用里设置plist文件中RSA private key变量时,要把PKCS8格式私钥的换行和头尾的“—–BEGIN PRIVATE KEY—–”与“—–END PRIVATE KEY—–”删除。

在iPhone真机调试过程中,跳到支付宝应用时报签名错误,我又仔细检查了好几遍,确定没什么问题,后来在支付宝的指导下先测试运行他们提供的Demo程序,没有问题,说明签名密钥没问题,肯定是要签名的数据有问题,我对比了一下发现AlixPayOrder中的productDescription不能为空,也就是传输数据中的body变量不能为空,终于完成了无线支付的集成。

支付宝提供的文档还算比较全面,但有些地方还是有些含糊,如果是iOS集成的话,先测试它提供的Demo程序,以确定密钥的正确性,仔细调试,记录Log,还是比较容易集成的。

面对乞讨儿童

我每天上下班往返于上海浦西浦东,乘坐地铁2号线,近期发现2号线上带小孩乞讨的非常多,基本上每周都会碰到。

之前偶尔也能碰到带小孩乞讨的,我基本选择沉默,也不给他们钱,但看到抱在怀里熟睡的孩子,看到他们露在外面的小手,我总会想哭,孩子们应该享受美好的童年,应该被爸爸妈妈呵护,但现在可能是被拐骗,变成了赚钱的工具,甚至是被犯罪集团控制。

我终于忍无可忍了,决定要采取行动,帮助解救这些孩子,首先我准备每看到这样的情况就用手机拍下来,在新浪微博上有一个@随手拍照解救乞讨儿童的微博,我把照片@给它,但是给我的回复基本是“请马上报警”,昨晚我乘坐2号线回家,在龙阳路上来一对男女,女的身上背着一个小孩,大概是个男孩,1-2岁的样子,开始乞讨,从我前面走过之后,我就拨了110,将情况告知警方,110说警察马上会到,更让我意外的是就在我报警之后,竟然又有2拨带小孩乞讨的上来,一个是女的,孩子抱在怀里,由于看到前一拨可能不远,坐了一站就下了,后来的一个也是女的,拉这一个小孩,大概3岁,一路地铁运行很正常,乞讨者在流动,最后我也不知道警察是否采取了行动。

根据我的观察,乞讨者多出现与晚上8点以后,地铁上人较少,可以走动,在上下班高峰时间很少碰到,由于地铁处于运动状态,人员流动性太大,对于报警后处置带来很大的难度,所以我很希望上海警方能针对此问题展开转向行动,解救被拐儿童,让宝贝回家。

根据法律规定,就算是自己亲生子女,带出来乞讨也是违法的,与这些非法犯罪活动做斗争,其实就是保护我们自己的孩子,但我也希望政府、执法者能真的负起责任,我们这个国家,如果连保护妇女儿童都保护不了,何谈幸福?何谈民生?

以下是我最近在地铁里拍到的带小孩乞讨的照片,由于是用手机拍的,所以比较模糊,而且有些没有拍到正面。

 

 

 

后面2天又碰到带小孩乞讨的,注意这个带红帽子的小孩,我就碰到了3次

  

最新进展,今天(2011-12-22)在微博上,上海警方对于轨道交通乞讨儿童的问题做出了回应

http://weibo.com/2493592183/xDceptVjv

我的评论是:

感谢@警民直通车-上海 @lamesaint 对于轨道交通内乞讨儿童问题的回应,但是能否用未成年人保护法来保障这些儿童的权益,普通市民对于这样的现象该如何提供帮助?

2012-12-23,新闻《沪警方整治轨交流浪乞讨 部分职业乞丐月入过万》

读乔布斯传

读完乔布斯传已经有一段时间了,从当时以沉重的心情读完最后一页到现在这段时间,我一直在思考,乔布斯是如何让苹果如此的成功?

这本传记是唯一一本乔布斯授权的传记,总体来看,比较清楚的描绘了乔布斯这个人,他从为人上来说绝对算不上高尚,甚至有些刻薄,但这并不是最重要的,我思考的是为什么他能够真正的改变世界。

机遇,如果没有他的合伙人沃兹,不可能有苹果的诞生,不可能有第一桶金,当然也是因为个人电脑的时代,特别是有了Apple II,可以让乔布斯在Macintosh上折腾,Macintosh有划时代的意义,但在商业上并不太成功。

挫折与基石,从某种意义上来说,乔布什出走苹果后的NeXT公司的NeXTSTEP系统,是现在Mac OS/iOS的基石,奠定了这10几年来的高速发展的基础,我在做iOS开发时,越来越感觉,这套体系,绝对不是一朝一夕能做出来的,确实是需要长时间的积累,正是苹果这么多年来的积累,才造就了现在iOS的辉煌。

人才,“你要么是天才,要么是笨蛋”,这是乔布斯看人的原则,也就是说没有中间层的人。在苹果,汇集了世界级的顶尖人才,使得创新、创想变成了现实。

至简,从简单到复杂容易,但由复杂到简单,而且是极其的简单,才是真正的难,乔布斯善于由繁到简,而且极其准确。

远见,乔布斯总能比别人多看到未来几年,能使其产品领导世界电子消费品的时尚潮流,这一点,是学不来的,只能说这种眼光与思维,是与生俱来的。

可以说,这个世界,在一段时间里很难再出现乔布斯一样的人物,中国有些人刻意模仿乔布斯,甚至提出要培养乔布斯式人才,这让人觉得非常可笑,乔布斯与苹果的成功,有偶然也有必然,只有伟大的创新才是前进的源泉。

星点无线1.5

今天,星点无线1.5已经通过App Store的审核,上架了,地址在http://itunes.apple.com/cn/app/id448294946?mt=8,也可以在App Store里搜索“星点无线”或是“StarryMobile”找到这个应用。

星点无线1.5的主要改变有
全新UI设计
支持iOS5
更加舒适的用户体验
提高运行速度与稳定性
支持调查任务筛选与优惠券排序
增加信息推送功能
修复优惠券显示文字高度的BUG

星点无线1.0和1.1的原始程序是我们找外包团队开发的,1.0和1.1发布时,我已经修改了其中很多的代码,在我们设计1.5的功能时,我觉得,不能在1.0/1.1的基础上改了,老版本存在许多的问题,特别是在性能及内存使用方面有很多不足,代码整体质量不高,我准备重写1.5版本,来个干净彻底,我是10.1假期之后开始重写,在美工设计的配合下,到10月底完成了这个版本,期间iOS5正好发布,这个工程也转到iOS5下开发。

 

 

星点调查 for iPad

星点调查 for iPad已在10月6日通过App Store的审核,上线了,星点调查是一款依托与星点调查平台的调研终端工具,支持多种调查题型,可以帮助商业用户快速进行调研数据收集,有兴趣的朋友可以下载使用:http://itunes.apple.com/us/app/id467284642?mt=8

星点调查是我独立编写的iOS程序,并且是建立在星点调查开放平台之上(http://open.starrysurvey.com/),因此验证了星点调查开放平台可以方便的为企业灵活构建调查业务。