• CocoaPods公有库和私有库制作


    认识公有库和私有库

    • 公有库:开源自己封装的库供别人使用,且往cocoaPods的官方Repo仓库(即CocoaPods Master Repo)中新增自己库的索引,该库索引是以*.podspec.json文件形式存在。
    • 私有库:私有库不在cocoaPods的官方Repo仓库中,而是在自建的spec repo中,库索引是以*.podspec文件形式存在,自建的spec repo放在路径~/.cocoapods/repos下,与master同级,其链接的远程仓库可以是公开的,也可以是私有的。

    私有库链接私有仓库的例子:公司项目放在公司内网搭建的git服务器中,有些功能在多个项目中都会用到,这就需要抽成库。为了便于维护和升级,使用cocoaPods来管理。由于置于内网git服务器中,这些库只有在公司内网才能安装。

    私有库链接公开仓库的例子:阿里巴巴有一个叫阿里百川的开放平台,提供了淘宝联盟SDK,将SDK制作成了私有库,整合在自建的阿里云Repo仓库中,这样既能提供给其他开发者使用,又能避免混乱地发布在cocoaPods的官方Repo仓库中。

    • Spec Repo表示Repo仓库(镜像源),是集合所有公开库的.podspec.json文件(索引文件)的git仓库。
      当使用Cocoapods时它会被clone到本地的~/.cocoapods/repos目录下,进入目录后可以看到master文件夹,它就是官方的Spec Repo本地仓库。
      因此创建CocoaPods私有库就需要有类似master的私有Spec Repo,让它关联远程git仓库。

    搭建私有库和公有库

    • 私有库和公有库前面搭建步骤是相同的,只在发布时操作不同。
    相同步骤
    • 1.github上新建空白项目pod_test。仓库网址为https://github.com/xxx/pod_test,该仓库链接我们的自定义库pod_test。
    • 2.创建Pods工程。
      命令pod lib create pod_test,依次回答终端问题。

    设置完成后终端会输出

    成功后会创建出一个pod_test工程,目录结构如下:

    • 3.添加库文件。
      将编写好的库文件拉入pod_test/classes中,删掉ReplaceMe.m文件。
      然后cd Example文件夹下,终端执行pod install或pod update,目录结构如下:

    打开pod_test.xcworkspace,其Pod目录的虚拟目录Development Pods/pod_test下就有库文件了。

    • 4.提交pods库到github上。
      由于pod lib创建pod_test工程时默认已经准备了LICENSE、README.md、.gitignore三个文件,若在github上创建新建空白项目pod_test时勾选了这三个文件,则git pull时会产生冲突。解决方式:将pod_test工程目录下与github项目冲突的文件删除。
      此外,pod_test目录下默认准备了.git仓库,会影响与github仓库的同步,删除掉。
      cd到pod_test目录下
    git init
    git remote add origin https://github.com/xxx/pod_test
    git pull origin main
    git add .
    git commit -m "第一次提交项目" 
    git push origin master:main
    
    • 5.配置Pods工程的.podspec文件。主要是s.version、s.summary、s.source的编辑。
      pod_test.podspec的内容如下:

    关于字段的含义:

    s.name :pod search 搜索的关键词,注意这里一定要和.podspec的名称一样
    s.version :版本号,每一个版本对应一个tag
    s.summary : 简介
    s.homepage : 项目主页地址
    s.license : 许可证
    s.author : 作者
    s.social_media_url : 社交网址
    s.source : 项目的地址
    s.source_files : 需要包含的源文件
    s.resources: 资源文件
    s.requires_arc : 是否支持ARC
    s.dependency :依赖库
    s.ios.deployment_target = '8.0' : 支持的pod最低版本
    

    s.source_files = 'pod_test/Classes/**/*',这里**表示匹配所有子目录,*表示匹配所有文件。

    • 6.打标签,推送到远程。
    git add .
    git commit -m '设置podspec文件'
    git push origin master:main     #提交到远端仓库
    git tag 0.0.1    #这里的版本号必须和podspec中的s.version值相同
    git push --tags
    

    tag必须要打上,CocoaPods进行仓库版本管理时,就是通过.podspec文件中s.version的值到git远程仓库上找与之相同的tag标签的版本。
    补充:

    打tag时加注释的写法:git tag 0.0.1 -m '写注释'
    查看所有tag内容:git tag -l -n
    
    • 7.验证.podspec文件的格式是否正确,必须打完tag才能验证。
      cd到pod_test目录,执行命令
    pod spec lint --allow-warnings 或
    pod lib lint pod_test.podspec --allow-warnings
    

    pod spec相对于pod lib会更为精确,pod lib相当于只验证一个本地仓库,pod spec会同时验证本地仓库和远程仓库。
    终端打印"pod_test passed validation"即为验证成功。
    至此,算是搭建了本地的自定义库,接下来发布阶段的操作决定了最后是私有库还是公有库。

    后续操作产生私有库

    8.创建私有的Spec Repo。
    github上新建空白项目mySpecs,网址https://github.com/xxx/mySpecs.git,作为Repo仓库,本地生成私有的Spec Repo工作目录:

    pod repo add mySpecs https://github.com/xxx/mySpecs.git
    

    那么在路径~/.cocoapods/repos下就会有mySpecs本地仓库。
    9.把pod_test.podspec提交到自建的Spec Repo仓库:

    pod repo push mySpecs pod_test.podspec
    

    之后mySpecs本地仓库里面多了pod_test库的索引,同时会push同步到https://github.com/xxx/mySpecs.git。
    至此,私有库pod_test完成。

    后续操作产生公有库

    8.把pod_test.podspec提交到官方Spec Repo仓库:

    pod trunk push pod_test.podspec --allow-warnings
    

    若显示"pod_test successfully published"就表示成功发布到官方Spec Repo仓库了。
    若报错没有注册CocoaPods账号,则注册一个,命令:

    pod trunk register gitHub_email 'user_name' --verbose
    

    然后到邮箱中收取邮件来点击验证注册,之后再执行一次pod trunk push pod_test.podspec --allow-warnings即可。
    至此,公有库pod_test完成。
    提交之后cocoaPods官网更新会延迟,耐心等待半小时,然后将其更新到本地master spec repo:

    pod repo update
    rm ~/Library/Caches/CocoaPods/search_index.json
    pod search pod_test    #重新下载search_index.json
    
  • 相关阅读:
    【刷题笔记10.6】LeetCode:汉明距离
    【C++ 学习 ⑧】- STL 简介
    C++ 实现基于时序公平的读写锁
    数据预处理
    大数据旅游数据分析:基于Python旅游数据采集可视化分析推荐系统
    Pod控制器-ReplicaSet(RS)
    2023年最全的外贸建站新手教程
    【程序进程及相关命令】
    Linux服务器,使用ssh登录时越来越慢,有时甚至出现超时的现象,解决方案
    Flink SQL通过Hudi HMS Catalog读写Hudi并同步Hive表(强烈推荐这种方式)
  • 原文地址:https://www.cnblogs.com/johncahong/p/15995070.html