CocoaPods入门(下)

2018-07-20  本文已影响58人  楚丶liu香

上一篇文章主要是CocoaPods的安装及入门使用,以及一些注意事项,是日常工作中最常用的。CocoaPods不但能让我们使用GitHub上面的公共库,还能够很方便的帮我们自己抽取的功能组件做成私有库,一方面出于公司隐私能够保证源码不被泄露,另一方面能够按照CocoaPods的一些用法快速集成使用,对于自己或兄弟团队项目的快速集成开发能够起到事半功倍的作用。

废话不多说,我们切入正题。

1、创建私有库和Spec文件

1.1 Spec Repo

Spec Repo是所有Pods的一个索引仓库,实际上也是一个GitHub仓库,只不过里边不是放的代码,而是我们想要集成依赖库的索引。CocoaPods在本地使用后,~/.cocoapods/repos目录下会存在我们使用的索引仓库,包括公共库索引和私有库索引,当然前提是你用了。目录结构如下:

.
├── Specs
    └── [SPEC_NAME]
        └── [VERSION]
            └── [SPEC_NAME].podspec

1.2 创建Spec Repo

本篇文章将以创建一个私有库来讲解整个过程,公司一般都是用GitLab作为代码仓库,和在其他代码仓库网站一样,我们首先创建一个名为iosSpecs的spec仓库,然后执行下面命令,会在~/.cocoapods/repos目录下创建对应的文件夹。

// xxcode@xxcode.be.xxxx.com:xxxx-ios/iosSpecs.git是你自己创建的spec仓库的地址
$ pod repo add iosSpecs xxxx@xxxx.be.xxxx.com:xxxx-ios/iosSpecs.git

1.3 创建Pod项目

首先使用下边的命令创建一个名为DWDemo的Pod项目:

$ pod lib create DWDemo

之后会弹出一些问题,根据提示我们输入回车就好:

What platform do you want to use?? [ iOS / macOS ]
> iOS

What language do you want to use?? [ Swift / ObjC ]
> Objc

Would you like to include a demo application with   your library? [ Yes / No ]
 > Yes

Which testing frameworks will you use? [ Specta /   Kiwi / None ]
> None

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

What is your class prefix?
 > XX

最后一个是要确定项目工程文件的类前缀,一般是公司名的简写,比如小米就是MI。这些做完后,项目工程自动创建完成。

1.4 编辑Pod项目

pod项目文件说明.png
1.4.1 podspec文件

项目创建好之后,存在一个名为DWDemo.podspec的文件,部分格式和配置说明如下,如果想要更详细的配置,请参考官方文档

Pod::Spec.new do |s|
  s.name             = 'DWDemo'    // 私有库项目名
  s.version          = '0.1.0'     // 私有库项目版本号
  s.summary          = 'A short description of DWDemo.' // 项目简洁描述
  s.description      = <<-DESC     // 项目详细描述
  s.homepage         = 'https://github.com/zhudawei/DWDemo'  // 私有库主页
  
  // 许可证/授权
  s.license          = { :type => 'MIT', :file => 'LICENSE' }
  // 私有库项目所有者
  s.author           = { 'zhudawei' => 'zhudawei@xiaomi.com' }
  // 私有库远端仓库地址
  s.source           = { :git => 'https://github.com/zhudawei/DWDemo.git', :tag => s.version.to_s }
 
  // 最低支持的iOS版本
  s.ios.deployment_target = '8.0'
  // pod项目会根据这个路径拉取代码文件,这个地方容易出错
  s.source_files = 'DWDemo/Classes/**/*'
  
  // 如果私有库需要加载资源文件的话需要把这个加上,去掉'#'号,配置下资源路径
  # s.resource_bundles = {
  #   'DWDemo' => ['DWDemo/Assets/*.png']
  # }

  // 私有库对外公开的头文件,没有这行的话默认所有文件都是公开的
  # s.public_header_files = 'Pod/Classes/**/*.h'
  // 私有库依赖的框架
  # s.frameworks = 'UIKit', 'MapKit'
  // 私有库依赖的第三方库
  # s.dependency 'AFNetworking', '~> 2.3'
end
1.4.2 Classes目录

私有库的功能代码都要放在Classes目录下面,并且去podspec文件中配置s.source_files = 'DWDemo/Classes/**/*'。这个地方路径非常容易出错,因为DWDemo下边的Classes在上面图片中是没有出现的,最好是删掉ReplaceMe.m文件,然后打开文件目录,将相关代码拷贝到本地目录的Classes文件夹下,然后通过Add Files to “Pods”...将文件添加到项目中。

替换代码源文件.png
1.4.3 Resource目录

需要往工程中添加资源的话,配置podspec文件中有关资源的片段,去掉注释,如下:

s.resource_bundles = {      
'DWDemo' => ['DWDemo/Assets/**/*']
}
1.4.4 头文件

在Classes目录下的Header文件,我们尽可能少的暴露给用户,所以header文件就需要分别配置成public和private两种,这个需要在podspec文件中配置,如下:

s.public_header_files = 'DWDemo/Classes/**/*.h'
s.private_header_files = 'DWDemo/Classes/Internal/*.h'

其中Internal目录是在Classes文件夹下,用于存在private的头文件

1.4.5 私有库子分支

库可以根据不同的模块创建不同的子分支,使用时Podfile文件中可以指定只需要加载哪些模块,具体操作步骤如下:

  1. 在Classes目录下创建对应模块的子目录

  2. 在podspec文件中使用subsepc特性,以SDWebimage的podspec文件为例:

     s.subspec 'GIF' do |gif|
         gif.ios.deployment_target = '7.0'
         gif.source_files = 'SDWebImage/FLAnimatedImage/*.{h,m}'
         gif.dependency 'SDWebImage/Core'
         gif.dependency 'FLAnimatedImage', '~> 1.0'
         gif.xcconfig = {
           'USER_HEADER_SEARCH_PATHS' => '$(inherited) $(SRCROOT)/FLAnimatedImage/FLAnimatedImage'
         }
       end
    
  3. 在Podfile文件中指定要加载哪些模块,如下:

     pod 'YOUR_SPEC', :subspecs => ['IDFA', 'IDFB']
    
1.4.6 项目Demo

为了方便测试和别的同学方便上手使用,我们可以在Example for DWDemo中根据测试用例写一些demo。此时需要编辑项目的Podfile文件,然后pod install一下。

需要注意的是,当项目创建后,每次向Pod中添加了新文件,或者更新了podspec文件、Podfile文件,都需要重新执行下pod update命令来使改动生效。

2、提交私有库和Spec文件

2.1 提交项目代码

将功能代码添加到私有库项目中编译运行成功后,我们需要将它提交到远端仓库,进入到Example文件加下,执行如下命令:

$ git add .
$ git commit -m "项目初始化"
$ git remote add origin xxxx@xxxx.be.xxxx.com:xxxx-ios/xxxx.git
$ git push origin master

2.2 添加tag

为私有库的远端仓库代码添加tag,pod会根据Podfile文件中指定的版本号去远端仓库中查找对应的tag来拉取代码。命令如下:

$ git tag -a 1.0.0 -m "Release 1.0.0"
$ git push origin 1.0.0

2.3 配置podspec文件

根据上面对podspec文件的配置描述来进行文件配置,podspec文件一般在项目工程的主目录下,不需要我们自行创建。如果想自己创建的话,执行如下命令:

$ pod spec create DWDemo xxxx@xxxx.be.xxxx.com:xxxx-ios/xxxx.git

配置完不要忘记pod update一下哦~

2.4 验证podspec文件

上面步骤完成后,需要验证podspec文件是否可用,如果有Error存在是不可用的。执行如下命令:

$ pod lib lint --allow-warnings --use-libraries

出现下面文字,验证通过。

 -> DWDemo (1.0.0)
    
DWDemo passed validation.

2.5 提交podspec文件

podspec文件验证通过后,我们通过下边的命令将podspec文件提交到Spec Repo,执行如下命令:

$ pod repo push iosSpecs DWDemo.podspec --allow-warnings --use-libraries --sources=xxxx@xxxx.be.xxxx.com:xxxx-ios/iosSpecs.git,https://github.com/CocoaPods/Specs

出现下面的信息,说明spec文件添加成功。

Updating the `iosSpecs' repo

Adding the spec to the `iosSpecs' repo

 - [Add] DWDemo (1.0.0)

Pushing the `iosSpecs' repo

添加成功后,我们进到~/.cocoapods/repos目录下,执行pod repo update iosSpecs命令,更新本地的iosSpecs文件,就可以看到本地的iosSpecs文件夹下已经包含DWDemo的spec文件了。然后执行pod search DWDemo,是不是已经可以搜索到我们的私有库了~

nice,大功告成!

参考

CocoaPods官方文档
用CocoaPods做iOS程序的依赖管理

上一篇 下一篇

猜你喜欢

热点阅读