iOS 玩转CocoaPods

####导语:

有时候看到其他人 source开源时候用pod xxx 配置在你的Podfile文件中,执行下pod install 或者 pod update ,代码瞬间就到你的pod库, 顿时觉得高大上。那是怎么做到的呢?

Agenda:

  • CocoaPods 的由来
  • Github 使用
  • PodSpec介绍
  • PodSpec上传
  • 遇到的坑及解决方案

###一,CocoaPods 的由来 Android app目前通过gradle来管理和配置你的source,比如需要用到Eventbus只要在build.gradle中配置下

dependencies {compile 'org.greenrobot:eventbus:3.0.0'
}
复制代码

iOS必须要有类似的神器啊:CocoaPod就是这把神器. 在CocoaPod没出来之前iOS要用引用第三库的做法如下: 比如引用AFNetWorking库,需要去下载源码,然后需要配置对应的编译环境等。当AFNetWorking库升级,所有过程又来一遍。过程太过复杂啦。 CocoaPods因上面的原因应运而生,它目前是iOS最有名的类库管理工具了,通过cocoaPods,只需要一行命令就可以完全解决,当然前提是你必须正确设置它。目前绝大部分有名的开源类库,都支持CocoaPods。所以,作为iOS程序员的我们,掌握CocoaPods的使用是必不可少的基本技能了。

如果你mac上没有安装pod , sudo gem install cocoapods 具体怎么安装可以参考如下链接: http://www.jianshu.com/p/9e4e36ba8574

开发iOS应用用到pod 的主要命令如下:

pod help-->查看pod命令的帮助
pod search --> Search for pods(搜索pod)
pod trunk   -->   Interact with the CocoaPods API (e.g. publishing new specs) 上传source到trunk
pod spec     -->     Manage pod specs//管理pod spec
pod install  -->Install project dependencies according to versions from a  Podfile.lock //安装项目中的依赖项目
pod update -->Update outdated project dependencies and create new Podfile.lock//跟新依赖项目并且更新Podfile.lock
pod init -->Generate a Podfile for the current directory//创建pod file文件
复制代码

其中Podfile.lock的扮演的角色非常重要,具体作用可以参考如下链接 http://m.blog.csdn.net/muzhenhua/article/details/45174071

####二,Github 使用 为嘛要介绍GitHub呢?CocoaPods只是做为项目的具体管理者,podspec文件就放在cocoapod官网上,供大家搜索。但是实际源码则是存储在Github上,那怎么使用Github就非常关键啦。

  • 创建项目 登录你的Github,然后去创建一个新的仓库,如下图创建GKFramework参考

  • 上传项目 下载该仓库,通过git clone 。clone一个仓库下来 怎么clone如下图clone with https.

在终端输入

//git clone后面的是你对应的git 地址
git clone https://github.com/wongstar/GKFramework.git复制代码

然后在这个仓库中修改或者添加你需要对应类或者文件等。

然后通过下面命令

//add 所有的到仓库
git add *
//提交commit信息
git commit
//提交本地到远端
git push origin master
复制代码
  • 打tag tag是后续spec中需要用到,以后升级至需要升级对应tag.
//获取当前有多少tag
git tag
//创建tag 0.0.1版本
git tag 0.0.1
复制代码
  • update tag到Github上 上传tag到Github服务器上,这个比较简单
 git  push origin 0.0.1
复制代码
  • 查看tag 如下图所示 :点击branch 然后查看Tags栏目

至此源码已经上传到Github服务器上去了,但是Pod服务器上目前还没有对应的描述,下面接着介绍PodSpec,以及如何上传到cocoapod服务器上去. ####三,PodSpec介绍

在mac 上创建一个podspec,在Terminal终端上输入下面命令:

//注GKFramework.podspec是你的框架名称
pod spec create GKFramework.podspec
复制代码

然后编辑podspec文件。如下GKFramework.podspec

Pod::Spec.new do |s|s.name         = "GKFramework" //定义名称s.version      = "0.0.5" //tag版本s.summary      = "A Sample.so you can use it" //简介,以后search到简介s.description  = <<-DESCthis is gk framework, use it for test your framework. we can use it as framework.DESC
//s.description 定义具体的描述s.homepage     = "https://github.com/wongstar/GKFramework"s.license      = { :type => "MIT", :file => "LICENSE" }//具体licenses.author             = { "wongstar" => "wongstar.iac@gmail.com" }s.platform     = :ios, "8.0"//build的平台s.ios.deployment_target = "7.0"//最低开发s.source       = { :git => "https://github.com/wongstar/GKFramework.git", :tag => "#{s.version}" }s.source_files  = 'Classes/**/*'#s.public_header_files='GKFramework/Classes/**/*.h'end复制代码
 s.description  = <<-DESCthis is gk framework, use it for test your framework. we can use it as framework.DESC
s.description定义了描述该pod是用来做什么的。注意这里的写法复制代码

s.description格式要求必须是下面的这样描述 <<-DESC 这里面你定义的描述.必须用这个格式 DESC

  s.source       = { :git => "https://github.com/wongstar/GKFramework.git", :tag => "#{s.version}" }
复制代码

必须定义s.source,git链接必须是你上传过的source, tag定义为你在github上对source打的tag.

s.source_files  = 'Classes/**/*' 定义为:Classes目录下的所有文件
复制代码
s.dependency:依赖库,不能依赖未发布的库
eg: s.dependency  = 'AFNetworking'
复制代码

####四,PodSpec上传

  • 在 cocoapods 注册
//email代表你的email,username代表你的用户名pod trunk register email "username"
复制代码

执行完上面的命令,你的邮箱会收到一封确认信,点击确认验证一下就ok啦。

  • 判断podspec正确行?
//GKFramework.podspec为你对应的podspec文件
pod  spec lint GKFramework.podspec
复制代码

如果是正确的spec会出现下面的提示:

  • 上传到cocoapod服务器
//注:GKFramework.podspec为你对应spec的名称
pod trunk push GKFramework.podspec
复制代码

上传成功如下图所示:

  • search 你的库. 网址为:https://cocoapods.org/ 如图五:search GKFramework
    ####五,遇到的坑及解决方案
  • source file没找到 [iOS] file patterns: The source_files pattern did not match any file. 确保你的source file是否配置正确,如你的spec目录和source对应的关系
  • cocoapods环境问题 unknown: Encountered an unknown error (Simulator iPhone 4s is not available.) during validation 执行下面命令
sudo gem install cocoapods --pre
复制代码

如果执行上面的有问题出现 ERROR: While executing gem ... (Errno::EPERM) Operation not permitted - /usr/bin/xcodeproj 执行下面命令

sudo gem install -n /usr/local/bin cocoapods
复制代码
  • Swift 版本问题 [!] The validator for Swift projects uses Swift 3.0 by default, if you are using a different version of swift you can use a .swift-version file to set the version for your Pod. For example to use Swift 2.3, run:
echo "2.3" > .swift-version.
复制代码

验证失败,会出现一系列错误,但也不是无根可寻,其中出现错误频率最多的提示是

  • source files没找到 ERROR | [iOS] file patterns: The source_files pattern did not match any file.

此错误的原因是没有找到匹配的文件。

解决方案: 手动创建文件,具体操作方法如下 终端输入: open /Users/icepoint/Library/Caches/CocoaPods/Pods/External/GKFramework/035cb9aa62b9d49f904fad1119b83da4-aebfe 进入相应文件夹,创建文件夹与source_files文件路径对应 GKFramework/GKFramework/Classes 文件结构如下: GKFramework └── 035cb9aa62b9d49f904fad1119b83da4-aebfe
├── GKFramework │ └── GKFramework │ └──Classes └── LICENSE #开源协议 默认MIT

Classes文件夹存放自己的库文件

  • pod search GKFramework 搜索不到 Unable to find a pod with name, author, summary, or description matching GKFramework. 解决办法: 1.pod install --repo-update 2.或者全部删除:使用命令:rm ~/Library/Caches/CocoaPods/search_index.json 重新search GKFramework

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

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

相关文章

【ArcGIS Pro微课1000例】0015:ArcGIS Pro中属性字段分式标注案例教程

文章目录 1. 符号化2. 属性字段分式标注在ArcGIS及Pro中很容易实现格式化标签的,本文讲解在ArcGIS Pro中实现属性字段分式标注,结果如下图所示: 1. 符号化 右键数据图层→符号系统,打开符号系统对话框,住符号系统选择【唯一值】,字段1选择NAME。 2. 属性字段分式标注 加…

mysql主从

1》mysql主从的工作原理&#xff1a;主服务器将更新写入二进制日志文件&#xff08;bin_log&#xff09;&#xff0c;并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时&#xff0c;它通知 主服务器从服务器在日志中读…

C语言试题184之编写一个函数,从标准输入读取一个字符串,把字符串复制到动态内存分配的内存中,并返回该字符串的拷贝,这个函数不应该对读入字符串的长度作任何限制

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 编写一…

[转]Linux面试题(2020最新版)

文章目录 Linux 概述 什么是LinuxUnix和Linux有什么区别&#xff1f;什么是 Linux 内核&#xff1f;Linux的基本组件是什么&#xff1f;Linux 的体系结构BASH和DOS之间的基本区别是什么&#xff1f;Linux 开机启动过程&#xff1f;Linux系统缺省的运行级别&#xff1f;Linux 使…

MSBuild 命令的简单使用

MSBuild 命令的简单使用独立观察员 2022 年 7 月 7 日位置在 VS 安装目录下&#xff0c;如&#xff1a;D:Microsoft Visual Studio2022EnterpriseMSBuildCurrentBin命令MSBuild 命令行参考 - MSBuild | Microsoft Docs&#xff08;https://docs.microsoft.com/zh-cn/visualstud…

ArcGIS实验教程——实验四十:ArcGIS洪水淹没分析案例教程

文章目录 一、洪水淹没效果动画演示二、实验数据三、实验过程1. 加载数据2. 符号化3. 夸大处理4. 动画制作5. 动画播放6. 导出动画基于数字高程模型 ( DEM )格网模型,实现给定水深情况下洪水淹没区的计算模型,讨论洪水淹没演进过程可视化实现的关键技术,以三维可视化方式,动…

数据库显示日期时仅仅显示“年-月-日”的问题

日期时间实际上存放的是年-月-日 时&#xff1a;分&#xff1a;秒&#xff0c;但是仅仅显示了年-月-日&#xff0c;未显示时分秒信息。解决方法&#xff1a;工具-首选项-数据库》NLS日期格式&#xff1a;YYYY-MM-DD HH24:MI:SS&#xff0c;保存后重新查询。转载于:https://blog…

C语言试题185之编写calloc函数,函数内部使用malloc函数来获取内存

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 编写ca…

iOS11、iPhone X 适配简单,但你的Apple思维适配做好了么?

2017.10.23 iPhone X 的刘海为什么这么丑&#xff1f; 如果乔布斯在的话就一定不会允许这样的产品交付给用户么&#xff1f; 作为 iOS 开发人员该对 Apple 有怎样的认识&#xff1f; Apple 未来的发展的大方向是什么&#xff1f; 倘若没有 Apple 的存在&#xff0c;我想各位现在…

【ArcGIS遇上Python】ArcGIS Python按照指定字段批量筛选不同类型的图斑(以土地利用数据为例)

基于土地利用数据,根据用地类型名称,批量筛选出不同类型的用地,生成不同类型的shp数据,以类型名称命名。 文章目录 1. 土地利用原始数据2. 根据名称批量筛选结果3. ArcGIS Python批处理代码ArcGIS Python根据字段属性批量筛选生成shp图层 1. 土地利用原始数据 2. 根据名称批…

使用 StringZipper 压缩、解压字符串

数据压缩是一个软件开发中的常见需求&#xff1a;很多时候需要先将较大的数据进行压缩然后再通过网络等进行传输。在 .NET 中&#xff0c;有多个压缩算法供我们选择&#xff1a;Deflate、GZip 和 Br 。这些压缩算法都是基于流&#xff08;Stream&#xff09;的&#xff0c;在对…

【转载】【面试题】你是一个测试工程师,如何保证软件质量?

2019独角兽企业重金招聘Python工程师标准>>> *参*答*案&#xff1a;质量是有层次&#xff08;内部质量&#xff0c;外部质量&#xff0c;使用质量&#xff0c;过程质量&#xff09; 内部质量&#xff1a;主要指代码的质量&#xff0c;就需要引入开发工程师进…

C语言试题186之读取范围在1和标准输入读取的size之前每个数据出现的次数

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 读取范…

[转]常见的用户密码加密方式以及破解方法

【作者】张辉&#xff0c;就职于携程技术中心信息安全部&#xff0c;负责安全产品的设计与研发。 作为互联网公司的信息安全从业人员经常要处理撞库扫号事件&#xff0c;产生撞库扫号的根本原因是一些企业发生了信息泄露事件&#xff0c;且这些泄露数据未加密或者加密方式比较弱…

H5学习笔记

什么是 HTML&#xff1f; HTML 是用来描述网页的一种语言。 HTML 指的是超文本标记语言 (Hyper Text Markup Language)HTML 不是一种编程语言&#xff0c;而是一种标记语言 (markup language)标记语言是一套标记标签 (markup tag)HTML 使用标记标签来描述网页关键字&#xff1a…

【ArcGIS遇上Python】ArcGIS Python获取某个字段的唯一值(获取指定字段的不同属性值)

以土地利用数据为例,DLMC字段为每个图斑的用地类型,怎样用Python代码获取该字段的属性唯一值? Python代码实现结果: Python源代码: import arcpy from arcpy import env arcpy.gp.overwriteOutput=

一张图解决Android Studio 项目运行按钮灰色

转载于:https://juejin.im/post/5a31ee46f265da430406a166

java学习笔记8--接口总结

生活中的接口&#xff1a; 什么是接口? 一个Java接口是一些方法特征的集合&#xff0c;但没有方法的实现。 在类中实现接口可以使用关键字implements&#xff0c;其基本格式如下&#xff1a; [修饰符] class <类名> [extends 父类名] [implements 接口列表]{}修饰符&…

.NET自定义认证虽然简单,但好用

前言有这样一种场景&#xff0c;就是新项目已经集成了认证中心&#xff0c;或者是都用了统一的认证方式(比如现在常用的JWT)&#xff0c;这样对于项目之间的对接就显得比较方便&#xff0c;至少在认证这块还是能减少一些工作量的。但当上线的老项目需要对接新项目时&#xff0c…

C语言试题187之实现strspn函数功能

📃个人主页:个人主页 🔥系列专栏:C语言试题200例 💬推荐一款刷算法、笔试、面经、拿大公司offer神器👉 点击跳转进入网站 ✅作者简介:大家好,我是码莎拉蒂,CSDN博客专家(全站排名Top 50),阿里云博客专家、51CTO博客专家、华为云享专家 1、题目 题目: 实现st…