iOS项目组件化之Cocoapods(一) -- 基础篇

前言

在过年前, 工作算是告一段落了, 趁现在有空, 就写一些笔记和总结吧. 废话不多说, 直接开始.

要记住, 组件化只是为了分解代码和重用代码(这只是个人理解)。

这章先介绍怎么用Cocoapods和一些使用基础, 后面其他再具体说一下个人见解, 怎么分离项目, 怎么分离比较好. 当然这只是个人见解, 具体怎么使用,还是得看你.

转载请标明出处!

系列文章:

iOS项目组件化之Cocoapods(一) -- 基础

iOS项目组件化之Cocoapods(二) -- 踩坑与小技巧


podspec介绍

先大致了解里面podspec字段的意思, 想知道更详细,可去官网查看


Pod::Spec.new do |s|

s.name        = "XQTestOne" #项目名字

s.version      = "0.1"  #项目版本

s.summary      = "摘要"  #项目摘要

s.description  = "描述"  #项目描述

s.homepage    = "https://github.com/SyKingW/XQTestCocoapodsModule"  #项目首页

s.license      = "MIT"  #项目证书

s.author      = { "Sinking" => "1034439685@qq.com" } #项目作者

s.ios.deployment_target = "10.0"  #项目支持什么版本以上

s.source      = { :git => "https://github.com/SyKingW/XQTestCocoapodsModule.git", :tag => "#{s.version}" }  #项目git地址(当不上传到Cocoapods的时候, 指定地址不是很重要)

s.source_files  = "XQTestOne", "XQTestOne/**/*.{h,m}"  #项目引入的文件

s.public_header_files = "XQTestOne/**/*.h"  #项目需要暴露出来的头文件

s.resources = "XQTestOne/Resources/**/*.xib"  #项目需要引入的资源文件(xcassets,xib等等)

s.static_framework  =  true #是否作为静态库(默认false)

s.frameworks = "UIKit"  #项目依赖的系统framework(系统的不需要写后缀)

s.vendored_frameworks = "XQTestOne/**/*.framework" #项目依赖的第三方framework

s.libraries = "iconv", "xml2"  #项目依赖的lib(系统的不需要写后缀)

s.vendored_libraries = "XQTestOne/**/*.a"  #项目依赖第三方的lib

s.dependency "AFNetworking", "~> 3.0"  #项目依赖的第三方库

end

实际操作演示

接下来我就一步步演示各种效果. 代码放在最后了, 如果想看代码可以先去下载.

导入代码

我们先创建项目

项目
在这里插入图片描述

XQTestZero 作为项目主体

XQTestTool 作为工具类代码

XQTestZero的Podfile内容


target 'XQTestZero' do

#使用framewrok

  use_frameworks!

# 指定本地地址, 相对地址和绝对地址都可以

pod 'XQTestTool', :path => '../XQTestTool'

end

XQTestTool的XQTestTool.podspec


Pod::Spec.new do |s|

s.name        = "XQTestTool"      #SDK名称

s.version      = "0.1"#版本号

s.homepage    = "https://github.com/SyKingW/XQTestCocoapodsModule.git"  #工程主页地址

s.summary      = "工具类"  #项目的简单描述

s.license    = "MIT"  #协议类型

s.author      = { "Sinking" => "1034439685@qq.com" } #作者及联系方式

s.ios.deployment_target = "9.3"#iPhone

s.osx.deployment_target = '10.8'#mac

s.source      = { :git => "https://github.com/SyKingW/XQTestCocoapodsModule.git", :tag => "#{s.version}"}  #工程地址及版本号

# 导入文件的路径(ps: '**/*{.swift}' 意思是导入这个路径下后缀为swift的文件, 具体语法可自行查询)

s.source_files = 'XQTestTool/SDK/**/*.{swift}'

end

XQAdd.swift文件代码

在这里插入图片描述

很好, 一切都准备就绪. 这个时候用命令行到XQTestZero项目下执行


pod install

在这里插入图片描述
在这里插入图片描述

成功导入本地库了!!!!

在这里插入图片描述

接下来我们打开 XQTestZero.xcworkspace 尝试在项目内引用一下代码.

这个时候你会发现, 引用不出来!!

在这里插入图片描述

这个是因为Swift公开的类和方法要设置为public及以上的权限.(具体字段意义可自行Google)

在这里插入图片描述

增加两个字段之后, command + shift + k(清缓存, 这样系统就会重新读取本地库编译). 然后再运行. 就会重新编译出来库了.

好, 一切准备就绪, 开始运行, 结果如图. 这个时候我们就完成第一个本地库编译了.

ps:红色框Development Pods是本地库. 如果一般第三方, 是有一个Pods文件夹的.

在这里插入图片描述

我们点进去看一下系统编译之后, 库是怎样的吧.

在这里插入图片描述
在这里插入图片描述

最简单, 也是最难的开头已经可以了,下面就加速了,请寄上安全带

<img src="https://img-blog.csdnimg.cn/2019020216391198.jpeg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3hpbnNob3VfY2Fpemh1,size_16,color_FFFFFF,t_70" width = "300" height = "300" div />

关联第三方库

在 XQTestTool.podspec 中加入


# 引用第三方

s.ios.dependency 'YYModel'

然后执行命令,导入第三方引用


pod install

创建一个方法, 然后在主项目调用

在这里插入图片描述
在这里插入图片描述

如果要本地第三方库中, 要引用另一个本地第三方. 那么podspec和这个写法一样,但是主项目中的podflie还得去加入本地库, 不然因为是默认去Cocoapods库里面找, 是找不到本地库的.

导入资源文件

我们一般UI库里面可能还会包括图片, 国际化等等资源, 这时候就得增加引用资源了.

创建一个 XQTestResource 项目

在这里插入图片描述

XQTestResource.podspec 内容


Pod::Spec.new do |s|

    s.name        = "XQTestResource"      #SDK名称

    s.version      = "0.1"#版本号

    s.homepage    = "https://github.com/SyKingW/XQTestCocoapodsModule.git"  #工程主页地址

    s.summary      = "工具类"  #项目的简单描述

    s.license    = "MIT"  #协议类型

    s.author      = { "Sinking" => "1034439685@qq.com" } #作者及联系方式

    s.ios.deployment_target = "9.3"#iPhone

    s.osx.deployment_target = '10.8'#mac

    s.source      = { :git => "https://github.com/SyKingW/XQTestCocoapodsModule.git", :tag => "#{s.version}"}  #工程地址及版本号

    # sdk文件

    s.source_files = 'XQTestResource/SDK/**/*.{swift}'

    # sdk资源文件

    s.resources = 'XQTestResource/SDK/**/*.{xcassets}'

end

XQTestZero的Podfile文件添加(下面都忽略写这个, 基本添加一个库, 就需要在这里添加一个导入, 重复操作, 不需要说明太多)


pod 'XQTestResource', :path => '../XQTestResource'

创建加载图片方法

[图片上传失败...(image-1c8720-1550222461515)]

运行结果

在这里插入图片描述

要取组件里面的资源, 唯一要注意的是要指定Bundle, 如果从MainBundle中获取是获取不到的.

导入自定义.framework

创建一个framework项目, 并写入代码

在这里插入图片描述

XQTestFramework.podspec 内容


Pod::Spec.new do |s|

    s.name        = "XQTestFramework"      #SDK名称

    s.version      = "0.1"#版本号

    s.homepage    = "https://github.com/SyKingW/XQTestCocoapodsModule.git"  #工程主页地址

    s.summary      = "工具类"  #项目的简单描述

    s.license    = "MIT"  #协议类型

    s.author      = { "Sinking" => "1034439685@qq.com" } #作者及联系方式

    s.ios.deployment_target = "10.0"#iPhone

    s.osx.deployment_target = '10.8'#mac

    s.source      = { :git => "https://github.com/SyKingW/XQTestCocoapodsModule.git", :tag => "#{s.version}"}  #工程地址及版本号

    #项目依赖的第三方framework

    s.vendored_frameworks = 'SDK/**/*.{framework}'

end

项目中导入库, OC库需要通过Bridging文件来导入

ps: 这里采用OC创建Framework, 是因为试了好多次,swift的framework都不能导入,如有大神知道, 请指导一下.

在这里插入图片描述

运行结果, ♪(*)啦啦

在这里插入图片描述

建议如果是自己写的framework,尽量不要弄成framework再导入.

因为能直接pod, 为何还要这样.......

导入自定义.a

创建项目, 然后编译.a, 并且copy出.h文件, 到SDK文件夹下

在这里插入图片描述

XQTestLib.podspec 和 导入自定义.framework没太大区别, 把


    s.vendored_frameworks = 'SDK/**/*.{framework}'

改成


#项目依赖的第三方 .a

    s.vendored_libraries = 'SDK/**/*.{a}'

并且增加头文件就行


# sdk文件

    s.source_files = 'SDK/**/*.{h}'

最终引用结果~

在这里插入图片描述

其实这样引用.a和.framework很不好, 一般这样导入, 只是为了给库里面用.framework或者.a, 而不是让主项目使用.

如果主项目使用,直接拖进去就行了。


项目代码地址

千说万说,不如直接浏览代码来的实际. https://github.com/SyKingW/XQTestCocoapodsModule.git

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