使用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

最后编辑于
?著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,128评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,316评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事?!?“怎么了?”我有些...
    开封第一讲书人阅读 159,737评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,283评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,384评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,458评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,467评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,251评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,688评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,980评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,155评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,818评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,492评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,142评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,382评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,020评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,044评论 2 352

推荐阅读更多精彩内容