使用CocoaPods创建开源库和私有库详解

笔者看了许多关于使用CocoaPods创建开源库的文章,大都写的不尽详细,尤其是对于从来没有创建过开源库的同学,不知道哪个步骤文章没写,在验证 .podspec 文件时就一堆错误,一脸懵逼。本文是一篇从零开始创建一个自己的开源库甚至是私有库分享,如有问题,评论交流。

首先,你需要注册一个CocoaPods账号,email使用你的GitHub邮箱,起一个用户名,打开终端:

pod trunk register GitHub_email 'user_name' --verbose

等终端出现下面文字,CocoaPods 会发一个确认邮件到你的邮箱,登录你的邮箱进行确认。

[!] Please verify the session by clicking the link in the verification email that has been sent to you_email@163.com

验证成功出现下图:
在这里插入图片描述
回到终端:

pod trunk me

会看到你的注册信息:
在这里插入图片描述

创建开源库

首先创建Git远程公有仓库
在这里插入图片描述
在你本地要创建项目的目录执行

pod lib create 'ADTextFieldLimit'

根据命令行的提示一步步选择,最后会为你创建一个模板工程和.podspec文件、README.md文件、MIT LICENSE文件等。 并且还会自动帮你打开Xcode,目录结构如下:
在这里插入图片描述

我们把要开源的核心代码放在红色区域所在的目录下,此时通过Cocoapods创建出来的目录在本地的Git管理下,我们需要把它添加到远端仓库:

git add .
git commit -m 'Initial Commit'
git remote add origin https://github.com/liushuorepo/ADTextFieldLimit.git	#添加远端仓库
git push origin master     #提交到远端仓库

此时项目已经被推到了远程端,下面要做的就是修改.podspec文件,配置成下面这样:

Pod::Spec.new do |s|
  s.name             = 'ADTextFieldLimit'    #项目名称
  s.version          = '0.0.1'          	 #版本号 与仓库的标签号对应
  s.summary          = 'This is a light library to limit the lenght of what you input.'  #项目简介
  s.description      = <<-DESC
This is a light library to limit the lenght of what you input. Thankyou!
                       DESC
  s.homepage         = 'https://github.com/liushuorepo/ADTextFieldLimit'  #Git上项目主页
  # s.screenshots     = 'www.example.com/screenshots_1', 'www.example.com/screenshots_2'
  s.license          = { :type => 'MIT', :file => 'LICENSE' }  #开源证书
  s.author           = { 'liushuorepo' => 'xxxx@163.com' }     #项目作者
  s.source           = { :git => 'https://github.com/liushuorepo/ADTextFieldLimit.git', :tag => s.version.to_s }
  # s.social_media_url = 'https://twitter.com/<TWITTER_USERNAME>'
  s.ios.deployment_target = '9.0'
  s.source_files = 'ADTextFieldLimit/Classes/**/*'
  s.user_target_xcconfig = {
        'GENERATE_INFOPLIST_FILE' => 'YES'
  }
  s.pod_target_xcconfig = {
        'GENERATE_INFOPLIST_FILE' => 'YES'
  }
  # s.resource_bundles = {
  #   'ADTextFieldLimit' => ['ADTextFieldLimit/Assets/*.png']
  # }
  # s.public_header_files = 'Pod/Classes/**/*.h'
  s.frameworks = 'UIKit'
  # s.dependency 'AFNetworking', '~> 2.3'
end
  • s.source 指定源,你的Git仓库地址
  • s.source_files 指明哪些源文件会被包含进去,比如s.source_files =
    ‘ADTextFieldLimit/Classes/**/*’,**表示匹配所有子目录,*表示匹配所有文件,.{h,m}表示匹配其中的.h和.m文件。
  • s.license,一般写法有s.license = ‘MIT’ 或 s.license = { :type => ‘MIT’, :file => ‘LICENSE’ }, LICENSE对应.podspec所在目录下的名为LICENSE文件。
  • s.platform = :ios, “7.0”,s.ios.deployment_target = ‘7.0’,指定可用平台和版本,如果支持多个平台应该使用后者,并指定其他平台的版本如s.osx.deployment_target =“10.7”。
  • s.public_header_files,公开的头文件,如果指定,在pod lint验证时,会以framework的形式验证,一般可以不用这个配置。
  • s.frameworks、s.libraries,指定依赖的系统库。两者内容都需要去除后缀,其中s.libraries需要去除前缀lib,如静态库依赖是libz.tbd,则s.libraries= ‘z’。
  • s.vendored_libraries 、s.vendored_frameworks 如果开源库中是一个静态库,使用这个指定静态库。如微博的podspec中s.vendored_libraries = ‘libWeiboSDK/libWeiboSDK.a’
  • s.xcconfig 指定项目配置,如HEADER_SEARCH_PATHS 、OTHER_LDFLAGS等,e.g s.xcconfig = { “OTHER_LDFLAGS” => “-ObjC” }
  • s.resource_bundles 指定包含的资源文件。
  • s.dependency 指定依赖,如s.dependency = ‘AFNetworking’
    更多信息可查阅官方文档:http://guides.cocoapods.org/syntax/podspec.html

验证 .podspec 文件的格式是否正确:

pod lib lint ADTextFieldLimit.podspec --verbose
  • –verbose 会给出详细的信息。
  • –allow-warnings 允许警告,默认有警告的podspec会验证失败。
    –fail-fast 遇到错误马上停止,默认会完成全过程再停止。
  • –use-libraries 如果项目中引用了.a、.framework,在验证和提交时需要加。
  • –sources 如果此podspec 依赖了其他不包含在官方specs里的pod,则用它来指明源,比如依赖了某个私有库。多个值以逗号分隔。

验证成功出现:

 -> ADTextFieldLimit (0.0.1)
 
ADTextFieldLimit passed validation.

验证成功后,推到远程:

git add .
git commit -m '添加关键文件'
git push origin master     #提交到远端仓库

打标签:

git tag 0.0.1
git push --tags

发布 .podspec:

pod trunk push ADTextFieldLimit.podspec

发布成功,出现下面提示:
在这里插入图片描述
发布成功后,会把podspec更新到官方的repo中,可以访问:https://cocoapods.org/pods/ADTextFieldLimit 在CocoaPods官网搜索到自己的pod,也可以执行下面的命令来搜索:

pod search 'ADTextFieldLimit'

但是有时候你在官网搜到了,而你在终端执行pod search 时却报错:

[!] Unable to find a pod with name, author, summary, or description matching `ADTextFieldLimit`

这是因为有可能你本地的repo不是最新的,执行更新,然后重新搜索:

pod repo update

如果还是搜不到,可能是因为搜索的缓存导致,删除缓存重新搜索:

rm ~/Library/Caches/CocoaPods/search_index.json
pod search 'ADTextFieldLimit'

搜所结果如下:
在这里插入图片描述
然后别人就可以在项目中导入你的开源仓库了。

创建私有库

创建私有库和公有库步骤基本类似,区别是:

需要先在Git上创建远程私有仓库,然后在本地目录下执行:

pod repo add 'repoName' 'repo URL'

编辑 .podspec,同上

验证 .podspec,如果依赖了其他私有库,需要使用–sources指定source。

pod lib lint BaseFundation.podspec --sources=https://github.com/liushuorepo/XMTextFieldLimit.git

发布 .podspec

pod repo push 'BaseFundation' BaseFundation.podspec

使用私有库

platform :ios, '9.0'
use_frameworks!
# 共用的pod第三方
pod 'BaseFundation', :git => 'https://github.com/liushuorepo/BaseFundation.git'
# 项目中的target各自的设置
target "xuanmeng" do
    #xuanmeng独自引用
end

很多时候,在开发过程中,我们希望在开发私有库的过程中,修改代码后不用一直打tag并执行pod update,我们可以这样写Podfile:

pod 'BaseFundation', :path => '~/Desktop/BaseFundation'

这样在普通的修改代码时,不需要重新打tag并pod update,但是当工程结构有变化(文件移动,增删等)、podspec修改,最好执行一次pod update。

参考文章:

  1. CocoaPods公有仓库的创建:https://www.tuicool.com/articles/uq6NJnJ
  2. 使用Cocoapods创建私有podspec:http://www.cocoachina.com/ios/20150228/11206.html
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值