美文网首页iOS点点滴滴
Cocoapods私有库之Swift版

Cocoapods私有库之Swift版

作者: 慕_風 | 来源:发表于2020-01-12 09:29 被阅读0次

    Cocoapods私有库的OC版本网上已经有很多介绍了,也介绍得很好。但是发现对Swift版的介绍得不多,虽然两者差距不大,但总归还是有不一致的地方。今天就和小伙伴们一起来了解如何制作一个Swift版的私有库。

    1、创建私有Spec Repo

    创建私有库之前,我们先看看公有库。在Finder中打开: ~/.cocoapods/repos。可以看到目录下有 master 文件夹,这就是公有库的git仓库。

    1.1 创建私有git仓库作为私有的Repo

    这里我使用github创建远程仓库,小伙伴可执行选择自己的远程仓库。

    按上图操作,完成远程仓库【BOTestSpec】的创建。

    1.2 执行repo 命令添加私有库Repo
    打开终端,在任意目录下执行下面的命令:

    pod repo add BOTestSpec https://github.com/Lwindy/BOTestSpec.git
    
    解释:
    pod repo add 【私有库名称】【1.1中创建的远程仓库的git地址】
    

    再次打开 ~/.cocoapods/repos,如果能看到多一个 BOTestSpec 文件中,则说明创建成功。

    2、创建组件库

    私有Spec创建完成了,但是里面并没有内容,所以我们还需要添加组件库到私有库里,丰富我们的私有库。

    2.1 使用 pod 命令创建组件库

    pod 创建组件库的命令使用可以查看官方文档:Using Pod Lib Create

    cd到你要保存项目的目录然后执行下面的命令:

    pod lib create BOTestTools
    
    紧接着,会有一些参数需要配置:

    配置完成后,会自动打开创建的项目。

    如果你的选择和上图的不一致,可能会生成不同的项目。

    2.2 创建项目远程仓库

    按上图创建【BOTestTools】仓库,存放组件项目。

    远程仓库创建好后,clone到本地,存放在你想要保存的目录。

    2.3 将pod创建的项目文件copy到BOTestTools本地仓库里

    将这四个文件拷贝到clone下面的文件夹下。


    2.4 配置podspec文件

    打开 BOTestTools本地仓库中的 Example 中的工程。

    选择 BOTestTools.podspec 文件:

    相关字段可以查询官方文档【Podspec Syntax Reference】。

    这是我项目中podspec文件,小伙伴们可以作为参考。

    Pod::Spec.new do |s|
      s.name             = 'BOTestTools'
      s.version          = '0.1.0'
      s.summary          = 'A short description of BOTestTools.'
      s.description      = <<-DESC
    TODO: Add long description of the pod here.
                           DESC
    
      s.homepage         = 'https://github.com/LWindy/BOTestTools'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'LWindy' => 'windy.lin@163.com' }
      s.source           = { :git => 'https://github.com/LWindy/BOTestTools.git', :tag => s.version.to_s }
    
      s.ios.deployment_target = '8.0'
    
      s.source_files = 'BOTestTools/Classes/**/*'
    
    end
    

    2.5 添加类到组件项目

    添加文件 Tools.swift 到 BOTestTools文件夹下的Classes文件夹中。

    Tools.swift 文件中简单的给 UIView 添加一个分类。可以设置 UIViewcornerborder

    为了方便链式调用,函数返回值都是Self。而且为了能访问函数,需要给函数加public。

    向库中添加文件或者修改文件,都需要执行 pod update 才可以在 Example 工程中使用。

    2.6 使用示例

    在 Main.storyboard 中给 View 添加一个 按钮。

    再在 ViewController.swift 中使用 import BOTestTools 导入私有库 BOTestTools

    viewDidLoad 方法中,设置 按钮btn 的圆角和边框。

    运行结果:

    3、添加资源文件

    假如要向私有库中添加一张图片,需要使用 Assets来保存资源。

    3.1 添加图片资源

    在Assets目录下添加 ToolsAsset.xcassets,用来存放图片。

    如上图所示,添加一张测试图片进入Assets中。

    3.2 更新podspec文件

    同时,由于添加了资源,所以需要更新 podspec 文件,增加 s.resource_bundles 字段。

    Pod::Spec.new do |s|
      s.name             = 'BOTestTools'
      s.version          = '0.1.0'
      s.summary          = 'A short description of BOTestTools.'
    
      s.description      = <<-DESC
    TODO: Add long description of the pod here.
                           DESC
    
      s.homepage         = 'https://github.com/LWindy/BOTestTools'
      # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'LWindy' => 'windy.lin@163.com' }
      s.source           = { :git => 'https://github.com/LWindy/BOTestTools.git', :tag => s.version.to_s }
      # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
    
      s.ios.deployment_target = '8.0'
    
      s.source_files = 'BOTestTools/Classes/**/*'
      
      s.resource_bundles = {
        'BOTestTools' => ['BOTestTools/Assets/*.xcassets']
      }
    end
    

    BOTestTools/Assets/*.xcassets 为图片资源的路径,需要和你存放图片的路径保持一致。

    3.3 访问图片资源

    由于私有库中的Bundle内的资源无法直接访问,所以添加 BOTools 类来获取资源。
    向 Classes 目录下添加 BOBundleTool.swift 文件。

    import UIKit
    
    public class BOTools {
        
        static var bundle: Bundle = {
            
            let bundle = Bundle.init(path: Bundle.init(for: BOTools.self).path(forResource: "BOTestTools", ofType: "bundle", inDirectory: nil)!)
            
            return bundle!
        }()
        
        public static func getBundleImg(with name: String) -> UIImage? {
            
            var image = UIImage(named: name, in: bundle, compatibleWith: nil)
            
            if image == nil {
                
                image = UIImage(named: name)
            }
            
            return image
        }
    }
    

    BOTools 类也需要添加 public 关键字,否则外界无法访问。

    其中需要特别注意的是bundle路径的获取。

    Bundle.init(for: BOTools.self).path(forResource: "BOTestTools", ofType: "bundle", inDirectory: nil)
    
    forResource参数:必须和组件库的名称保持一致。
    

    3.4 图片资源使用示例

    添加图片完成后,一定要执行 pod update 才可以在 Example 工程中访问。

    在视图上添加 UIImageView,同时给按钮绑定点击事件。实现点击按钮,加载图片。

    加载图片的代码如下:

    let img = BOTools.getBundleImg(with: "1")
    
    imgView.image = img
    
    运行结果如下:

    ps:如果图片无法加载或者报错,可以 clean 一下项目,然后重试。

    实现到这一步,基本上一个组件库已经制作完成了。但是现在还只是在本地,只能自己使用。如果和你一起协同开发的小伙伴也要使用你的库,那么你还需要将组件库上传至git。

    在上传之前,还需要验证 podspec 是否正确。否则别人是无法使用的。

    4、验证 podspec 是否无误

    cd 到 BOTestTools 文件夹下。其目录下有 BOTestTools.podspec 文件。

    在执行如下命令:

    pod lib lint --allow-warnings
    
    执行结果如下:

    如果出现:BOTestTools passed validation. 那么说明本地校验通过。

    但是会发现有两个WARN警告⚠️,小伙伴可能也会遇到,那么我们来看看这两个警告是什么意思。

    • summary: The summary is not meaningful.

      这是因为你没有修改 .podspec 文件中的 s.summary 字段。

      只需要修改 .podspec 文件即可。如下:

      s.summary          = '这是一个测试组件库'
      
    • [iOS] swift: The validator used Swift 3.2 by default because no Swift version was specified.

      这是因为我们还没有指定当前组件库中Swift的使用版本。

      在当前目录下执行如下命令,指定Swift版本为4.0:

      echo "4.0" > .swift-version
      

    解决完上面两个WARN之后,再执行pod lib lint --allow-warnings 命令就会发现没有警告了。

    5、提交组件库到BOTestTools git仓库

    将代码提交到git仓库:
    1、执行 git add .
    2、执行 git commit -m 'first commit',注意写好注释
    3、执行 git push origin master 将代码提交到远程仓库

    现在你可以在远程仓库中看到你提交的代码了。

    仅将代码提交到git仓库还不够,还需要打上tag。并且该tag需要和 .podspec 文件中的版本 s.version = '0.1.0' 保持一致。

    4、执行 git tag 0.1.0 打好tag
    5、执行 git push --tags 将tag推送到git仓库

    6、将 podspec 提交到git仓库

    在上一步上将组件库提交到git仓库后,你的小伙伴还是无法使用。还需要将 .podspec 文件提交到 BOTestSpec git库中。

    执行如下命令:

    pod repo push BOTestSpec BOTestTools.podspec --allow-warnings
    
    pod repo push 【私有库名称】 【podspec文件名】 --allow-warnings
    
    结果如下:

    则说明,BOTestSpec库上传成功。

    同时,你还可以查看 ~/.cocoapods/repos。在 BOTestSpec 仓库下会多新增 BOTestTools 文件夹。如下所示:

    至此,你的私有库已制作完成。你和你的小伙伴们可以在项目中使用它了。

    7、在项目中使用私有库

    创建 BOSpecDemo 测试项目。

    在项目目录下,执行命令:

    pod init
    

    编辑 podfile 文件:

    platform :ios, '9.0'
    
    source 'https://github.com/CocoaPods/Specs.git'  # 官方库
    source 'https://github.com/Lwindy/BOTestSpec.git' # 私有库Repo地址
    
    target 'BOSpecDemo' do
      # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
      use_frameworks!
    
      # Pods for BOSpecDemo
    
      pod 'BOTestTools'
    
    end
    

    注意:私有仓库的地址一定是Spec Repo 的地址,不要错误的使用BOTestTools组件的git仓库。

    然后执行 pod install,添加私有库到工程中。

    效果如下:

    总结:私有库的制作不难,只是步骤比较繁琐。上述6步是我在实际使用中总结的步骤顺序,虽然不甚精简,但胜在稳定,基本可以一次性成功。

    易错点:
    1、混淆私有库repo仓库与组件仓库,之间的区别可以查看官方文档。
    2、组件库制作完成后,要先push到git仓库再将.podspec push到repo仓库。
    3、组件库一定要打tag标签。并且tag要和版本号一致。
    4、.podspec 文件中的 source_files 和 resource_bundles 路径一定要正确。

    相关文章

      网友评论

        本文标题:Cocoapods私有库之Swift版

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