iOS开发提效cocoapods插件cocoapods-util

news2024/9/21 1:48:26

cocoapods-util介绍

cocoapods-util是一个iOS开发提效的cocoapods插件。

取名util的原因是我想做一个通用的插件,把一些iOS中常用的命令或问题整理起来。

插件中除了package命令是根据cocoapods-packager插件做了修改而来,其余命令都是属于自己总结开发场景下的需求实现的,希望对各位iOSer有所帮助。

目前已支持功能有:

  1. pod repo push命令优化,解决push私有库慢、验证时间长易失败的问题
  2. 查看Pods组件安装列表(详细情况)以及各pod组件间的依赖关系
  3. 根据podspec文件打包生成二进制(.a、.framework、.xcframework)
  4. 把现有framework生成xcframework
  5. 二进制源码链接调试
  6. 去除project.pbxproj文件重复引用

好了,话不多说,看一下插件怎么安装使用吧。

安装

$ gem install cocoapods-util

使用介绍

通过此命令查看util插件支持的所有功能

$ pod util --help

命令介绍

1. repo push

介绍

推送私有pod仓库的命令,可以跳过验证、跳过编译过程,用于快速发布私有pod。

  • 可以通过添加--skip-validate的选项跳过验证步骤。
  • 可以通过添加--skip-build的选项跳过编译,但是会验证tag,需要确保tag已存在。
$ pod util repo push --help

该命令是一个提效命令,在推送自己私有仓库的时候可以通过设置--skip-validate选项跳过验证直接推送到私有仓库。

插件只是在原来的命令基础上扩展了两个参数,执行命令的时候如果不配置这两个参数,那么和原命令完全一样。

示例

只需要在正常执行pod repo push命令的时修改成pod util repo push。

$ pod util repo push [yourSpecs] [xxx.podspec] --skip-validate

2. install list

介绍

查看Pods安装的列表(详细情况)

  • 可以省去开发者自己去阅读Podfile.lock文件的时间,直接友好的提示
  • 可以清晰的看出引用的组件个数、组件依赖情况、组件被依赖的情况、组件分支tag信息、仓库地址等有效信息
  • 建议在Podfile文件所在目录执行此命令
$ pod util install list --help

示例

$ pod util install list --showmore

Tips:我在最新的插件版本中重新实现了此命令,使用cocoapods中Installer类提供的依赖解析方法来解析组件的依赖,实现更简单,可以递归的查找到所有依赖的组件。

 3. xcframework

介绍

可以把现有的framework生成xcframework。

该命令可以分析出是某个平台的framework(如ios、osx、watchos),直接在framework同级目录生成xcframework。

根据不同平台的framework,分别提取真机、模拟器对应架构的二进制,最终再组合成xcframework文件。

示例

把现有的Alamofire.framework生成Alamofire.xcframework

$ pod util xcframework Alamofire.framework --force 

 

4. package

介绍

通过podspec文件生成library、framework、xcframework。

  • 支持swift和混编
  • 支持自定义配置dependency(如配置某个组件为branch依赖)
  • 支持排除模拟器
  • 支持多平台(ios、osx、watchos、tvos)
  • 支持自定义设置工程的build settings(如:排除ios模拟器64位架构、设置支持的架构等)
  • 支持设置modular_headers
$ pod util package --help

示例

生成xcfrmework、framework或library

克隆AFNetworking的源码到本地,进入AFNetworking源码的根目录下,执行下面的命令

$ pod util package AFNetworking.podspec --force --local --xcframework

$ pod util package AFNetworking.podspec --force --local --framework

$ pod util package AFNetworking.podspec --force --local --library

排除模拟器

如果你不需要编译模拟器架构,可以添加--exclude-sim

$ pod util package AFNetworking.podspec --force --local --xcframework --exclude-sim

平台设置

如果你只需要编译ios架构下的xcframework,可以添加--platforms=ios

$ pod util package AFNetworking.podspec --force --local --xcframework --exclude-sim --platforms=ios

build settings配置

如果你想要做一些build settings特殊配置,可以添加 --build-settings,如设置编译选项排除模拟器arm64架构。理论上来讲,可以像直接操作工程一样,灵活的配置build settings

  • 如设置排除arm64位架构
$ --build-settings='{"EXCLUDED_ARCHS[sdk=iphonesimulator*]":"arm64"}'
  • 设置编译swift生成swiftinterface文件
$ -build-settings='{"BUILD_LIBRARY_FOR_DISTRIBUTION":"YES"}'
  • 或者你想设置多个编译选项
$ -build-settings='{"EXCLUDED_ARCHS[sdk=iphonesimulator*]":"arm64","BUILD_LIBRARY_FOR_DISTRIBUTION":"YES","VALID_ARCHS":"arm64"}'

自定义dependencies

如果你依赖的组件并没有发布到私有仓库,只是分支依赖。 如果你依赖的组件和官方源有冲突,你需要修改指定source源,这时候你可以通过配置--dependency-config={}选项指定仓库分支、tag或指定source源。

$ --dependency-config='{"PodA":{"git":"xxx","branch":"xxx"},"PodB":{"source":"xxx"}}'

5. linksource

介绍

源码二进制链接功能。

$ pod util linksource --help

这个命令实现比较简单,但是也不太实用。简单来说就是源码路径在多台电脑上很难统一,还会有权限问题。

6. uniq

介绍

对xcodeproj --> project.pbxproj文件做重复引用的去重。

该命令的来源是我发现工程的.pbxproj文件变得非常大,最大时发现有10M的大小,在执行pod的更新时会卡在install的执行过程User Project Integration这一步很长的时间。

我检查了一下这个工程文件,发现这里面有许多重复的引用,这是由于项目长期merge代码的过程中没有很好的解决冲突,保留了相同的引用,所以才有了这个命令。

我尝试对pbxproj文件做了去重,文件大小从10M减小到了1.7M,再执行pod install安装时就不会再卡在User Project Integration这一步骤了。

$ pod util uniq --help

示例

$ pod util uniq project.xcodeproj

反馈

如果使用中有什么问题,可以提交评论,也可以去我的项目地址中去提交issue,我看到后会尽快回复。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uwb高精度定位系统源码 UWB高精度定位技术原理与实现

uwb高精度定位系统 UWB高精度定位技术原理与实现 近些年物联网产业高速发展,越来越多的物联网终端连上了网络,实现了人与物,甚至物与物之间的互连互通。随着智能化要求的进一步提高和物联网应用的进一步拓展,除了互联互通&#x…

Doxygen源码分析:doxygen执行过程的拆解

Doxygen源码分析:doxygen执行过程的拆解 2023-05-19 23:09:17 ~ 2023-05-20 16:38:13 ChrisZZ imzhuofoxmailcom Hompage https://github.com/zchrissirhcz 文章目录 Doxygen源码分析:doxygen执行过程的拆解1. doxygen 版本2. doxygen 可执行程序的入口…

System V方案 — 共享内存

目录 System V方案 — 详述共享内存共享内存共享内存的原理共享内存数据结构共享内存函数实例 消息队列消息队列数据结构消息队列函数创建删除 信号量信号量数据结构信号量函数创建删除 进程互斥 总结 System V方案 — 详述共享内存 SystemV标准的进程间通信方式,是…

【react 全家桶】react-Hook(上)

本人大二学生一枚&#xff0c;热爱前端&#xff0c;欢迎来交流学习哦&#xff0c;一起来学习吧。 <专栏推荐> &#x1f525;&#xff1a;js专栏 &#x1f525;&#xff1a;vue专栏 &#x1f525;&#xff1a;react专栏 文章目录 14【react-Hook &#xff08;上&#x…

计算机网络基础知识(六)—— 什么是HTTP协议?你听我说

文章目录 01 | 基本概念02 | 工作原理 && 特点03 | URI && URL04 | 消息结构05 | 请求方法06 | http响应头信息07 | 状态码08 | HTTP的常见安全机制09 | HTTP的缓存机制10 | HTTP/2 && HTTP/3新特性11 | 面试中常见问题 超文本传输协议&#xff08;Hyp…

【前端知识】Cookie, Session,Token和JWT的发展及区别(四)

【前端知识】Cookie, Session,Token和JWT的发展及区别&#xff08;四&#xff09; 9. JWT9.1 JWT的背景及定义&#xff08;1&#xff09;JWT的字面理解&#xff08;2&#xff09;JWT与传统Token的区别 9.2 JWT的组成&#xff08;1&#xff09; Header&#xff08;头部&#xff…

【UDS】诊断故障代码老化机制

文章目录 简介相关术语1. 老化计数器 Ageing counter2. 诊断故障代码已老去 DTC aged3. 已老去计数器 Aged counter4. 操作循环 Operation cycle5. 诊断故障代码老化机制 DTC aging mechanism 总结 ->返回总目录<- 简介 诊断故障代码&#xff08;DTC&#xff09;一旦生…

【IDEA使用指南】使用Hibernate框架的Java项目,如何找到并打开 “Import Database Schema”窗口?

【IDEA使用指南】使用Hibernate框架的Java项目&#xff0c;如何找到并打开 “Import Database Schema”窗口&#xff1f; 背景&#xff1a; 使用 Hibernate 框架时&#xff0c;假如在 “Import Database Schema” 窗口&#xff08;如下图所示&#xff09;时&#xff0c;点击了…

day06_Java中的流程控制语句

流程控制 简单来讲所谓流程就是完成一件事情的多个步骤组合起来就叫做一个流程。在一个程序执行的过程中&#xff0c;各条语句的执行顺序对程序的结果是有直接影响的。我们必须清楚每条语句的执行流程。而且&#xff0c;很多时候要通过控制语句的执行顺序来实现我们想要的功能…

.Net6 使用aspose.cells23.5.0破译

一、测试代码 internal class Program { static void Main(string[] args) { WorkbookDesigner wb new WorkbookDesigner(new Workbook()); var style new CellsFactory().CreateStyle(); style.Borders.SetColor(C…

路径规划算法:基于缎蓝园丁鸟算法的路径规划算法- 附代码

路径规划算法&#xff1a;基于缎蓝园丁鸟优化的路径规划算法- 附代码 文章目录 路径规划算法&#xff1a;基于缎蓝园丁鸟优化的路径规划算法- 附代码1.算法原理1.1 环境设定1.2 约束条件1.3 适应度函数 2.算法结果3.MATLAB代码4.参考文献 摘要&#xff1a;本文主要介绍利用智能…

交换式以太网的诞生

电路交换&#xff0c;终端(电话)独占端线路自然而然&#xff0c;天经地义&#xff0c;可计算机收发的是数据包(即数据分组)&#xff0c;当多台终端接入到同一个共享介质的网络&#xff0c;所有终端可 “同时” 收发数据&#xff0c;一起统计复用网络&#xff0c;多台终端如何协…

Linux常用命令——htop命令

在线Linux命令查询工具 htop [非内部命令]一个互动的进程查看器&#xff0c;可以动态观察系统进程状况。 补充说明 htop命令 是Linux系统中的一个互动的进程查看器&#xff0c;一个文本模式的应用程序(在控制台或者X终端中)&#xff0c;需要ncurses。 与Linux传统的top相比…

【5.20】五、安全测试——概念与漏洞

目录 5.1 安全测试概述 5.1.1 什么是安全测试 5.1.2 安全测试的基本原则 5.2 常见的安全漏洞 5.2.1 SQL注入 5.2.2 XSS跨站脚本攻击 5.2.3 CSRF攻击 软件安全测试是软件测试的重要研究领域&#xff0c;它是保证软件能够安全使用的最主要手段&#xff0c;做好软件安全测试…

pg事务:multixact

什么是multixact&#xff1f; 在对同一行加锁时&#xff0c;元组上关联的事务ID可能有多个&#xff0c;pg将多个事务ID组合起来用一个MultiXactID来管理。TransactionId和MultiXactID是多对一的关系 multixactID跟TransactionId一样&#xff0c;也是32位&#xff0c;同样有wra…

Seata AT 模式理论学习及部分源码解析 | Spring Cloud 52

理论部分来自Seata官网&#xff1a;http://seata.io/zh-cn/docs/dev/mode/at-mode.html 一、前提 基于支持本地 ACID 事务的关系型数据库。Java 应用&#xff0c;通过 JDBC 访问数据库。 二、整体机制 两阶段提交协议的演变&#xff1a; 一阶段&#xff1a;业务数据和回滚日…

【SpringCloud组件——Ribbon(负载均衡)】

一、Ribbon主要作用在哪一环节&#xff1f; 流程讲解&#xff1a; 案例依然采用Eureka章节提供的案例&#xff0c;orderService根据服务名称发起请求&#xff0c;请求传达至Ribbon&#xff0c;此时Ribbon从Eureka中心拉取userService服务列表&#xff0c;Ribbon根据负载均衡算法…

组合预测模型 | ARIMA-WOA-CNN-LSTM时间序列预测(Python)

组合预测模型 | ARIMA-WOA-CNN-LSTM时间序列预测&#xff08;Python&#xff09; 目录 组合预测模型 | ARIMA-WOA-CNN-LSTM时间序列预测&#xff08;Python&#xff09;预测结果基本介绍程序设计参考资料 预测结果 基本介绍 ARIMA-WOA-CNN-LSTM是一种结合了传统时间序列模型和深…

ChatGPT应用场景巡航之广告文案

此文为ChatGPT应用场景巡航第二篇&#xff1a;广告文案。 写出成功的文案&#xff0c;需要专业的技术水准&#xff0c;如果加以辅助工具&#xff0c;那会更加如虎添翼&#xff0c;事半功倍&#xff0c;本文会给大家介绍一下广告文案的写作技巧和辅助工具的使用。 01 — 指导原…