如何创建静态库并将.a文件添加到iOS项目中

19

我该如何创建静态库,并将 .a 文件添加到 iOS 项目中。

我尝试过这样做,但无法成功。

提前致谢。


1
可能是重复问题:IOS静态库的制作和问题 - Amar
嗨,你发送的示例中的“no.”添加了整个项目。我只想添加库的.a文件。 - user2568616
3个回答

30
如果您想创建静态库,请参考以下链接:http://jaym2503.blogspot.in/2013/01/how-to-make-universal-static-library.html 步骤1:创建一个新项目,命名为 "Logger"
步骤2:创建类
您可以创建任意数量的类。在本教程中,我们将创建一个名为 "Logger" 的类。 现在,我们的资源中应该有两个文件。 1. Logger.h 2. Logger.m
步骤3:将一些有用的代码放入类中
步骤4:创建新的目标
从文件菜单中创建新目标。
新建目标 选择Cocoa Touch静态库
步骤5:添加要编译的资源文件
选择静态库的 "Logger" 目标 进入构建阶段 在编译源部分,添加所有 .m 和 .mm 文件。 在复制文件部分,添加所有 .h 文件和资源文件。
构建阶段
步骤6:使用静态库目标编译项目
为iOS设备编译项目 为模拟器编译项目 您可以在构建文件夹中找到两个不同的 .a 文件。
查找 .a 文件
步骤7:使静态库成为通用库
现在,您可以发现两个不同的库,一个是用于模拟器的,另一个是用于iOS设备的。
创建一个新文件夹并将其命名为 LoggerMerge。 将 Debug-iphoneos 文件夹中的 libLogger.a 文件复制到 "LoggerMerge" 中并将其重命名为 libLogger_device.a 将 Debug-iphonesimulator 文件夹中的 libLogger.a 文件复制到 "LoggerMerge" 中并将其重命名为 libLogger_simulator.a 使用终端打开 LoggerMerge 文件夹 执行以下命令 lipo -create "libLogger_simulator.a" "libLogger_device.a" -output "libLogger.a"
现在,您可以在 LoggerMerge 文件夹中找到 libLogger.a,这是通用静态库文件。现在,你只需要一个头文件。参考上面的截图,在build文件夹下有一个名为include的文件夹。只需从这个文件夹中复制头文件即可。

步骤8:测试静态库

创建一个新项目,命名为TestLogger 导入libLogger.a和头文件 在任何想要使用的地方导入头文件 "Logger.h" 现在,将Logger类用作默认实践。 在我们的情况下,[Logger log:@"Test String"]; 在模拟器和设备上运行项目 就这样!!你有了自己的静态库!


我无法打开您发送的链接。 - user2568616
1
我找不到 .a 文件。它应该在哪里?编译后,我的产品文件夹中的库仍然是红色的。为什么? - user2568616
抱歉,这段文本似乎没有意义或上下文。请提供更多信息以便我能够为您提供准确的翻译。 - dhaya
我的设备已经连接了,但仍然显示红色。 - user2568616
1
尝试这个:https://dev59.com/_W035IYBdhLWcg3wc_sm#16462217 - dhaya
这篇文章还提出了一些有趣的想法,关于如何将lipo步骤自动化为“聚合目标”,作为构建阶段的一部分:http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial - nazbot

11

第一步:创建一个新的静态库项目

打开XCode并开始一个新的工程。在iOS下,选择Library和“Cocoa Touch Static Library”,将其命名为“staticlibrary”。这将为我们创建一个漂亮的新项目,构建一个.a文件。

第二步:编写您的静态库代码 首先,我们需要添加一些文件。向您的项目添加一个新的NSObject子类,并将其命名为StaticClass。然后在这些文件中编写一些有用的代码。

第三步:构建和分发您的库 当您对您的库感到满意时,只需在XCode中构建它即可。显然,不要进行构建和运行,因为您不能运行它(除非您有一个测试套件)。现在,在XCode的Products组下查看,您应该会看到一个名为lib(libraryName).a的文件。在我们的情况下,它是libstaticlibrary.a

右键单击该文件,然后选择“在Finder中显示”。将此文件拖动到一个新文件夹中,在那里您将捆绑所有库文件。现在,对所有.h文件执行相同的操作。在我们的情况下,只需将StaticClass.h复制到此新目录中。您的目录结构现在应如下所示:

FolderName
|- libstaticlibrary.a
|-  StaticClass.h

现在,你可以将这个文件夹压缩并卖给有意成为iOS开发者的人,以获得数百万!

第四步:在新项目中链接您的库

既然您已经构建了闪亮新静态库,现在是时候在另一个应用程序中测试它了。

创建一个新的基于视图的项目(或者无所谓什么类型),将其命名为“Test”。

现在,只需将此文件夹拖入项目中,XCode将自动设置所有链接。当提示复制时,我通常会选择是,但根据您打算如何使用库,您可以选择做任何想做的事情。如果有多个项目共享单个库,则仅链接而不复制有时更有利。它确保它们都使用最新版本。

现在,在新项目中,您应该可以看到 .a 文件以及头文件。

第五步:使用静态库代码

现在,所有链接都已设置好,您只需像使用任何其他类一样使用您的库。

如需进一步澄清,请参阅http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial希望本教程对您有所帮助。


虽然此链接可能解答了问题,但最好包含答案的关键部分并提供链接以供参考。仅有链接的答案如果链接的页面发生更改也可能变得无效。 - mah
欢迎来到Stack Overflow!欢迎提供潜在解决方案的链接,但请添加链接周围的上下文,以便其他用户了解它是什么以及为什么存在。始终引用重要链接的最相关部分,以防目标站点无法访问或永久离线。请注意,作为“几乎只是外部网站链接”的答案可能是为什么会删除某些答案?的原因之一。 - Xavi López
1
非常感谢您的帮助,因为我是 Stack Overflow 的新手,不了解其中的陷阱。根据您的要求,我已经更新了我的答案。 - yashwanth77
@yashwanth777 很高兴能帮助新用户熟悉本网站。感谢您为此答案做出的贡献。请查看[帮助],其中有许多有见地的部分,将帮助您在Stack Overflow中获得最佳效果。祝你好运! - Xavi López

0

Objective-C消费者 -> Objective-C静态库

Xcode版本10.2.1

1. 创建Objective-C静态库

请按照1. 创建Objective-C静态库部分的说明进行操作。

2. 使用Objective-C静态库的Objective-C消费者

请按照2. 使用Swift消费者的Objective-C静态库部分的说明进行操作。

3. 从Objective-C中使用Objective-C静态库

将模块导入到Objective-C客户端代码中[module_name]

@import module_name;

//or umbrella or public header
#import <module_name/module_name.h>

[更多示例]


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接