利用Cocoapods生成依赖第三方库的Framework
利用Cocoapods生成依赖第三方库的Framework
https://www.jianshu.com/p/f51c7711eb71
解决打包自己的framework的时候需要依赖第三方framework或文件的问题。
第一步
新建立一个本地Demo工程用于执行源码,创建demo工程目的是方便控制源码测试。
然后将framework的必要文件添加到Demo工程目录下。例如:
Classes/*.{h,m}
DemoProject/...
执行以下命令初始化cocoapods环境
pod init
然后编辑Podfile,把需要依赖的第三方库按规则编写,例如
pod 'GRKit', :path => '../GRKit'
pod 'AFNetworking', '~> 3.0'
再执行update,就可以跑起源码demo啦
pod update --verbose --no-repo-update
第二步
新建立一个target用于Framwork的生成。
- 首先new一个target
- 选取类型为Cocoa Touch Framework
- 填写framework的名字,不要include unit tests,project选取为demo工程,embed in application选取为none
- 创建完成
这个时候就可以去配置framework的文件了,先选取target为framework的target
- build phases->compile sources加入需要编译的.m文件
- build phases->headers加入需要暴露的头文件和需要编译的头文件。
- build phases->Copy bundle resources加入需要的资源文件
然后配置build setting
- Mach-O Type设置为Static Library(打包为静态库)
最后在Podfile里添加以下代码:
target 'XXXSDK' do
pod 'GRKit', :path => '../GRKit'
pod 'AFNetworking', '~> 3.0'
end
这个Podfile里的target要区别于demo的target,是分开使用的,这里需要编写framework依赖的库。
然后回到Podfile目录下执行
pod update --verbose --no-repo-update
最后一步
配置RunScript,控制其生成一个模拟器和真机都能使用的framework于当前目录下
- Build phases->new Run Script
if [ "${ACTION}" == "build" ];
then
INSTALL_DIR=${SRCROOT}/Build/${TARGET_NAME}.framework
DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework
SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.framework
if [ -d"${INSTALL_DIR}" ]
then
rm -rf "${INSTALL_DIR}"
fi
mkdir -p "${INSTALL_DIR}"
cp -R "${DEVICE_DIR}/" "${INSTALL_DIR}/"
lipo -create "${DEVICE_DIR}/${TARGET_NAME}" "${SIMULATOR_DIR}/${TARGET_NAME}" -output "${INSTALL_DIR}/${TARGET_NAME}"
open "${SRCROOT}/Build"
fi
然后打开Project,选取framework的target,执行Build操作,便会输出一个Build/XXX.framework在项目的目录下了。最后可以直接把framework加到项目里使用,也可以通过Cocoapods引入到项目中使用,若使用Cocoapods的方式引入则需要再编写一个podspec文件。
可以参考我另外一篇博客: https://graydang.github.io/2018/06/15/cocoapods/
作者:GrayDang
链接:https://www.jianshu.com/p/f51c7711eb71
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
很多人都知道cocoapods,知道怎么写podfile,知道怎么引入库。下面来介绍下cocoapods的一些拓展用法。
安装Cocoapods
如果没有梯子的需要先执行以下命令,把下载资源替换成国内源。
1
|
gem sources --remove https://rubygems.org/
|
执行以下命令查看当前源,确保已经替换成功,否则再执行以上命令。
1
|
gem sources -l
|
安装cocoapods,后面执行setup的时候时间稍长,文件大约600M,建议使用版本1.5以上。
1
|
sudo gem install cocoapods
|
Podfile
最基本的用法如下:
1
|
target 'BaseFramework' do
|
通过上面的方法可以引入已经上传到Git上面并且打好tag的库。如果想更新了代码,则需要先push代码到github,然后打好新的tag才能实现对podfile的支持。
那如果不想把代码放到github上呢?我希望更新代码之后直接用pod update命令就可以把更新了的代码库引入我的工程。
可以用下面的写法:
1
|
pod 'BaseFramework', :path =>'../BaseFrameworkDir'
|
这个写法的意思是执行路径../BaseFrameworkDir下的BaseFramework.podspec文件,按照podspec文件已经编写好的规则来导入文件到工程里。
podspec文件
这里建议用命令行生成podspec文件,格式和注释都比较规范。
1
|
pod spec create XXX
|
接下来看看生成的podspec文件里比较重要的内容
1
|
s.name = "BaseFramework" #工程的名字
|
封装一个库最重要的还是source_files,把必须用到的文件导入到主工程。
其次就是资源文件resources、frameworks、libraries。
如果涉及到使用mrc的文件还需要设置一下requires_arc的参数
1
|
s.source_files = "Classes/**/*.{h,m}"
|
这个配置表示在导入的时候会在Classes文件夹下找到所有的.h和.m文件并导入。
1
|
s.public_header_files = "Classes/**/*.h"
|
这个配置只在打包framework的时候起作用,选择暴露出来的头文件。
1
|
s.resources = "Resources/*"
|
这里配置工程的资源文件,包括图片、json文件、bundle文件等
1
|
s.frameworks = "ImageIO"
|
这个库依赖于系统库ImageIO,在pod入这个库的时候会带入这个系统库
1
|
s.libraries = "iconv", "xml2"
|
这个库依赖于系统Library iconv和xml2,在pod入这个库的时候会带入这个系统Library。注意这里Library的名字只取lib后面的字符。
1
|
s.dependency "AFNetworking", "~> 3.0"
|
工程依赖的第三方库,写法和podfile一致。