CocoaPods 远程公开库的基本创建

一直认为搞Pods库都是一件很高大上的事情,一直有这方面的想法,但是因为本人拖延癌晚期就一直搁置了。这次正好有需求索性就搞一下并记录下来。

简述一下创建流程:

1.创建.podspec
2.编辑.podspec
3.将代码上传至:码云/Github
4.验证podspec合法性
5.注册CocoaPods
6.发布

再上一个我自己制作的图,根据我的理解标出来关系指向图:云端Pods库、本地仓库、码云/Github代码库的关系。他们之间主要关联的媒介就是.podspec文件,按照度娘来说,它叫做:第三方代码库的配置索引文件,虽然名字很长,但是很贴切。

CocoaPods操作流程.png

1.创建.podspec

终端操作进入你的项目文件夹,然后执行:pod spec create XXX。你的项目文件夹中就会多出来一个XXX.podspec文件。

bogon:XLpjsip xiaolu$ cd /Users/xiaolu/Desktop/XLpjsip 
bogon:XLpjsip xiaolu$ pod spec create XLpjsip

Specification created at XLpjsip.podspec

2.编辑.podspec

现在可以打开你的podspec文件,我是直接将我的.podspec文件拷贝在下面了。

Pod::Spec.new do |s|
//框架名称,注意这里要和.podspec文件的名称一致
  s.name         = "XLpjsip"
  s.version      = "0.0.1"
//框架简介,会在pod search后显示在终端上的简介
  s.summary      = "基于pjsip 2.8.0版集成"
//框架主页地址
  s.homepage     = "https://gitee.com/TheLazyCoder"
//作者名称或联系方式,全凭自己喜好
  s.author       = '32510112@qq.com'
//框架代码地址,很重要
  s.source       = { :git => "https://gitee.com/TheLazyCoder/XLpjsip.git", :tag => "#{s.version}" }
//框架支持的最低平台版本
  s.platform     = :ios, '8.0'
//框架简介
  s.description  = <<-DESC

DESC
//框架遵守的开源协议
  s.license      = {
     :type => 'Dual-License',
     :text => <<-LICENSE 
PJSIP source code ("The Software") is licensed under both General Public License (GPL) version 2 or later and a proprietary license that can be arranged with us. In practical sense, this means:

if you are developing Open Source Software (OSS) based on PJSIP, chances are you will be able to use PJSIP freely under GPL. But please double check here  for OSS license compatibility with GPL.
Alternatively, if you are unable to release your application as Open Source Software, you may arrange alternative licensing with us. Just send your inquiry to licensing@teluu.com to discuss this option.
PJSIP may include third party software in its source code distribution. Third Party Software does not comprise part of "The Software". Please make sure that you comply with the licensing term of each software.
LICENSE
   }
//框架需要包含的源代码文件
//1.*表示匹配所有文件。2.{.h,.m} 表示匹配所有以.h和.m结尾的文件。3.** 表示匹配所有子目录,以及递归子目录
//例子中的build文件夹与XLpjsip.podspec处于同级目录中
  s.source_files        =[
                           'build/pjproject/src/pjlib/include/**/*.h',
                           'build/pjproject/src/pjlib-util/include/**/*.h']
//框架需要的资源文件
  s.resources:        =[
                           'build/pjproject/src/pjlib/include/**/*.h',
                           'build/pjproject/src/pjlib-util/include/**/*.h']
//框架公开的头文件,能够使用<>方法
  s.public_header_files =[
                          'build/pjproject/src/pjlib/include/**/*.h',
                          'build/pjproject/src/pjlib-util/include/**/*.h']
//框架install 或者 update之后不会更新的文件路径
  s.preserve_paths      =['build/pjproject/src/pjlib/include/**/*',
                          'build/pjproject/src/pjlib-util/include/**/*']
 //框架第三方.a文件
   s.vendored_libraries  =['build/openh264/lib/*.a',
                           'build/pjproject/src/pjlib-util/lib/*.a']
  
  header_search_paths   =['"$(PODS_ROOT)/Headers/Public/XLpjsip/pjlib/include"',
                          '"$(PODS_ROOT)/Headers/Public/XLpjsip/pjlib-util/include"']

//框架需要配置参数环境
  s.xcconfig            = {
      'HEADER_SEARCH_PATHS'          => header_search_paths.join(' '),
      'GCC_PREPROCESSOR_DEFINITIONS' => 'PJ_AUTOCONF=1'
  }
//框架依赖库
  s.dependency          'AFNetworking', '~> 2.3'
  s.dependency          'OpenSSL-Universal'
//框架依赖的frameworks
  s.frameworks          = 'CFNetwork', 'AudioToolbox', 'AVFoundation', 'CoreMedia'
//框架依赖的libraries
  s.libraries           = 'stdc++'
//保护目录结构不变,如果不设置,所有头文件都将被放到同一个目录下
  s.header_mappings_dir = 'build/pjproject/src'
//框架是否支持ARC
  s.requires_arc        = false
end

3.将代码上传至码云/Github

在码云创建公开库,随后将代码上传(注意:代码上传时必须打tag,跟.podspec的版本相同)。具体git库的创建,还有代码的上传我就不在发流程了。简单列一下终端操作顺序:

git add .
git commit -m ''
git remote add origin https://gitee.com/TheLazyCoder/XLpjsip
// 第一次push如果报错的话可以加上-f
// git push -f origin master
git push origin master
git tag "0.0.1" 
//将tag推送到远程仓库
git push --tags 

本地代码示例.png

远程代码示例.png

代码码云地址

4.验证podspec合法性

验证podspec时有两步验证,第一步是验证你本地索引库的podspec文件是否正确,第二步是验证你远程索引库的podspec文件是否正确。

//本地验证索引,或:pod lib lint --allow-warnings 忽略警告
pod lib lint
// 远程验证索引,或:pod spec lint --allow-warnings 忽略警告
pod spec lint

//两种验证成功后都会提示:
XLpjsip.podspec passed validation.

我遇到的坑
我在验证时一直提示有五个错误,提示:source_files、preserve_paths、vendored_libraries、public_header_files、header_mappings_dir这五个参数设置的资源文件路径都是错误的,全部都找不到文件。我前前后后修改过N遍,每次本地验证都可以通过,但是远程验证就报错!!后来度娘了很久查到一个方法:就是换一个tag,将码云上的代码库及podspec文件的版本同时换一个版本。随后完美解决,个人认为是什么地方存在缓存所导致的,但是没有去分析定位bug点,索性改一个版本算了,被bug卡一天还是比较崩溃的。

我出现错误的截图.png

5.注册CocoaPods

接下来就是注册CocoaPods了,别吃惊,我本来也不知道CocoaPods需要注册…… CocoaPods注册还是比较简单的,终端注册,随后等邮件,确认一下就好了。

pod trunk register '邮箱' '用户名'
//查看注册信息
pod trunk me
 - Name:     XXXXX
  - Email:    **********@qq.com
  - Since:    April 19th, 02:23
  - Pods:
  - XLpjsip
  - Sessions:
  -Description: Test1

6.发布

pod trunk push --allow-warnings
//这个过程比较久,还会有很多验证信息,耐心等待即可。
//出现如下提示就可以试着搜索pod search一下了
--------------------------------------------------------------------------------
 🎉  Congrats

 🚀  XLpjsip (2.8.1) successfully published
 📅  April 21st, 20:30
 🌎  https://cocoapods.org/pods/XLpjsip
 👍  Tell your friends!

到此你的远程公开库就创建成功了,但是现在你大概率是search不到的,因为你需要删除本地的索引库,再删除本地的pod搜索记录,有的还需要你更新本地索引库才行。
前往路径:~/.cocoapods/repos 删除除了master文件夹的多余文件夹。


本地索引库.png

随后终端执行:

//删除搜索记录
rm ~/Library/Caches/CocoaPods/search_index.json
//再试着搜索一下
pod search XLpjsip
-> XLpjsip (0.0.1)
   基于pjsip 2.8.0版集成
   pod 'XLpjsip', '~> 0.0.1'
   - Homepage: https://gitee.com/TheLazyCoder
   - Source:   https://gitee.com/TheLazyCoder/XLpjsip.git
   - Versions: 0.0.1 [master repo]

到现在就证明你的远程公开库已经发布成功了,这个时候就需要点个红心嗨皮一下了😏😏😏

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