解决打包自己的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/