Gray's coding life.

利用Cocoapods生成依赖第三方库的Framework

Word count: 605 / Reading time: 3 min
2018/07/17 Share

解决打包自己的framework的时候需要依赖第三方framework或文件的问题。

第一步

新建立一个本地Demo工程用于执行源码,创建demo工程目的是方便控制源码测试。
然后将framework的必要文件添加到Demo工程目录下。例如:

1
2
Classes/*.{h,m}
DemoProject/...

执行以下命令初始化cocoapods环境

1
pod init

然后编辑Podfile,把需要依赖的第三方库按规则编写,例如

1
2
pod 'GRKit', :path => '../GRKit'
pod 'AFNetworking', '~> 3.0'

再执行update,就可以跑起源码demo啦

1
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里添加以下代码:

1
2
3
4
target 'XXXSDK' do
pod 'GRKit', :path => '../GRKit'
pod 'AFNetworking', '~> 3.0'
end

这个Podfile里的target要区别于demo的target,是分开使用的,这里需要编写framework依赖的库。
然后回到Podfile目录下执行

1
pod update --verbose --no-repo-update

最后一步

配置RunScript,控制其生成一个模拟器和真机都能使用的framework于当前目录下

  • Build phases->new Run Script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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

支持Category

1
Build Settings -> Other Linker Flags -> -ObjC

取消bitcode

1
Build Settings -> Other C Flags -> -fembed-bitcode

然后打开Project,选取framework的target,分别在真机和模拟器环境执行Build操作,便会输出一个Framwork/XXX.framework在项目的目录下了。最后可以直接把framework加到项目里使用,也可以通过Cocoapods引入到项目中使用,若使用Cocoapods的方式引入则需要再编写一个podspec文件。
可以参考我另外一篇博客: podspec的使用

CATALOG
  1. 1. 第一步
  2. 2. 第二步
  3. 3. 最后一步
  4. 4. 支持Category
  5. 5. 取消bitcode