• 28
  • Feb

很高兴在二月的最后一天迎来了我的第二款 iOS 作品——番茄钟的正式发布。

是的,它的名字就叫「番茄钟」,它也确实是一款纯粹的番茄钟。希望通过它的帮助,你能更好的把握时间,做事更有效率。

立即前往 App Store 查看,或者继续阅读后文。

Read More...

  • 11
  • Feb

正如标题所述,最近我开发的第三方微博客户端的名字就是:奇点(Jī Diǎn),即 Singularity。现在它的 1.0 版本已经通过审核,正式上架!

Read More...

  • 3
  • Feb

今天在回顾公司项目的一个 Crash 报告时,突然想明白它是怎么发生的了。这个问题隐藏在复杂设计的背后,不容易发现,但理清楚以后却又这么简单,这让我直接有了感悟:不要做复杂的设计,同时对底层机制要保持清楚的认识。

让我简单的来描述下这个 Crash 的来龙去脉吧。

Read More...

  • 1
  • Feb

今天 App 遇到了一个奇怪的问题,对 Swift 还没到 Production 质量才有了深刻的体会。于是决定记录一下这个问题的来龙去脉,希望不久以后回头再看这个问题的时候,Swift 已经有了很大改善。

Read More...

  • 30
  • Jan

这周我的 App 的 0.9 版本已经审核通过了,我也在今天提交了 1.0 版本上去,目前为止看起来一切还是蛮顺利的。

由于 0.9 版本只是试水版本,1.0 才是正式版本,这个版本我做了一些专门为「Release」的一些改动,其中一点就是关于错误报告还有 Logging 的处理。简单的说,在开发过程中,我们可以用 NSLog 肆无忌惮地向终端输出各种信息,但是正式版本可不能这样了,不然用户手机的 Console 会被你的 Log 塞满,不仅影响性能,可能还会暴露不必要的一些开发信息。

那么,如何在 Swift 项目里正确地设置 Logging 呢?以下我以 Crashlytics 为例,当然,用其他工具甚至不用第三方工具也是可以的。

Read More...

  • 23
  • Jan

近来在用 Swift 开发 App 的过程中,最大的心得就是:我开始渐渐用「Swift 思维」来思考了。回顾刚开始我用 Swift 时,只是套用它的语法而已,脑子里依然是 Objective-C 思维。

这段时间,随着对 Swift 基本特性的掌握,我开始有意识地学习并尝试一些 Swift 才有的特性,此谓「Swift 思维」。Swift 有很多专有(Objective-C 没有的)的模式,今天我就从一个很简单的例子讲起,那就是:

如何用 Swift 思维设计网络请求。

Read More...

  • 12
  • Jan

最近在用 Swift 开发的过程中,又碰到了一个问题。简单的说,系统在该返回非 nil 值的地方返回了一个异常指针(即指向 0x0000 地址,产生 KERN_INVALID_ADDRESS 异常)造成了 App 的 crash,算是 iOS UIKit 的一个 Bug。

这个问题需要 SDK 的升级来解决,但是在 SDK 升级之前,我们可以通过一个小小的 Workaround 去解决。来龙去脉是这样的:

Read More...

  • 11
  • Jan

注:创造,即不分大小地把一件事物从「无」变「有」的过程。

前几天和朋友聊起,我的年终总结大篇应该要放在过春节的时候写,一来中国年也是年,二来最近给自己订了一个目标,就是过年前发布我那款命运坎坷的微博客户端,好填补过去一年没有创造新事物的空缺。

是啊,我都羞于去读我的那篇《2013 年个人总结》了,特别是看到 2014 年的目标是「三个 App」那一行…尽管过去的一年确实参与过三个以上的 App,但是符合「创造」的却为零。因而我对自己过去的一年非常不满。

但是最近,这一目标渐渐接近了,也就是说,春节过年写 2014 年终总结里会有个值得一提的事了,至少,这段时间,我是重新开始享受创造的乐趣了…

Read More...

  • 4
  • Jan

今年关于去年的回顾写的有点晚了,但是晚归晚,该写的还是要写的。既然已经迟了,就不能草草而作,我打算分几篇文章来写,每篇都有一个特定主题,比如「年度 App」、「年度书、影、音」,都可以单独作为一篇文章,最后再来一篇总结风多一点的汇总。

今天则是第一篇,我的年度 App。

Read More...

  • 23
  • Dec

最近在项目中偶然发现了一个问题,那就是 Swift 的 CoreData 在 32 位系统下与 64 位系统下表现不一致的问题。

简单的说:如果你的 CoreData 模型有一个声明为 Boolean 的 Attribute,并且在代码中使用 NSNumber 来包装(而不是 Bool)的话,很可能会遇到这个问题。

这个问题简述之则是这样:

Read More...

  • 19
  • Dec

半年前在第一时间接触 Swift,还参与过一次主题演讲(见《和 Swift 亲密接触的这半个月…》)不过很快这股新鲜劲过后就中断了。事隔几月,因为最近正在抓紧时间完成我的那个用 Swift 写的微博客户端,于是我又开始好好的学习和使用 Swift 了。

正所谓掌握一样技术最好的办法就是用它来做一个东西,于是这段时间的实战让我对 Swift 的理解更深了一层,也积累了一些使用技巧。今天就分享一则:如何正确地定义一个类变量(和类常量)。

Read More...

  • 26
  • Nov

在介绍这次版本更新前先说一个小故事。

上周 App Store 中国区引入了 1 元和 3 元的定价,然后我试验性地将 Manico 设置成了 1 元的价格,虽然只持续了半天,结果引来了大量用户的购买,然后连续占据了 Mac App Store 中国区收费排行榜第一的位置持续两天之久:

Read More...