如何创建静态库,并且可以在ios中的任何项目上添加.a文件

问题描述 投票:16回答:3

如何创建静态库,并且可以在ios中的任何项目上添加.a文件。

我试过这样做但是做不到。

提前致谢

ios xcode ios4 static-libraries objective-c++
3个回答
29
投票

如果你想创建静态lib意味着请参考链接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”静态库目标转到“在Complied Sources中构建阶段”部分,添加所有.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使用Terminal Fire命令打开LoggerMerge文件夹,命令lipo -create“libLogger_simulator.a” “libLogger_device.a” - 输出“libLogger.a

现在,您可以在LoggerMerge文件夹中找到libLogger.a,这是Universal static library file。现在,您只需要一件事是标题,参见上面的截图,在两个构建文件夹中都有名为include的文件夹。只需从此文件夹中复制头文件即可。

第8步:测试静态库

创建新项目,将其命名为TestLogger导入libLogger.a和头文件导入头文件“Logger.h”您想要使用的任何位置现在,使用此Logger类作为默认实践。在我们的例子中,[Logger log:@“Test String”];在模拟器和设备中运行项目就是这样!!你有自己的静态库!!


11
投票

第1步:启动新的静态库项目

打开XCode并启动一个新项目。在iOS下,选择Library和“Cocoa Touch Static Library”将其称为“staticlibrary”。这将为我们创建一个很好的新项目,构建一个.a文件。

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

第3步:构建和分发您的库一旦您对库感到满意,只需在XCode中构建它。显然,不要进行构建和运行,因为你无法运行它(除非你有一个测试套件)。现在,查看XCode中的Products组,您应该看到一个名为lib(libraryName).a的文件。在我们的例子中,它是libstaticlibrary.a

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

FolderName
|- libstaticlibrary.a
|-  StaticClass.h

现在你可以压缩这个文件夹并将它卖给数以百万计的iOS开发人员!

第4步:在新项目中链接您的库现在您已经构建了闪亮的新静态库,现在是时候在另一个应用程序中测试它了。

创建一个新的基于视图的项目(或任何不重要的项目)。将其命名为Test。

现在,只需将此文件夹拖到项目中,XCode就会自动设置所有链接。当提示复制时,我通常会说是,但你可以做任何你想做的事情,这取决于你打算如何使用这个库。如果您有多个项目共享一个库,有时只是链接而不是复制更有益。它确保它们都使用最新版本。

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

第5步:使用静态库代码

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

有关进一步说明,http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial希望本教程对您有所帮助。


0
投票

Objective-C使用者 - > Objective-C静态库

Xcode版本10.2.1

创建Objective-C静态库或Create Objective-C静态库Target

创建一个库项目

File -> New -> Project... -> Cocoa Touch Static Library -> Enter necessary information and choose Language -> Objective-C

创建module.modulemap文件

module module_name {
    umbrella header "module_name-umbrella.h"
    export *
}

.h文件添加到将为消费者开放的module_name-umbrella.h

#import "header_1.h"
#import "header_2.h"

添加复制文件构建阶段

Project editor -> select a target -> Build Phases -> Copy Files -> add `module.modulemap`, `module_name-umbrella.h` 

添加标题

Project editor -> select a target -> Build Phases -> Headers(If it doesn't exist -> + at the top -> New Headers Phase) -> add all `.h` files from `module_name-umbrella.h`(`header_1.h`, `header_2.h`)

构建库

注意:确保为与客户端代码相同的流程体系结构构建库。

查找生成的输出

Products group -> lib<module_name>.a -> Show in Finder

注意:默认情况下,它将位于DerivedData文件夹的子文件夹中(如果您在开发过程中删除DerivedData并重新生成它,则可以更改它)。

该目录包括

  • lib<module_name>.a - 内置静态库
  • module.modulemap文件
  • module_name-umbrella.h文件
  • usr/local/include文件夹,包含来自.hmodule_name-umbrella.h文件 - 公共接口/定义

使用Objective-C静态库

Link Binary With Libraries

Project editor -> select a target -> Build Phases -> Link Binary With Libraries -> add -> Add Others... -> point to `lib<module_name>.a` file

添加Library Search paths

Project editor -> select a target -> Build Settings -> Search Paths -> Library Search paths -> add path to the parent of `lib<module_name>.a` file

添加Header Search Paths

Project editor -> select a target -> Build Settings -> Search Paths -> Header Search Paths -> add path to generated `include` folder (or a path to the parent of generated `module_name` folder with `.h` files)
  • 当您设置path时,您可以定义父文件夹之一的路径并设置recursive/**将添加到路径的末尾)。例如,您可以使用path参数将Build污染到recursive目录。
  • 如果patch包含空格 - ,你应该使用\来逃避它们或用双引号""封闭路径

将模块导入Objective-C客户端代码

@import module_name;

Swift consumer -> Swift static library

Swift consumer -> Objective-C static library

Objective-C consumer -> Swift static library

© www.soinside.com 2019 - 2024. All rights reserved.