如何创建静态库,并且可以在ios中的任何项目上添加.a文件。
我试过这样做但是做不到。
提前致谢
如果你想创建静态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”];在模拟器和设备中运行项目就是这样!!你有自己的静态库!!
第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希望本教程对您有所帮助。
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
文件夹,包含来自.h
的module_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