美文网首页
iOS项目组件化之Cocoapods(一) -- 基础篇

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

作者: 普通上班族老王 | 来源:发表于2019-02-15 17:21 被阅读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

    相关文章

      网友评论

          本文标题:iOS项目组件化之Cocoapods(一) -- 基础篇

          本文链接:https://www.haomeiwen.com/subject/xiemeqtx.html