CocoaPods创建管理类库的步骤

2023-11-18

用到的命令
1.  git clone 'https://github.com/jackLeong/MySDK.git' //克隆一份远程仓库
2.  git add fileName //把文件纳入git的缓存区,可使用 * 代替目录下的所有文件
3.  git status -s //查看文件修改状态
4.  git commit -m 提交信息 //提交缓存区的内容和文件到本地仓库
5.  git push //将本地分支仓库推送到与之有追踪关系的远程分支
6.  pod repo add REPO_NAME REPO_URL //在CocoaPods目录在创建.podspec仓库
7.  pod repo push REPO_NAME xxx.podspec //将.podspec文件推送到仓库
8.  pod repo remove REPO_NAME //删除指定仓库
9.  pod update --no-repo-update  //更新Podfile的指定的依赖
10. git tag xxx //为最近提交打标签,xxx一般标签为版本号
11. git push origin --tags //推送标签

一 CocoaPod管理远程git仓库

在github上创建一个仓库,这个仓库存放类库文件和.podsepc文件并使用pod工具引用这个类库。在公司开发项目,一般会把类库源文件放在公司的SVN或git服务器上面。为了模拟pod管理类库就选择使用github,步骤如下

1.在github上新建一个新的源代码仓库MySDK
2.在Desktop文件夹下创建一个Framework工程:MySDK
3.在MySDK中新建一些类用于测试
4.从github上克隆这个新的仓库到Desktop/temp

进入到Deskstop/temp/目录,终端输入:
git clone https://github.com/jackLeong/MySDK

5.将Framework工程MySKD下的所有文件copy到克隆的仓库MySKD

在终端,进入Deskstop目录下,输入cp -r MySDK/* temp/MySDK/,以后添加文件,文件修改可以在这个仓库工程里做

6.将copy的文件添加到git缓存区

进入到仓库MySDK目录 ,终端输入命令:
cd temp/MySDK/
git add *
再查看文件状态:
git status -s,在终端输出可以看到新添加的文件

7.将缓存区的修改文件提交到本地分支

在终端输入:git commit -m 提交SDK文件

8.为刚才的提交,打个标签,可以标志它的版本号,标签默认与最近commit绑定

在终端输入:git tag 1.0.0

9.把本地分支推送到远程分支

在终端输入:git push

10.把本地标签也推上去

在终端输入:git push origin --tags

11.创建podspec文件,.podspec它是类库的描述文件,说明了类库的版本信息,简介以及指定了pod工具拾取文件的规则等。.podspec的名称要和你的项目名称一样,如你的项目名为xxx,那么.podspec则名为xxx,不要写.podspec后缀,进入到MySDK目录下
 在终端输入:```pod spec create MySDK```
12. 关键的一步,正确填写.podspec文件的内容,其中以#开头的是被注释掉的语句,我们要根据自己情况来填未注的内容或补充填写被注掉的内容。
Pod::Spec.new do |s|
  s.name         = "MySDK"  //.podspec文件名称
  s.version      = "0.0.1"            //指定.podspec文件的版本号,必须要与仓库的版本号一致    
  s.summary      = "A short description of MySDK.podspec,that is it" //摘简信息
  s.description  = <<-DESC    //开始标志
                       Just test,so what I can say Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,Nothing,
                   DESC     //结束标志    


  s.homepage     = "https://github.com/jackLeong/MySDK"//主页地址,可以你的博客,简书或github地址,反正是一个可正确访问的网页地址
  s.license      = {:type=>"MIT", :file=>"LICENSE"} //类库的许可,其它人对你的类库拥有MIT所指定的权利


  s.author             = { "xxxx" => "119999900@qq.com" }//作者名称,邮箱

  # ――― Platform Specifics 指定类库适用平台―――――――――――――――――――――――
  //如果这个pod库只运行在iOS或者OS X,就指定platform和发布的平台版本号
  s.platform     = :ios, "8.0" //平台iOS, 适用8.0+

  # ――― Source Location 资源定位 ―――――――――――――――――――――――――――――――――――――――――――――――――――――――――― #
  # 指定可寻找并检索类库资源的位置,支持 git,svn,http

  //这个非常关键,要根据情况(是svn还是git)来填,:tag 标签要与s.version所指定的一样。记得给git仓库打标签
  s.source       = { :git => "https://github.com/jackLeong/MySDK.git", :tag =>s.version }

  # ――― 代码源文件 ――――――――――――― #
  #  CocoaPods具有很智能的代码源文件拾取功能。
  //这是它的示例,可以用","隔开指定多个路径Classes是文件夹名称
  # s.source_files  = "Classes", "Classes/**/*.{h,m}"
  # s.exclude_files = "Classes/Exclude"  

  s.source_files  = "MySDK/*.{h,m}"  

  # ――― Project Linking 链接所需要的库――――――――――――――――――― #
  # s.framework  = "SomeFramework"
  # s.frameworks = "SomeFramework", "AnotherFramework"
13. 本地检验.podspec是否正确

在终端输入:pod lib lint

警告如下

-> MySDK (1.0.0)
    - WARN  | summary: The summary is not meaningful.

[!] MySDK did not pass validation, due to 1 warning (but you can use `--allow-warnings` to ignore it).
[!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a `.swift-version` file to set the version for your Pod. For example to use Swift 2.3, run: 
    `echo "2.3" > .swift-version`.
You can use the `--no-clean` option to inspect any issue.

如果有警告,pod是认为.podspec是校验不通过的,可以加上参数--allow-warnings重新校验,或者修改文件,kill掉warinnig

14.校验成功后,将MySDK.podspec推送到远程仓库

在终端执行以下命令:git add MySDK.podspec, git commit -m 提交.podspec文件,pod push

15.使用github上的MySDK类库,在工程的Podfile文件引入:
# Uncomment the next line to define a global platform for your project
    platform :ios, '8.0'

    target 'TestMyPod' do
  # Uncomment the next line if you're using Swift or would like to use dynamic frameworks
  # use_frameworks!

  # Pods for TestMyPod
    pod 'MySDK',  :git=>'https://github.com/jackLeong/MySDK.git'

end

然后,更新一下pod:
在终端输入:pod update --no-repo-update,如果首次安装pod,可以输入:pod install

二 创建并使用CocoaPods私有仓库

在工作中,公司的类库(或SDK)一般是不公开给其它人使用的,而公司内部开发员共同管理使用这个类库,可以像第一小节那样把类库和.podspec文件放到svn或git上,也可以在CocoaPods安装目录下(~/.cocoapods/)创建仓库来存放.podspec文件。

CocoaPods安装成功后,在用户目录下会有一个叫master的仓库,master里的Specs文件夹存放了所有第三方类库的.podspec文件,所以说master是一个公有仓库。我们可以创建私有仓库,来存放.podspec文件。

1.创建CocoaPods私有仓库

在github上或git服务器创建一个JL-Specs.git仓库(反正是一个空的git仓库):
然后把JL-Specs.git添加到CocoaPods下作为私有仓库,在终端输入:

 pod repo add lzf-specs https://github.com/jackLeong/JL-Specs.git

之后,在.cocoapods/repos下出现一个JL-Specs.git的仓库,它就是我们的私有仓库。

2.将类库的.podspec文件放入私有仓库JL-Specs

将第一小节的MySDK.podspec放入私有仓库JL-Specs
在终端输入:

//注意:这步pod会同时把仓库新增的文件同步到远程分支的
pod repo push JL-Specs MySDK/MySDK.podspec

之后,在JL-Specs仓库存有类库MySDK的.podspec文件

私库.png

3.使用私有仓库,在工程的Podfile文件写入:
    platform :ios, '8.0'

    target 'TestMyPod' do

  # use_frameworks!
  #私库要指定.podspec所在的仓库,如果既有公共库又有私库,还要加上
  #source 'https://github.com/CocoaPods/Specs.git'
    source 'https://github.com/jackLeong/JL-Specs.git'
    pod 'MySDK', '~>1.0.0'
end

然后,更新一下pod:
在终端输入:pod update --no-repo-update,如果首次安装pod,可以输入:pod install

三 在CocoaPods公开你的仓库

如果要像我们引用AFNetworking那样来让别人引用你的类库,需要把自己的库公开到CocoaPods仓库。

1.申请CocoaPods账号

在终端输入: pod trunk 邮箱 '用户名'

2.把.podspec推送到CocoaPods的Specs.git仓库

在终端输入: pod trunk push MySDK.podspec

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CocoaPods创建管理类库的步骤 的相关文章

  • 以弯曲格式显示文本

    我正在寻找以曲线格式绘制一些文本 我使用哪个控件并不重要 UITextField UILabel or UITextView 我只想显示如图所示的文本 仍在寻找解决方案 请帮忙 查看此链接 https nodeload github com
  • UITableView 滑动删除 iOS 上的手势冲突

    我的手势识别器有问题 我的目标是在表视图中实现使用滑动删除 但我认为其他手势是相互冲突的 我正在使用这个库romonthego REFrostedViewController https github com romaonthego REF
  • 如何将 LC_LOAD_DYLIB 命令插入 Mach-O 二进制文件或将静态库加入现有二进制文件 (IOS)

    这是我第一次在 stackoverflow 上提问 我很绝望 我的任务是加载 dylib 或将静态库加入到 IOS 设备的现有可执行文件中 我将使用static void attribute constructor initialize v
  • 可以获取位置,但无法获取航向

    我目前只使用模拟器 但我在 iOS 模拟器上快速使用 CoreLocation 时遇到问题 我得到此代码打印的位置更新 但从未得到标题 我不想当然 我正在尝试制作一个指南针类型的应用程序 它将显示目标的方位 class CompassVie
  • XCode 4.5 给我“SenTestingKit/SenTestKit.h”文件未找到,但适用于 4.4.1

    我刚刚安装了 XCode 4 5 它在我现有的项目之一上给了我一个 SenTestingKit SenTestingKit h 文件未找到错误 此错误仅发生在 XCode 4 5 中 但它在 4 4 1 上编译正常 我已经检查过SenTes
  • NSCFData fastCharacterContents 崩溃? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我目前在控制台中收到此崩溃日志 20
  • AWS S3 公共对象与私有对象?

    回到 S3 我的存储桶中有图像的 URL 我将在我的应用程序中呈现这些图像 但它们被设置为私有 当我尝试单击该链接时 它显示 访问被拒绝 当我将链接的设置更改为公共时 它会通过 但是我读到公共访问并不是最安全的事情 所以这本质上是一个由两部
  • 企业发行版在 Swift 应用程序中与 iOS8 配合不佳

    我在使用 swift 应用程序在 iOS 8 设备上运行 Enterprise 版本时遇到问题 如果我使用非企业帐户进行代码签名 它似乎工作正常 有人遇到这个问题吗 以下是我在尝试使用企业帐户运行构建以进行协同设计时在 iOS 设备上收到的
  • iOS 上的 UIBezierPath 操作

    我从一条直线开始 我希望用户能够触摸并拖动该线 使其弯曲 实际上 他们有能力将线条操纵成波浪形状 我不确定从技术上实现这一目标的最简单方法 我首先创建了三次曲线的 UIBezierPaths 数组 目的是操纵控制点 但似乎一旦绘制了 UIB
  • AVCaptureSession 具有多个方向问题

    我正在尝试实现条形码扫描仪 我有一个 AVCaptureSession 它从 AVCaptureDevice 接收视频 我想支持所有方向 使用以下代码 当我运行应用程序时 纵向一切正常 然而 在横向方向上 视图会旋转 但视频输入不会旋转 所
  • 在 IOS 上使用 AVComposition 混合两个音频文件

    我正在尝试混合两个音频文件 将一个音频文件放在另一个音频文件之上 不是缝合在一起 但我在 IOS 上学习 AVFoundation 时遇到了困难 我在这里遵循了这个答案 如何使用 AVMutableCompositionTrack 合并音频
  • 自定义 UITableViewCell 选择样式?

    当我点击我的UITableViewCell 当我单击单元格时 背景部分 我的背景图像未覆盖的区域 会变成蓝色 另外 所有的UILabel单击时单元格上的 s 变为白色 这就是我想要的 然而 我不想要的是当我点击它时的蓝色背景 但如果我这样做
  • 推入 UINavigationController 时隐藏 FBFriendPickerViewController 导航栏

    介绍一个实例FBFriendPickerViewController using presentViewController animated completion 非常简单 该类似乎是针对该用例的 但是 我想推送一个实例FBFriendP
  • 使用 Interface Builder 创建 UIScrollView 的步骤

    我正在尝试使用 UIScrollView 但似乎有一些基本的事情我不理解 假设我想在我的 iPhone 应用程序中使用 UIScrollView 我有一个充满按钮的视图 尺寸为 320x700 显然 这对于 320x480 的 iPhone
  • 以编程方式触发iOS摇动事件

    如何以编程方式触发 iOS 中的摇动事件 我尝试过以下方法 但它总是崩溃 void shake NSLog TEST UIMotionEventProxy m NSClassFromString UIMotionEvent alloc in
  • iOS 循环对象的属性并添加操作

    我有一个具有几个类似属性的类 UISliders 我想添加用户开始和结束使用每个滑块时的操作 每个滑块都将链接到同一个选择器 因此我考虑只是迭代它们 而不是编写 10 个几乎相同的代码块 问题是 最有效的方法是什么 我尝试过这样的事情 在运
  • 在故事板中的视图控制器之间滑动手势

    我希望添加左右滑动手势来在视图控制器之间进行更改 这是否可能 并且有没有一种简单的方法可以在故事板中执行此操作 谢谢 故事板允许您在两个视图控制器之间设置 Segues 我想说首先在视图之间附加 Segues 给它一个标识符 然后使用类似的
  • RemoteIO 音频单元播放回调中的 AudioBufferList 内容

    我想 拦截 音频数据传送到 iOS 设备扬声器的过程 我相信这可以使用 RemoteIO 音频单元和回调来完成 在下面的playbackCallback中 ioData实际上包含任何音频数据吗 static OSStatus playbac
  • IPV6 快速可达性

    我是 swift 和 xcode 的新手 并且我的应用程序因 IPV6 而被拒绝 性能 2 1 当我们执行以下操作时 您的应用程序会在运行 iOS 9 3 5 并连接到 IPv6 网络的 iPad 和 iPhone 上崩溃 具体来说 当我们
  • 为什么使用 iPhone 或 iOS 设备在“iframe”中查看“position:fixed”时不起作用?

    我研究过 stackoverflow 似乎position fixed在 iOS 移动设备的 iframe 中 https stackoverflow com questions 15874910 position fixed and if

随机推荐

  • 淘宝问问:电商AI,重新定义购物体验

    AI大模型进展的如火如荼 怎么少得了电商平台的参与 淘宝率先打响了第一枪 每一个软件都会有自己的 Copilot 淘宝的就叫 淘宝问问 用户可以在淘宝上使用 淘宝问问 来获取商品信息 价格 评价等 当前是内测版 虽有惊喜 但终究是刚刚发布内
  • 同态加密的原理详解与go实践

    学习资料来源 知乎VenusBlockChain https zhuanlan zhihu com p 110210315 知乎刘巍然 https www zhihu com question 27645858 answer 3759850
  • 空间注意力机制_计算机视觉中attention机制的理解

    一 前言 简介 对于attention机制的理解 在看了attention is all you need这篇文章和参考网上一些文章之后 做一个简单的理解和总结 在 attention is all you need 的这篇文章中给出了在n
  • PySide6-控件教程-006-QLabel标签控件-信号

    QLabel 标签控件 本文摘录自我的开源教程 PySide6 代码式教程 QLabel CSDN 平台仅做镜像 答疑 纠错请至 GitHub 提交 issue 信号 QLabel的可用信号只有链接被悬停 链接被点击两种 具体如下 link
  • 金融安全视角农民投资理财的实证研究——以X县为例

    金融安全视角农民投资理财的实证研究 以X县为例 摘要 近年来 随着经济全球化进程的推进 国民收入逐年增加 人们的经济意识也在一定程度上提高 适当的投资和财务管理正在迅速发展 然而 大部分调查数据显示 农民面临的诸多问题还有很多其他原因 包括
  • Qt技巧:QTextEdit显示网络图片

    Qt5的QNetworkAccessManager 类可以很方便的访问网络资源 QNetworkRequest类可以用于发送网络请求 而QNetworkReply则负责接收处理网络资源 今天遇到一个问题 如何在QTextEdit上显示一张网
  • 字节跳动(今日头条),为何战斗力如此凶猛?

    本文转载自公众号 中产之路 年前 一位久未联系的朋友问京杭君 有没有研究过今日头条 还有没有上升空间 这位朋友在杭州阿里工作多年 后出来创业 有猎头联系他 今日头条要在杭州成立技术中心 招负责人 那时候 今日头条 还是这间公司最重要的产品
  • 编辑器Vim

    vi简介 vi是 Visual interface 的简称 它在Linux上的地位就仿佛Edit程序在DOS上一样 它可以执行输出 删除 查找 替换 块操作等众多文本操作 而且用户可以根据自己的需要对其进行定制 Vi不是一个排版程序 它不象
  • 蓝牙耳机BES 2300P 主从配对连接,以及主从自定义收发数据

    恒玄SDk预留了用户接口位于app ibrt customif cmd cpp 中 发送数据的前提是进行主从配对连接 sdk给与了两种模式 IBRT SEARCH UI 未定义时我们可以自己定义主从蓝牙地址 IBRT SEARCH UI 定
  • 服务器系统能耗,服务器能耗怎么计算

    服务器能耗怎么计算 内容精选 换一换 DESS磁盘扩容成功后 需要在裸金属服务器的操作系统中对扩容部分的磁盘分配分区 已登录裸金属服务器 详细操作请参见 裸金属服务器用户指南 中章节 登录Windows裸金属服务器 已挂载磁盘至裸金属服务器
  • JS实现约瑟夫环

    传说罗马人占领了乔塔帕特 41 个犹太人被围堵在一个山洞里 他们拒绝被俘虏 而决定集体自杀 大家决定了一个自杀方案 41 个人围成一个圈 由第 1 个人开始顺时针报数 每报数为 3 的人立刻自杀 然后再由下一个人重新从 1 开始报数 依旧是
  • 笔记本电脑微信视频对方却听不到声音

    我真的是把网上的所有教程 试遍了都没弄好 我自己突发奇想要不然更新下 结果就成功了 首先可以先看看是不是微信版本的原因 麦克风出现问题了 右击我的电脑 gt 属性 gt 设备管理器 gt 音频输入和输出 gt 右击麦克风 gt 更新驱动程序
  • 数值分析Matlab二维正态(高斯)分布以及协方差矩阵

    数值分析Matlab二维正态 高斯 分布以及协方差矩阵 主要是使用了matlab的mvnrnd产生随机的正态 高斯 分布二维矩阵 然后绘制出来 代码运行结果生成的正态分布实验数据如图 MATLAB代码 mu1 0 0 sigma1 4 2
  • ACM输入输出

    写在前面 主要记录一下ACM输入输出的写法 一 输入数值 1 给定N的定长多行输入 题目 https ac nowcoder com acm contest 5657 B 代码 include
  • 【Java】基于朴素贝叶斯算法破解基于哈希表的随机字符替换加密算法

    Java 基于朴素贝叶斯算法破解基于哈希表的随机字符替换加密算法 不用看了 这篇文章是错的 得出的结果也不是正确的结果 我想错了 因为这个解密算法的前提是已经知道哈希表的情况下去计算的 而实际上应该是只靠统计去分析密文 所以实际破解所需要的
  • Unity模型导入相关知识

    文章目录 常见的模型格式 模型导入参数设置 Model页签 Scene设置 Meshes设置 Geometry设置 Rig页签 Animation Type 动画类型 Avatar化身信息设置 Animation页签 基础信息设置 动画剪辑
  • 童年回忆——切水果(内含源码inscode一键运行)

    前言 作者主页 雪碧有白泡泡 个人网站 雪碧的个人网站 推荐专栏 java一站式服务 React从入门到精通 前端炫酷代码分享 从0到英雄 vue成神之路 uniapp 从构建到提升 从0到英雄 vue成神之路 解决算法 一个专栏就够了 架
  • vue项目中使用pdf.js预览pdf文件

    项目要求需要预览pdf文件 网上找了很久 大多数都是推荐pdf js 自己起了解了一下 最后决定用pdf js 但是发现 在vue中使用这个很少 所以我就写这一篇帮助一下vue使用pdfjs的朋友 其实 这和前端框架无关的 直接使用pdf
  • 网络模拟(Network_simulation)

    https en wikipedia org wiki Network simulation In computer network research network simulation is a technique whereby a
  • CocoaPods创建管理类库的步骤

    用到的命令 1 git clone https github com jackLeong MySDK git 克隆一份远程仓库 2 git add fileName 把文件纳入git的缓存区 可使用 代替目录下的所有文件 3 git sta