使用podspec创建iOS插件
概述
在WWDC 2014全球开发者大会上,苹果开放了动态库、App Extension等全新的功能,这为iOS插件化开发带来了可能。在iOS开发中,动态库是iOS提供的一种资源打包方式,可以将代码文件、头文件、资源文件和说明文档等集中在一起,并且可以在运行时进行动态加载。
目前,很多应用越做越复杂,应用程序也显得越来越臃肿。试想一下,如果将一些不常用的功能做成一个插件,然后根据用户的需求从网络中下载,这样最大限度的利用了系统资源,这也是插件化开发的初衷。
使用Cocoapods的优势
传统使用第三方库的劣势
1、使用一个第三方SDK,需要在工程里面添加一堆配置,少添加一步配置就会报一大堆错误。这个时候为了排查少了哪一个步骤,只能从头开始重做一遍,太浪费时间和精力。有些配置还不好配置,就更使人烦躁郁闷了。
2、如果使用的第三方SDK有比较重要的更新,想使用最新的SDK只能到官方下载最新的SDK,重新导入到自己的项目工程中。
3、如果公司有多个项目,每一个工程都这样配置一遍,这是多么痛苦的领悟呀。
使用Cocoapods管理第三方库的优势
1、我们可以避免上诉的问题,使用方便。
2、方便我们自己管理,只需要更新版本就行了,以前的库还可以保留让他人使用。
创建插件库
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 https://github.com/xiangzhiho...
8、向私有的库里添加podspec文件
9、新建一个项目进行验证
新建一个Xcode项目,在podfile中添加引用脚本,看是否能够成功的依赖,添加时注意版本号。
pod 'pluginPods', '~> 0.0.3'
如果,没有任何提示错误,则说明自定义插件创建成功。
使用podspec创建iOS插件相关推荐
- iOS 创建xcode插件
苹果的"一个足以应付所有"策略使得它的产品越来越像一个难以下咽的药丸.尽管苹果已经将一些工作流带给了iOS/OS X的开发者,我们仍然希望通过插件来使得Xcode更加顺手! 虽然苹 ...
- 【Flutter】开发 Flutter 包和插件 ( Flutter 包和插件简介 | 创建 Flutter 插件 | 创建 Dart 包 )
文章目录 一.Flutter 包和插件简介 二.创建 Flutter 插件 1.Android Studio 中可视化创建 2.命令行创建 三.创建 Dart 包 1.Android Studio 中 ...
- 使用 iosOverlay.js 创建 iOS 风格的提示和通知
iosOverlay.js 用于在 Web 项目中实现 iOS 风格的通知和提示效果.为了防止图标加载的时候闪烁,你需要预加载的图像资源.不兼容 CSS 动画的浏览器需要 jQuery 支持.浏览器兼 ...
- mac环境下node.js和phonegap/cordova创建ios和android应用
mac环境下node.js和phonegap/cordova创建ios和android应用 一介布衣 2015-01-12 nodejs 6888 分享到:QQ空间新浪微博腾讯微博人人网微信 ...
- swift通知栏推送_如何使用Swift和Laravel使用推送通知创建iOS加密跟踪应用
swift通知栏推送 by Neo Ighodaro 由新Ighodaro 如何使用Swift和Laravel使用推送通知创建iOS加密跟踪应用 (How to create an iOS crypt ...
- iOS 9应用开发教程之创建iOS 9项目与模拟器介绍
iOS 9应用开发教程之创建iOS 9项目与模拟器介绍 编写第一个iOS 9应用 本节将以一个iOS 9应用程序为例,为开发者讲解如何使用Xcode 7.0去创建项目,以及iOS模拟器的一些功能.编辑 ...
- 你还不会创建jQuery插件 ?
如何创建一个jQuery插件 为什么要创建jQuery插件 ? 因为这样代码可以复用. 我们有这样一个页面,页面上面有如下的文字(看源码),我们想要的效果是,当鼠标移到链接的时候,用一个浮动的div来 ...
- QML创建C ++插件
QML创建C ++插件 QML创建C ++插件 创建一个插件 TimeExample QML扩展插件 插件的项目设置 qmldir中的插件定义 QML创建C ++插件 创建一个插件 该QQmlEngi ...
- wordpress 插件_如何为您的Web应用程序创建WordPress插件
wordpress 插件 by Feedier by Alkalab 由Feedier通过Alkalab 如何为您的Web应用程序创建WordPress插件 (How to create a Word ...
最新文章
- hihocoder #1103 : Colorful Lecture Note微软苏州校招笔试 1月10日(字符串处理+栈)
- 优化SQL查询:如何写出高性能SQL语句
- PHP的各种参数设置ini_set:内存 错误等级 session
- java vote_vote投票系统java jsp mysql
- python中的迭代器Iterator
- (转)em重建全过程
- AlphaGo Zero你也来造一只,PyTorch实现五脏俱全| 附代码
- 一文看懂搜狗招股书:90次提到AI,王小川持股5%,净利3.7亿
- 《智能数据时代:企业大数据战略与实战》一2.3 自我评估、完善度、信息架构...
- 如何在.NET中启用程序集绑定失败日志记录(Fusion)
- Red Giant Universe 3.0.2 for After Effects 破解版 Mac 红巨星宇宙特效插件包预设
- C语言简单程序编写(一)
- 【自学笔记】前端面试题之CSS(部分HTML)
- html中textarea标签的换行
- 【一天一个挨打小技巧】大黄蜂云课堂在听课时候做笔记,无法截图!安排
- css框架bootstrap ie,前端开发必备的10个Bootstrap工具
- web中的$多种意思
- axios 超级小白使用模板
- 商品新零售行业——客户价值分析驾驶舱(附详细操作)
- 快消品b2b电子商务网站建设方案
热门文章
- leetcode算法题--数值的整数次方
- 【转】linux tar 压缩
- 基于MongoDb的S3实现
- 外文翻译 《How we decide》赛场上的四分卫
- office2007安装提示“Windows Installer 服务不能更新一个或多个受保护的Windows文件...
- Rsync 基本安装及同步(一)
- ObservableCollection 类
- c++ 写x64汇编 5参数_Vs配置汇编开发环境,智能提示、代码颜色应有尽有~来打我呀...
- 一个教务系统多少钱_销售管理系统报价多少钱
- 【转载】Python对接六大主流数据库,只需三步