前几天实现了一个在IOS上调用的Openssl库,由于是第一次使用Xcode实现IOS的库,有些收获,想写一篇日记来理一下思路。
目标:编写一个可供IOS程序调用的库,openssl代码已经实现了,只是需要封装接口。
1. 打开Xcode新建工程,在IOS选项里选择cocoa touch static library 创建静态库
2. 工程创建完成之后,会看到在编译选项里有两个选项,一个是IOS simulator 另外一个是IOS device ,选择这两个选项会分别编译出IOS 的模拟器使用的库和真机库。openssl相 关代码添加到工程里。在编译模拟器库的时候没有什么问题,但是在编译真机库的时候会报code signing is required for product type 'Unit Test Bundle' in SDK 'iOS 8.2'这样的 错误,不必理会,我看有网上介绍的在build setting里将code signing 设置为IOS developer,但是如果直接编译的话,可以看到Product里的目标文件.a已经是黑色的了,说明 目标库已经编译好了。
3. 静态库编译好了,就需要编写demo进行调试了,我写了两个demo,一个是IOS 应用程序的,一个是command line tool的,其实如果调试的话直接command line tool就可以了,这样更简单方便。
控制台程序创建简单,不记录了,简单描述一下IOS应用程序,
新建IOS工程,选择single view application,然后在主界面添加一个按钮,点击按钮时触发调用库进行加解密事件,然后新建一个文本框来显示运行结果。
选择main.storyboard ,然后直接将button控件拖到该view里,给button重新命名。
点击show the assistant editor,选择viewcotoller.h文件,选中button控件同时按住ctrl键,建立关联,这时会弹出关联的对话框,在connection类别选择action,因为需要点击按钮来触发事件。然后给button在代码中命名,这样关联就创建好了,同时在viewcotroller.m文件里创建好了触发事件代码:- (IBAction)t:(id)sender {
}
@end
将库的调用接口放到这里就可以了。
对于文本框进行关联的操作和button的一样,只是将connection设置为outlet。
这样就可以编译,调试了。
另外在调试的时候也发现了另外一个问题,不同平台的类型所占字节是不一样的,例如unsigned long在windows平台是4个字节,但是在Mac平台是8个字节,这样就会出现计算的错误。