美文网首页
如何制作一个.a静态库(依赖第三方库)(上)

如何制作一个.a静态库(依赖第三方库)(上)

作者: 亟措辰沧丶 | 来源:发表于2018-02-08 10:31 被阅读24次

在我们开发的过程中,有时候需要将我们的项目或者功能接入到其他的项目中,这时候我们有很多方式,多工程、静态库、cocoapod远程库、cocoapod本地库等。今天我来讲讲.a后缀的静态库。

准备工作

1.命名一定要规范,我们制作的.a库里所有的.h、.m文件都必须要加上前缀,例如我们的项目前缀就是CK,这样的好处是,减少与目标项目文件冲突的可能性。
2.你需要生成静态库的文件必须要归类到一个总目录下,方便生成库的时候使用方便。
3.准备好入口类(项目所有的外部需要调用的功能应该都能通过该类来实现接口调用,而不是暴露很多个头文件),通常在组件化开发中,我们叫它中间件。

创建lib工程

如果你已经做好了以上两点,那么我们就可以开始创建lib工程了。
1.选择cocoa touch static library


03FA9193-18D7-4946-B1C6-43BF0FD3DEF5.png

2,命名为testLib


image.png

3.创建一个Myfoundation类来表示我们的工程文件,需要通过Myfoundation类来实现工程中的某个功能(吃食物)


image.png

4.但是由于项目可能存在多处被外界调用,我们肯定不能一一暴露头文件,那样使用者也会感觉极度复杂,创建一个中间件来间接调用该功能,做好数据异常处理(功能的稳定性不应该交给调用者)


image.png
image.png

如果我们的静态库项目依赖第三方库该怎么办呢?这个时候就要用到终端了

1.cd到目标目录

cd /Users/pqh/Desktop/TestLib

2.生成pod环境

pod init

3.编辑podfile

open Podfile

4.添加自己的依赖库,为了避免文件与主工程冲突,我们需要加一段代码,如下所示,因为打包静态库的时候,pod导入的三方库会加前缀PodsDummy,那么目标工程在导入相同的库会文件冲突,所以我们要手动改变PodsDummy为自己的前缀
TestLibDummy

post_install do |installer_representation|
    installer_representation.pods_project.targets.each do |target|
        target.build_configurations.each do |config|
            config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] = '$(inherited), PodsDummy_Pods=TestibDummy_Pods'
        end
    end
end
image.png

5.安装pod库

pod install

5.项目中如果有MRC报错,则需要在compile sources中对应MRC文件添加-fno-objc-arc
6.暴露头文件:MyHeaderFiles.h


image.png

修改配置

1.testLib->Edit scheme->info->Build Configuration->Release


image.png

2.静态库兼容最低版本


image.png

3.Build Active Architecture Only 我们设置为Yes
设置为NO的时候,会编译支持的所有的版本,
设置为YES的时候,是为Debug的时候速度更快,它只编译当前的architecture 版本
Valid Archetectures设置如图所示

image.png

4.一些其他配置(看个人喜好配置)
Dead Code Stripping > NO(去掉不会执行到的代码)
Strip Style > Debugging Symbols
Strip Debug Symbol During Copy > NO(去掉Debug相关符号)
Strip Linked Product > NO
5.至此我们项目基本配置已经ok了,我们可以尝试编译,应该是没什么问题的,如果有问题,可以根据报错提示去Google一下。

打包静态库

1.选择任意模拟器编译生成模拟器的包


image.png

2.选择Generic iOS Device 编译生成release包



3.在products目录下,libTestlib.a open in finder我们会看到两个目录
os下是真机包(上线用),simulator下是模拟器的包
image.png

4.但是通常我们会合并这两个包来减少不必要的操作,打包上线时,会自动帮我们选择对应的文件,不会增大上线包的体积。

5.如何合并两个包来测试呢?我们先创建一个目录用来管理需要给别人使用的文件,创建一个文件夹,并cd到该目录

cd /Users/pqh/Desktop/TestLibResouce 

6.合并

lipo -create
/Users/pqh/Library/Developer/Xcode/DerivedData/TestLib-bepyitzeumbotygtmzjjjarfnaqy/Build/Products/Release-iphonesimulator/libTestLib.a 
/Users/pqh/Library/Developer/Xcode/DerivedData/TestLib-bepyitzeumbotygtmzjjjarfnaqy/Build/Products/Release-iphoneos/libTestLib.a 
-output TestLib.a

7.在include目录下,取出暴露的头文件,放到我们的TestLibResouce


image.png

8.将TestLibResouce放入到目标工程测试,需要注意的是,在目标工程也要通过cocoapods添加.a依赖的第三方库。


image.png

9.导入HeaderFile中间层,尝试调用我们的功能。


image.png

至此,简单地依赖第三方库的静态库.a文件已经生成,下篇会讲解如何依赖图片资源和xib、storyboard资源文件。

相关文章

网友评论

      本文标题:如何制作一个.a静态库(依赖第三方库)(上)

      本文链接:https://www.haomeiwen.com/subject/dlozzxtx.html