iOS dev: 将 Xcode 中的 CODE SIGN IDENTITY 分离出 VCS

做 iOS 开发的时候每个人都有不同的开发者证书/私钥,只有通过这个私钥进行代码签名之后 app 才能在 iPhone 上运行起来。项目中用来确定使用哪个私钥签名的配置文件是 project.pbxproj,由于它也记录了项目地很多其它信息,所以它往往会出现在版本控制系统中,这样就造成只有一个人能够成功地签名。好在我们可以通过 .xcconfig 文件来将这个配置抽离出来。

首先新建一个文件(Cmd+N),在 Other 中选择 Configuration Settings File,新建一个配置文件 CodeSign.xcconfig。在这个文件中添加一行:
CODE_SIGN_IDENTITY = iPhone Developer: 人甲 路 (XXXXXXXXXX),其中证书的名称可以在 Keychain Access 里面找到。

之后删除原来 project.pbxproj 里面的签名,直接在 build settings 里面删除就好,注意 project 和 target 的都要删掉(都选中之后 Cmd+delete)。

最后在 Project 的 info 中,看到 Configuration 一栏,在 Based on Configuration File,选择我们创建的文件 CodeSign。

最后在 build settings 里面应该是这个样子:(项目和目标那一栏都是空的)

最后注意不要把 CodeSign.xcconfig check in 进去。

参考:http://respectthecode.co/2011/06/11/xcode-4-and-xcconfig-files/

Tags:,,,

Posted in Information Technology | Tagged , , , | Leave a comment

Lion 对加密卷的支持

今天想给硬盘数据做备份,毕竟硬盘已经用了两年了,不用查 SMART 信息也知道他已经老了,虽然诸如代码之类的都有很多备份,但是还是有些文档、照片需要备份。

又阴差阳错得到一块老旧移动硬盘,灰常好啊。开工吧。

拿来的时候是 NTFS,第一件事情就是改成 HFS+,拿 Disk Utility 格式化的时候发现多出了加密的选项,不用多说,先试试。不得不说这个 Lion 的 GM 版本还不够到正式版的水平,这个输入密码的输入框如果输入超过十位的密码就会 crash,这个完全不能忍受啊,尝试了半天发现先在别的地方输入好然后复制过来就可以了。(好吧,我不得不说我写文章想截图的时候这个 bug 又神秘的消失了)

这样格式化好了之后每次插入移动硬盘的时候都会提示你输入密码才能访问,像是做备份这种应用就会安全很多。

之后我就发现加密卷的密码无法修改,我猜测这种加密是用密码加密一个密钥,再用密钥加密数据的,应该可以修改密码,现在无法修改的原因应该是 Apple 还没想好在哪里放这个功能,也或许 Apple 不会给这个功能提供 GUI,那我们转战 CLI 吧,Disk Utility 对应的命令行工具是 diskutil,里面提供了很多 GUI 中没有的功能。鼓捣一会之后发现 diskutil 有个叫做 CoreStorage 的模块,进一步发现 diskutil coreStorage changeVolumePassphrase 可以修改 CoreStorage 卷的密码,其中所需的卷 UUID 可以通过 diskutil coreStorage list 获得。

可以看得出,CoreStorage 又是苹果推的一种新技术,看 diskutil 里面的用语(PV、LV)推测是类似 LVM 的东西,Mac 以前似乎没有类似 LVM 的技术(AFAIK),网上搜索也搜索不到 CoreStorage 的相关信息,Lion 的 Developer Library 里面也是没有,最后还是在手册(man diskutil)里找到了一些信息。看完之后的感觉就是 CoreStorage 就是一个 LVM,Apple 终于有了 LVM。 :-) 不过看起来许多功能还没有开发出来接口,比如 LVM 的一些最基本的功能⋯⋯ :-(

看来 Lion 不光是在界面上模仿 iOS(我对这点颇有不满),在底层也下了不少功夫,CoreStorage 就是在看不见的地方默默发挥作用的一个好同志啊。底层的 UNIX 配合 用户友好的界面,是 Mac 的制胜法宝,只有这样才能留住如此多的开发者和一些相当挑剔的用户(比如设计师)。底层的 BSD 也给苹果减少了许多开发的困难,可以到处抄来抄去,可以派几个人推动一下某个项目的开发(比如 LLVM),看被抄的人不爽了还过去帮助修改(比如各种 BSD)。相比之下,再大的微软也不能把所有事情做好,至少给自己增加了许多开发难度。

另外,苹果你抄个 ZFS 过来吧,ZFS 多适合你现在的各种用途啊,又没有 Linux 的许可证问题,抓紧啊,I want a better filesystem!

PS:最后贴上 diskutil 手册的一部分,如果你有兴趣的话。

Tags:,,,

Posted in Information Technology | Tagged , , , | Leave a comment

VMWare Fusion 装 Gentoo⋯⋯

发现其它发行版真的没法胜任开发工作,而我又不喜欢自己编译,Ubuntu 里面的 nginx 缺少我需要用的模块,真伤心,本来想在虚拟机里弄一个不用编译的发行版来着,看样子还是得 Gentoo 出马。

VMWare Fusion 又傲娇了,又是驱动问题,偷懒用 genkernel 就好了,可谁让我这么勤奋呢?

lspci 告诉我们,VMWare 有个设备叫 00:10.0 SCSI storage controller: LSI Logic / Symbios Logic 53c1030 PCI-X Fusion-MPT Dual Ultra320 SCSI (rev 01),查到对应的内核选项是 CONFIG_FUSION,记得选上。这样就解决了启动的时候找不到分区的问题⋯⋯

还有一个问题是,启动到一半说 Freeing unused kernel memory,然后就死掉了,是新引入的 OpenRC 的问题,解决办法在这里

Happy coding!

Posted in Uncategorized | 1 Comment

Installing Gentoo Linux on DELL R710

公司买了一台 R710,第一次自己装服务器上的 Linux,虽说区别不是很大,但是还是很值得纪录一下的哦。

服务器跟 PC 最大的区别大概就是硬件了吧,涉及到驱动的基本上就只有 RAID 控制器了吧?编译内核的时候那个纠结啊……那个启动不起来啊……真是……

首先是得照着一个指南做,就是这个指南啦,比较适合以前装过 Gentoo 的人看。这个指南是装软件 RAID 和 LVM2,我们做的是硬件 RAID,所以里面软件 RAID 相关的东西就不用安装了,比如 dm-mod 之类的就不用装了。我还是习惯把 /boot 放在 LVM 里面,其实自己有的时候也觉得没啥必要,有点犯贱的意思……如果你也希望把 /boot 放在 LVM 里面,可以参考 Gentoo Wiki 的这篇文章,不过里面的内容略微有点过时了,比如内核参数 dolvm2,现在写成 dolvm 了。一开始安装的时候忘了做 initrd,查了半天才发现,还是不细心啊。

剩下的大概就是编译内核了,先随手把什么声卡驱动什么的去掉,然后重点是 RAID 驱动,一开始天真地以为 RAID 控制器的驱动是 LSI Logic MegaRAID SAS RAID Module 之类的,结果就是直接启动不起来了。后来认真起来,按照 lspci 的结果去网上找内核模块,发现应该是 CONFIG_FUSION 这个选项,之后就能顺利地启动了。

配置好一些基本的东西之后,还有一些硬件相关的小工具,最重要的还是 RAID 控制器的监控工具,网上找了很多,不过大多数都没法用,这一页有两个工具,都比较好用,HWRaid 这个站似乎也很强大。里面提到的 lsiutil 是 LSI 官方提供的,Gentoo 源里那个似乎年久失修了,LSI 的官网上能够找到,不过不是很好找,下载下来是二进制。还有些能改前面板 LCD 的小工具什么的,我觉得没多大用,就算了(想改的话 BIOS 里面就有)。

有点后悔买了一个比较弱的 RAID 控制器,不过一切还要等有了负载再说,哈哈。

Tags:,,,,

Posted in Information Technology | Tagged , , , , | 1 Comment

Python 判断一个变量是否是字符串

忏悔啊,就写了一个类还出了 bug⋯⋯

写了单元测试还出了 bug⋯⋯

type(data) == type("") 这种办法是不行的,因为 "" 是 str 类型,如果 data 是 unicode 的话这种判断就不成立了,而应该采用这种办法:isinstance(data, basestring),其中 basestring 是 str 和 unicode 两个类的父类。

期待 python 3k⋯⋯

Tags:,

Posted in Uncategorized | Tagged , | Leave a comment