Cocoapods使用问题收集

CocoaPods 远程公开库的基本创建

2019-04-24  本文已影响0人  TheLazyCoder

一直认为搞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]

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

上一篇下一篇

猜你喜欢

热点阅读