上传代码到Cocoapods

前言:
Cocoapods对于iOS开发者的重要性,不言而喻,为了方便,我们经常用Cocoapods管理第三方工程中用到的第三方,那么今天我就来说说如何将自己的代码放到Cocoapods上,让别人下载。 
按照我说的一步步来,一定导入成功!

1. 整理文件目录
说明: 我们总不能把所有文件都传上去吧,该传啥传啥,就是我们这一步要做的。

看下图: 


首先我们找到工程目录,在工程目录里面创建一个Code文件夹,把要上传的代码复制粘贴一份到这里,这里的内容就是我们使用cocoapods现在的时候这个文件里面显示内容

2. 给项目打一个tag
说明: 首先你要把工程上传到github,上传这部分在这里不会涉及,如果不会请自行百度;接下来我们打一个tag

请看下图: 


然后点击上图中的提交按钮,就可以成功提交tag了(按钮图中没有,在下面)

3. 接下来就是一系列的终端操作了
cd 进入到你的工程目录;打开终端,输入cd,然后拖动你的工程到终端,回车。

cd 空格 /Users/xxxx/Documents/xxxx

创建你的工程名.podspec文件,终端命令如下

pod spec create 你的工程名

在你的工程文件中打开刚刚创建的文件(如果打不开,下载个Sublime Text,用它打开),打开之后,将下面文本粘贴到里面。

Pod::Spec.new do |s|
  s.name         = "CSXModelText"
  s.version      = "0.0.1"
  s.summary      = "CSXModelText测试程序."
  s.description  = "代码上传Pods 程序."
  s.homepage     = "https://github.com/KirstenDunst/CSXModelText"
  s.license      = { :type => "MIT", :file => "LICENSE" }
  s.author             = { "曹世鑫" => "cao_shixin@yahoo.com" }
  s.platform     = :ios, "8.0"
  s.ios.deployment_target = "8.0"
  s.source       = { :git => "https://github.com/KirstenDunst/CSXModelText.git", :tag => "v#{s.version}" }
  s.source_files  = "CSXModelText", "CSXModelText/Code/*.{h,m}"
  s.framework  = "UIKit"
  s.requires_arc = true
end

上面那一堆属性咱们慢慢说

s.name : 工程名 
s.summary :简述 
s.description : 描述 
s.homepage : github项目网页 
s.license : 这个是授权,后面我会在命令行的时候忽略他 
s.author : 作者 
s.ios.deployment_target : 你支持的最低版本 
s.source : github下载地址(.git),以及版本tag 
s.source_files : 这里超级重要,如果你是按照我第一部创建的文件夹,就跟我们那么写就行

s.requires_arc :是否是ARC 
s.framework : 你支持的库

验证刚刚创建的这个文件能不能用,终端输入(还是在工程目录文件夹下哦):

pod spec lint

出现下面的就代表成功了(绿色的)。这里一定要注意: 1. tag是打到当前的分支的,如果找不到文件的话,先上传一下,再给当前版本打个tag,而且要用sourceTree看看这个tag,如果没有,用sourceTree打个tag,右击最近的节点,选择标签。 2.文件路径一定要写对了,如果找不到文件,请自行解决

XXXXX.podspec passed validation.

注册CocoaPods账户信息

创建一个开源pod库,需要注册CocoaPods

pod trunk register 邮箱 ‘用户名’ –description=’描述’

注意: 邮箱尽量是你注册github的邮箱,用户名最好是你github的用户名,不是应该也没关系。注册邮箱如果收不到的话,可以尝试更换另外的一个邮箱使用
(这一步会给你邮箱发一条验证邮件,点击里面的链接,如果链接不可以点击,那就复制粘贴到浏览器按回车)

这里我们一般使用github邮箱和用户名, 然后在你的邮箱中会收到确认邮件, 在浏览器中点击链接确认即注册成功;

注册成功

查看自己的注册信息,以后当你有了自己的开源Pod库,也可以用此方式随时查看自己发布过的Pods

终端执行  $ pod trunk me

注册信息格式:


- Name: 名称
- Email: 邮箱(GitHub账号)
- Since: August 2nd, 2018 19:27
- Pods:
- Test0
- JYTest0
- Sessions:
    - 

就可以上传了

pod trunk push

(请耐心等待,出现类似下面的样式就成功了)

上传成功之后,正常情况来讲,pod search 是找不到的,你可以执行下列命令行,作用就是删除Cocoapods的搜索文件,这样做之后,你进行pod search的时候会重新加载这个文件

rm ~/Library/Caches/CocoaPods/search_index.json

删除之后再pod search 你上传的代码

 

搜索到之后就证明你成功了,可以用了,怎么使用我就不说了,相信看得懂这篇文章的人都会使用Cocoapods的

如果需要添加版本,只需要再打个tag(tag加v哦,例如v1.0.0),在文件里改最上面的版本号(这个不加v的),然后上传就好了(pod trunk push),而且上传的时候,一定要保证cd到工程文件下,并且工程文件下是有.podspec 文件的

 

总结:

        上传代码顺序:

         1.首先在github上面建立你的项目地址,不管用什么方式上传你的代码,

         2.打开本地的项目,进入目录下。建你的工程名.podspec文件,并编辑上面的信息并保存。

         3.终端编译 核对:pod  spec lint

         4.代码打上tag,并同步(也要在这个项目的目录下)(git tag 'v0.0.1')(git push --tags)

         5.再次编译核对

         6.以上没有问题,执行上传:pod trunk push

 

注意:(1.cocoapods的账号邮箱,可以不是github的邮箱,但是为了方便,怕忘记,还是用同样的邮箱,因为我的一直发不过来邮件,就换了别的邮箱,试过了是可以的。

              2.文件中pod spec lint 的时候会有LICENCE文件找不到的问题,可以在项目中拖入一个之前的LICENCE文件,或者使用github创建一个新的仓库,下面的第二个可选条件选择MIT文件,生成的仓库就会有一个LICENCE文件)

 

附加git的部分终端使用:

 git tag  //查看tag
 git tag test_tag c809ddbf83939a89659e51dc2a5fe183af384233    //在某个commit 上打tag
 git tag
...
 git push origin test_tag    //!!!本地tag推送到线上
...
 git tag -d test_tag        //本地删除tag
 git push origin :refs/tags/test_tag    //本地tag删除了,再执行该句,删除线上tag

 

遇到的问题:参考文章出处:[Cocoapods]项目添加Cocoapods支持遇到的坑

1. ERROR | spec: The specification defined in `LZTool.podspec` could not be loaded.

MacBook:PodTest Artron_LQQ$ pod lib lint LZTool.podspec

 -> LZTool.podspec
    - ERROR | spec: The specification defined in `LZTool.podspec` could not be loaded.


[!] Invalid `LZTool.podspec` file: syntax error, unexpected tIDENTIFIER, expecting keyword_end
...<-DESC 这是一个测试文档, 这里主要是描述类库...
...                               ^
LZTool.podspec:28: syntax error, unexpected '\n', expecting '='.

 #  from LZTool.podspec:27
 #  -------------------------------------------
 #    #   * Finally, don't worry about the indent, CocoaPods strips it!
 >    s.description  = <<-DESC 这是一个测试文档, 这里主要是描述类库的功能设计初衷介绍
 #                     DESC
 #  -------------------------------------------


[!] LZTool.podspec did not pass validation, due to 1 error.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`.
You can use the `--no-clean` option to inspect any issue.
MacBook:PodTest Artron_LQQ$

这个错误是使用指令pod lib lint LZTool.podspec检查文件是否合法时发生的;

可以看出是在设置s.description字段时发生的错误, 当时的写法是:

s.description  = <<-DESC LZTool 是一个用于保存一些常用工具类的工具 DESC

以为可以吧他们并到一行, 导致一直报这个错, 后来写成两行, 还是报错, 最后才试出这样写才对:

s.description  = <<-DESC 
                          LZTool 是一个用于保存一些常用工具类的工具
                   DESC

2. [iOS] file patterns: The `source_files` pattern did not match any file.

MacBook:PodTest Artron_LQQ$ pod lib lint LZTool.podspec

 -> LZTool (0.0.1)
    - WARN  | github_sources: Github repositories should end in `.git`.
    - ERROR | [iOS] file patterns: The `source_files` pattern did not match any file.

[!] LZTool did not pass validation, due to 1 error and 1 warning.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`.
You can use the `--no-clean` option to inspect any issue.
MacBook:PodTest Artron_LQQ$

这个错误也是使用指令pod lib lint LZTool.podspec检查文件是否合法时发生的;

这个是在指定共享的类库时, 文件路径不对, 也就是设置s.source_files字段时, 发生了错误, 这里的路径是相对于LZTool.podspec文件的, 如果是与LZTool.podspec同级的文件夹, 直接写文件夹名称即可, 如:

 s.source_files = "LZTool"

如果有多级目录, 一定要逐级添加. 这里也可以这么写:

 s.source_files = "LZTool/*.{h,m}"

如果,在某个版本的tag下报此错误,更改为正确路径后,还是报此错误,可尝试新建一个新的tag;

3. fatal: Remote branch 0.0.1 not found in upstream origin

MacBook:PodTest Artron_LQQ$ pod spec lint

 -> LZTool (0.0.1)
    - ERROR | [iOS] unknown: Encountered an unknown error ([!] /usr/bin/git clone https://github.com/LQQZYY/PodTest.git /var/folders/14/95vmx0495_s5292ltvwpsc8h0000gn/T/d20170111-11240-1l3iq9n --template= --single-branch --depth 1 --branch 0.0.1

Cloning into '/var/folders/14/95vmx0495_s5292ltvwpsc8h0000gn/T/d20170111-11240-1l3iq9n'...
warning: Could not find remote branch 0.0.1 to clone.
fatal: Remote branch 0.0.1 not found in upstream origin
) during validation.

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`.
MacBook:PodTest Artron_LQQ$

这个是使用指令pod spec lint来检查文件是否可用时发生的错误;

这是因为在你托管代码的库里(这里是指github)找不到这个分支, 也就是在编辑 LZTool.podspec时, 里面的字段 s.versons.source中的 taggithub创建的release版本号不一致导致, 修改为一样即可!

这里还有另外一个解决方法方法二

4. 加载xib问题

PS: 这个不是我个人遇到的问题, 是在文章中看到, 这里记录一下;
如果通过cocoapods下载的类库中含有Xib文件, 使用原来的方式初始化就不起作用了:

[[[NSBundle mainBundle] loadNibNamed:@"xibName" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"xibName" bundle:nil] forCellWithReuseIdentifier:@"ZLCollectionCell"];

应该使用下面这种方式初始化:

#define kZLPhotoBrowserBundle [NSBundle bundleForClass:[self class]]
[[kZLPhotoBrowserBundle loadNibNamed:@"ZLPhotoActionSheet" owner:self options:nil] lastObject];
[self.collectionView registerNib:[UINib nibWithNibName:@"ZLCollectionCell" bundle:kZLPhotoBrowserBundle] forCellWithReuseIdentifier:@"ZLCollectionCell"];

这样就能正常使用了;

5.加载图片资源问题

PS: 这个问题我尝试了一个demo, 直接设置了s.resources = "LZScaner/images/*.png", 图片也能正常显示( 可参考我设置的podspec文件LZScaner.podspec)没有遇到这个问题, 但是还是把这个方式记录一下吧...

如果通过代码"[UIImage imageNamed:@"picName"]"去设置图片的话,则图片资源有可能无法正常显示, 可通过以下方式解决:

  • 创建bundle资源目录
command+N -> Resource -> Settings Bundle

删除bundle携带的无用文件,把图片资源添加到bundle资源内

  • 改变代码图片路径
// 图片路径
#define kZLPhotoBrowserSrcName(file) [@"ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
#define kZLPhotoBrowserFrameworkSrcName(file) [@"Frameworks/ZLPhotoBrowser.framework/ZLPhotoBrowser.bundle" stringByAppendingPathComponent:file]
kZLPhotoBrowserSrcName(file) 为通过copy文件夹方式获取图片路径的宏
kZLPhotoBrowserFrameworkSrcName(file) 为通过cocoapods下载安装获取图片路径的宏
  • 然后修改代码中设置图片的方式如下
UIImage *img = [UIImage imageNamed:kZLPhotoBrowserSrcName(@"img.png")]?:[UIImage imageNamed:kZLPhotoBrowserFrameworkSrcName(@"img.png")];

podspec地址: ZLPhotoBrowser.podspec可以参考学习!

6. trunk: getaddrinfo: nodename nor servname provided, or not known

MacBook:LZScaner Artron_LQQ$ pod trunk register 302934443@qq.com --description= 'LZScaner'
[!] There was an error registering with trunk: getaddrinfo: nodename nor servname provided, or not known
MacBook:LZScaner Artron_LQQ$

出现这个原因是, 我开了APN, 把APN关了, 重新启动一下网络就好了...

7. xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information

MacBook:LZSortTool Artron_LQQ$ pod spec lint

 -> LZSortTool (0.0.1)
    - WARN  | [iOS] license: Unable to find a license file
    - ERROR | [iOS] xcodebuild: Returned an unsuccessful exit code. You can use `--verbose` for more information.
    - NOTE  | [iOS] xcodebuild:  LZSortTool/LZSortToolDemo/LZSortToolDemo/LZSortClass/LZSortTool.m:14:9: fatal error: 'ChineseToPinyin.h' file not found

Analyzed 1 podspec.

[!] The spec did not pass validation, due to 1 error and 1 warning.
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`.
MacBook:LZSortTool Artron_LQQ$

这个是执行 pod spec lint指令的时候产生的错误:

这个错误从- NOTE可以看出, 是项目中的这个文件ChineseToPinyin.h找不到, 回到项目, 编译一下也会报这个错. 是因为我修改了本地文件中的这个文件的路径, 项目中引用的还是原先的路径, 打开左侧文件列表, 可以发现这个文件是红色的, 删除引用, 重新添加, 然后到你的github上面, 重新添加一个release版本, 再重新执行指令即可验证通过.

8. 验证成功后搜索不到新加的支持库

如果在制作支持库的过程中没有错误, 或者最好添加库验证通过, 即出现下面这个界面:

上传成功

在使用

pod search LZTool

的时候, 搜索不到这个库, 或者在使用时找不到这个库, 可以使用下面的指令来清理一下缓存:

rm ~/Library/Caches/CocoaPods/search_index.json

然后再去使用, 基本就可以了.

9. ERROR | name: The name of the spec should match the name of the file.

LQQ-MacBook-Pro:LQWebViewSwift LQiqiang$ pod lib lint LQWebViewSwift.podspec

 -> LQWebView-Swift (1.0)
    - ERROR | name: The name of the spec should match the name of the file.
    - ERROR | [iOS] unknown: Encountered an unknown error (No podspec found for `LQWebView-Swift` in `/Users/LiuQiqiang/Desktop/SourcesTree/Cocoapods/LQWebViewSwift`) during validation.

[!] LQWebView-Swift did not pass validation, due to 2 errors.
You can use the `--no-clean` option to inspect any issue.
LQQ-MacBook-Pro:

出现这个错误是因为,我的podspec文件名称和里面设置的 ** s.source_files** 和 s.name不一致导致的,修改为一致的即可!

10.[!] Failed to connect to GitHub to update the CocoaPods/Specs specs repo

  (1). 如果你的Ruby运行环境大于2.0.0的话可以升级cocoapods解决,查看当前ruby终端命令ruby -v

  •  更新gem:sudo gem update --system
  •  删除gem源:gem sources --remove https://ruby.taobao.org/
  •  修改gem源:gem sources -a https://gems.ruby-china.org
  •  查看gem源是否是最新的:gem sources -l
  •  升级cocoapods:sudo gem install -n /usr/local/bin cocoapods --pre
  •  查看升级后的cocoapods版本:pod --version

(2).如果你的Ruby运行环境小于等于2.0.0不能使用了,那么就需要更新Ruby运行环境

    我这里安装的是2.4.0,一般需要再次重新启动一下就可以,一次将下面终端命令执行,之后再push就好了
    安装完成后重新执行下 

  •  sudo gem update --system 
  •  sudo gem install -n /usr/local/bin cocoapods
  •  pod setup

    到这里我的cocoapods就可以正常使用了

待续...


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值