美文网首页
通过cocoaPod生成spec文件

通过cocoaPod生成spec文件

作者: 杨空空 | 来源:发表于2017-04-11 15:04 被阅读299次

    一个简单的spec文件如下

    Pod::Spec.new do |s|
    s.name = '框架名'
    s.version = '0.1.0'
    s.summary = 'A short description of ZYTemplateName.'
    s.homepage = 'https://github.com/ripperhe/ZYTemplateName'
    s.license = { :type => 'MIT', :file => 'LICENSE' }
    s.author = { '框架作者' => '作者邮箱' }
    s.source = { :git => 'https://github.com/ripperhe/ZYTemplateName.git', :tag => s.version.to_s }
    s.ios.deployment_target = '8.0'
    s.source_files = '框架名/Classes/*/'
    end

    先进入需要发布的框架的根目录,执行

    $ pod spec create [NAME]

    这里的 NAME 即为框架名字,不需要手动加 .podspec 后缀。执行完成之后,会生成 NAME.podspec 文件,进入该文件,将对应信息改为你具体的信息即可。

    如果你发现你的 spec 文件默认填写的用户名和邮箱不是你刚才利用 trunk 命令注册账号时候填写的不用惊讶,因为默认取的是 git 的用户名和邮箱,所以想修改的话,去修改 ~/.gitconfig 文件中的用户名和邮箱。以下为相关源码:

    def default_data_for_template(name)
    data = {}
    data[:name] = name
    data[:version] = '0.0.1'
    data[:summary] = "A short description of #{name}."
    data[:homepage] = "http://EXAMPLE/#{name}"
    data[:author_name] = git config --get user.name.strip
    data[:author_email] = git config --get user.email.strip
    data[:source_url] = "http://EXAMPLE/#{name}.git"
    data[:ref_type] = ':tag'
    data[:ref] = '#{s.version}'
    data
    end

    spec 文件的这些描述,基本上看命名是可以看明白的。实在不明白可以查看 官方文档https://guides.cocoapods.org/syntax/podspec.html#specification
    需要注意的是,s.version 是你将要发布的 pod 仓库的版本,s.source 是你的仓库源地址和对应的 tag 信息。

    version 和 tag 可以是不同的,但是为了方便管理和维护,我们一般将其设置为一样的,所以 tag 可以 直接使用 s.version.to_s。既然这里用到了 tag,那么接下来,就需要为仓库代码打上 tag。

    提交代码并为框架打 tag

    首先,需要将本仓库的所有修改提交到远程仓库。

    $ git add .
    $ git ci -m 'release pod'
    $ git push

    上一步在仓库的根目录创建了 spec 文件,随着代码的提交,spec 文件也会提交到自己的远程代码仓库。这个 spec 文件和需要发布的框架放在一起并不是必须,只是这样可以方便我们以后维护这个框架。

    发布 pod 仓库,需要和自己框架的远程仓库代码版本对应,所以这里需要为当前代码打上 tag,这个 tag 是和前面的 spec 文件中填写的 tag 对应的。框架发布成功之后,CocoaPods 会根据 tag 信息去获取相应代码。

    $ git push origin master
    $ git tag '0.1.0'
    $ git push --tags

    验证 spec 文件

    用于验证 spec 文件是否正确,可以及早发现问题。同样,也是在需要发布的框架的根目录,执行

    $ pod spec lint NAME.podspec

    这里需要加上 .podspec 后缀来验证这个文件。如果有报错,仔细查看报错信息,一般可以定位问题,可以加上 --verbose 查看详细的验证过程,方便定位问题。

    $ pod spec lint NAME.podspec --verbose

    验证 spec 文件也可以用另外一个命令

    $ pod lib lint NAME.podspec

    pod spec lint 和 pod lib lint 最主要的区别是,前者会根据 spec 文件 tag 信息去验证远程仓库代码是否存在,后者不会。简单理解就是,pod spec lint 联网检查,pod lib lint 不联网检查。

    验证的时候,可能会报错,或是报警告。报错的话,必须解决,详细看具体信息,一般能找到问题,如果不能,自行 google 😁。警告的话,可以忽略,不过能解决的话,最好解决。

    $ pod lib lint ZYTemplateName.podspec --allow-warnings

    推送 spec 文件

    验证文件通过之后,需要将文件推送到 CocoaPods 描述文件仓库,在框架根目录,执行以下命令:

    $ pod trunk push NAME.podspec

    这个命令,可以不在后面加描述文件名称,如果不加的话,会在终端当前工作目录下查找 .podspec 文件,执行 trunk push 命令。

    这一步稍微会久一点,需要等待一会儿,因为 CocoaPods 需要先将 spec 文件上传到 CocoaPods/Specs 仓库,再 git pull 到本地 CocoaPods/Specs 仓库。等待显示成功之后,可以验证以下自己的框架是否真的发布成功了。搜索一下:

    $ pod search [NAME]

    如果搜索不到,可能是仓库的索引库出现问题,将其删除,重新生成索引。索引缓存地址:

    ~/Library/Caches/CocoaPods/search_index.json

    如果这样还不行,有可能是官方的 spec 仓库 出现问题。官方 spec 仓库路径:

    ~/.cocoapods/repos/master

    将其删除,再重新克隆官方的 spec 仓库:

    $ pod setup

    这个时候再试试 pod search 应该就有了。
    对于公司内部使用的组件模块,一般是不公开的,所以就需要用到私有 sepc 仓库。

    将代码发布到私有仓库和 CocoaPods 官方库最大的区别就是,不需要利用 trunk 命令创建 session。既然整个私有库都是你的,所以也没有必要再有账号机制了,自己想怎样就怎样。

    少做了一件事情,但也有额外的事情需要做。前面 spec 文件都是 CocoaPods 帮你管理的,所以做私有 pod,就需要创建私有 spec 仓库。

    整体流程如下:

      安装 CocoaPods
      创建远程私有 spec 仓库
      克隆远程私有 spec 仓库到本地
      创建 spec 文件
      提交代码并为框架打 tag
      验证 spec 文件
      通过 pod repo push 推送 spec 文件
      很多流程是相同的,相同的流程一笔带过。
    

    另一种方式

    1. 执行命令

    projectName--项目名称
    pod lib create projectName

    2. 选项设置

    What language do you want to use?? [ Swift / ObjC ]
    ObjC
    Would you like to include a demo application with your library? [ Yes / No ]
    Yes
    Which testing frameworks will you use? [ Specta / Kiwi / None ]
    Kiwi
    Would you like to do view based testing? [ Yes / No ]
    No
    What is your class prefix?
    项目缩写

    相关文章

      网友评论

          本文标题:通过cocoaPod生成spec文件

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