CocoaPod 指定动态或者静态链接framework

当在 podfile 文件中使用 use_frameworks! 指令时,CocoaPod在安装Pod时,会用framework方式组织资源(默认使用lib方式),同时该指令还提供扩展选项,指定动态framework或者静态framework use_frameworks! #使用默认值,根据pod类型自行设置static或者dynamic use_frameworks! :linkage => :static # 使用静态链接 use_frameworks! :linkage => :dynamic #使用动态链接 如果在 podfile 中设置 use_frameworks! ,又没有指定 linkage => :static 或 linkage => :dynamic 时,则会根据 podspec 文件中的根配置 static_framework = true/false 来设置。 另外, linkage => :static 或 linkage => :dynamic 只对源码Pod有效,对已经是framework的pod不起作用。而且,如果pod中的framework是动态库,那么在 pod install 后,会在相应的target的 Build Phases 设置中添加 [cp] Embed Pods Frameworks 脚本,以动态库的方式将framework输出到最终产物中。

March 29, 2021 · 1 min · holdsky

引入私有CocoaPod编译报错include of non-modular header inside framework module

原因是引入的CocoaPod仓库,编译后缺少 module.modulemap 文件;通常是因为私有CocoaPod仓库只有声明文件,没有定义实现文件—–只有 .h 文件,没有 .m .mm 等文件。 简单的解决办法是在私有仓库添加一个空的 .m 文件,例如添加 cocoapod.m 文件(名字随意) /// cocoapod.m #import 然后在 podspec 文件中,将这个文件添加到 source_files 属性里 s.public_header_files = '公开的头文件' s.source_files = '已有的源文件','cocoapod.m' #也可使用通配符写法 ,如 **/*.{h,m} 再次 pod install 即可生成 module.modulemap 文件

January 27, 2021 · 1 min · holdsky

安装指定版本的CocoaPods

因为一些编译构建问题,我需要降级CocoaPods 过程如下: 卸载当前版本的CocoaPods sudo gem uninstall cocoapods 下载指定版本的CocoaPods,编译gem包 下载地址https://github.com/CocoaPods/CocoaPods/releases 将源码下载后解压,进入源码目录,编译gem包 gem build cocopods.gemspec 编译产物是 cocopods-版本号.gem 使用本地gem包安装CocoaPods sudo gem install cocopods-版本号.gem

October 31, 2019 · 1 min · holdsky