CocoaPods私有库搭建说明
关于CocoaPods
CocoaPods是Swift和Objective-C Cocoa项目的依赖管理器.他拥有超过65000个库,并超过300万个应用程序中使用.CocoaPods可以帮助您优雅的扩展项目.
官网:官网链接
CocoaPods的安装
这里就不详细说明CocoaPods的安装了,详细步骤请移步:
CocoaPods官方安装指南
私有库说明
CocoaPods的工作原理是,在第三方代码托管平台创建一个CocoaPods的索引库,例如:Github
然后将此索引库Checkout到本地,当我们执行Pod Search XXX
的时候,其实是搜索的本地的索引库.这也就是为什么,如果长期不更新Pod索引,某些第三方会搜索不到的原因.
通过索引里面的信息,去下载对应的库安装,并处理好项目依赖等信息.
所以,根据上述描述,我们是否可以创建一个自己的索引库,然后做自己的库管理呢?答案是肯定的.CocoaPods支持私有Pods的搭建.
搭建私有库
根据上述说明,不难分析出,搭建一个私有库其实有几个重点.
- 创建自己的CocoaPods的索引库.
- 增加自己的CocoaPods索引库到自己的CocoaPods里.
做完上面两点,其实私有库的搭建方面已经做完了.下面我们来说说搭建CocoaPods私有库的详细步骤.
- 在Github,Gitlab,码云,Coding等第三方代码托管平台上创建自己的私有索引库,此处也可以是自己公司的本地私有Git仓库.
- 使用CocoaPods的命令行,在本地增加第一部的私有索引库.其实这一步也是将自己创建的私有索引库Clone到本地的操作.且支持
HTTPS
和SSH
方式,此处可根据自己的需求或者喜欢来选择合适自己的方式.
创建索引库就是在Git仓库里面创建一个空的仓库,此处就不详细说明了.值得注意的是,建立了仓库之后,一定要在库里面把LICENSE
文件和README
文件创建好,请记住LICENSE
文件的,此处有两个目的:
- 避免上传
.podspec
文件到私有索引库的时候报错.- 避免后续的
LICENSE
文件配置出错.
下面说一下增加索引库到本地.使用命令pod repo add REPO_NAME SOURCE_URL
,其中REPO_NAME
是私有索引库在本地的名字,SOURCE_URL
是私有索引库的地址.
Example:
pod repo add KKPrivateCocoaPodsSepc https://github.com/xxx/xxx.git
执行完上述命令之后,需切换到本地索引库目录,做进一步验证是否成功:
cd ~/.cocoapods/repos/REPO_NAME
pod repo lint .
Example:
cd ~/.cocoapods/repos/KKPrivateCocoaPodsSepc
pod repo lint .
执行验证后,提示下面即添加成功:
Linting spec repo `KKPrivateCocoaPodsSepc`
Analyzed 0 podspecs files.
All the specs passed validation.
至此,私有的CocoaPods的库以及搭建完毕.下面就是如何将自己封装的库/SDK添加到自己的私有Pods中.
制作库并使用CocoaPods私有库管理
- 首先在第三方代码托管平台创建自己的代码仓库.用于托管自己封装的库.
- 封装代码,确定编译运行无错,功能实现完成.
- 将封装的代码上传到第1步建立的代码仓库中.
- 打开终端.cd到项目文件夹,并创建索引配置文件
.podspec
.
pod spec create SPEC_NAME
出现下面提示,代表创建成功:
Specification created at KKWebViewController.podspec
- 编辑
.podspec
文件- podspec的配置项很多,可根据需求配置,官方语法地址:官网地址.
一般项目建议使用下面配置:
- podspec的配置项很多,可根据需求配置,官方语法地址:官网地址.
Pod::Spec.new do |s|
s.name = 'SPEC_Name' #项目名称
s.version = '1.1.1' #项目的版本号,一定要与仓库的Tag一致,仓库打的Tag即CocoaPods库的版本.
s.summary = 'XXXX' #项目简介
s.homepage = 'https://github.com/xxx'# 仓库的主页,有实际的填实际的,没有的话,填Github主页也行.
s.license = { :type => "MIT", :file => "LICENSE" }#指定MIT证书.
s.author = { "Orta" => "[email protected]" }#作者信息
s.source = { :git => "https://github.com/xxx.git", :tag => s.version }#你的仓库地址,不能用SSH地址
s.social_media_url = 'https://twitter.com/artsy'# 个人主页,有实际的填实际的,没有的话,填Github主页也行.
s.platform = :ios, '7.0'#平台及支持的最低版本
s.requires_arc = true #ARC
s.source_files = 'Classes'# 你代码的位置,从项目根目录开始, Classes/*.{h,m} 表示 Classes 文件夹下所有的.h和.m文件
s.resources = 'Pod/Assets/*'#一般不需要更改.
s.frameworks = 'UIKit', 'Foundation'#支持的框架,多个使用,分割
s.module_name = 'Artsy_UIFonts'
s.dependency 'AFNetworking', '~> 1.0' # 依赖库
end
- 编辑完成后,我们要验证我们配置的是否正确.使用如下命令,验证的命令有两种,第一种是本地验证:
pod lib lint
第二种是本地/远程一起验证:
pod spec lint
一般我们使用pod sepc lint
去验证,因为单本地验证通过后,后面执行pod repo push xxx xxx
的时候,可能还是会报错.
- 验证通过示例如下:
RoyaldeMac-mini:WebViewController royal$ pod lib lint
-> KKWebViewController (0.0.1)
- NOTE | xcodebuild: note: Using new build system
- NOTE | [iOS] xcodebuild: note: Planning build
- NOTE | [iOS] xcodebuild: note: Constructing build description
KKWebViewController passed validation.
验证通过是个解决问题的过程,配置书写的有问题,期间会出各种各样的问题,请耐心Google解决.不要有任何警告或者错误,不光是有错误或者警告,会导致上传失败,而且本人是极度强迫症患者.
- 将验证修改后的
.podspec
一并上传到代码仓库中.并修改Tag.
9.推送.podspec
到私有pod索引库
cd PROJECT_PATH
pod repo push REPO_NAME PROJECT_NAME.podspec
10.push成功后,使用pod repo update
更新仓库,然后执行命令pod search REPO_NAME
,此时CocoaPods会重新更新搜索index,等待更新完毕后,就可以成功搜索到自己的私有库了.
私有库的使用
私有库的使用跟常规的cocoapods使用并没有太大区别.在项目的profile文件中,加入我们的私有索引,然后加入需要pod的库,执行pod install
或者pod update
即可.如果是部分库使用私有库,部分库使用公有库,则需要把公有库的索引地址也加上,如下:
# Uncomment the next line to define a global platform for your project
source 'https://github.com/CocoaPods/Specs.git'#公有索引库地址
source 'https://gitlab.com/xxx/SPEC_NAME.git'#私有索引库地址
platform :ios, '9.0'
target 'TestProject' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
# Pods for TestProject
pod 'PUBLIC_POD_NAME'
pod 'PRIVATE_POD_NAME', '~> 0.0.2'
end
遇到的问题
以上配置可能会遇到很多,下面只是我做演示项目中遇到的问题及解决方案,如果遇到其它未列出问题,请面向Google开发.
-
- ERROR | [iOS] file patterns: The source_files pattern did not match any file.
这个问题是由于source_files
路径设置不对,需要一层一层的文件夹递进到目标文件夹:
例如:我的工程文件是结构是:
image.png则
source_files
应该设置成:
s.source_files = 'WebViewController/Classes'
-
- WARN | [iOS] license: Unable to find a license file
出现这个问题,主要是LICENSE文件的设置问题.主要是体现在几个方面:- 文件名错误.
- 文件的位置错误.文件应该放在跟
.podspec
一个目录.
-
- ERROR | [iOS] unknown: Encountered an unknown error (/usr/bin/xcrun simctl list -j devices
出现这个问题,修改xcode的偏好设置有问题:修改Xcode
-Preferences
-Location
-Command Line Tools
,选择当前xcode版本的命令行工具.