美文网首页
本地Pod库对应的Podfile和Podspec如何写?

本地Pod库对应的Podfile和Podspec如何写?

作者: eeybee | 来源:发表于2020-08-31 22:30 被阅读0次

    一般我们制作的pod公有库或者是私有库都放在远程,并且每次修改都需要push;如果仅仅是放在本地进行调试的模块/组件,那么对应的podfile文件以及podspec应该如何编写呢?

    1、搭建测试项目以及framework

    1)先创建一个测试项目

    image

    2)创建一个framework,放到和测试项目同一个目录下

    image

    3)再创建一个类MTPopView

    image

    4)关掉MTPopView,然后在MTShopList项目中通过Add Files添加MTPopView

    image

    5)按照正常的target相互调用那样,添加framework,以及import MTPopControl

    image

    6)编译MTShopList报错

    image

    需要在class MTPopView前面加上public

    image

    再编译运行就ok了。

    这里swift报错原因大家应该是很熟悉了;swift访问权限总共有private、fileprivate、internal、public、open 5种,默认情况下是internal修饰,而我们目前是2个不同的target进行访问,属于不同的模块,所以另一个target无法访问,需要修改访问权限为public即可(这里能否用open,它们的区别你知道吗?)。

    2、编写pod文件

    1)如何编写本地测试的podspec?

    通过命令pod spec create MTPopControl生成自动的podspec文件,然后替换以及删除自己不想要的命令;这里就直接简化写了,如下:

    Pod::Spec.new do |spec|
    
      spec.name         = "MTPopControl"
      spec.version      = "0.0.1"
      spec.summary      = "A short description of MTPopControl."
      spec.homepage     = "http://EXAMPLE/MTPopControl"
      
      spec.license      = "MIT"
      spec.author       = { "xk" => "" }
      
      #远程push的写法
      #spec.source       = {:git => 'https://github.com/xxx/xxxxx.git', :tag => spec.version}
      spec.source       = { :path => '.' }
      spec.source_files  = "MTPopControl"
      
      spec.requires_arc = true
      spec.swift_version = "5.0"
      spec.ios.deployment_target = "11.0"
      
    end
    
    

    主要是关注属性spec.source的写法不同了,我们这里是本地

    官方的示例:

    pod 'AFNetworking', :path => '~/Documents/AFNetworking'
    

    这个时候就不能通过命令 pod lib lint-本地验证你的pod是否有效,会报错的,因为我们这里是本地路径。

    xk$ pod lib lint MTPopControl
    
     -> MTPopControl
        - ERROR | spec: The specification defined in `MTPopControl` could not be loaded.
    
    Is a directory @ io_fread - MTPopControl
    
    [!] MTPopControl did not pass validation, due to 1 error.
    You can use the `--no-clean` option to inspect any issue.
    

    2)podfile如何编写?

    首先删除framework对应的target

    image

    关闭项目MTShopList

    在项目MTShopList路径下,通过命令:

    xk$ pod init
    

    打开Podfile文件,添加内容:

    # Pods for MTShopList
    pod 'MTPopControl', :path => '../MTPopControl'
    

    再安装:

    xk$ pod install
    

    3、验证测试

    打开生成的workspace,这个时候就能看到pod对应的project比我们平时的项目多了一个Development Pods文件夹,里面放的就是刚导入的framework。

    image

    编译运行项目Succeeded!

    最后:本文采用这种Pod开发方式的好处就是可以一个人快速开发调试,不用每次修改完依赖库都把podspec 以及对应的库 push上去,有时候网络不稳定的情况下会等很久,影响开发效率;待最后调试的模块/组件稳定后或是多人开发还是需要制作成私有库push上去,进行统一版本管理。

    参考文献:

    【1】https://www.raywenderlich.com/5109-creating-a-framework-for-ios#toc-anchor-013

    【2】https://guides.cocoapods.org/syntax/podfile.html

    相关文章

      网友评论

          本文标题:本地Pod库对应的Podfile和Podspec如何写?

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