组件化pod库制做之私有库制做

私有podspec制做步骤:   组件化方案通常都是采用私有podspecios

一、建立私有Spec Repo

Spec Repo 是全部公开的Pods 的podspec文件的一个git仓库,当使用Cocoapods后它会被clone到本地的~/.cocoapods/repos目录下,能够进入到这个目录看到master文件夹就是这个官方的Spec Repo了。所以咱们须要建立一个相似于master的私有Spec Repo 。同理这个私有Spec Repo咱们也要有一个远程端。那么咱们须要建立一个 Git仓库,这个仓库你能够建立私有的也能够建立公开的。若是是私有的话,项目中其余同事,你要给他这个Git仓库的权限。组件化通常都是采用私有的。git

在git管理的代码托管网站如github或者码云或则本身服务器上建立一个私有仓库:github

 # pod repo add [Private Repo Name] [GitHub HTTPS clone URL]swift

如:$ pod repo add HFPodSpecs https://coding.net/xxxx/HFPodSpecs.git     其中HFPodSpecs是私有Spec Repo名称服务器

此时若是成功的话进入到~/.cocoapods/repos目录下就能够看到WTSpecs这个目录了。至此第一步建立私有Spec Repo完成。app

PS:若是有其余合做人员共同使用这个私有Spec Repo的话在他有对应Git仓库的权限的前提下执行相同的命令添加这个Spec Repo便可。框架

二、建立Pod项目工程文件

这个第二步没有什么好介绍的,若是是有现有的组件项目,而且在Git的版本管理下,那么这一步就算完成了,能够直接进行下一步了编辑器

若是你的组件还在你冗余庞大的项目中,须要拆分出来或者须要本身从零开始建立一个组件库,那么我建议你使用Cocoapods提供的一个工具将第二步与第三步结合起来作。ide

如今来讲一下这个工具,相关的文档介绍是Using Pod Lib Create 就拿我建立的podTestLibrary为例子具体讲一下这里是如何操做的,先cd到要建立项目的目录CreatLibTestSpec而后执行工具

$ pod lib create podName

如:pod lib create TestLibSpec    TestLibSpec是你pod的名称

终端会显示以下,依次根据须要选择以下:

  • What platform do you want to use?? [ iOS / macOS ] (选择平台)

  • >

  • ios

  • What language do you want to use?? [ Swift / ObjC ] (选择语言)

  • >

  • swift

  • Would you like to include a demo application with your library? [ Yes / No ] (是否包含 demo)

  • >

  • yes

  • Which testing frameworks will you use? [ Quick / None ] (测试框架)

  • > None

  •  
  • Would you like to do view based testing? [ Yes / No ]

  • > No

  •  
  • Running pod install on your new library.

成功后会在CreatLibTestSpec目录下建立一个pod工程,目录以下:将你的组件化代码放在/Classes目录下

cd 在Example工程目录下执行 pod update命令

打开项目工程,能够看到库文件都被加载到Pods子项目中了
不过它们并无在Pods目录下,而是跟测试项目同样存在于Development Pods/MyLib中,这是由于咱们是在本地测试,而没有把podspec文件添加到Spec Repo中的缘故。

注意:这里须要注意的是每当添加了新的文件或则之后更新了podsepc的版本都须要从新执行一遍pod update命令


三、提交pods库到远程库https://xxx/SpecComponent.git

注意:这是你目前单个组件SpecComponent的远程库地址

cd 到CreatLibTestSpec目录下

$git init

$git add .

$git commit -m "初始化pod"

$git remote add origin https://xxx/SpecComponent.git

$git push origin master

对于第二部中说的已经有现有的组件项目,而且在Git的版本管理下的状况,其处理步骤以下:

一、cd 到CreatLibTestSpec目录下

二、建立.podspec   podName为你本身的组件名称

$ pod spec create podName 或者 pod spec create podName podName库远程地址

四、编辑.podspec文件,编辑完提交到远程

该TestLibSpec.podspec文件在执行pod lib create TestLibSpec已经被自动建立

可使用文本编辑器编辑上面生成的podName.podspec文件,根据须要填写内容,通常按照下面的格式填就够了:尤为注意s.version版本号就是你代码的tag版本号

Pod::Spec.new do |s|
  s.name         = "TestLibSpec"
  s.version      = "0.1.0"
  s.summary      = "TestLibSpec is a kind of learning tools"
  s.description  = <<-DESC
是一个学习podspec的项目 借助这个项目你能够快速构建一个pod库 有了这个学习项目 就无忧了
                   DESC

  s.homepage     = "https://github.com/zhangsan/TestLibSpec"
  s.license      = { :type => "MIT", :file => "FILE_LICENSE" }

  s.author             = { "zhangsan" => "zhangsan@qq.com" }
   s.platform     = :ios, "8.0"
  s.source       = { :git => "https://github.com/zhangsan/TestLibSpec.git", :tag => "#{s.version}" }
  s.source_files  = "TestLibSpec/**/*.{h,m}"


  # s.exclude_files = "Classes/Exclude"
  # s.public_header_files = "Classes/**/*.h"
  # s.resource  = "icon.png"
  # s.resources = "Resources/*.png"
  # s.requires_arc = true
  # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
  # s.dependency "JSONKit", "~> 1.4"

end

五、打版本tag

// 必须组件代码和podspec都提交后才打tag标签,即最后打tag,否则podspec远程的验证可能通不过,由于podspec的版本号就是这个tag标签

$ git tag -a 0.0.1 -m “V0.0.1”

$ git push —tags

六、验证.podspec文件是否可用($ cd podspec文件所在目录)

通常一下几种验证方式:

验证本地的:

$ pod lib lint (验证)

$ pod lib lint —verbose (验证-并显示详细信息)

$ pod lib lint —allow-warnings   (验证—忽略警告)

本地和远程都验证:

$ pod spec lint podName.podspec —verbose  (这个从本地和远程验证你的pod可否经过验证,上面三个都是从本地验证你的pod可否经过验证)

忽略警告:

pod spec lint —allow-warnings

注意:因为上面TestLibSpec.podspec已经提交到远程,能够直接使用pod spec lint TestLibSpec.podspec —verbose

七、向Spec Repo提交podspec

提交到远端(有警告选最后一个)

$ pod repo push HFPodSpecs TestLibSpec.podspec

$ pod repo push HFPodSpecs TestLibSpec.podspec —verbose

$ pod repo push HFPodSpecs TestLibSpec.podspec —allow-warnings

注意: #前面是Spec Repo名字 后面是podspec名字

完成以后这个组件库就添加到咱们的私有Spec Repo中了,能够进入到~/.cocoapods/repos/HFPodSpecs目录下查看

再去看咱们的Spec Repo远端仓库,也有了一次提交,这个podspec也已经被Push上去了。

至此,咱们的这个组件库就已经制做添加完成了,使用pod search命令就能够查到咱们本身的库了

八、验证仓库(注意search不到,并不必定是没成功,使用podfile中看看可否拉下来代码)

$ pod search podName (搜索你的podName库)

九、在你新开的项目工程中使用podfile,拉取你组件库代码

Pod ‘podName’

注意:podfile必定要写好spec repo地址,以下:

target 'RepoPod' do

source 'https://github.com/lihaifengdoushi/HFPodSpecs.git'    // 注意:这个必定要写 不然会报错

source'https://github.com/CocoaPods/Specs.git'     // 注意:这个也必定要写

pod 'TestLibSpec', '~> 0.1.0'

end

十、删除一个私有Spec Repo

$ pod repo remove HFPodSpecs

这样在本地就删除了,还能够经过

$ pod repo add HFPodSpecs https://coding.net/xxxx/HFPodSpecs.git

再把他加过来

若是咱们要删除私有Spec Repo下的某一个podspec怎么操做呢,此时无需借助Cocoapods,只须要cd到~/.cocoapods/repos/HFPodSpecs目录下,删掉库目录对应的podspec

$ rm -Rf TestLibSpec.podspec

而后将变化提交到远程就能够了

至此,私有podspec库制做就完毕了

 

 

参考资料:

http://www.cocoachina.com/articles/11206

https://www.jianshu.com/p/59c2d2c4b737

https://xiaozhuanlan.com/topic/2647180539

https://www.jianshu.com/p/1139a603f413

https://www.jianshu.com/p/7b4667cde80b

https://www.jianshu.com/p/006d6ab89c3c

http://www.cocoachina.com/articles/22509

https://www.jianshu.com/p/0a4fbb94ef9f?utm_campaign=hugo&utm_medium=reader_share&utm_content=note&utm_source=weixin-friends

https://www.jianshu.com/p/a73b6bfdb41a

https://blog.51cto.com/13533483/2057387

 

关于组件化中资源图片和xib的使用,

[UIImage imageWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:[NSString stringWithFormat:@"businessactivity@%dx.png",(int)[UIScreen mainScreen].scale] ofType:nil inDirectory:@"TestLibSpec.bundle"]];

    NSString *nibName = @"XibView";//@"TestLibSpec.bundle/XibView"

    XibView *view = [[NSBundle bundleForClass:[self class]] loadNibNamed:nibName owner:nil options:nil][0];

资料:

https://www.jianshu.com/p/ad4789d88bad

相关文章
相关标签/搜索