创建自己的公有库和私有库

首先本人会以github为例,创建自己的私有库。不懂请看下面,让我慢慢告诉你怎么创建自己的公有库!

一、 用本人账号在github创建一个公有仓库

注意: 如果要创建私有库选择Private

image

MIT License 是稍后podspec里面要用到的协议

二、 Cocoapods注册Trunk

image

$pod trunk register [Your-Email] '[Your-Name]' --description='[Your-Desc]'

  1. Your-Email: 任意邮件,但是我比较推荐你使用github上的Email

  2. Your-Name 推荐使用github上使用的Name

  3. Your-Desc: 一个简单的描述,往往这个时候我们使用的是自己电脑的一个描述

比如我自己注册了一个$ pod trunk register 1136200379@qq.com 'PCZheng' --description='iMac (Retina 4K, 21.5-inch, 2017)'
注册完成后,你可以通过[pod trunk me]查看信息

$ pod trunk me 查看信息是会有[!] Authentication token is invalid or unverified. Either verify it with the email that was sent or register a new session.这是要在你注册的[Your-Email]查看给你发的email点击里面的链接认证。由于我没有认证所以,pod trunk me 并能查看信息,需要叫我认证,由于最先没反应过来,我又注册了trunk一次,注册错了可以删除,删除具体的方法执行pod trunk --help,查看删除方法。

三、将你第一步创建的库,clone到指定的文件夹里面

image
image

四、创建.podspec文件 并且编辑.podspec

该步骤是重点也是难点,该步骤要是出什么错误了,后面都是扯淡,本人就因为各种各样的问题在这个步骤卡了很久,最后通过各种解决方案解决了,有些坑只有自己趟过了才知道难不难,所以废话也不多说,遇到各种不会的就goole和百度吧,或者@我也行。

**.podspec 即pod描述文件podspec specification **

为了讲明白这一步,这一步主要分为下面这几个步骤:

1.如何创建podspec文件

2.如何编写podspec文件

3.如何实现目录分层

4.如何校验podspec文件

5.在校验podspec文件所遇到过的问题

1.如何创建podspec文件

$pod spec create 库名

例如我自己的PageController

image
image

该目录下就会多一个PageController.podspec文件,可以有文本编辑打开对这个文件进行编辑

image
   **Pod::Spec.new do |s|** 
 
   s.name        = "PageController" #框架名
 
   **s.version**      = "0.0.1" #当前版本号,在pod search PageController的时候会显示该信息

  s.summary      = "A short description of PageController."#详细描述,在pod search PageController的时候会显示介绍
 
 s.description  = <<-DESC
 
                  DESC
 
   **s.homepage**    = "http://EXAMPLE/PageController"#页面链接

   # s.screenshots  = "www.example.com/screenshots_1.gif", "www.example.com/screenshots_2.gif"
 
   s.license      = "MIT (example)"#开源协议,也就是第一步选择的协议
 
   # s.license      = { :type => "MIT", :file => "FILE_LICENSE" }
 
   s.author            = { "RainbowWait" => "1136200379@qq.com" }#作者
 
   # Or just: s.author    = "RainbowWait"
 
   # s.authors            = { "RainbowWait" => "1136200379@qq.com" }
 
   # s.social_media_url  = "http://twitter.com/RainbowWait"
 
   #s.platform    = :ios
 
   s.platform    = :ios, "8.0"#支持iOS平台最低版本
 
   #  When using multiple platforms

   # s.ios.deployment_target = "5.0"
 
   # s.osx.deployment_target = "10.7"
 
   # s.watchos.deployment_target = "2.0"

   # s.tvos.deployment_target = "9.0"
 
   **s.source**      = { :git => "http://EXAMPLE/PageController.git", :tag => "#{s.version}" }#源码git地址 以及tag标签
 
   **s.source_files**  = "Classes", "Classes/**/*.{h,m}"#源文件(可以包含.h和.m)
 
   s.exclude_files = "Classes/Exclude"
 
   # **s.public_header_files** = "Classes/**/*.h"#头文件(.h文件)

   # s.resource  = "icon.png"
 
   # **s.resources** = "Resources/*.png"#资源文件(配置的文件都会放到mainBundle中)
 
   # s.preserve_paths = "FilesToSave", "MoreFilesToSave"
 
   # s.framework  = "SomeFramework"

   # **s.frameworks** = "SomeFramework", "AnotherFramework"#依赖的系统的框架

   # s.library  = "iconv"
 
   # **s.libraries** = "iconv", "xml2"#依赖的系统库
 
   s.requires_arc = true#支持ARC
 
   # s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }
 
   # s.dependency "JSONKit", "~> 1.4"#依赖的第三方库

https://guides.cocoapods.org/syntax/podspec.html 请参照Podfile详细

上面列举的信息大部分来自pod默认生成的podspec文件中的给的,其中需要重点注意标识黑体的这几个信息

下面我会举例说明giant如何写podspec中的每项配置。

image
image

s.source 源代码地址 以及tag 标签

 s.source       = { :git => "https://github.com/RainbowWait/PageController.git", :tag => "0.0.1" }**

git tag 0.0.1 设置的tag标签为0.0.1 git tag -d 0.0.1删除0.0.1的tag标签 最后提交的时候git push --tags

**s.source_files **配置三方库的源文件(.h或.m文件),swift是配置.swift文件

写法:

OC:s.source_files = "Classes/*/.{h,m}"#Classes路径下的所有匹配文件

   s.source_files = "Classes/*.{h,m}"#Classes文件夹下的所有匹配文件

   s.source_files = “Classes/PageController.{h,m}"#直接指定文件名

Swift:s.source_files = "Classes/*/.{swift}"#Classes路径下的所有匹配文件

       s.source_files = "Classes/*.{swift}"#Classes文件夹下的所有匹配文件

       s.source_files = “Classes/PageController.{swift}"#直接指定文件名

public_header_files头文件

s.public_header_files = "Classes/*/.h"#Classes路径下所匹配的.h文件

s.public_header_files = "Classes/*.h"

s.public_header_files = "Classes/Public.h"

vendored_frameworks 引用非系统的框架

s.ios.vendored_frameworks = "Frameworks/MyFramework.framework"

s.vendored_frameworks = 'MyFramework.framework’,'TheirFramework.framework'

frameworks配置系统框架

s.frameworks = 'Foundation', 'CoreGraphics', 'UIKit'

vendored_libraries 非系统静态库(要注意,这里的.a静态库名字必须要带lib前缀,如果引用的静态库名字没lib前缀会导致编译报错,只需要重命名加上即可)

s.ios.vendored_library = 'Libraries/libProj4.a'

s.vendored_libraries = 'libProj4.a', 'libJavaScriptCore.a'

libraries:配置依赖的系统库(要注意,这里的写法需要忽略lib前缀)

libraries = 'c++’,'sqlite3', 'stdc++.6.0.9', 'z'

resources:配置资源文件(.bundle,.png,.txt等资源文件,这些资源文件会被放到mainBundle中,要注意避免发生命名重复的问题)

s.resources = ['Images/.png’,'Sounds/']

s.resource = 'Resources/HockeySDK.bundle'

resource_bundles:配置指定bundle的资源文件(可以解决resources导致的命名冲突问题)

spec.ios.resource_bundle = { 'MapBox' => 'MapView/Map/Resources/*.png' }

spec.resource_bundles = {

'MapBox' => ['MapView/Map/Resources/*.png'],

'OtherResources' => ['MapView/Map/OtherResources/*.png']

}

swift_version 支持Swift的版本

s.swift_version = '4.0'

dependency:依赖的三方库,pod库或者可以是自身的subspec

3.如何实现目录分层3.如何实现目录分层

使用subspec来实现目录分层。

目录分层的好处:

目录分层,结构清晰;

使用pod引入一个三方库时,可以只引入一个subspec而不用将整个三方库引入。

例如AFNetworking:

image

嵌套请参考 CocoaPods Guides - Podspec Syntax Reference v1.6.0.beta.2

4.如何校验podspec文件

pod lib lint (首先从本地验证你的pod能否通过验证)

pod spec lint (从本地和远程验证你的pod能否通过验证)

pod lib lint --verbose (加--verbose可以显示详细的检测过程,出错时会显示详细的错误信息)

pod lib lint --allow-warnings (允许警告,用来解决由于代码中存在警告导致不能通过校验的问题)

pod lib lint --help (查看所有可选参数,可选参数可以加多个)

首先把你的代码先提交到远程仓库,并且把设置的标签页推送到远程仓库,以下是截图

image
image
image
image

修改后的PageController.podspec文件

image

从本地和远程验证pod能否验证通过

pod spec lint --allow-warnings

image

第五步、搭建私有库环境

1.创建自己的私有库

pod repo add [repo名] [repo Git地址]

例如:pod repo add PageControllerRepo https://github.com/RainbowWait/PageController.git

查看私有库是否创建成功

pod repo list 下面的lists错误了是list

image

需要注意的是:

1. 要记得将代码提交到远端

2. 要记得打tag,每个tag对应一个三方库版本

3. podspec文件中version的值要与git中的一个tag对应

2.向私有的repo库中提交podspec

pod repo push [repo名] [.podspec文件名] 在验证的时候有警告就要加上--allow-warnings,否则会失败

image

3.提交公有library

pod trunk push [NAME].podspec

pod repo update// 查找一下你提交的pod

pod search PageController

文章参考了 Cocoapods整理(四)——搭建Cocoapods私有库环境 - Zcp大官人的iOS开发专栏 - SegmentFault 思否

Cocoapods整理(三)——编写podspec文件 - Zcp大官人的iOS开发专栏 - SegmentFault 思否

image
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容