iOS 使用 cocoapods-packager 打包静态库

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 使用 cocoapods-packager 打包静态库相关的知识,希望对你有一定的参考价值。

参考技术A 使用 Packager 打包

在原有仓库中,使用 pod package 命令,将原有的源码打包为静态库:

podpackageAPodSpec.podspec--library

其中,–library 指定 packager 打出静态库。

如果仓库没有问题的话,会得到一个与当前 podspec 版本号对应的,名为 APodSpec-x.x.x 的文件夹。里面就会有已经打包好的 .a 文件和一些打包过程中的中间产物,以及一份自动生成的静态库版本的 .podspec 配置文件。这里需要注意的是,不能直接使用它自动生成的这份 .podspec 配置文件,这份配置文件实际上是给 framework 用的,而不是给 .a 的。

配置静态库的 podspec 文件

cocoapods-packager 打包静态库的功能存在 Bugs,让人感觉像是把打包 framework 的模块拿过来随便改改充数的。它有两个问题,首先,它在打包后不会将头文件拷贝出来和 .a 放到一起,.a 所在的目录只有光秃秃的一个静态库;其次,它自动生成的 .podspec 文件中配置的竟然是 s.ios.vendored_framework = 'ios/APodSpec.framework',但我们生成的是 .a 静态库,根本就不存在 framework。

这些问题在 CocoaPods 中很早就被提了 issue,但 CocoaPods 表示——虽然这是 Bugs,但是他们是不会修复的。因此,我们需要修正一下 podspec 文件。

最简单的方法就是把仓库中原有的 podspec 文件拷贝一份过来改一改。

首先我们需要指定静态库:

s.vendored_libraries ="Path/to/APodSpec.a"

然后,去掉原有的 s.public_header_files 字段,并按照以下方式指定静态库的头文件:

s.source_files ="APodSpec/**/*.h"

需要注意的是,这里不应该使用 s.public_header_files,而是用 s.source_files 去指定。

最后,去除一些没用的配置,比如 s.resources 等,就可以了。

验证

要测试配置是否有问题的话,可以直接拿新的 podspec 文件替换掉原有的试一试,在 Demo 中 pod install 后能编译成功的话基本就没问题了。

以上是关于iOS 使用 cocoapods-packager 打包静态库的主要内容,如果未能解决你的问题,请参考以下文章

在Pods里面生成frameWork或者.a文件

iOS - JSONModel的基本使用(OC)

即使使用 #available(iOS 15.0, *),iOS 15 唯一的视图修饰符也会导致 iOS 14 崩溃

[iOS] 在 ios10 中使用 imessage

使用 SmartFace.io 录制音频(Android - Ios)

iOS - 如何使用 branch.io 在 Appstore 中测试深度链接