乐趣区

CocoaPods使用小结

原文链接
CocoaPods 是 OS X 和 iOS 下的一个第三类库管理工具,通过 CocoaPods 工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是 CocoaPods 本身所支持的),并且可以轻松管理其版本。
使用 CocoaPods 有以下几点好处:

在引入第三方库时它可以自动为我们完成各种各样的配置,包括配置编译阶段、连接器选项、甚至是 ARC 环境下的一些配置等。
使用 CocoaPods 可以很方便地管理的第三方 SDK,大部分稳定好用的 SDK 都支持 cocoapods 导入。
在项目模块化的过程中方便我们模块间解耦。

Install

sudo gem install cocoapods

查看版本

pod –version

在开发中安装使用 cocoapods 要注意版本, 因为一般开发过程中要大家一起使用同一个工程, 一般为了指定版本我们会在工程下创建 Gemfile 来指定使用 cocoapods 的版本。
指定使用 Cocoapods 的版本

除了指定 Gemfile 以外,我们还可以安装指定版本的 pods
sudo gem install cocoapods -v 1.3.1
再查看一下 pod 版本我们就会发现已经安装了 1.3.1
卸载掉不需要的版本

当我们本地同时存在多个版本的 pod 的时候可以把多余的卸载掉
sudo gem uninstall cocoapods
会提示我们选择卸载的版本
Select gem to uninstall:
1. cocoapods-1.2.1
2. cocoapods-1.3.1
3. All versions
>
我们选择想要卸载的版本的序号就好了。
如何查看某个 SDK 的详细信息

cocoapods 支持我们去查找想要使用的仓库 , 比如我们想查找 ReactoveObjC 这个库
pod spec cat ReactiveObjC

我们可以看到该仓库的配置信息。
{
“name”: “ReactiveObjC”,
“version”: “3.1.0”,
“summary”: “The 2.x ReactiveCocoa Objective-C API: Streams of values over time”,
“description”: “ReactiveObjC (formally ReactiveCocoa or RAC) is an Objective-C\nframework inspired by [Functional Reactive Programming](\nhttp://en.wikipedia.org/wiki/Functional_reactive_programming).\nIt provides APIs for composing and **transforming streams of values**.”,
“homepage”: “https://reactivecocoa.io”,
“screenshots”: “https://reactivecocoa.io/img/logo.png”,
“license”: {
“type”: “MIT”,
“file”: “LICENSE.md”
},
“documentation_url”: “https://github.com/ReactiveCocoa/ReactiveObjC/tree/master/Documentation#readme”,
“authors”: “ReactiveCocoa”,
“social_media_url”: “https://twitter.com/ReactiveCocoa”,
“platforms”: {
“ios”: “8.0”,
“osx”: “10.9”,
“watchos”: “2.0”,
“tvos”: “9.0”
},
“source”: {
“git”: “https://github.com/ReactiveCocoa/ReactiveObjC.git”,
“tag”: “3.1.0”
},
“source_files”: [
“ReactiveObjC/*.{h,m,d}”,
“ReactiveObjC/extobjc/*.{h,m}”
],
“private_header_files”: [
“**/*Private.h”,
“**/*EXTRuntimeExtensions.h”,
“**/RACEmpty*.h”
],
“ios”: {
“exclude_files”: “ReactiveObjC/**/*{AppKit,NSControl,NSText,NSTable}*”
},
“osx”: {
“exclude_files”: “ReactiveObjC/**/*{UIActionSheet,UIAlertView,UIBarButtonItem,UIButton,UICollectionReusableView,UIControl,UIDatePicker,UIGestureRecognizer,UIImagePicker,UIRefreshControl,UISegmentedControl,UISlider,UIStepper,UISwitch,UITableViewCell,UITableViewHeaderFooterView,UIText,MK}*”
},
“tvos”: {
“exclude_files”: “ReactiveObjC/**/*{AppKit,NSControl,NSText,NSTable,UIActionSheet,UIAlertView,UIDatePicker,UIImagePicker,UIRefreshControl,UISlider,UIStepper,UISwitch,MK}*”
},
“watchos”: {
“exclude_files”: “ReactiveObjC/**/*{UIActionSheet,UIAlertView,UIBarButtonItem,UIButton,UICollectionReusableView,UIControl,UIDatePicker,UIGestureRecognizer,UIImagePicker,UIRefreshControl,UISegmentedControl,UISlider,UIStepper,UISwitch,UITableViewCell,UITableViewHeaderFooterView,UIText,MK,AppKit,NSControl,NSText,NSTable,NSURLConnection}*”

开始使用
首先,新建一个 singlgViewApp,然后在命令行进入该 project 目录
pod init

我们可以看到 cocoapods 为我们生成了一个 Podfileplatform 表示这个工程安装的设备,后面是系统最低版本现在我们可以在里面添加一下刚才搜索的仓库
# Uncomment the next line to define a global platform for your project
platform :ios, ‘9.0’

target ‘ocTest’ do
# Uncomment the next line if you’re using Swift or would like to use dynamic frameworks
# use_frameworks!
pod ‘ReactiveObjC’
# Pods for ocTest
end
这里我们添加了一个仓库, 接下来再命令行执行 pod update 来安装所需要的仓库, 安装完毕后我们可以看到当前路径下有两个工程文件

Test.xcodeproj
Test.xcworkspace

我们在使用了 cocoapods 管理第三方库的时候, 每次 install 或者 update 的时候就会生成 *.xcworkspace 这个文件我们需要使用这个工程进行开发调试。现在打开工程,定位到 viewController.m 中就可以 import 并使用 ReactiveObjC 啦。
如何使用私有源

公司内部有自己搭建的 gitlab 服务时,有的公司搭建的 gitlab 服务为了安全并没有提供外网接口,我们只能在内网访问,这时候就要在 podfile 中添加私有源的地址
source ‘http://xx.xxxx.com/ios/cocoapods-spec.git’
source ‘https://github.com/CocoaPods/Specs.git’ # 官方库
上面那个就是我们要添加的私有源地址,下面的是官方源地址,如果都不写的话那么默认就会使用官方源。
如何创建并发布仓库到私有 repo

首先执行命令,后面替换为你要发布 SDK 的名字
pod lib create TDFCommonUtil

pod 会给出一些选项让我们选择
To get you started we need to ask a few questions, this should only take a minute.

If this is your first time we recommend running through with the guide:
– https://guides.cocoapods.org/making/using-pod-lib-create.html
(hold cmd and click links to open in a browser.)

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]
>
yes
Which testing frameworks will you use? [Quick / None]
> None

Would you like to do view based testing? [Yes / No]
> NO
现在我们需要添加一些信息
cd 进入刚才创建的目录,执行命令 ls 可以看到控制台有以下输出。
Example README.md TDFCommonUtil.podspec
LICENSE TDFCommonUtil _Pods.xcodeproj

解释一下这里都是啥

Example 这里面就是示例工程
README.md 这里面是我们对改 pod 功能和使用等的介绍,使用 markdown 语法
TDFCommonUtil.podspec 这里是改模块的全部基本信息
LICENSE 这里放的是改开源项目遵守的协议
TDFCommonUtil 这里放着全部的类文件和资源文件
_Pods.xcodeproj 这是示例工程的快捷方式

我们首先要为我们的 pod 创建一个实际的 git 仓库。
打开 gitlab 服务创建一个空的 git 仓库 然后先把 pod 目录提交到我们的仓库 blalblabla
打开 TDFCommonUtil.podspec 文件
Pod::Spec.new do |s|
s.name = ‘TDFCommonUtil’
s.version = ‘0.1.0’
s.summary = ‘A short description of TDFCommonUtil.’

s.description = <<-DESC
TODO: Add long description of the pod here.
DESC

s.homepage = ‘https://github.com/xxxxx@yeah.net/TDFCommonUtil’
s.license = {:type => ‘MIT’, :file => ‘LICENSE’}
s.author = {‘xxxxx’ => ‘xxxxx@2dfire.com’}
s.source = {:git => ‘https://github.com/xxxxx@yeah.net/TDFCommonUtil.git’, :tag => s.version.to_s}

s.ios.deployment_target = ‘8.0’

s.source_files = ‘TDFCommonUtil/Classes/**/*’

# s.resource_bundles = {
# ‘TDFCommonUtil’ => [‘TDFCommonUtil/Assets/*.png’]
# }

# s.public_header_files = ‘Pod/Classes/**/*.h’
# s.frameworks = ‘UIKit’, ‘MapKit’
# s.dependency ‘AFNetworking’, ‘~> 2.3’
end

这里的配置项就是生成 pod 需要配置的大部分选项了,简单介绍一下

name pod 名称
version 版本号,特别注意下在更新时需要对 git 仓库打 tag
summary 简介
description 描述
homepage 主页
license 使用协议
author 作者
deployment_target 需要系统版本
source_files 源文件路径
resource_bundles 资源文件路径 注意这里会把资源文件打包成 bundle,调用的时候要注意下
public_header_files 公开的头文件(有些头文件我们不想要外部看见可以在这里去掉)
frameworks 需要依赖的 framework 库
dependency 需要依赖的其他 pod

现在把这些填好吧。
如何添加依赖

有的时候我们开发的 pod 仓库需要依赖其他仓库,比如我们需要依赖 ReactiveObjC 这里就可以在 TDFCommonUtil.podspec 下面添加这一行
s.dependency ‘ReactiveObjC’
ps,这里可以指向特定的版本也可以用 ‘~> 2.3′ 的形式表示依赖此仓库至少大于 2.3 版本但是不会超过 3.0。
使用 lint 命令检测我们的仓库是否还有问题

一切就绪后你可以在里面创建你的文件,添加代码了,别忘了再有文件的增加或删除后在运行一遍‘pod install’。
先随便创建几个文件,然后我们使用 cocoapods 检测我们的库
pod lib lint –sources=’git@git.xxx.com:ios/cocoapods-spec.git’ –use-libraries –allow-warnings –verbose –no-clean
这里的 sources 填写你所使用的私有 gitlab 服务,然后我们就可以静静的看着命令行了。
最后如果出现
Test passed validation.
证明你的库是可运行的,如果没有出现 passed 就注意下输出中的 error 信息,搜索一下 error 看是什么导致的。
向私有源推送

lint 通过后我们就可以把自己的仓库信息推送到私有源了,注意不是「仓库」是「仓库信息」,也就是 x.podspec。cocoapod 可以自动帮我们完成这件事情
pod repo push xxx-cocoapods-spec TDFOpenShopSDK.podspec –sources=git@git.xxx.com:ios/cocoapods-spec.git –allow-warnings –use-libraries –verbose

总结

Cocoapods 极大方便了我们管理外部 SDK 和内部模块化解耦,用好这个管理工具无疑会为我们的工作效率带来巨大提升。

退出移动版