当前位置: 首页 > news >正文

使用podspec创建iOS插件

概述

在WWDC 2014全球开发者大会上,苹果开放了动态库、App Extension等全新的功能,这为iOS插件化开发带来了可能。在iOS开发中,动态库是iOS提供的一种资源打包方式,可以将代码文件、头文件、资源文件和说明文档等集中在一起,并且可以在运行时进行动态加载。

目前,很多应用越做越复杂,应用程序也显得越来越臃肿。试想一下,如果将一些不常用的功能做成一个插件,然后根据用户的需求从网络中下载,这样最大限度的利用了系统资源,这也是插件化开发的初衷。

使用Cocoapods的优势

传统使用第三方库的劣势

  • 使用一个第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就会报一大堆错误。这个时候为了排查少了哪一个步骤,只能从头开始重做一遍,太浪费时间和精力。有些配置还不好配置,就更使人烦躁郁闷了。
  • 如果使用的第三方SDK有比较重要的更新,想使用最新的SDK只能到官方下载最新的SDK,重新导入到自己的项目工程中。
  • 如果公司有多个项目,每一个工程都这样配置一遍,这是多么痛苦的领悟呀。

使用Cocoapods管理第三方库的优势

  • 我们可以避免上诉的问题,使用方便。
  • 方便我们自己管理,只需要更新版本就行了,以前的库还可以保留让他人使用。

创建插件库

1,注册Trunk

trunk需要CocoaPods 0.33以上版本,可以使用pod --version命令来查看本地的版本。

如果版本太低,可以使用下面的指令升级:

sudo gen install cocoapods
pod setup
复制代码

接下来,需要查看自己是否注册过Trunk。

pod trunk me
复制代码

如果没有注册,可以使用下面的命令进行注册:

pod trunk register zhangyqyx@163.com "zhangyqyx" --verbose
复制代码

其中,zhangyqyx表示名字,zhangyqyx@163.com表示注册的邮箱。注册时,系统会发送一个验证链接到你的邮箱,验证通过后即注册成功。注册成功后再次使用命令pod trunk me查看。

##2, 创建GitHub仓库 要完成插件化开发的需求,首先需要在GitHub中创建一个远端的托管仓库。如下图:

将项目克隆下来到本地,并添加公开库文件相关的信息,代码上传和下载建议使用SourceTree等图形化工具进行操作。

##3, podspec 使用如下命令创建.podspec文件,创建的命令如下:

pod spec create pluginPods
复制代码

其中,CardBannerView为库的名称。然后,打开并编辑.podspec文件。

Pod::Spec.new do |s|
    s.name         = 'pluginPods'
    s.version      = '0.0.3'
    s.summary      = '自定义轮播插件'
    s.homepage     = 'https://github.com/xiangzhihong/pluginPods'
    s.license      = 'MIT'
    s.authors      = {'xiangzhihong' => '1044817967@qq.com'}
    s.platform     = :ios, '8.0'
    s.source       = {:git => 'https://github.com/xiangzhihong/pluginPods.git', :tag => s.version}
    s.source_files = 'pluginPods/*'
end
复制代码

其中,上面配置的具体的含义为:

  • s.name:名称,pod search 搜索的关键词,注意这里一定要和.podspec的名称一样,否则报错。
  • s.version:版本号。
  • s.ios.deployment_target:支持的pod最低版本
  • s.summary: 项目简介
  • s.homepage:项目主页地址
  • s.social_media_url:社交网址
  • s.license:许可证
  • s.author:作者
  • s.source:项目的地址
  • s.requires_arc: 是否支持ARC
  • s.source_files:需要包含的源文件
  • s.public_header_files:公开的头文件
  • s.resources: 资源文件
  • s.dependency:依赖库,不能依赖未发布的库,可以写多个依赖库

常见的写法

dependency写法:

s.dependency = 'AFNetworking' , 'SDWebImage'
复制代码

source_files写法:

'runtime/*'
'runtime/runtime/*.{h,m}'
'runtime/**/*.h'
复制代码

其中,

  • '*'表示匹配所有文件;
  • '*.{h,m}' 表示匹配所有以.h和.m结尾的文件;
  • '**' 表示匹配所有子目录

4,添加源码

接下来,将你的源码添加到刚才s.source_files配置的目录。如果是OC编写的还需要配置公开的头文件。此处,我使用的是Swift编写的,就不管那么多了,如果有任何语法上的警告请忽略相关的警告。

5,上传Git

将包含配置好的 .podspec, LICENSE 的项目提交 Git。命令如下:

git tag "v0.0.1"     // 如果出现错误,试一下不加v的情况
git push --tags
复制代码

或者,直接使用sourcetree等图形化工具进行操作。例如:

如果我们的tag打错了,没有用的话,我们应该怎么删除呢?可以参考下面的方法: 1、查看tags git tag 就会罗列出我们所有的tags

2、删除本地tags git tag -d + 分支名称就会删除本地的分支

3、删除远程分支 git push origin :refs/tags/分支名称 就删除了远程分支

为了验证是否上传成功,可以验证.podspec文件,命令如下:

pod spec lint WeexHMGesUnlock.podspec --verbose
复制代码

如果出现这种警告性的问题,我们可以直接忽略。

pod lib lint --allow-warnings
复制代码

如果出现这种情况,可能是你的那个版本找不到这个文件。

5,发布

发布时会验证 Pod 的有效性,如果你在手动验证 Pod 时使用了 --use-libraries 或 --allow-warnings 等修饰符,那么发布的时候也应该使用相同的字段修饰,否则出现相同的报错。

pod trunk push pluginPods.podspec
复制代码

如果出现 --use-libraries 或 --allow-warnings 等修饰符警告,可以使用如下的命令:

pod trunk push pluginPods.podspec --allow-warnings
复制代码

6, 验证仓库

使用下面的命令来验证,是否上传成功。

pod search pluginPods
复制代码

如果碰到上面的情况,你可以删除搜索的文件路径,然后重新生成。命令如下:

rm ~/Library/Caches/CocoaPods/search_index.json
pod setup
复制代码

如果还是不行,估计是在你的项目还在审核中,你可以通过其他辅助手段去验证。例如,使用pod trunk me命令:

当然,你也可以在 CocoaPod官网中进行搜索。
如果没有任何的错误,你将看到如下的搜索结果:
如果刚才是用 pod lib lint 验证成功的,就执行以下命令发布。

pod trunk push pluginPods.podspec
复制代码

如果刚才是用 pod lib lint --allow-warnings 验证成功的,就执行以下命令发布。

pod trunk push pluginPods.podspec --allow-warnings
复制代码

TIP:集成时如搜索不到,可以试着执行pod setup或pod repo update指令来更新pod,pod search搜索不到时,可以删除~/Library/Caches/CocoaPods下的search_index.json文件以更新索引(pod search搜索不到并不影响集成),因为国内使用的时镜像,也可以稍等一段时间后再更新。

创建私有库

创建私有库和创建Git库的流程大体相似:

1、创建一个私有的项目 可以是公司自己的git管理工具、也可以是码云上的,创建方法可以参考Git仓库的创建过程。

2、创建.podspec 使用pod spec create命令创建xxx.podspec文件。

3、编辑.podspec文件 编辑podspec文件,主要是添加项目库、托管地址、版本号、暴露的文件等。

4、上传到Git 将包含配置好的 .podspec, LICENSE 的项目提交 Git或私有云。

5、打tag

6、验证.podspec文件 使用pod spec lint来验证podspec文件是否配置正确,如果有任何的错误,请根据错误提示进行修改。如果是warning可以忽略,在指令后面添加--allow-warnings即可。例如:

pod lib lint --allow-warnings
复制代码

7、添加一个私有库并和项目地址做绑定

pod repo add xxx github.com/xiangzhihon…

8、向私有的库里添加podspec文件

9、新建一个项目进行验证

新建一个Xcode项目,在podfile中添加引用脚本,看是否能够成功的依赖,添加时注意版本号。

pod 'pluginPods', '~> 0.0.3'

如果,没有任何提示错误,则说明自定义插件创建成功。

相关文章:

  • Spring boot 添加日志 和 生成接口文档
  • 生成器13
  • 一个快速检测系统CPU负载的小程序
  • ionic错误
  • java类什么时候加载?,加载类的原理机制是怎么样的?
  • CSS3 transform变换
  • Python-opencv摄像头图像捕获
  • python入门 (一)
  • mysql 多重排序数据顺序可能不固定
  • 单词随记
  • 【346】TF-IDF
  • docker学习笔记-1
  • Qt5.12.0 交叉编译搭建
  • 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统
  • Docker技术入门与实战 第二版-学习笔记-3-Dockerfile 指令详解
  • hexo+github搭建个人博客
  • 【Amaple教程】5. 插件
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • angular2开源库收集
  • const let
  • Fundebug计费标准解释:事件数是如何定义的?
  • js面向对象
  • mysql 5.6 原生Online DDL解析
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • Python学习笔记 字符串拼接
  • Solarized Scheme
  • vue-cli3搭建项目
  • 初识 beanstalkd
  • 初探 Vue 生命周期和钩子函数
  • 第十八天-企业应用架构模式-基本模式
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 你真的知道 == 和 equals 的区别吗?
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 我从编程教室毕业
  • Python 之网络式编程
  • ​ssh-keyscan命令--Linux命令应用大词典729个命令解读
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • ​业务双活的数据切换思路设计(下)
  • ###51单片机学习(1)-----单片机烧录软件的使用,以及如何建立一个工程项目
  • #define,static,const,三种常量的区别
  • #pragma pack(1)
  • $.ajax()
  • (1综述)从零开始的嵌入式图像图像处理(PI+QT+OpenCV)实战演练
  • (70min)字节暑假实习二面(已挂)
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (第61天)多租户架构(CDB/PDB)
  • (接口封装)
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (五)c52学习之旅-静态数码管
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (一)Thymeleaf用法——Thymeleaf简介
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .NET Micro Framework初体验
  • .net 后台导出excel ,word