开始使用 swift 的 c语言 库

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

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] {


header "/usr/include/CommonCrypto/CommonCrypto.h"

export *
}

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

使用 C 函数

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

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
}

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

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

英文原文地址:http://spin.atomicobject.com/2015/02/23/c-libraries-swift/

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用C语言编写手机应用程序,但需要使用适当的开发工具和框架。目前常用的手机应用程序开发框架有Android和iOS,它们都支持使用C语言编写部分应用程序的代码。例如,Android支持使用NDK(Native Development Kit)开发C/C++和JNI(Java Native Interface)实现C和Java之间的互操作性。iOS则提供了Objective-C和Swift语言,这些语言都是基于C语言的,开发者可以使用这些语言进行iOS应用程序的开发。总之,使用C语言开发手机应用程序是可能的,但需要使用适当的工具和框架。 ### 回答2: 能用C语言编写Phyone。 Phyone是一种基于Linux操作系统的开源手机操作系统,它提供了丰富的功能和应用程序,可以用来制作智能手机。 C语言是一种广泛使用的程序设计语言,它具有高效、灵活和跨平台等特点,非常适合用来开发系统级软件和嵌入式应用。 在Phyone的开发过程中,可以使用C语言编写底层驱动程序、系统接口、内核功能等核心组件。C语言提供了包括文件操作、内存管理、进程管理以及网络通信等丰富的函数,可以满足Phyone的开发需求。 此外,C语言还具有较高的性能和可移植性。编写的C语言代码可以方便地移植到不同的硬件平台上,以满足不同手机型号的需求。 因此,我们可以利用C语言来编写Phyone操作系统,实现手机的各种功能和应用程序。当然,在实际开发中可能会涉及到其他编程语言和工具的使用,但C语言作为系统级编程的主力语言,是开发Phyone操作系统的重要选择之一。 ### 回答3: 可以使用C语言编写Phyone。 Phyone是一个基于GNU Radio平台的软件,用于无线通信系统的开发和仿真。虽然它的主要编程语言是Python,但GNU Radio也提供了C++和C语言的API,因此理论上可以使用C语言编写Phyone。 使用C语言编写Phyone可能需要进行更多的底层操作和手动内存管理,相对于使用Python编写可能会更加复杂。需要使用C语言的开发者需要对无线通信系统和底层硬件有更深入的了解,以便有效地使用GNU Radio提供的C语言API。 然而,尽管可以使用C语言编写Phyone,但使用Python编写仍然是更为常见和方便的选择。Python语言具有更简洁、易读、易学的特点,同时借助GNU Radio的Python模块,可以更方便地实现无线通信系统的开发和仿真。另外,Python还有更多的工具和来支持各种数据处理和可视化操作,能够更加高效地进行开发和调试。 总的来说,虽然可以使用C语言编写Phyone,但由于Python的便捷性和GNU Radio的Python模块的丰富功能,使用Python编写将更加方便、高效。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值