一、Podfile & .podspec 文件

1、Podfile

1.1. 什么是 pod

简单来说,一个 pod 就是 xcode 里面的一个 dependency:

Anyway,pod 就是第三方库的意思。一个 pod 就是指一个第三方库。

1.2. Podfile 有什么用

Podfile 可以理解为就是一个用 ruby 写的脚本文件。这个文件的主要功能就和 Xcode 自带的 Swift Packages Manager (SPM)一样 —— 用来给自己的 iOS 项目加 dependencies 的。

像图中的第 11 行代码,它的意思就是在 Xcode 加一个叫 PrivateMath 的 dependencies,并且和 SPM 一样,把这个 dependencies 的 target 定为 Calculator.

其实 Podfile 还有另外一个用处,但这个在下面讲 pod install 时才会提到。

1.3. 如何配置一个最基本的 Podfile

其实配置一个最基本的 Podfile 并没有想象中那么困难,只要:

  • 指定 iOS 的版本号
  • 指定 podspecs 仓库的远程地址
  • 给特定的 target 加 dependencies

2、.podspec 文件

2.1. 什么是 .podspec 文件

.podspec 的全写就是 pod specification,就是 pod 说明书。所以从后缀名就可以看出,.podspec 文件就是用来描述一个第三方库的基本信息的;或者说 .podspec 文件存的是这个第三方库除源代码以外的信息(比如这个库的作者、库的版本、库的源代码的仓库地址、库所支持的 swift 版本……)。

以下图 PrivateMath 这个第三方库的 .podspec 文件举例:

这个 .podspec 文件存的就是:

  • 这个库的名字是 PrivateMath
  • 这个 .podspec 文件描述的是 0.3.0 版本的 PrivateMath 库
  • PrivateMath 这个库的首页地址是:https://github.com/chuanzhima0415/PrivateMath
  • PrivateMath 这个库只支持 swift 5.0 的版本
  • PrivateMath 这个库的作者是 chuanzhima0415
  • PrivateMath 这个库的源代码地址是:https://github.com/chuanzhima0415/PrivateMath.git
  • PrivateMath 这个库只支持 iOS 12.0 及以上的 iPhone 运行

2.2. 如何配置一个最基本的 .podspec 文件

在新建一个第三方库时终端执行 pod lib create ${ 自己写的库的名字 } 命令后,cocoapods 会给你生成一个最基本的 .podspec 文件的模版,其中我们要改的部份就是:

  • s.summary:这个库的大概描述
  • s.description:这个库的详细描述
  • s.swift_version:这个库所适用的 swift 版本
  • s.homepage:这个库的首页地址
  • s.source:这个库的源代码的地址
  • s.ios.deployment_target:这个库适用于 iOS 的哪个版本

但需要注意的是:

  • s.description 的内容一定要比 s.summary 的内容长很多,要不然 pod lib lint 和 pod spec lint 会过不了
  • s.source 一定要正确
  • s.homepage 选一个可以打开的网页地址就行了
  • 一定要指定 swift_version,要不然 pod lib lint 和 pod spec lint 会过不了
  • Xcode 的 iOS app 项目里的 iphone 设备版本一定要大于等于 s.ios.deployment_target

二、podspec 仓库

1、什么是 podspec 仓库

看名字就知道了,podspec 仓库就是专门存第三库的 .podspec 文件的仓库。注意,这个仓库只存第三方库的  .podspec 文件,不存第三库的源代码!!!

2、如何配置 podspec 仓库

例子:假设我现在要配置一个叫 PrivateSpecs 的 podspec 仓库,然后这个仓库内部存有自己写的 PrivateMath 库的 .podspec 文件。

step1:在 github 上创建一个远程的仓库,名字一般为 xxxSpecs。这里的 README、证书都可以勾,但要把 visibility 设为 Private

step2:终端执行 pod repo add ${ .podspec 远程仓库的名字 }  ${ podspec 远程仓库的地址 }

step3:终端执行 pod lib create ${ 自己写的库的名字 }。后面会跳出多行的选择,记住 test 的框架要选 none,然后 view 模版也选 no。选完回车后 xcode 会弹出一个模版

step4:在 pods target 下的 Development Pods/${ 自己写的库的名字 }/ReplaceMe 文件写自己的库代码了。顺便也可以把 ReplaceMe 改为自己库的名字。

写第三方库的源代码
写第三方库的源代码

把 ReplaceMe 文件名改为 MathTool

step5:写完之后还要去到 Development Pods/${ 自己写的库的名字 }/ Pod 目录下配置 ${ 自己写的库名字 }.podspec:

  • s.description 一定要比 s.summary 要长很多(不然验证不通过)
  • 一定要规定 s.swift_version
  • 确保 s.source 链接一定要正确
  • s.homepage 只要写一个可以访问到的 url 就行了

step6:根据 .podspec 的 source 地址在 GitHub 上建一个存库源代码的仓库(README, 证书那三样都不要勾,否则可能会有分支错误

step7:根据 github 的提示,把这个本地的库项目 push 到远程 github 存库源代码的那个库

Github 提示

step8:git tag ‘0.1.0’ (tag 号码一定要跟 .podspec 文件的 s.version 要一致!

版本是 0.1.1!!!

step9:打标签,即终端运行:git push --tags

step10:验证库的源代码,即终端执行:pod lib lint

step11:验证库的 .podspec 文件,即终端执行:pod spec lint

step12:把 .podspec 文件 push 到存 .podspec 的远程仓库中,即终端执行:pod repo push ${ 存 .podspec 文件的远程仓库名 }  库项目下的 .podspec 文件

step13:推送完成

3、如何使用 podspec 仓库

Xcode 开了一个 app 项目后:
step1:终端执行 pod init 指令(执行完会生成 Podfile 文件)


step2:Xcode 配置 Podfile

step3:终端执行 pod install 命令

step4:打开 .xcworkspace 文件

step5:build 项目,可能会遇到 CoreStore.framework/_CodeSignature" failed: Operation not permitted 报错,参考下文 pod install 命令介绍的第 3 点。

step6:此时可以使用第三方库了

三、cocoapods 相关命令

1、pod init

生成 podfile 文件,然后你要在这个 podfile 文件里面写你要加载的库(add dependencies)。

注意:这个命令并没有加载库,只是要你写要加载的依赖而已。

2、pod install

2.1. pod install 有什么用

根据 podfile 的内容把库加载进项目中。即增加依赖,但如果重新 pod install 并不会改变库的版本;生成 Podfile.lock(这个文件定死了库的版本)

注意:如果你已经改变了 Podfile 的内容,在 Xcode build 项目前一定要重新执行 pod install!因为一旦改过 dependence 的获取路径(比如从本地路径改为远程地址),然后如果不执行 pod install,直接 Xcode build 的话,因为远程的库源代码没有下载下来,所以Xcode 会找不到这个库,于是就会报错说找不到库。

2.2. pod install 背后的流程

在终端执行 pod install 时,其实 cocoapods 会帮我们做这些事情:

  1. 读取 Podfile 文件,并根据 Podfile 里指定的版本算出应该获取这个库的那个版本。当然,如果有 podfile.lock 文件的话,cocoapods 还会看 podfile.lock 中的版本和 Podfile 的版本是否一致,如果一致的话就算出这个库应该下载的版本号。
  2. 如果此时的版本号本地缓存里有的话,就不用下载这个存库源代码的仓库了,而是直接用缓存里的库的源代码。
  3. 如果缓存没有这个版本号的话,就要远程下载库的源代码了。然后下载完后把源代码存进缓存中。
  4. 生成 Pods 项目,并生成一个 Pods.xcodeproj 的文件。以后你只能打开这个文件,因为这个文件把 iOS app 的项目跟所有 dependencies 链接在一起了。
  5. 生成一个 .xcworkspace 的文件。
  6. 如果没有 podfile.lock 文件,就生成 podfile.lock 文件。

2.3. pod install 的坑:CoreStore.framework/_CodeSignature" failed: Operation not permitted 

如果执行 pod install 之后报 # CoreStore.framework/_CodeSignature" failed: Operation not permitted 错,请不要慌张,解决方法就是 build settings -> 搜 sand boxing -> 把 Yes 改成 No。就解决了。

3、pod update

重写 Podfile.lock ,把所有旧的版本改成新的;但不会把新的 dependencies 加载进项目,只是仅仅写 Podfile.lock 而已。

4、pod repo list

显示所有存 .podspec 的仓库的名字、远程地址、本地地址。

5、pod repo remove ${ 存 .podspec 的仓库的名字 }

删除 .podspec 仓库。

6、pod search ${ 存 .podspec 的仓库的名字 }

找特定的存 .podspec 的仓库。

7、pod repo add ${ 存 .podspec 的仓库的名字 }

往 pod repo list 中增加存 .podspec 的仓库。

8、pod lib create ${ 自己写的库的名字 }

让 cocoapods 给你创建一个第三方库的模版。

9、pod cache clean --all

清空存有 pod 的源代码的缓存。

10、pod cache list

列出缓存里所有的库的地址、名字等信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/92442.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/92442.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/92442.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

编程速递:2025 年巴西 Embarcadero 会议,期待您的到来

每个英雄都有一段充满奋斗的旅程,这段旅程引领他走向荣耀,而开发者英雄的旅程是2025年巴西Embarcadero大会的重点,以庆祝Delphi成立30周年。网站现已上线巴西Embarcadero在世界上最受期待的Delphi发展英雄会议召开前90天,推出了Em…

DevOps简单教程应用

文章目录概念一、环境准备二、gitlab配置三、.gitlab-ci.yml文件配置概念 Devops是一个概念,就是边开发边测试,能够大大提升开发效率,本文使用pycharmgitlab实现一个简单的DevOps流程 一、环境准备 需要一个测试环境,模拟部署&…

华为流程管理体系构建与落地 之—— 业务流程规划【附全文阅读】

这部分内容聚焦华为业务流程管理,详细阐述了流程规划、设计、运营、评估与优化的具体方法和内容,为企业构建和完善流程管理体系提供了全面的指导。流程规划分类方法:介绍 POS、OES、OMS 等分类法,如 POS 法按规划、运营、支持划分…

Android 项目:画图白板APP开发(零)——功能介绍(笔锋,分页,缩放,多指,硬件加速等)

一、前言 本系列将全面的介绍一些有关Android 画图方面的知识。笔触功能包括:颜色、粗细、透明度、笔锋、橡皮;绘图功能包括:分页、缩放、多指、撤销恢复、笔画加速。别看功能这么多,简单的部分会花较少篇幅介绍,着重会…

香橙派 RK3588 部署千问大模型 Qwen2-VL-2B 推理视频

演示视频 香橙派RK3588部署千问大模型Qwen2-VL-2B推理视频一、场景假设 视频输入为一条网络流,利用大模型对视频中的图像帧进行推理。由于大模型推理耗时长,无法对每帧都进行推理,因此采用跳帧推理的方式:当推理完一帧后&#xf…

排序概念以及插入排序

一、排序基本概念1.就地排序:使用恒定的额外空间来产生输出就地排序只是在原数组空间进行排序处理,也就是输入的数组和得到的数组是同一个2.内部排序和外部排序:待排序数据可以一次性载入到内存中为内部排序,反之数据量过大就是外…

Webpack 核心配置与最佳实践指南

Webpack 是现代前端工程化的核心工具,理解其配置原理和优化技巧对开发效率至关重要。 一、Webpack 基础架构 1、核心概念关系图 2、核心概念详解 概念 作用 示例配置 Entry 应用入口起点 entry: ‘./src/index.js’ Output 编译结果输出位置 output.path: path.resolve(__d…

GISBox私有云+SaaS:安全协同的地理智能平台

一、概述 GISBox(GIS 工具箱)是一套能够对GIS 影像、地形、倾斜摄影进行场景编辑、切片转化、分发服务的 GIS 工具箱。同时,GISBox还支持私有云并一键开启SaaS服务。 二、什么是私有云? 私有云服务是一种为企业或组织量身定制的…

代理人工智能的隐藏威胁

代理型人工智能的自主性令人兴奋,但事实并非如此。主动性越高,不可预测性就越强,这为严重的、往往被忽视的安全风险打开了大门。从指令劫持到数字供应链的连锁故障,代理型人工智能不仅智能,而且在不受控制的情况下非常…

SonarQube 扫描多个微服务模块

SonarQube 扫描多个微服务模块 在使用 SonarQube/SonarCloud 扫描多个微服务模块时,核心目标是​​确保每个微服务模块被独立分析​​,并在 SonarQube 界面中以独立项目展示结果。以下是具体实现方案,分场景说明: ​​一、前提条…

当前主流且经过市场验证的开源 BI 系统推荐

以下是当前主流且经过市场验证的开源 BI 系统推荐,结合技术特性、适用场景和行业实践,为不同需求提供针对性解决方案:一、综合型开源 BI 平台1. Apache Superset(Apache 2.0 协议)核心优势:全场景覆盖&…

第05章 排序与分页

1.排序数据 1.1 排序规则 1.2 单列排序 1.3 多列排序 2.分页 2.1 背景 背景1:查询返回的记录太多了,查看起来很不方便,怎么样能够实现分页查询呢? 背景2:表里有 4 条数据,我们只想要显示第 2、3 条数据怎么办呢? 2.2 实现规则 分页原理:所谓分页显示,就是将数据…

第4章 程序段的反复执行4.2while语句P128练习题(题及答案)

&#xff08;&#xff08;1&#xff09;阅读程序#include <bits/stdc.h> using namespace std; //汤永红 int main(){int n,s0;cin >> n;while(n){s s * 10 n % 10;n / 10;}cout << s << endl;return 0; }分别输入&#xff1a;0 1024 1234567890输出…

Linux下管道的实现

1.温故知新在上一篇博客我们知道了动态库是怎么样进行链接的&#xff0c;我们知道我们的.o文件&#xff0c;可执行文件都是我们的ELF格式的文件&#xff0c;是ELF文件&#xff0c;里面就有ELF header&#xff0c;程序头表&#xff0c;节&#xff0c;还有节头表&#xff0c;我们…

光猫、路由器和交换机

光猫&#xff1a;全称为光调制解调器&#xff0c;负责光信号与电信号的转换。在光纤入户的网络环境中&#xff0c;运营商通过光纤传输光信号&#xff0c;光猫将其转换为电脑、路由器等设备能识别的电信号&#xff0c;反之亦然。它是用户端与运营商网络之间的桥梁&#xff0c;保…

从零开始理解编译原理:设计一个简单的编程语言

编译原理是计算机科学的核心领域之一&#xff0c;它研究如何将高级编程语言转换为目标机器能够执行的代码。对于许多开发者来说&#xff0c;编译原理可能是一个神秘而复杂的领域&#xff0c;但实际上&#xff0c;通过系统的学习和实践&#xff0c;我们可以逐步掌握其核心概念和…

年轻新标杆!东方心绣脸韧带年轻技术升级发布

年轻新标杆&#xff01;东方心绣脸韧带年轻技术升级发布近日&#xff0c;“东方心绣脸韧带年轻品项升级发布会”圆满落幕。本次发布会聚焦现代女性面临的衰老困扰&#xff0c;正式推出技术升级成果——“韧带年轻”品项&#xff0c;旨在通过更科学的方案&#xff0c;助力求美者…

qt文件操作与qss基础

文章目录qt文件操作文件概述文件读写文件属性界面优化qss基础选择器的用法结语很高兴和大家见面&#xff0c;给生活加点impetus&#xff01;&#xff01;开启今天的编程之路&#xff01;&#xff01; 作者&#xff1a;٩( ‘ω’ )و260 我的专栏&#xff1a;qt&#xff0c;Li…

spring.config.import 不存在

确认spring.config.import的语法是否正确根据Spring Cloud的官方文档&#xff0c;该属性的值应该指向配置信息&#xff0c;例如对于Nacos配置中心&#xff0c;其格式通常为&#xff1a;spring:config:import: nacos://<nacos-server-addr>/<data-id>?group<gro…

kettle插件-kettle MinIO插件,轻松解决文件上传到MinIO服务器

场景&#xff1a;周二下班刚下地铁的时候有一位大佬&#xff0c;咨询kettle是否可以适配MinIO&#xff0c;功能要实现将图片或者base64通过kettle直接上传到MinIO服务器。接到需求&#xff0c;沟通需求&#xff0c;开干。经过3天左右研发和调试MinIO插件已经成功交付&#xff0…