通常咱们制做的pod公有库或者是私有库都放在远程,而且每次修改都须要push;若是仅仅是放在本地进行调试的模块/组件,那么对应的podfile文件以及podspec应该如何编写呢?html
1)先建立一个测试项目ios
2)建立一个framework,放到和测试项目同一个目录下git
3)再建立一个类MTPopViewgithub
4)关掉MTPopView,而后在MTShopList项目中经过Add Files添加MTPopViewswift
5)按照正常的target相互调用那样,添加framework,以及import MTPopControlruby
6)编译MTShopList报错网络
须要在class MTPopView前面加上publicide
再编译运行就ok了。测试
这里swift报错缘由你们应该是很熟悉了;swift访问权限总共有private、fileprivate、internal、public、open 5种,默认状况下是internal修饰,而咱们目前是2个不一样的target进行访问,属于不一样的模块,因此另外一个target没法访问,须要修改访问权限为public便可(这里可否用open,它们的区别你知道吗?)。ui
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
打开生成的workspace,这个时候就能看到pod对应的project比咱们平时的项目多了一个Development Pods文件夹,里面放的就是刚导入的framework。
编译运行项目Succeeded!
最后:本文采用这种Pod开发方式的好处就是能够一我的快速开发调试,不用每次修改完依赖库都把podspec 以及对应的库 push上去,有时候网络不稳定的状况下会等好久,影响开发效率;待最后调试的模块/组件稳定后或是多人开发仍是须要制做成私有库push上去,进行统一版本管理。
参考文献:
【1】 https://www.raywenderlich.com...