多人协作的项目工程中,独立的代码模块划分的重要性是毋庸置疑的。而CocoaPods是一个iOS的包管理第三方工具(类似的概念),它可以方便的帮助我们管理代码模块。
安装CocoaPods
一般情况下,我们直接使用👇这条命令就能安装最新的cocoapods到本地。1
sudo gem install cocoapods
然而有时候也会由于以下几个问题导致安装失败:
- gem版本太旧
- gem源访问不到
- ruby环境问题
具体问题还得再去发动Google大法找一找如何解决。
更新gem版本和替换gem源
由于国内的网络环境问题,我们有时候可能需要替换以下gem的源为Ruby-China
1 | $ gem update --system # 这里请翻墙一下 |
1 | $ gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/ |
更换Ruby环境
由于OSX系统自带了一个Ruby环境,但是usr/bin的访问权限可能会导致一些问题,最好还是使用Homebrew安装一个ruby。
使用brew install ruby
装好Ruby后记得给Shell配一下环境变量如下:export PATH="/usr/local/lib/ruby/gems/2.5.0/bin:/usr/local/opt/ruby/bin:/usr/local/bin:$PATH"
使用Podfile引入独立代码模块
Podfile是一种工程代码库配置文件,可以用它来安装独立的Cocoapods代码库。
首先,我们进入到我们的iOS工程目录下(**.xcodeproj这个文件的同级目录)。然后运行一下pod init
生成一个Podfile文件。
这就是一个生成的一个标准模板
默认源的简单Podfile
1 | # Uncomment the next line to define a global platform for your project |
这个Podfile默认从Cocoapods的仓库拉取代码。
带独立源的指定分支Podfile
1 | source 'https://github.com/CocoaPods/Specs.git' |
这个Podfile使得我们可以从我们自己的私有仓库拉取代码。
使用宏定义带独立源的指定分支可动态配置的Podfile
1 | source 'https://github.com/CocoaPods/Specs.git' |
这个是动态配置模块依赖的Podfile示例,具体需要根据项目需求编写。
使用Podspec管理独立代码模块
上面介绍如何引入Pod库,接下来介绍一下如何创建一个Pod库,大概就以下三个步骤:1
2
3$ pod spec create Peanut #创建一个podspec
$ edit Peanut.podspec #编辑podspec
$ pod spec lint Peanut.podspec #验证podspec是否有效
Podspec的语法也很简单,具体写法可以参考Podspec具体介绍1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24Pod::Spec.new do |spec|
spec.name = 'Reachability'
spec.version = '3.1.0'
spec.license = { :type => 'BSD' }
spec.homepage = 'https://github.com/tonymillion/Reachability'
spec.authors = { 'Tony Million' => 'tonymillion@gmail.com' }
spec.summary = 'ARC and GCD Compatible Reachability Class for iOS and OS X.'
spec.source = { :git => 'https://github.com/tonymillion/Reachability.git', :tag => 'v3.1.0' }
spec.module_name = 'Rich'
spec.swift_version = '4.0'
spec.ios.deployment_target = '9.0'
spec.osx.deployment_target = '10.10'
spec.source_files = 'Reachability/common/*.swift'
spec.ios.source_files = 'Reachability/ios/*.swift', 'Reachability/extensions/*.swift'
spec.osx.source_files = 'Reachability/osx/*.swift'
spec.framework = 'SystemConfiguration'
spec.ios.framework = 'UIKit'
spec.osx.framework = 'AppKit'
spec.dependency 'SomeOtherPod'
end
cocoapods-packager打包插件
这是一个Cocoapods插件,它可以将一个Pod工程打包成framework或者静态库。1
pod package Demo.podspec --spec-sources=git@xxx:Demo/specs.git,https://github.com/CocoaPods/Specs.git --dynamic --verbose