使用Xcode中的现有C代码为iOS创build静态库

问题的简短版本:

所以基本上我想要做的是采取用C( https://github.com/lsalzman/enet )编写的现有库,并把它变成一个iOS的静态库。

我只是寻找一个容易理解如何在Xcode中完成这一步。

长版本:

我已经去了一些教程来制作一个简单的静态库,它是用Objective-C( http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial )编写的,而且我通常了解那里正在发生的事情,但是我不能理解如何用现有的C代码来做到这一点。

我想我正在接近,但我不太确定。

  1. 我首先在xcode中创build一个“Cocoa Touch Static Library”项目。
  2. 我添加了所有的enet .h和.c文件
  3. 确保enet的东西是在我的“用户头searchpath”build设设置。
  4. 打造 – 编译!

生成的.a文件是517kb,所以我很确定这是在构buildenet的东西。

我现在的问题是,库的头文件基本上是空的:

#import <Foundation/Foundation.h> @interface enet_ios : NSObject @end 

我想我需要在Objective-C中编写一个与enet库交谈的包装器,或者我需要以某种方式重新configuration我的xcode项目,以便enet.h成为这个库中的“入口点”,而不是xcode的预编译器。生成.h / .m文件。 不过,我真的不知道该怎么做。 理想情况下,我只想跳过任何types的包装,并使用enet库已经提供给我的东西。

谢谢参观!

问题,你是否试图使用客观的C语法/对象定位符号来调用函数? 那么你确实需要一个包装对象,没有办法。

但是,如果你可以直接调用C函数,这在IOS / Objective C中是完全可以接受的,那么确保来自enet库的头文件(包含你在共享的github链接中看到的include目录中的头文件) )也与静态库一起分发。 这是静态库的限制。 您可以使用* .a复制它们,但它们必须与静态库一起复制。 这与框架有所不同,框架包括.H和资产,开发人员不容易用苹果的IOS工具创build资产。

我发现使用Objective C的图书馆pipe理对自己和静态库来说是痛苦的,这也是很多其他原因的挑战。 另一个build议,绝对更优雅和便携,但稍微矫枉过正的个人使用,将build设项目作为一个椰子树。 您可以通过分解项目并将其转换为可编程序控制器来实现。 有很多关于项目结构应该如何在Cocopod和其他OSS如AFNetworking上看的例子。 这似乎是人们创buildIOS库的事实上的标准方式。 有关更多详细信息,请参阅http://cocoapods.org/ 。 这将包括源代码作为pod并针对目标应用程序进行编译。

这是我处理我自己的图书馆和第三方图书馆的唯一方法。 它已经到了这样的地步,如果图书馆不使用椰子树,我不使用图书馆或叉,它自己做一个吊舱….