iOS开发提效cocoapods插件cocoapods-util

news/2024/7/20 22:07:00 标签: ios, cocoapods, plugin, 开发效率, xcframework

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类提供的依赖解析方法来解析组件的依赖,实现更简单,可以递归的查找到所有依赖的组件。

xcframework"> 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.niftyadmin.cn/n/341939.html

相关文章

XDP入门体验之hello world

本文目录 1、下面这二张图,能非常好的说明XDP在Linux内核里的网络数据处理架构上的位置。2、XDP提供了可编程的灵活处理方式,XDP 程序可以通过 XDP action code来指定驱动程序对报文的后续处理方式:3、一个将收到的报文在XDP里直接丢弃的例子…

【算法】单源最短路径算法——Dijkstra算法

文章目录 一、简介与使用场景二、算法思想三、朴素版Dijkstra四、堆优化版Dijkstra五、总结 一、简介与使用场景 迪杰斯特拉算法(Dijkstra)是由荷兰计算机科学家狄克斯特拉于1959 年提出的,因此又叫狄克斯特拉算法。这是从一个顶点到其余各顶点的最短路径算法&#…

Python数据分析合辑

Jupyter Notebook的使用 Anaconda:XGBoost的安装_anaconda 安装xgboost_紫昂张的博客-CSDN博客 设置Jupyter文档的标题_jupyter怎么设置标题_紫昂张的博客-CSDN博客 Python清洗数据 Python数据分析:用rename()修改字段名_python修改字段名_紫昂张的博…

flutter 在动图上添加文字

前言 有这样一个场景,在一个展示很多文字的App中背景图片可以自定义,当然也可以是动态的,但是这个主页是可以分享出去的,也就是我需要在一个动态的背景上写上文字并保存为一张新的图片并分享出去。 实现 前置准备 需要导入一个…

计算机图形学-GAMES101-12阴影

Shadow mapping 问题的提出 我们之前在进行着色时,对于每个物体仅考虑自己,而不考虑其他物体对它的影响。限定在光栅化中,如何解决阴影问题呢?阴影能被摄像机看到,但不能被光源所照亮。经典的Shadow mapping只能处理…

5年自动化测试经验的一些感悟—愿测试进阶路上的你不在迷茫

作为一个测试人,我们或多或少都听过或用过自动化,我们都曾在初入测试行业时,满怀期待的以为测试的尽头是不用测试员点点了,项目一提测,小手点下自动化的开关,瞬间测试的工作就完成了。 这就是我一开始从开…

基于Java web的购物商城系统设计与实现

目 录 1 绪 论 1 1.1 本课题研究的背景和意义 1 1.1.1 本课题研究的背景 1 1.1.2 本课题研究的意义 2 1.1.3 本课题的发展现状及前景 2 1.2 系统的实现任务 7 2 系统概述及实现技术介绍 8 2.1 网上商城简介 8 2.2 相关实现技术介绍 10 2.2.1 JSP语言及其特点 10 2.2.2 Dreamwea…

SpringBoot——Bean管理

文章目录 Bean管理一、获取Bean二、 Bean的作用域2.1 注意事项 三、第三方Bean Bean管理 一、获取Bean ​ 默认情况下,Spring项目启动时,会把Bean都创建好放在IOC容器中,如果主要获取这些Bean,可以通过如下方式: 根…