美文网首页静太库的制作和pod上传iOS成仙之路pod
如何将你写的框架添加cocoapod支持[转]

如何将你写的框架添加cocoapod支持[转]

作者: freesan44 | 来源:发表于2016-01-12 20:29 被阅读1782次

    一、创建的github仓库原文地址

    1 进入Github网站www.github.com登陆自己的账号后

    2 建立一个新的仓库

    创建新的仓库

    3 填写仓库信息

    填写仓库信息

    4 创建完毕后

    创建成功

    二、上传代码到创建的仓库

    1 选择clone 到本地仓库

    mac 电脑中,有github的客户端

    github MAC客户端

    进入github网站后,右边栏

    创建一个Tag

    如果这里不会,可以看我的另一篇文章Git tag的使用

    http://www.jianshu.com/p/32054f3e415d

    4.上传到github

    上传到github仓库

    三、向本地git仓库中添加创建Pods依赖库所需文件

    1 这个文件需要放在clone 到的本地仓库目录下(需要在终端cd进入clone的那个目录下)

    2 创建 podspec

    // 在命令终端pod spec create XWSwiftRefreshT

    成功后

    创建podspec成功

    3 编写podspec文件,可以使用Vim,或者Xcode,Sublime也可以,这是一个Ruby文件

    Pod::Spec.newdo|s|# 名称 使用的时候pod search [name]s.name ="XWSwiftRefreshT"# 代码库的版本s.version ="0.1.2"# 简介s.summary ="The easiest way to use pull-to-refresh with Swift2.0 program language."# 主页s.homepage ="https://github.com/boyXiong/XWSwiftRefreshT"# 许可证书类型,要和仓库的LICENSE 的类型一致s.license ="MIT"# 作者名称 和 邮箱s.author = {"boyXiong"=>"relv@qq.com"}# 作者主页 s.social_media_url ="http://blog.csdn.net/boyXiong.com/"# 代码库最低支持的版本s.platform = :ios,"8.0"# 代码的Clone 地址 和 tag 版本s.source = { :git =>"https://github.com/boyXiong/XWSwiftRefreshT.git", :tag =>"0.1.2"}# 如果使用pod 需要导入哪些资源s.source_files ="XWSwiftRefreshT/**/*.{swift}"s.resources ="XWSwiftRefreshT/Icon/xw_icon.bundle"# 框架是否使用的ARCs.requires_arc =trueend

    4 编写完成后,先进行本地检查,使用,如何可以就是绿色,不然会报错

    //pod spec lint [podspec 的路径]pod spec lint ./XWSwiftRefreshT.podspec

    5 注意 这个命令的检查原理,是调用Xcode app的命令检测如果Mac上安装了两个Xcode那么他的检查是根据Application/Xcode.app/这种路径来的,两个Xcode 就要确保Xcode.app是最新的正式版本不是测试版本

    6 然后可以发送到cocoapod管理了

    //pod trunkpush[podspec 的路径]pod trunkpush./XWSwiftRefreshT.podspec

    上传到cocoapod成功

    7.到这里如果成功就搜索的到,那么就是说可以成功使用了

    pod search XWSwiftRefreshT

    spec文件验证

    上传代码至github

    上传podspec文件到CocoaPods仓库(fork一下,修改完成后在push上去等待审核)

    将我们刚刚生成的MyPodDemo.spec 文件上传到Cocoapods官方specs仓库中 :

    链接为:https://github.com/CocoaPods/Specs

    私有库实现,编写podfile

    如果由于某些原因我们编写的库不能公开,但是又想使用pods来进行管理,要怎么办呢?

    首先我们要将我们刚刚在github上建的仓库改为Private(不然还用Public搞毛啊)

    然后修改我们项目的podfile,与已加入Cocopods仓库的公有库相比我们只需要指明私有库低git地址,如下:

    platform :ios, '6.0'

    pod 'MyPodDemo', :git => 'https://github.com/goingta/MyPodDemo.git' //私有库

    pod 'CocoaLumberjack'//公有库

    版本控制和冲突(引用自http://objccn.io/issue-6-4/)

    CocoaPods 使用语义版本控制 – Semantic

    Versioning 命名约定来解决对版本的依赖。由于冲突解决系统建立在非重大变更的补丁版本之间,这使得解决依赖关系变得容易很多。例如,两个不同

    的 pods 依赖于 CocoaLumberjack

    的两个版本,假设一个依赖于2.3.1,另一个依赖于 2.3.3,此时冲突解决系统可以使用最新的版本 2.3.3,因为这个可以向后

    与 2.3.1 兼容。

    但这并不总是有效。有许多第三方库并不使用这样的约定,这让解决方案变得非常复杂。

    当然,总会有一些冲突需要手动解决。如果一个库依赖于 CocoaLumberjack 的 1.2.5,另外一个库则依赖于 2.3.1,那么只有最终用户通过明确指定使用某个版本来解决冲突。

    配置非ARC文件(8.5号补充)

    前几天项目中由于历史原因,导致有一个私有的pods库中某几个文件是在非ARC时代写的,如果要进行修改工程量浩大,于是乎要对这几个文件单独处

    理,这几个文件不使用arc其他文件使用arc,网上查了一些资料,只需要对source_file进行修改并排除那几个不使用ARC的文件就可以了,大

    致修改如下:

    Pod::Spec.new do |s| s.name = "MyPodDemo" s.version = "0.0.1" s.summary = "A short description of MyPodDemo. s.homepage = "https://github.com/goingta/MyPodDemo" s.license = "MIT" s.author = { "goingta" => "tangle1128@gmail.com" } s.source = { :git => "https://github.com/goingta/MyPodDemo.git", :tag => "0.0.1" } s.source_files = "MyPodDemo"non_arc_files = 'MyPodDemo/NoArcFile1.{h,m}','MyPodDemo/NoArcFile2.{h,m}'s.requires_arc = trues.exclude_files = non_arc_filess.subspec 'no-arc' do |sna|sna.requires_arc = falsesna.source_files = non_arc_filesendend

    回退Cocoapods历史版本(2015.3.17号补充)

    查看当前安装了哪些版本

    gem list --local | grep cocoapods

    如果你安装了多个版本(如0.35和0.20.2)那么你将看到

    cocoapods (0.34, 0.20.2)

    cocoapods-core (0.33, 0.20.2)

    cocoapods-downloader (0.2.0, 0.1.2)

    先删除已经装过的版本(可能有几个,卸载的时候会让你输入1,2..n选择卸载那个版本

    sudo gem uninstall cocoapods

    或者强制卸载某一个版本

    gem uninstall cocoapods -v 0.20.2

    安装某一个版本

    sudo gem install cocoapods -v 0.35.0

    处理 Use the `$(inherited)` flag 异常(2015.6.03补充)

    有时候在pod update之后会遇到下面错误:

    - Use the `$(inherited)` flag, or

    - Remove the build settings from the target.

    虽然对项目编译没什么影响,但是看着还是挺不舒服的.解决办法就是

    找到工程的 targets 点击工程名  Build Settings -> Other linker flags -> 添加 $(inherited)

    Cocoapods制作

    1、创建podspec文件

    创建命令

    $ pod speccreateLXToolBar

    podspec内容设置

    ##  Be sure to run `pod spec lint LXToolBar.podspec' to ensure this is a#  valid spec and to remove all comments including this before submitting the spec.##  To learn more about Podspec attributes see http://docs.cocoapods.org/specification.html#  To see working Podspecs in the CocoaPods repo see https://github.com/CocoaPods/Specs/#Pod::Spec.newdo|s|  s.name        ="LXToolBar"s.version      ="0.0.1"s.summary      ="定制的工具条,类似UITabBar,使用AutoLayout技术,支持横竖屏切换"s.homepage    ="https://github.com/xx-li/LXToolBar"s.license      ='MIT's.author      = {"xx-li"=>"13348782277@163.com"}  s.platform    = :ios,'6.0's.source      = { :git =>"https://github.com/xx-li/LXToolBar.git", :tag =>"0.0.1"}  s.source_files  ='LXToolBar/*','LXToolBar/**/*.{h,m}'s.exclude_files ='LXToolBarDemo's.frameworks ='Foundation','CoreGraphics','UIKit's.requires_arc =true# s.xcconfig = { "HEADER_SEARCH_PATHS" => "$(SDKROOT)/usr/include/libxml2" }s.dependency"LXLayoutButton","~> 0.0.1"end

    2、本地git仓库修改内容上传到github仓库

    $git add -A&& git commit -m"Release 1.0.0."$git tag'1.0.0'$git push --tags$git push origin master

    该文件是ruby文件,里面的条目都很容易知道含义。

    其中需要说明的又几个参数:

    s.license

    Pods依赖库使用的license类型,大家填上自己对应的选择即可。

    s.source_files

    表示源文件的路径,注意这个路径是相对podspec文件而言的。

    s.frameworks

    需要用到的frameworks,不需要加.frameworks后缀。

    3、上传

    CocoaPods 0.33中加入了Trunk服务。

    要想使用Trunk服务,首先你需要注册自己的电脑。这很简单,只要你指明你的邮箱地址(一般为spec文件中的)和名称即可。

    $pod trunk register13348782277@163.com"xx-li"--description='你的描述'

    至此,可以通过以下命令来方便地发布和升级你的Pod!可以在后面加--verbose来查看log

    $ pod trunkpushNAME.podspec

    当然,如果你的pod是由多人维护的,你也可以添加其他维护者

    podtrunk add-owner ARAnalytics kyle@cocoapods.org

    4、碰到的问题

    使用pod trunk register 13348782277@163.com "xx-li"无法收到邮件

    将邮箱换成QQ邮箱后OK

    执行pod trunk register无法收到邮件,然后换成其他邮箱执行push,报错:[!] You are not allowed to push new versions for this pod.

    可以先调用pod trunk me查看当前电脑注册的信息

    lixinxingdeiMac:LXLayoutButtonlixinxing$pod trunk me    -Name:xx-li  -Email:x@devlxx.com  -Since:November10th,02:47-Pods:-LXToolBar-Sessions:-November10th,02:47-March18th,201600:34.IP:218.17.157.19Description:iMac27-November11th,00:38-March18th,201600:52.IP:218.17.157.19Description:iMac27-November11th,00:55-March18th,201601:14.IP:218.17.157.19Description:iMac27

    可以调用pod trunk info LXLayoutButton查看被禁止的pod的信息

    lixinxingdeiMac:LXLayoutButtonlixinxing$podtrunkinfoLXLayoutButtonLXLayoutButton-Versions:-0.0.1(2015-04-1301:47:39UTC)-Owners:-xx-li<13348782277@163.com>

    如果刚好此pod所拥有的这个邮箱无法收到邮件,那就只有更换邮箱了,更换邮箱需要申诉

    5、参考博文

    CocoaPods详解之----制作篇

    Publish Your Pods on CocoaPods with Trunk

    CocoaPods


    1.怎么查看本地有多少个repos呢?

    命令  pod repo可以知道本地有几个repo!!

    SZ-lingdaiping:TestPodFrameworkDemo yohunl$ pod repo

    master

    - Type: git (master)

    - URL:https://github.com/CocoaPods/Specs.git

    - Path: /Users/yohunl/.cocoapods/repos/master

    1 repo

    刚刚从中可以看出,其不仅列出了本地共有多少个repo,还包括每个repo的地址

    2.对于一个repo下有很多个podspec,例如master下有成百上千个,那么我们怎么统一验证他们是否都符合规范呢?

    例如我们可以用命令进入~/.cocoapods/repos/yohunlPodSpecs下执行的pod

    repo lint .(有一个点的)是验证这个repo下所有的

    /Users/yohunl/.cocoapods/repos/yohunl

    SZ-lingdaiping:yohunl yohunl$ pod repo lint .

    Linting spec repo `yohunl`

    .

    Analyzed 1 podspecs files.

    All the specs passed validation.

    3.cocoapods的常用命令

    pod list  列出所有可用的第三方库

    pod search query 搜包含query的第三方库   注意:这两个命令只搜存在于本地/Users/yohunl/.cocoapods/ 下的文件

    如果搜索网络的,可以先更新本地  pod repo update master,然后再搜索

    pod lib create frameworkName  创建一个framework工程

    pod lib lint 验证一个podspec文件是否有错误

    podinstall--no-repo-update错误

    这里的参数—no-repo-update,是告诉cocoapods不要更新repo.有么有感觉每次pod install都很慢,那是因为每一次都会先更新本地的repo,加上此参数,就跳过了这个过程,将会很快

    pod init 可以建立一个空的podfile

    建立pod的spec文件   pod spec create spec名字http://www.theonlylars.com/blog/2013/01/20/cocoapods-creating-a-pod-spec/

    pod install命令时会引发许多操作。要想深入了解这个命令执行的详细内容,可以在这个命令后面加上--verbose

    4.其它使用我们建立的framework的方式

    当我们添加

    source'https://github.com/yohunl/yohunlSpecs.git'

    source'https://github.com/CocoaPods/Specs.git'

    并且执行pod install后

    进入.cocoapods文件夹,可以看到  又多了一个repo:yohunl!!!

    这说明什么问题呢?

    这说明我么之前的

    pod repo add yohunlSpecs  git@github.com:yohunl/yohunlSpecs.git

    pod repo push yohunlSpecs YohunlUtilsPod.podspec

    这两句话只是为了给https://github.com/yohunl/yohunlSpecs中添加spec文件啊.当添加完成后,其实我们可以删除添加到本地的repo了

    删除repo的命令

    pod repo remove yohunlSpecs     [pod repo remove  repo名称]

    我们删除我们添加的私有库 [哈哈,其实你都显示了隐藏目录了,也可以直接进去直接删除文件夹的!]

    pod repo remove yohunl

    pod repo remove yohunlSpecs

    删除后,可以看到

    你再执行pod install

    发现 系统会自己根据

    source'https://github.com/yohunl/yohunlSpecs.git'

    source'https://github.com/CocoaPods/Specs.git'

    去下载对应的repos

    如果不加入repos(也就是不添加podspec文件到系统的.cocopods文件夹下).能不能使用cocoapods呢?也是可以的

    target 'TestPodFrameworkDemo' do

    pod 'YohunlUtilsPod' , :path => '/Users/yohunl/YohunlUtilsPod'

    end

    target 'TestPodFrameworkDemoTests' do

    end

    当我们下载了一个含有podspec文件的代码后,如果想使用它,可以直接通过pod的path指定路径 (以前还可以使用 :local,不过现在已经被:path取代了)..cocopods文件夹下的 注意:此处:path后面的路径是指podspec文件所在目录的路径

    执行 pod install

    也是可以的

    不过这种方式添加的,cocoapods会放在 Development Pods文件夹下

    下面这种方式也是可以的 ,并不需要将podspec加入到私有仓库

    #source 'https://github.com/yohunl/yohunlSpecs.git'

    #source 'https://github.com/CocoaPods/Specs.git'

    target 'TestPodFrameworkDemo' do

    #pod 'YohunlUtilsPod' , :path => '/Users/yohunl/YohunlUtilsPod'

    pod 'YohunlUtilsPod',:git => 'https://github.com/yohunl/YohunlUtilsPod.git'

    end

    target 'TestPodFrameworkDemoTests' do

    end

    还有以下的方式

    #pod 'YohunlUtilsPod' , :path => '/Users/yohunl/YohunlUtilsPod'  #可以

    #pod 'YohunlUtilsPod',:git => 'https://github.com/yohunl/YohunlUtilsPod.git'  #可以

    #pod 'YohunlUtilsPod',:podspec => '/Users/yohunl/YohunlUtilsPod/YohunlUtilsPod.podspec'  #指定podspec文件,可以

    #pod 'YohunlUtilsPod',:podspec => 'https://github.com/yohunl/YohunlUtilsPod/blob/master/YohunlUtilsPod.podspec'  #经过测试,这种方式不行

    #pod 'YohunlUtilsPod',:podspec =&

    gt; 'https://github.com/yohunl/YohunlUtilsPod.git/YohunlUtilsPod

    /YohunlUtilsPod.podspec' #测试不行,提示找不到podspec文件

    如果你能够确定你的podspec文件是正确可用的话,完全可以直接向https://github.com/yohunl/yohunlSpecs添加podspec文件(当然要符合格式要求哦)

    5.打包framework的第三方插件命令

    cocoapods的插件cocoapods-packager来完成类库的打包,安装命令sudo gem install cocoapods-packager  它的好处是,需要特别强调的是,该插件通过对引用的三方库进行重命名很好的解决了类库命名冲突的问题

    参考文档

    http://www.cnblogs.com/brycezhang/p/4117180.html使用CocoaPods开发并打包静态库

    http://www.iwangke.me/2013/04/18/advanced-cocoapods/#jtss-tsina

    http://www.iwangke.me/2013/04/18/advanced-cocoapods/

    http://eric-gao.iteye.com/blog/2128283提交framework到cocoapods官方去

    http://www.cocoachina.com/ios/20150508/11785.html建立私有库

    http://blog.sigmapoint.pl/automatic-build-of-static-library-for-ios-for-many-architectures/

    发布自己的pods到CocoaPods trunk

    时间 2014-11-12 00:00:00iloss

    原文http://www.iloss.me/post/kai-fa/2014-11-12-creat-pod

    主题CocoaPods

    之前有写过一次自己制作pods提交到cocoapods但是2014年5月20日Cocoapods不在接受向CocoaPods/Specs的pull request,改为trunk服务。

    以前我们用的podspec为ruby格式,而trunk带来了更方便的json格式,以后可以用json来配置pod。 之前我们发布的pod也会转换未json文件

    准备

    首先更新了用trunk之后,CocoaPods 需要0.33版本以上的,用pod --version查看,如果版本低,需要更新,之前有介绍更新方法。

    下一步注册trunk

    pod trunk register orta@cocoapods.org 'Orta Therox' --description='macbook air'

    你注册的时候需要替换邮箱和名字,加上--verbose可以看到详细信息。

    然后顺利的话你会收到一份邮件,需要点击验证。

    pod trunk me //查看自己的注册信息

    当然,如果你的pod是由多人维护的,你也可以添加其他维护者

    pod trunk add-owner ARAnalytics kyle@cocoapods.org

    创建podspec

    执行命令:

    pod spec create HZWebViewController

    会在当前目录下生成HZWebViewController.podspec文件,然后我们编辑这个文件。

    podspec文件里面有很多注释。我们看个例子

    一眼看去就很明白了,不用一一解释了,当然,这里的配置项远远多于这些。

    ok这里配置完成之后,需要把你的源码push到github上,tag一个版本号并且发布一个release版本,这样podspec文件中的s.source的值才能是准确的。

    这些操作也不属于本文的所研究的范畴。

    提交

    上面的工作完成之后,我们就可以开始trunk push了

    pod trunk push命令会首先验证你本地的podspec文件(是否有错误),之后会上传spec文件到trunk,最后会将你上传的podspec文件转换为需要的json文件

    第一步验证podspec文件也可以自己去做pod spec lint Peanut.podspec

    成功部署之后,CocoaPods会在Twitter上@你

    我们可以看看我们提交的名字为:HZWebViewController的pod

    pod search HZWebViewController

    我们也可以在本地的~/.cocoapods路径下看到,转换之后的json文件

    补充 Claim your Pod

    如果你之前提交过pod,那么trunk之后你需要去(Claim your Pod)认领

    在这个页面:https://trunk.cocoapods.org/claims/new

    输入你的信息,如下图:

    send之后就开始等待,官方提示是过了过渡期就你就可以提交新版本了

    这样就愉快的结束了

    相关文章

      网友评论

      • 程小曦:作者你好,我在自己的库中依赖了afnetworking,但是不知道如何配置,望告知,谢谢
      • fankang:mark

      本文标题:如何将你写的框架添加cocoapod支持[转]

      本文链接:https://www.haomeiwen.com/subject/anlckttx.html