alvin hu

A blog of iOS developer.

Brew, Gem, Rvm and Bundler

| Comments

brew, gem, rvm, bundler分别为Homebrew, RubyGems, Ruby Version Manager, Bundler的简称(执行命令)。

Homebrew为Mac OS X提供软件包的管理。Homebrew将软件包分装到单独的目录,然后symlink到/usr/local中。Homebrew不会把文件安装到预置目录之外,所以可以将Homebrew安装到任何位置。它完全基于git和ruby。使用gem来安装gems,用brew来搞定他们的依赖包。

brew的安装:

1
$ ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

解决通过基于IIS下的WebDAV同步OmniFocus出现404错误的问题

| Comments

我同时在Mac,iPhone,iPad下面使用OmniFocus,所以不可避免的需要三个设备之间的数据同步。OmniFocus在这方面做的还是很不错的,提供了多种同步方式。

  • OmniFocus Sync:OmniFocus官方服务器免费同步
  • Bonjour:局域网同步
  • 磁盘:通过文件同步
  • 自定义WebDAV:通过第三方WebDAV服务同步

其实第一种官方同步就已经可以满足需求了,但是由于官方服务器在国外,所以同步速度几乎无法忍受。而第二、第三种都不太方便,比方说在外面拿着手机就无法与办公室的笔记本同步了。最为强大的还是第三种,可以跟任何标准的WebDAV服务器同步,国外有一些免费的WebDAV服务公司,但是跟官方一样,速度太慢,而国内几乎很少提供免费的WebDAV,所以我就自己搭了一个基于IIS的WebDAV服务器。

如何在Windows 8中离线安装.NET Framework 3.5

| Comments

今天在Win8虚拟机上安装同步助手,提示需要安装.NET Framework 2.0才可以运行。按照提示点击安装,下载完成以后系统又提示要安装3.5。没办法只能接着再装,然后在下载所需文件的地方卡了两小时了。

实在是忍无可忍,只能找度娘了。网上有教程说直接在启动或关闭 Windows 功能里打开3.5就可以了,满怀欣喜的试了一下,结果还是卡在下载文件那一步。坑爹的微软就不能把用户体验做好一点吗!

按照这么多年的经验,既然下载文件有问题,那咱就下载离线安装包。网上找了个完整版离线安装包,等了半小时总算下完了,开心啊!我就不信搞不定你!结果人算不如天算,完整版离线安装包在安装的时候还要下载文件!我当时真是要哭了!彻底拜服微软的强大了!

通过SSL Pinning提高iOS应用的安全性

| Comments

前言

关于SSL Pinning的技术在国外有很多文章提到,但是还没有找到一篇相关的中文文档。因为在开发中碰到这个问题,所以查阅了很多相关文章,在此基于自己对SSL Pinning的理解,再融合一些其他资料,整理了一下写了这么一篇文章,既给自己做个备份,也给大家做个参考。写的好的给个掌声,写的不好请留言指正。

背景

在开发Client-Server架构的手机应用时,如果问到如何提高数据传输的安全性,肯定很多程序员第一时间会回答TLS/SSL。确实,对比普通的HTTP协议数据传输,SSL可以大大提高数据的安全性,因为所有传输过程中的数据都是经过加密的。如果用户在机场、咖啡厅等开放式的WIFI环境下使用应用,就算有攻击者通过技术手段截取了客户端与服务器之间传输的数据,对于他们来说也不过是一些加密过的垃圾。

表面上看这样已经足够安全了,但是危险就在身边。虽然SSL解决了内容加密的问题,但是在这个兵火战乱的年代,和你通信的是不是真正的服务器呢?就算对方能够提供证书,这年头证书也可以伪造,2011年就爆发了一次大规模的SSL证书安全攻击,受牵连的公司包括谷歌,还有大名鼎鼎的github.com(见下图)。

GitHub被攻击

下面我们介绍为什么有了证书用了加密还会被攻击吧!

SSL的单向认证和双向认证

| Comments

为了便于更好的认识和理解SSL协议,这里着重介绍SSL协议的握手流程。SSL协议既用到了公钥加密技术又用到了对称加密技术,对称加密技术虽然比公钥加密技术的速度快,可是公钥加密技术提供了更好的身份认证技术。SSL的握手流程非常有效的让客户端和服务器之间完成相互之间的身份认证。

IIS8中使用OpenSSL来创建CA并且签发SSL证书

| Comments

前言

最近在为新的iOS app考虑安全机制,第一个进入脑海里的就是HTTPS和SSL。所以研究了一下Windows服务器下IIS部署HTTPS和证书的方法,以及如何让app与server进行安全的信息交互。

由于网上千篇一律的只是教大家怎么怎么操作,并没有告诉大家为什么这么操作。而作为一个喜欢打破砂锅问到底的强迫症患者,自己又花了一些时间研究了各个步骤及参数的原理,在这里把这些小小的理解及经验记录下来,即给有同样需求的同行们做个参考,也给未来的自己留作备份。

欢迎转载,转载请保留原文地址。

如何修复OmniFocus中的剪辑快捷键

| Comments

最近在学习使用OmniFocus进行时间管理,根据网上GTD和OmniFocus教程开始入手。 软件安装完了以后进行一些基本设置的时候发现一个小问题:在剪辑预置中的剪辑快捷键(Quick Clippings Shortcut)不论如何设置都无法正常使用。 我的系统是10.8.3,不知道这个是我的个例还是普遍的bug。 最后总算找到了解决办法,如果你也正好碰到这个问题,不妨试试下面的步骤:

快速简单自定义UINavigationController中返回按钮的样式和文字

| Comments

在开发iPhone应用程序的时候,很多时候都会用到UINavigationController,其中的返回按钮(Back Button)里的文字会自动调用前一个UIViewController的标题。而且在早期iOS版本的时候想自定义返回按钮比较麻烦。好在iOS5出来以后提供了UIAppearance以方便开发者自定义iOS的风格样式,这个时候自定义返回按钮的样式就比较容易了:

1
2
3
4
5
6
7
8
9
10
11
12
13
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 自定义UIBarButtonItem返回按钮背景图片
    UIImage *backButton = [[UIImage imageNamed:@"BackButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15.0, 0, 5.0)];
    UIImage *backButtonHighlighted = [[UIImage imageNamed:@"BackButtonHighlighted.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 15.0, 0, 5.0)];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButton forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
    [[UIBarButtonItem appearance] setBackButtonBackgroundImage:backButtonHighlighted forState:UIControlStateHighlighted barMetrics:UIBarMetricsDefault];

    // 自定义UIBarButtonItem返回按钮标题文字位置
    [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-1.0, 0) forBarMetrics:UIBarMetricsDefault];

    return YES;
}

上面的代码自定义了返回按钮的样式。

关于Mac OS X右键菜单

| Comments

Launch Service

Mac OS X的Launch Service用于关联应用程序和文件并维护最近打开的项目列表。

在文件关联和右键菜单方面,每当系统安装一个新的应用程序,都会调用Launch Service的API注册关联的文件类型。有两种情况,一种是通过pkg安装包安装的,通常这些应用程序会通过脚本主动向Launch Service注册;而第二种常见的拖拽式.app应用程序,则是由Finder和系统通过对应用程序的的一些判断后代理注册的。应用程序通过Launch Service注册以后,就和特定的支持文档产生了关联。

Launch Service隶属于Application Service Framework(包含一堆的应用程序接口,开发者可以通过这些接口,调用系统服务),用于使一个运行中的程序,能够打开另一个程序,文档,URL的接口。它可以打开另一个程序;在另一个程序中打开文档或URL;找到对于一个文档或URL最适用的程序;为一个应用程序注册它可以关联的文档类型和URL;获得一个文件,URL等正确的显示方式,比如如何显示此类文件的图标以及信息等;维护和更新最近试用过的最近试用程序和文档的列表。

The Octopress

| Comments

一直以来都很想建个自己的blog,用来记录和分享自己在工作和生活当中一些东西。

曾经用过QQ空间,试过WordPress,总感觉不是自己的blog,没有那种冲动和欲望去更新。

因为在iOS开发中经常关注一些国外的同行的blog,发现他们都是用的Octopress,感觉更方面都挺不错的:清爽、代码高亮等等,非常符合自己的口味。

进入官网看了一下,安装起来跟传统的WP之类的blog程序完全不是一条路,看着有点迷糊,而且连维护和发布都是在本地操作的,真是有点丈二和尚摸不着头脑。

但是经过几个小时的折腾,总算是搭起来了,现在发表着第一篇blog感慨颇深啊,总算是圆了自己的一个梦,以后有地方积累自己的点点滴滴了。

先发个简单的开篇,以后再慢慢完善吧!