使用CocoaPods开发Framework
前言
1.什么是CocoaPods
当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之小编的意思就是,手动一个个去下载所需类库十分麻烦。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以,你需要 CocoaPods。
CocoaPods应该是iOS最常用最有名的类库管理工具了,上述两个烦人的问题,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。重要的是,绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。
2.CocoaPods的原理
CocoaPods的原理是将所有的依赖库都放到另一个名为Pods的项目中,然后让主项目依赖Pods项目,这样,源码管理工作都从主项目移到了Pods项目中。Pods项目最终会编译成一个名为libPods.a的文件,主项目只需要依赖这个.a文件即可。
3.CocoaPods安装和使用可以参考下面链接
https://www.cnblogs.com/YangFuShun/p/7976811.html
4.framework制作
4.1创建一个workspace项目:
①在桌面创建文件夹ZCBLSDK
②打开Xcode,创建一个workspace,Xcode--->File--->New--->Workspace
③把创建好的workspace放在桌面上文件夹ZCBLSDK中
4.2创建一个project项目:
①打开ZCBLSDK.workspace文件,Xcode--->File--->New--->Project--->iOS--->Cocoa Touch Framework--->Next--->Product Name (ZCBLSDK)--->Next---Add to和Group 选择ZCBLSDK--->Create
4.3创建一个测试Demo项目:
①打开ZCBLSDK.workspace文件,Xcode--->File--->New--->Project--->iOS--->Single View Application--->Next--->Product Name (ZCBLSDKDemo)--->Next---Add to和Group 选择ZCBLSDK--->Create
4.4创建一个测试类:
①在ZCBLSDK.project下创建一个ZCBLSDKTest类,继承于NSObject,打印一条日志信息,在ZCBLSDKTest的.h文件中声明一个方法+(void)test;在ZCBLSDKTest的.m文件中实现+(void)test{NSLog(@"Hello Wold !!!");}
②设置Build Setting参数,将Build Active Architecture only设置为NO
③根据SDK需要支持的ARM处理器配置Architecture
④设置Headers,将要公开的头文件拖到Public下,要隐藏的放到Private或者Project下,隐藏的头文件不能被引用,选择ZCBLSDK--->Build Phases--->Headers
⑤在ZCBLSDK.h中将所有要公开的.h引入#import<ZCBLSDK/ZCBLSDKTest.h>
4.5导出.framwork文件:这里提供两种导出方式,一种手动导出,一种脚本导出
①手动导出:选择ZCBLSDK.project--->Edit Scheme--->Run--->Build Configuration--->Release--->然后分别用真机和模拟器进行编译,编译成功后选择Products下面的ZCBLSDK.framework然后右键Show in Finder,拷贝Release-iphoneos和Release-iphonesimulator文件下放在桌面新建文件夹ZCBLFramework(自己命名)文件下,然后打开终端命令合并库文件:cd ZCBLFramework下面,执行lipo -create Release-iphoneos/ZCBLSDK.framework/ZCBLSDK Release-iphonesimulator/ZCBLSDK.framework/ZCBLSDK -output ZCBLSDK,查看framework支持的架构:lipo -info ZCBLSDK
补充:
arm7: 在最老的支持iOS7的设备上使用
arm7s: 在iPhone5和5C上使用
arm64: 运行于iPhone5S的64位 ARM 处理器 上
i386: 32位模拟器上使用
x86_64: 64为模拟器上使用
注意: 高位兼容地位(32位兼容16位),arm7版本可以在arm7s上运行
需要在对应架构设备上运行,才能生成对应架构的包
②脚本导出:创建一个Aggregare,Xcode--->Editor--->Add Target--->Cross-platform--->Aggregate--->Next--->Product Name(ZCBLSDKAG)--->finish--->嵌入脚本,选中刚创建的Aggregate,然后选中右侧的Build Phases,点击左边的+号,选择New Run Script Phases,把下面的脚本复制进去:
# Sets the target folders and the final framework product.
#如果工程名称和Framework的Target名称不一样的话,要自定义FMKNAME
#例如: FMK_NAME ="MyFramework"
FMK_NAME=${PROJECT_NAME}
# Install dir will be the final output to the framework.
# The following line create it in the root
folder of the current project.
INSTALL_DIR=${SRCROOT}/Products/${FMK_NAME}.framework
# Working dir will be deleted after the framework creation.
WRK_DIR=build
DEVICE_DIR=${WRK_DIR}/Release-iphoneos/${FMK_NAME}.framework
SIMULATOR_DIR=${WRK_DIR}/Release-iphonesimulator/${FMK_NAME}.framework
# -configuration ${CONFIGURATION}
# Clean and Building both architectures.
xcodebuild -configuration"Release"-target"${FMK_NAME}"-sdk iphoneos clean build
xcodebuild -configuration"Release"-target"${FMK_NAME}"-sdk iphonesimulator clean build
# Cleaning the oldest.
if[ -d"${INSTALL_DIR}"]
then
rm -rf"${INSTALL_DIR}"
fi
mkdir -p"${INSTALL_DIR}"
cp -R"${DEVICE_DIR}/""${INSTALL_DIR}/"
# Uses the Lipo Tool to merge both binary files (i386 + armv6/armv7) into one Universal final product.
lipo -create "${DEVICE_DIR}/${FMK_NAME}" "${SIMULATOR_DIR}/${FMK_NAME}" - output"${INSTALL_DIR}/${FMK_NAME}"
rm -r"${WRK_DIR}"
open"${INSTALL_DIR}"
③编译,选中刚创建的Aggregare,command+B,编译通过在finder中找到framework,拷贝出来。
④测试framework,把刚生成的framework添加到ZCBLSDKDemo中,导入头文件#import<ZCBLSDK/ZCBLSDK.h>,使用[ZCBLSDKTest test],发现控制台打印Hello Wold !!!说明framework和ZCBLSDKDemo关联成功,修改framework中ZCBLSDKTest类中test的代码,+(void)test{NSLog(@"Hello Framework !!!");},再次运行发现控制台打印Hello Framework !!!,这时候说明framework已经制作成功。
5.发布framework到CocoaPods
5.1创建GitHub仓库并上传framework到GitHub仓库
5.1.1打开https://github.com,没有账号先注册账号,然后登陆。
5.1.2登陆完成之后点击Start a project,然后根据自己的实际情况配置项目。
5.1.3创建成功后clone远程仓库到本地:
①cd Documents 你希望存放的地址
②执行git clone 仓库地址
③然后将刚刚生成的ZCBLSDK.framework放在一个命名为Frameworks的文件夹中,然后将Frameworks文件夹放在clone下来的文件夹中。
5.1.4提交到GitHub:
①git add --all
②git commit -m'init framework'
③git push
5.1.5设置Tag:
①git tag 1.0.0
②git push origin --tags
5.2创建Trunk账户
5.2.1注册Trunk账户:
①pod trunk register邮箱地址 ‘用户名’ –verbose,注册命令执行完之后,对应的邮箱地址会收到一封邮件,去邮箱确认注册。
5.2.2查看自己的注册信息:
①pod trunk me
5.3创建.podspec文件
5.3.1.podspec文件的作用是为了让CocoaPods搜索引擎知道该代码的作者、版本号、概要、描述、源代码地址、部署版本、依赖的框架等描述信息。
5.3.2创建.podspec文件:
①cd Documents 从GitHub上面clone下来文件夹目录执行pod spec create ZCBLSDK
②双击打开ZCBLSDK.podspec文件进行编辑
Pod::Spec.new do |s|
#名称
s.name = "ZCBLSDK"
#版本号
s.version = "1.0.0"
#简介
s.summary = "ZCBLSDK is about test framework"
#描述
s.description = "ZCBLSDK is about test framework!!!"
#项目主页地址
s.homepage = "https://github.com/cheerharry90/TestGitHub.git"
#许可证
s.license = { :type => "MIT", :file => "LICENSE" }
#作者
s.author = { "cheer_harry" => "cheer_harry@163.com" }
#支持最小系统版本
s.platform = :ios, "8.0"
#项目的地址 (注意这里的tag位置,可以自己写也可以直接用s.version,但是与s.version一定要统一)
s.source = { :git => "https://github.com/cheerharry90/TestGitHub.git", :tag => s.version}
#你的资源路径
s.resources = "Frameworks/ZCBLSDK.bundle"
#你的SDK路径
s.vendored_frameworks = "Frameworks/ZCBLSDK.framework"
# s.dependency "WilddogVideoRoom" // framework中依赖第三方SDK
# s.dependency "Wilddog/Sync" // framework中依赖第三方SDK
end
注意此处的.podspec文件不需要上传GitHub
5.4上传CocoaPods
5.4.1验证.podspec文件是否合法
pod spec lint ZCBLSDK.podspec
5.4.2提交.podspec文件到Trunk中
pod trunk push ZCBLSDK.podspec
提示successfully published则表示上传成功
注意:验证过程中失败可以添加--verbose查看原因,
①如果s.dependency包含了.a静态库造成错误,虽然这并不影响Pod的使用,但是验证是无法通过的,可以通过 --use-libraries 来让验证通过。
②使用 --use-libraries 虽然不会出现错误(error),但是有时候会带来一些警告(waring),警告同样是无法通过验证的,这时可以用 --allow-warnings 来允许警告。
pod spec lint ZCBLSDK.podspec --verbose --use-libraries --allow-warnings
5.5使用CocoaPods集成ZCBLSDK
5.5.1打开Xcode创建一个测试Demo,在工程目录下面添加podfile文件,双击点开podfile文件添加
platform :ios,'8.0'
target 'TestPodDemo' do
pod 'ZCBLSDK'
end
然后执行pod install
注意如果直接执行pod search ZCBLSDK出现找不到的情况可以采用以下三种方案解决:
①执行pod repo update master
②前往--->前往文件夹--->资源库--->Caches--->CocoaPods--->删除search_index.json文件,然后再执行pod search ZCBLSDK
③在工程目录下面添加podfile文件,双击点开podfile文件添加
platform :ios,'8.0'
target 'TestPodDemo' do
pod 'ZCBLSDK'
end
然后执行pod update