更多
黑客联盟 黑客软件
学生黑客联盟
您现在的位置:学生黑客联盟 > 编程频道 > 软件开发 > 浏览信息
开始使用 swift 的 c语言 库
时间:2015-03-20 22:05 来源:www.stuhack.com 作者:学盟网
为了手头上的一个项目,我需要使用 CommonCrypto 库中的 HMAC 函数.虽然苹果在 swift 中已经提供了许多系统库,但是 CommonCrypto 不在其中.庆幸的是,要使用这个库并不怎么费事,只需要做一点额外的工作. 开始访问库 在使用库之前,我们需要通知 Swift编译器.要

为了手头上的一个项目,我需要使用 CommonCrypto 库中的 HMAC 函数.虽然苹果在 swift 中已经提供了许多系统库,但是 CommonCrypto 不在其中.庆幸的是,要使用这个库并不怎么费事,只需要做一点额外的工作.
开始访问库
在使用库之前,我们需要通知 Swift编译器.要完成这个过程,我们有两种方式.它们都能在示例工程中正常运行,但是你应该根据你代码的用途来选择具体的方式.好消息是,你随便使用那种方式,然后如果在后面需要另一种的话,要切换那是相当简单.

copyright www.stuhack.com

Objective-c 桥接头文件

最简单的访问一个库的方式是使用 OC 桥接头文件.因为 OC 是 C 的超集.所以这个桥接头文件也能够让你访问纯 C 库.如果你的 swift 工程里面没有桥接头文件,那么自己创建一个,这个步骤简单的要死.
右键你的工程,然后添加一个 OC 文件,随便起个名字(一会我们就删掉这个文件).

一旦你建立好这个文件, Xcode 将会询问你是否需要配置一个 OC 桥接头文件,当然选择”是”.然后删掉你刚刚建立的OC 文件(不是头文件…).这个头文件将会被命名成 项目名- Birdging-Header.h.打开这个文件,并且导入你需要的 C 库.

需要注意的是,许多库需要额外的链接器设置,例如,在其它链接器标识中的-lfoo会告诉链接器去链接到 libfoo. 请在你的 Xcode 项目的 Buid settings 里面设置好.

学盟网

模块图

虽然桥接头文件的方式是如此的简单易行,但是它却有个很关键的局限–你不能在一个framework类型的工程中使用它.所以,为了弥补这个缺陷,你可以使用”模块”
要使用”模块”,在你的项目目录(目录名是你的项目名称)下来创建一个目录,把这个目录命名为你想使用的库的名字.我是在命令行,没有 Xcode 的保护,然后命名它为 ConmmonCrypto. 在这个目录中,创建一个 module.map 文件,这个文件里面囊括了库的一些设置.对于我的 CommonCrypto,module.map 是这个样子的. 内容来自学生黑客联盟

module CommonCrypto [system] {

本文来自学盟网(www.stuhack.com)


header /usr/include/CommonCrypto/CommonCrypto.h
export *
}
本文来自学盟网(www.stuhack.com)

现在添加这个新模块到你的 project setting 中的swift compiler条目下的 Import Paths-Search Path.使用 SRCROOT(例如:{SRCROOT}/CommonCrypto))来确保无论你在哪检出项目,这个模块都能正常工作(相对路径) .
现在仅仅是确保让你能够把你的模块导入到 swift 文件中.注意,你自己用这种方式建立的所有框架都必须这样导入到你的项目中.

内容来自学生黑客联盟

使用 C 函数

一旦你告知了 swift 的编译器关于你将怎么引用 C 库的信息,那么你就可以直接在 swift 代码中直接使用他们了.这个过程中,牵涉到的只是搞清楚哪个 swift 类型匹配哪个 C 类型,而这个过程被 Xcode 的自动补全搞的非常简单,它能帮我们完成大多数重要的内容.这是一个SHA1 HMAC的例子: www.stuhack.com

func hmac_sha1(data: NSData, key: NSData) -> (NSData?) { 

    var result = NSMutableData(length: Int(CC_SHA1_DIGEST_LENGTH)) 

    if (result != nil) { 

        CCHmac(CCHmacAlgorithm(kCCHmacAlgSHA1), 

            key.bytes, size_t(key.length), 

            data.bytes, size_t(data.length), 

            result!.mutableBytes) 

    } 

    return result 

} 
www.stuhack.com

  学盟网

如果你想搞明白对 CCHmac 的调用是如何工作的,你可以查阅这里

学生黑客联盟 www.stuhack.com

这个是函数原型:
CCHmac(CCHmacAlgorithm algorithm, const void *key, size_t keyLength,
const void data, size_t dataLength, void macOut);

内容来自学生黑客联盟

  内容来自学生黑客联盟




本文标题:开始使用 swift 的 c语言 库

本文地址:http://www.stuhack.com/bc/ware/032014207.html

免责声明:本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。




百度钱包“落子

一个商户通过审核入驻百度钱包,将获得百度[查看详细]

移动搜索&发

移动搜索在移动端的创新和颠覆也为百度探索[查看详细]

张向宁:移动互联

张向宁回顾了他2002年提出的“互联网十大预[查看详细]

淘宝开卖二维码门

截至4月20日,淘宝已经售出车展的实体门票[查看详细]

百度钱包杀入移动

“百度钱包”将完成的 “搜索用户”与“消[查看详细]