今天就来说说.a的制作吧,刚开始做ios开发的时候看见大神把核心代码什么的封成.a就觉得这是手绝活,这几天亲手弄了一下,也就那回事吧 - -!
应主管要求做个静态库,不过这个静态库是建立在三方静态库的基础上生成的,刚开始出了些问题没搞成,还以为跟用.m生成的静态库不一样,折腾了一天才其实.m生成.a和.m+.a生成的.a流程是一样的~~
下面来说说具体操作:
1,首先是创建一个库(跟创建工程是一样的道理)
2,设库名,最后生成的.a会在这里设置的库名加个前缀lib。现在这个libPrintA还是红的,表示不存在。别着急,马上就有了。
3,在这个工程里写个demo
#import "PrintA.h"
@implementation PrintA
+(void)printA{
NSLog(@"AAAAAAAAAAAAA~~~");
}
@end
.h写个接口
+(void)printA;以便生成.a后可以调用printA。
3,最后一招:Commd+B(build)libPrintA就这样生成啦!你会看到刚刚飘红得静态库现在变黑了,表示生成成功啦。我们用过很多静态库,有些只支持真机不支持模拟器,原因就在这里:用iOSDevice build的就只支持真机,用模拟器build的就只支持模拟器。没办法这东西就是这么烦人!什么,你要真机和模拟器都支持的.a?好!且看下一步
4,在工程里右击.a show in Finder,你就会发现咱们刚生成的.a是藏在这么深得路径下的/Users/jason/Library/Developer/Xcode/DerivedData/PrintA-gndmrdfxgefjdzeokdaygxvfgpqr/Build/Products/Debug-iphoneos
要是你刚用iOS device 和模拟器都build过,就这个路径下就会有两个文件夹。也就是两个.a,一个是真机用得一个是模拟器用的。
5,来吧让我们把这两东西合并起来,需要用到终端:
lipo -create .a路径 .a路径 -output libPrintA.a
lipo -create /Users/jason/Library/Developer/Xcode/DerivedData/PrintA-gndmrdfxgefjdzeokdaygxvfgpqr/Build/Products/Debug-iphoneos/libPrintA.a /Users/jason/Library/Developer/Xcode/DerivedData/PrintA-gndmrdfxgefjdzeokdaygxvfgpqr/Build/Products/Debug-iphonesimulator/libPrintA.a -output libPrintA.a
两个.a路径可以直接拖文件进终端,自动识别
最后真机和模拟器的.a文件就完美生成啦,考去项目里运行一下,一切正常!
控制台打印的正式我们刚写的printA
好!第一个静态库就这样简单的生成了。问题来了,如果我们需要生成一个静态库是依赖另一个静态库的(就是A.a依赖B.a),要怎么弄呢?
其实道理跟我们刚生成的静态库是一样的。
1,重新创建一个静态库PrintB,把刚生成的libPrintA到入进来,在PrintB.m中创建一个方法,引用到PrintA.h,调用类方法PrintA。
同样build,模拟器和真机!好了生成了一个libPrintB.a。
2,像刚刚那样把静态库拖到项目中,试试调用PrintB方法能不能打印出我们写的数据。当然啦,答案是肯定的,如果是按照我说得步骤做的话。
本文详细介绍了如何在iOS开发中生成静态库.a,包括单独的静态库和依赖其他库的静态库的生成过程。通过创建库、编写接口、编译以及使用lipo命令合并不同设备的.a文件,最终实现真机和模拟器通用的静态库。此外,还阐述了如何在新库中引用已生成的静态库并确保功能正常。

被折叠的 条评论
为什么被折叠?



