CocoaPods 实践
本文简单介绍下 cocoapod 使用,及编写 podspec 文件时遇到的一些问题。
使用 cocoapods
创建 Podfile
进入项目中和.xcodeproj同级的文件夹,创建Podfile文件。
touch Podfile |
编辑 Podfile
# Uncomment this line to define a global platform for your project |
版本号有多种表示方式,其中:
- ‘>=1.0’ 最低版本号为1.0
- ‘<=1.0’ 最高版本号为1.0
- ‘~>1.0’ 兼容1.0的版本的最新版本
使用私有库
# 注意替换私有git域名 |
使用本地库
pod 'CocoaPodDemo', :path => '../CocoaPodDemo/' |
安装
pod install |
如果有需求修改依赖的第三方库的版本号,修改完毕之后,执行命令:
pod update |
开源项目支持 cocoapod
新建 podspec 文件
pod spec create $podspecName |
编辑podspec文件
示例如下
|
license 有多种协议,常见的6种关系如下:
更多标签参考 Podspec Syntax Reference
分支新建tag,并推送到远程仓库
# 新建tag |
验证podspec文件,解决提示的问题
|
提交至CocoaPods
略
发布至私有库
1). 添加仓库
pod spec lint --sources='https://git.code.oa.com/QQFrameworks/pod_specs,https://github.com/CocoaPods/Specs' |
2). 验证需要提交的 xx.podspec
pod spec lint xx.podspec --allow-warnings --no-clean --verbose --use-libraries |
3). 推送到 QQFrameworks/pod_specs
pod repo push oa-qqframeworks-pod_specs xx.podspec --allow-warnings --verbose --use-libraries |
其他问题
私有库增加依赖
spec.dependency "JSONKit", "~> 1.4" |
设置 arc 或者 mrc
是否是ARC,默认true,如果不是,会自动添加-fno-objc-arc
compiler flag
spec.requires_arc = true |
如果只是部分文件是 arc, 参考下面设置:
#该文件夹下是ARC,其它非ARC |
或者
spec.requires_arc = ['Classes/*ARC.m', 'Classes/ARC.mm'] |
如果想再 arc 工程中标记部分文件为 mrc,可以通过子模块设置,参考下面设置:
|
Header Search Path
设置头文件搜索路径:
s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/.."' } |
设置头文件递归搜索:
s.xcconfig = { 'USER_HEADER_SEARCH_PATHS' => '"${PROJECT_DIR}/.."/**' } |
header search path 设置相对 podspec 的路径
#对于HEADER_SEARCH_PATHS,对将设置的字符串直接拷贝到xcode中,不会像上面source_files这样使用相对路径。 |
Library/Framework Search Path
Library Search Path 和 Header Search Path 类似,在xcconfig
中添加
spec.xcconfig = { 'FRAMEWORK_SEARCH_PATHS' => '"$(SRCROOT)/libs/Frameworks/Huoyan"' } |
添加 pch 文件
spec.prefix_header_file = 'SDKDemo/SDKDemo-Prefix.pch' |
或者通过下面方式在对应 pod 的 pch 文件中添加一行
s.prefix_header_contents = '#import "SomeClass.h"' |
支持 c++
s.library = 'c++' |
支持 c++ 11
s.xcconfig = { |
引入系统库
引入系统 framwork
spec.framework = "CoreTelephony" |
引入系统 library
spec.library = "resolv" |
创建subspec
#创建一个subspec |
遗留问题
私有库通过 podspec git 方式源码引入时,同时私有库依赖第三方c++ 库,podsepc 文件中如何设置 c++ 头文件的header search path ?
比如引入 protobuf 库,
.pb.cc
文件中引入头文件#include <google/protobuf/stubs/common.h>
, 如何可以在不更改头文件引入方式及使用方不手动添加header search path
的情况下引入 protobuf。
参考文件
CocoaPods使用
cocoapods系列教程—spec文件
我所理解的 CocoaPods
使用CocoaPods开发lib库
iOS 组件化 使用cocoapods集成实战演练
Cocoapods原理总结