在CocoaPods上创建自己iOS程序的依赖管理

来源:互联网 发布:网狐6603手机游戏源码 编辑:程序博客网 时间:2024/06/05 05:50

一、github上创建开源项目

GitHub是目前使用最广的分布式项目管理软件。
下面是如何从零开始,将自己的项目放到GitHub上面,并能够像SVN那般update和commit。

1、到https://github.com上建立自己的账号

2、按照的指引,创建第一个代码仓库

spacer.gifwKioL1MVNheRL_OOAADWJ6g-4LY453.jpg


“Repository name”可以理解为项目名称。

※现在的Private权限是收费的,所以只能创建Public权限的仓库。

※Private权限,表示只有指定用户可以查看/下载/commit这些代码;而Public权限,则表示所有人都能够看到这些代码并进行下载,但只有你指定的用户才能够进行commit。

wKioL1MVNjSxIkmZAAHOale9f58320.jpg


3、安装和配置git

mac已经带有git,查看版本
[root@localhost ~]# git --version
git version 2.5.4(Apple Git-61)


接着就要设置用户名和Email了,Email最好和注册时候的一样。
$ git config --global user.name "Your Name Here"
# Sets the default name for git to use when you commit
$ git config --global user.email "your_email@example.com"
# Sets the default email for git to use when you commit
上面的内容都写在配置文件~/.gitconfig里了
恭喜,到这里,基本Git和GitHub都配置好了!


4、版本库初始

如果是从头创建版本库,可以采用先克隆,建立提交数据,最后再通过推送完成GitHub版本库的初始化。

步骤如下

(1) 克隆版本库:

git clone https://github.com/skylinbaiyi/HelloWorld.git

Cloning into 'HelloWorld'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0

Unpacking objects: 100% (3/3), done.

Checking connectivity... done.


克隆的方式,本地已经存在一个.git文件夹,就不需要执行 git init 了


(2) 修改文件README.md文件:

创建Repository时,如果选择创建README.md文件的话,github上已经存在该文件,如果没有,则手动创建


$ git add README

# Stages your README file, adding it to the list of files to be committed


(3) 提交

git add . 

#会把当前路径下的所有文件,添加到待上传的文件列表中


$ git commit -m 'first commit'

# Commits your files, adding the message "first commit"


(4) push

这里所有的更改都只是在本地的, Push之后才会提交到GitHub保存:

git remote add origin https://github.com/skylinbaiyi/HelloWorld.git 

git push origin master


(5)给项目加入一个tag。以便pod能自动识别

gittag -a0.0.1 -m"Tag release 0.0.1”

git push —tags


二、为自己的项目添加cocoaPods支持

1、注册


trunk需要CocoaPods 0.33版本以上,用pod --version命令查看版本,如果版本低,需要升级:


sudo gen install cocoapods

pod setup


更新完成后,下一步是注册trunk


pod trunk register test@163.com 'test' --description=' ' --verbose


有的地方提示,这一步需要自备梯子,否则就会出现注册失败的问题,经我这里测试,公司网络目前不需要翻墙

注册后CocoaPods会给你的邮箱发送验证链接,点击后就注册成功了,可以用pod trunk me命令查看自己的注册信息:

上面的命令是我注册时使用的,你需要把邮箱和名字以及描述替换成你的,加上--verbose可以输出详细debug信息,方便出错时查看。

  - Name:     Yang Xiaoyu
  - Email:    yulingtianxia@gmail.com
  - Since:    May 25th, 20:27
  - Sessions: 
    - May 25th, 20:27 - September 30th, 22:41. IP: 23.228.209.171
  Description: macbook pro


上面是我的注册信息,CocoaPods不通过密码来验证用户,而是通过一个session token。


2、部署你的Pod

首先你需要建立一个podspec文件,这是我的podspec文件:

Pod::Spec.new do |s|
s.name = "YXYNumberAnimationLabel"
s.version = "1.0.1"
s.summary = "一个可以动起来的数字Label"
s.description = <<-DESC
通过设置数字变化的插值来展现动画效果
DESC
s.homepage = "https://github.com/yulingtianxia/YXYNumberAnimationLabel"

s.license = 'MIT'
s.author = { "YangXiaoyu" => "yulingtianxia@gmail.com" }
s.social_media_url = "http://twitter.com/yulingtianxia"
s.source = { :git => "https://github.com/yulingtianxia/YXYNumberAnimationLabel.git", :tag => s.version.to_s }

s.platform = :ios, '6.0'
s.requires_arc = true

s.source_files = 'YXYNumberAnimationLabel/*'
s.frameworks = 'Foundation', 'UIKit'
#s.private_header_files = 'Classes/ios/private/*.h'

#s.dependency 'FLKAutoLayout', '~> 0.1'
end


在验证和上传你的podspec文件到trunk之前,需要将你的源码push到Github上,tag一个版本号并发布一个release版本,这样podspec文件中的s.source的值才能是准确的

git add -A 
git commit -m "Release 1.0.1."  
git tag '1.0.1'  
git push --tags  
git push origin master


这两条命令是为pod添加版本号并打上tag:

set the new version to 1.0.1
set the new tag to 1.0.1


pod trunk push命令做了如下三个工作:在你podspec文件下的路径运行pod trunk push YXYNumberAnimationLabel.podspec 命令,同样需要翻墙梯子自备,别忘了将YXYNumberAnimationLabel.podspec替换成你的podspec文件名。

  1. 验证你本地的podspec文件(你也可以用pod spec lint命令来验证)
  2. 上传你的podspec文件到trunk
  3. 将你的podspec文件转化成trunk需要的JSON文件

如果部署成功,CocosPods会在Twitter上@你

就像文章最开始的架构图描述的那样,你在trunk中的操作依然会在CocoaPods/Specs仓库中更新。以后再做更改时只需要更新版本号然后通过trunk来提交,不用向CocoaPods/Specspull request并等待审核和merge了。

运行pod setup来更新你的Pods依赖库tree后,再使用pod search YXYNumberAnimationLabel命令来查找刚刚加入的名字叫YXYNumberAnimationLabel的依赖库:


-> YXYNumberAnimationLabel (1.0.1)
   一个可以动起来的数字Label
   pod 'YXYNumberAnimationLabel', '~> 1.0.1'
   - Homepage: https://github.com/yulingtianxia/YXYNumberAnimationLabel
   - Source:   https://github.com/yulingtianxia/YXYNumberAnimationLabel.git
   - Versions: 1.0.1, 1.0.0 [master repo]



注意事项:

(1) 验证spec文件的有效性:

pod spec lint 文件名 验证resp上的文件

pod lib lint 文件名 这是只是验证本地文件



(2) 添加 --verbose 可以显示详细信息,便于查看问题

pod trunk push Bugrpt.podspec --verbose



参考地址:
1.  podspec文件的格式参考广告文档: https://guides.cocoapods.org/syntax/podspec.html#specification
2. Cocoapods降低版本及卸载:https://www.meetrue.com/archives/133

3. 用CocoaPods做iOS程序的依赖管理

4. 如何编写一个CocoaPods的spec文件


三、提交 podspec 文件到github的方法对比

提交结果查看地方 
https://github.com/CocoaPods/Specs/tree/master/Specs

1、旧方法  

CocoaPods详解之----制作篇
http://blog.csdn.net/wzzvictory/article/details/20067595

2、新方法 

 Publish Your Pods on CocoaPods With Trunk
http://yulingtianxia.com/blog/2014/05/26/publish-your-pods-on-cocoapods-with-trunk/

iOS:手把手教你发布代码到CocoaPods(Trunk方式)
http://www.cnblogs.com/wengzilin/p/4742530.html

其他文章中提到,需要cocoaPods审核几天,才能有效,但我这里使用的实际情况是,只要pod trunk push成功,就马上有效了,在 CocoaPods/Specs中就可以看到了,CocoaPods也可以使用这个库了



里面有个log信息提示有个beta版本可以使用,这个千万不要下载,可能会有很多问题,还是老老实实使用最新的正式版本才靠谱


四、问题总结


1. github的账号密码问题

如果有多个github账号,在进行账号切换提交项目时,会出现没权限的问题



这时需要在本地切换账号,切换到本项目使用账号。账号密码保存在钥匙串中,先删除,再重新输入新的账号密码



2. 路径不对

Unable to interpret the specified path as a podspec



原因是没有tag标记,代码push完全后,添加一个tag,这个tag需要和podspec文件的version字段对应


3. 找不到branch版本


我们添加tag时,写的是1.0.2,需要加上字母“v”, v1.0.2




4.  编码问题

 生成的podspec文件,MAC下直接用自带的文本编辑器或者其他三方工具:TextWrangler,会提示编码的问题或者其他错误


解决方法:windows下用edit编辑,然后到mac下提交

5. 库的路径问题


比如bugly sdk的cocoaPods配置


source指定的Bugly-1.4.5.zip文件,解压出来必须是 Bugly.framework,而不是其他文件名或者文件夹,否则可能出现以下的错误
提示source_files 或者vendored_frameworks找不到


出现这种问题时,如果检查podspec文件书写没有问题,则有可能是pod本身的问题,换台电脑试试


6. 库的头文件问题




原因:导出的头文件名字跟framework的名字不一致
修改办法:删除Modules文件夹或者修改modele.modulemap文件里头文件的定义或者修改头文件名

7. model找不到




专门下载了bugly的sdk,测试了下也是一样的问题:


查了半天没找到原因,后来猜想有没可能是pod版本的问题,先查了下当前版本:

本机安装了最新的beta版本,所以先把这个版本卸载了,安装最新的正式版,验证通过




8. 奇葩的版本错误



提示vendored_frameworks 和 public_header_files的格式错误,但是仔细对照,始终没发现有什么问题。

有可能是Cocoapods的版本问题,以前使用0.39.0一直正常,更新到1.0.0后就不对了

0 0