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

文章目录

  • 前言
    • 系列文章:
  • podspec介绍
  • 实际操作演示
    • 导入代码
    • 关联第三方库
    • 导入资源文件
    • 导入自定义.framework
    • 导入自定义.a
  • 项目代码地址

前言

在过年前, 工作算是告一段落了, 趁现在有空, 就写一些笔记和总结吧. 废话不多说, 直接开始.
要记住, 组件化只是为了分解代码和重用代码(这只是个人理解)。
这章先介绍怎么用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" => "[email protected]" } #项目作者
	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

实际操作演示

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

导入代码

我们先创建项目
iOS项目组件化之Cocoapods(一) -- 基础篇_第1张图片iOS项目组件化之Cocoapods(一) -- 基础篇_第2张图片

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" => "[email protected]" } #作者及联系方式
	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文件代码
iOS项目组件化之Cocoapods(一) -- 基础篇_第3张图片
很好, 一切都准备就绪. 这个时候用命令行到XQTestZero项目下执行

pod install

iOS项目组件化之Cocoapods(一) -- 基础篇_第4张图片
iOS项目组件化之Cocoapods(一) -- 基础篇_第5张图片
成功导入本地库了!!!
在这里插入图片描述

接下来我们打开 XQTestZero.xcworkspace 尝试在项目内引用一下代码.
这个时候你会发现, 引用不出来!!
iOS项目组件化之Cocoapods(一) -- 基础篇_第6张图片
这个是因为Swift公开的类和方法要设置为public及以上的权限.(具体字段意义可自行Google)
iOS项目组件化之Cocoapods(一) -- 基础篇_第7张图片
增加两个字段之后, command + shift + k(清缓存, 这样系统就会重新读取本地库编译). 然后再运行. 就会重新编译出来库了.
好, 一切准备就绪, 开始运行, 结果如图. 这个时候我们就完成第一个本地库编译了.
ps:红色框Development Pods是本地库. 如果一般第三方, 是有一个Pods文件夹的.
iOS项目组件化之Cocoapods(一) -- 基础篇_第8张图片

我们点进去看一下系统编译之后, 库是怎样的吧.
iOS项目组件化之Cocoapods(一) -- 基础篇_第9张图片
iOS项目组件化之Cocoapods(一) -- 基础篇_第10张图片

最简单, 也是最难的开头已经可以了,下面就加速了,请寄上安全带
iOS项目组件化之Cocoapods(一) -- 基础篇_第11张图片

关联第三方库

在 XQTestTool.podspec 中加入

# 引用第三方
s.ios.dependency 'YYModel'

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

pod install

创建一个方法, 然后在主项目调用
iOS项目组件化之Cocoapods(一) -- 基础篇_第12张图片
iOS项目组件化之Cocoapods(一) -- 基础篇_第13张图片

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

导入资源文件

我们一般UI库里面可能还会包括图片, 国际化等等资源, 这时候就得增加引用资源了.
创建一个 XQTestResource 项目
iOS项目组件化之Cocoapods(一) -- 基础篇_第14张图片
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" => "[email protected]" } #作者及联系方式
    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'

创建加载图片方法
iOS项目组件化之Cocoapods(一) -- 基础篇_第15张图片
运行结果
iOS项目组件化之Cocoapods(一) -- 基础篇_第16张图片
要取组件里面的资源, 唯一要注意的是要指定Bundle, 如果从MainBundle中获取是获取不到的.

导入自定义.framework

创建一个framework项目, 并写入代码
iOS项目组件化之Cocoapods(一) -- 基础篇_第17张图片
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" => "[email protected]" } #作者及联系方式
    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都不能导入,如有大神知道, 请指导一下.
iOS项目组件化之Cocoapods(一) -- 基础篇_第18张图片
运行结果, ♪(*)啦啦
iOS项目组件化之Cocoapods(一) -- 基础篇_第19张图片

建议如果是自己写的framework,尽量不要弄成framework再导入.
因为能直接pod, 为何还要这样…

导入自定义.a

创建项目, 然后编译.a, 并且copy出.h文件, 到SDK文件夹下
iOS项目组件化之Cocoapods(一) -- 基础篇_第20张图片
XQTestLib.podspec 和 导入自定义.framework没太大区别, 把

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

改成

	#项目依赖的第三方 .a
    s.vendored_libraries = 'SDK/**/*.{a}'

并且增加头文件就行

# sdk文件
    s.source_files = 'SDK/**/*.{h}'

最终引用结果~
iOS项目组件化之Cocoapods(一) -- 基础篇_第21张图片

其实这样引用.a和.framework很不好, 一般这样导入, 只是为了给库里面用.framework或者.a, 而不是让主项目使用.
如果主项目使用,直接拖进去就行了。


项目代码地址

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

你可能感兴趣的:(项目模块化,Cocoapods)