CocoaPods私有库搭建说明

2019-08-28  本文已影响0人  HannibalRoyal

CocoaPods私有库搭建说明

关于CocoaPods

CocoaPods是Swift和Objective-C Cocoa项目的依赖管理器.他拥有超过65000个库,并超过300万个应用程序中使用.CocoaPods可以帮助您优雅的扩展项目.

官网:官网链接

CocoaPods的安装

这里就不详细说明CocoaPods的安装了,详细步骤请移步:
CocoaPods官方安装指南

私有库说明

CocoaPods的工作原理是,在第三方代码托管平台创建一个CocoaPods的索引库,例如:Github
然后将此索引库Checkout到本地,当我们执行Pod Search XXX的时候,其实是搜索的本地的索引库.这也就是为什么,如果长期不更新Pod索引,某些第三方会搜索不到的原因.
通过索引里面的信息,去下载对应的库安装,并处理好项目依赖等信息.

所以,根据上述描述,我们是否可以创建一个自己的索引库,然后做自己的库管理呢?答案是肯定的.CocoaPods支持私有Pods的搭建.

搭建私有库

根据上述说明,不难分析出,搭建一个私有库其实有几个重点.

  1. 创建自己的CocoaPods的索引库.
  2. 增加自己的CocoaPods索引库到自己的CocoaPods里.

做完上面两点,其实私有库的搭建方面已经做完了.下面我们来说说搭建CocoaPods私有库的详细步骤.

  1. Github,Gitlab,码云,Coding等第三方代码托管平台上创建自己的私有索引库,此处也可以是自己公司的本地私有Git仓库.
  2. 使用CocoaPods的命令行,在本地增加第一部的私有索引库.其实这一步也是将自己创建的私有索引库Clone到本地的操作.且支持HTTPSSSH方式,此处可根据自己的需求或者喜欢来选择合适自己的方式.

创建索引库就是在Git仓库里面创建一个空的仓库,此处就不详细说明了.值得注意的是,建立了仓库之后,一定要在库里面把LICENSE文件和README文件创建好,请记住LICENSE文件的,此处有两个目的:

  1. 避免上传.podspec文件到私有索引库的时候报错.
  2. 避免后续的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. 首先在第三方代码托管平台创建自己的代码仓库.用于托管自己封装的库.
  2. 封装代码,确定编译运行无错,功能实现完成.
  3. 将封装的代码上传到第1步建立的代码仓库中.
  4. 打开终端.cd到项目文件夹,并创建索引配置文件.podspec.
pod spec create SPEC_NAME

出现下面提示,代表创建成功:

Specification created at KKWebViewController.podspec
  1. 编辑.podspec文件
    1. 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" => "orta.therox@gmail.com" }#作者信息
  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
  1. 编辑完成后,我们要验证我们配置的是否正确.使用如下命令,验证的命令有两种,第一种是本地验证:
pod lib lint

第二种是本地/远程一起验证:

pod spec lint

一般我们使用pod sepc lint去验证,因为单本地验证通过后,后面执行pod repo push xxx xxx的时候,可能还是会报错.

  1. 验证通过示例如下:
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解决.不要有任何警告或者错误,不光是有错误或者警告,会导致上传失败,而且本人是极度强迫症患者.

  1. 将验证修改后的.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开发.

  1. - ERROR | [iOS] file patterns: The source_files pattern did not match any file.
    这个问题是由于source_files路径设置不对,需要一层一层的文件夹递进到目标文件夹:
    例如:我的工程文件是结构是:

    image.png

    source_files应该设置成:
    s.source_files = 'WebViewController/Classes'

  1. - WARN | [iOS] license: Unable to find a license file
    出现这个问题,主要是LICENSE文件的设置问题.主要是体现在几个方面:
    1. 文件名错误.
    2. 文件的位置错误.文件应该放在跟.podspec一个目录.
  2. - ERROR | [iOS] unknown: Encountered an unknown error (/usr/bin/xcrun simctl list -j devices
    出现这个问题,修改xcode的偏好设置有问题:修改Xcode-Preferences-Location-Command Line Tools,选择当前xcode版本的命令行工具.
上一篇下一篇

猜你喜欢

热点阅读