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

2019-02-15  本文已影响0人  普通上班族老王

前言

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

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

这章先介绍怎么用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

上一篇 下一篇

猜你喜欢

热点阅读