Setup Mac Development Environment

  1. System Software Update.
  2. Download and install Xcode, or Command Line Tools for Xcode only if you don’t need Xcode.
  3. Install Homebrew.
  4. Get back your dotfiles if you have.

Python

  1. Use pip instead of easy_install
  2. Use pip to install virtualenv and virtualenvwrapper
# use easy_install to install pip
sudo easy_install pip
# where pip
/usr/local/bin/pip
# virtualenv
sudo pip install virtualenv
# which virtualenv
/usr/local/bin/virtualenv
# virtualenvwrapper
sudo pip install virtualenvwrapper
# virtualenvwrapper will be installed in /usr/local/bin/virtualenvwrapper.sh
# config virtualenvwrapper
mkdir ~/.virtualenvs
# edit .zshrc and add
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh

Ruby

Install RVM

# add to .zshrc
[[ -s $HOME/.rvm/scripts/rvm ]] && source $HOME/.rvm/scripts/rvm
# install ruby by rvm
rvm install 1.9.2 && rvm use 1.9.2
rvm rubygems latest

Compile and install SVN 1.7.2 on Mac

Just a note for myself.

  1. Download svn-1.7.2.tar.gz source.
  2. Run ./autogen.sh to check the necessary components to build svn.
  3. ./configure then make and sudo make install.

All commands:

./autogen.sh
./configure --disable-debug --with-ssl --with-zlib=/usr --with-sqlite=/usr --disable-neon-version-check --disable-mod-activation --without-apache-libexecdir --without-berkeley-db --with-neon=/usr/local/Cellar/neon/0.29.6/
make
sudo make install

加速 Xcode 文档搜索

Xcode 的文档搜索速度实在是不给力,因为 Xcode 是实时的索引所有 Doc Sets 来查找。解决方法:

  1. 更换 SSD,一劳永逸,更能带来编译速度的极大提升。
  2. 第三方文档搜索工具,比如 Ingredients、AppKiDo,缺点是没法和 Xcode 完美结合,比如 Option+Click 快速查找。
  3. 修改 Find Options 来减少一些索引,只做 iOS 就没必要选 Mac 的 Doc Sets. 另外 Match Type 选 Prefix 也会快很多。可以参考下面这个 Find Options 设置。

speedup Xcode doc search

感谢 @jjgod 分享的小技巧。

[self review:2011];

2011

2011 年度个人总结。

工作

一整年的 iOS 开发,相对于去年入门时 Rookie 最大的成长是教训,经验和信心。

有那么一次,客户端测试时候频繁崩溃却毫无头绪,那个上火啊,甚至晚上做梦都在 Debug,有一晚上还真在梦中解决了一个问题。没有教训就没有记忆,这也是为啥后来我偏执的强迫症般的抓内存泄漏找潜在崩溃。经验就是由这么一堆教训堆积出来的,一次次的总结然后下一次避免,这不就是成长么?

如果一年前跟我说我们的竞争对手如此之多,甚至还有上市公司,我绝对没有信心去继续这个项目。不是说我太消极,而是对于这个市场的一无所知。不是都说恐惧源自于无知么。这一年下来,随着技术上的完善,产品的坚持,市场的更加熟悉,我们现在是信心满满的面对每个竞争对手。

本来四季度时想跟进学一下服务端开发,阴差阳错的给错过了,算是今年的一个遗憾吧。来年一定要跟进。

没来得及搞服务端,腾出时间整理了内部 iOS 编码规范和通用库,这个过程正好把前面一年的开发梳理了一下,收获很大。以后要坚持定期的回头梳理。

产品细节上这一年有不少进步,但是整体把控还不行,产品这一块是个长期,坚持。

生活

圣诞节时跟远大萌感慨说老了,平安夜都没有出去 High。其实是平静了,我们会周末窝家里做饭,给爸妈打电话唠叨,我觉得挺好。

今年最高兴的就是在家里需要的时候我和妞妞有能力帮一把,不让爸妈那么累,那么苦,尽管力量还很小。我一直认为家是生活的中心,如果连家里人的生活都无力改善,那你改变世界的理想都是扯淡。

大年初六我和妞妞订婚了。这一年我们有生气,有争吵,但我们比以往更爱对方。两个人在一起不容易,很感谢妞妞对我的理解、支持和包容。

这一年控制着没有继续长胖,不过也没有瘦,身体没有什么大毛病,但明显身体素质比以前差了不少,得加强一下锻炼,向罗胖子学习。


2012

工作

  1. 加强 iOS 开发,尤其是新技术的学习和整理,比如 ARC。
  2. 尝试 iPad 开发,这可不是简单的界面放大,整个用户交互都需要重新学习理解。
  3. 服务端开发,至少是应用级别要跟上,已经落户一步,不能拖太久。
  4. 继续加强产品能力,尤其是整体把握。

生活

  1. 完婚。
  2. 给家里更多的帮助,让爸妈轻松一点。
  3. 希望今年能有一次旅游,厦门?

最后来张截图

2011

[MFMailComposeViewController canSendMail] issue

发现 MFMailComposeViewController 一个挺奇怪的问题,代码一:

if ([MFMailComposeViewController canSendMail]) {
    MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
    [mailComposer setSubject:@"Mail"];
    //...
    [self presentModalViewController:mailComposer animated:YES];
    [mailComposer release];
}

如果设备没有设置 Mail,那么该操作不会有任何反应。不会有弹窗出现。

代码二:

MFMailComposeViewController *mailComposer = [[MFMailComposeViewController alloc] init];
if (![MFMailComposeViewController canSendMail]) {
    return;
}
//...

代码二这种情况下如果没有设置 Mail,会有系统弹窗提示 “无邮件账户”。

How To Make Your iPhone’s Home Button More Responsive

RegexKitLite Error: Undefined symbols for architecture i386

RegexKitLite 编译错误:

Undefined symbols for architecture i386:
  "_uregex_start", referenced from:
      _rkl_performRegexOp in RegexKitLite.o
      _rkl_search in RegexKitLite.o
      _rkl_findRanges in RegexKitLite.o

ld: symbol(s) not found for architecture i386

解决办法:

In project Build Setting search “Other Linker Flags” and add “-licucore”.

编译设置搜索 “Other Linker Flags” 添加 “-licucore” 字段

How to Google it

DLog

DLog is almost a drop-in replacement for NSLog. via The Evolution of a Replacement for NSLog

// DLog is almost a drop-in replacement for NSLog
// DLog();
// DLog(@"here");
// DLog(@"value: %d", x);
// Unfortunately this doesn't work DLog(aStringVariable); you have to do this instead DLog(@"%@", aStringVariable);
#ifdef DEBUG
#	define DLog(fmt, ...) NSLog((@"%s [Line %d] " fmt), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__);
#else
#	define DLog(...)
#endif

入手 Alfred

QuickSilver 真心不错,尤其是配上插件功能后就是神器。但是 QS 对中文支持的不给力,crash 增多,加上 Alfred 添加了插件功能后越来越强大,毅然转向 Alfred。

目前对自定义搜索功能最为喜欢,设置 so 到 Stack Overflow,git 搜 Github,方便不少。

留记一篇,用一段时间后再整理 Alfred 使用,希望这钱没有乱花。