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

1、搭建测试项目以及framework

1)先创建一个测试项目

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

3)再创建一个类MTPopView

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

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

6)编译MTShopList报错

需要在class MTPopView前面加上public

再编译运行就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

关闭项目MTShopList

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

xk$ pod init

打开Podfile文件,添加内容:

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

再安装:

xk$ pod install

3、验证测试

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

编译运行项目Succeeded!

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

参考文献:

03-05 20:38