- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章IOS CocoaPods详解之制作篇由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
学会使用别人的pods依赖库以后,你一定对创建自己的依赖库跃跃欲试,今天就来揭开pods依赖库创建过程的神秘面纱。整个创建过程都以我实现的一个名称为wzmarqueeview跑马灯效果的view为例,步骤如下:
1、创建自己的github仓库 。
cocoapods都托管在github上(官方链接为:https://github.com/cocoapods),所有的pods依赖库也都依赖github,因此第一步我们需要创建一个属于自己的github仓库。仓库创建界面如下图:
上图中标了序号的共6处,对应的说明如下:
1、repository name 。
仓库名称,这里写成wzmarqueeview,必填的; 。
2、description 。
仓库的描述信息,可选的; 。
3、仓库的公开性 。
这里只能选public,一个是因为private是要money的,再一个private别人看不到还共享个毛; 。
4、是否创建一个默认的readme文件 。
一个完整地仓库,都需要readme说明文档,建议选上。当然不嫌麻烦的话你也可以后面再手动创建一个; 。
5、是否添加.gitignore文件 。
.gitignore文件里面记录了若干中文件类型,凡是该文件包含的文件类型,git都不会将其纳入到版本管理中。是否选择看个人需要; 。
6、license类型 。
正规的仓库都应该有一个license文件,pods依赖库对这个文件的要求更严,是必须要有的。因此最好在这里让github创建一个,也可以自己后续再创建。我使用的license类型是mit.
上面的各项都填写完毕后,点击create repository按钮即可,创建成功地界面如图:
到这,仓库创建过程就结束了.
2、clone仓库到本地 为了便于向仓库中删减内容,需要先将仓库clone到本地,操作方式有多种,推荐使用命令行:
1
|
$ git clone https:
//github.com/wangzz/wzmarqueeview.git
|
操作完成后,github上对应的文件都会拷贝到本地,目录结构为:
github上仓库中的.gitignore文件是以.开头的隐藏文件,因此这里只能看到两个。 后续我们的所有文件增、删、改都在这个目录下进行.
3、向本地git仓库中添加创建pods依赖库所需文件 。
注意:以下描述的文件都要放在步骤二clone到本地的git仓库的根目录下面。 1、后缀为.podspec文件 该文件为pods依赖库的描述文件,每个pods依赖库必须有且仅有那么一个描述文件。文件名称要和我们想创建的依赖库名称保持一致,我的wzmarqueeview依赖库对应的文件名为wzmarqueeview.podspec。 1.1 podspec文件内容 。
wzmarqueeview.podspec的保存内容为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
pod::spec.
new
do
|s|
s.name =
"wzmarqueeview"
s.version =
"1.0.0"
s.summary =
"a marquee view used on ios."
s.description = <<-desc
it is a marquee view used on ios, which implement by objective-c.
desc
s.homepage =
"https://github.com/wangzz/wzmarqueeview"
# s.screenshots = "www.example.com/screenshots_1", "www.example.com/screenshots_2"
s.license =
'mit'
s.author = {
"王中周"
=>
"wzzvictory_tjsd@163.com"
}
s.source = { :git =>
"https://github.com/wangzz/wzmarqueeview.git"
, :tag => s.version.to_s }
# s.social_media_url = 'https://twitter.com/name'
s.platform = :ios,
'4.3'
# s.ios.deployment_target = '5.0'
# s.osx.deployment_target = '10.7'
s.requires_arc =
true
s.source_files =
'wzmarqueeview/*'
# s.resources = 'assets'
# s.ios.exclude_files = 'classes/osx'
# s.osx.exclude_files = 'classes/ios'
# s.public_header_files = 'classes/**/*.h'
s.frameworks =
'foundation'
,
'coregraphics'
,
'uikit'
end
|
该文件是ruby文件,里面的条目都很容易知道含义。 其中需要说明的又几个参数: ①s.license pods依赖库使用的license类型,大家填上自己对应的选择即可。 ②s.source_files 表示源文件的路径,注意这个路径是相对podspec文件而言的。 ③s.frameworks 需要用到的frameworks,不需要加.frameworks后缀.
1.2 如何创建podspec文件 。
大家创建自己的podspec文件可以有两个途径: ①copy我的podspec文件然后修改对应的参数,推荐使用这种方式。 ②执行以下创建命令:
1
|
$ pod spec create wzmarqueeview
|
也会创建名为wzmarqueeview.podspec的文件。但是打开创建完的文件你就会发现里面的东西太多了,很多都是我们不需要的.
2、license文件 cocoapods强制要求所有的pods依赖库都必须有license文件,否则验证不会通过。license的类型有很多种,详情可以参考网站tl;dr legal。在创建github仓库的时候,我已经选择了mit类型的license.
3、主类文件 创建pods依赖库就是为了方便别人使用我们的成果,比如我想共享给大家的wzmarqueeview类,是我想提供给广大用户使用的,这个类自然是必不可少的。我把这个类包含的两个文件放到一个名称为wzmarqueeview的文件夹中,对应的目录结构如图:
里面包含两个文件:wzmarqueeview.h和wzmarqueeview.m 。
4、demo工程 为了快速地教会别人使用我们的pods依赖库,通常需要提供一个demo工程。我创建的demo工程放到了一个名为wzmarqueeviewdemo的文件夹中,该目录包含的文件如下图所示:
5、readme.md 使用github的人应该都熟悉这个文件,它是一个成功github仓库必不可少的一部分,使用的是markdown标记语言,用于对仓库的详细说明.
以上所说的5个是创建pods依赖库所需最基础的文件,其中1、2、3是必需的,4、5是可选但强烈推荐创建的。 添加完这些文件以后,我的github本地仓库目录就变成了下图所示的样子:
4、提交修改文件到github 经过步骤三,向本地的git仓库中添加了不少文件,现在需要将它们提交到github仓库中去。提交过程分以下几步: 1、pod验证 执行以下命令:
1
2
|
$ set the
new
version to 1.0.0
$ set the
new
tag to 1.0.0
|
这两条命令是为pod添加版本号并打上tag。然后执行pod验证命令:
1
|
$ pod lib lint
|
如果一切正常,这条命令执行完后会出现下面的输出:
1
2
3
|
-> wzmarqueeview (1.0.0)
wzmarqueeview passed validation.
|
到此,pod验证就结束了。 需要说明的是,在执行pod验证命令的时候,打印出了任何warning或者error信息,验证都会失败!如果验证出现异常,打印的信息会很详细,大家可以根据对应提示做出修改.
2、本地git仓库修改内容上传到github仓库 依次执行以下命令:
1
2
3
4
|
$ git add -a && git commit -m
"release 1.0.0."
$ git tag
'1.0.0'
$ git push --tags
$ git push origin master
|
上述命令均属git的范畴,这里不多述。如果一切正常,github上就应该能看到自己刚添加的内容了。如下图所示:
5、上传podspec文件到cocoapods官方仓库中 经过前边的四步操作,你可能以为已经结束了,不幸的是还早着呢.
要想一个pods依赖库真正可用,还需要做最后一步操作,将我们刚才生成的podspec文件上传到cocoapods官方的specs仓库中,链接为:https://github.com/cocoapods/specs 。
打开这个链接你就会发现,原来我们能使用的,以及我们使用pod search命令能搜索到的所有pods依赖库都会把它们的podspec文件上传到这个仓库中,也就是说,只有将我们的podspec文件上传到这个仓库中以后,才能成为一个真正的pods依赖库,别人才能正常使用! 。
按照git的规则,要想向别人的仓库中添加文件,必须先fork一份别人的仓库,做完相应地修改后,在push给仓库的原作者,等到作者审核通过,然后合并到原来的仓库中.
流程明白了以后,自然知道该怎么干了: 1、fork一份cocoapods官方的specs仓库 进入到刚才的官方仓库链接中,点击屏幕右上角的fork按钮,如下图:
。
然后大家会发现自己名下会多一份仓库的分支。比如我的分支为:
2、将fork的仓库clone到本地 执行以下命令:
1
|
$ git clone https:
//github.com/wangzz/specs.git
|
注意,大家需要将对应的仓库地址换成自己的。 这个仓库有点大,需要有耐心啊.
3、将自己的podspec文件添加到本地specs仓库中 specs仓库clone到本地后,会放到一个名为specs的文件夹中。podspec文件在specs仓库中的保存原则是: pods依赖库同名文件夹--->版本号同名文件夹--->podspec文件 照此原则,我需要在specs文件夹下建立一个名为wzmarqueeview的文件夹,然后进入到wzmarqueeview文件夹下,建立一个名称为1.0.0的文件夹,最后进入到1.0.0这个文件夹下,并且将之前创建好的wzmarqueeview.podspec文件拷贝进来。 不难理解,如果以后有对wzmarqueeview类的升级,就在wzmarqueeview文件夹下建立对应版本名称的文件夹,用于保存对应版本的podspec文件即可。 这些操作完成后,目录层次结构如下所示:
4、上传本地specs仓库中的修改到github仓库 执行以下命令:
1
2
|
$ git add -a && git commit -m
"add wzmarqueeview podspec file"
$ git push origin master
|
成功以后就能在github上自己fork的specs仓库中看到刚上传的文件了.
5、将在自己fork的specs上做的修改pull给cocoapods官方的specs仓库 进入到自己fork的specs仓库中,会看到屏幕左上角有一个绿色按钮:
该按钮点进去以后会有如下图所示的界面:
点击图中的绿色create pull request按钮,即可将我们fork的specs上做的修改pull给cocoapods官方的specs仓库.
到这一步后,剩下的工作就只有等了,等待cocoapods的维护人员审核并将我们pull上去的修改合并到官方的specs仓库中,这个过程通常会有一天左右的等待时间。如果有任何消息,比如审核不通过,或者审核通过了,cocoapods官方都会发邮件通知的。 等到审核通过的时候,我们就能在官方的specs仓库中看到自己上传的文件夹了.
6、查看审核进度 当然我们也能查看审核进度,打开这个链接:https://github.com/cocoapods/specs/pulls,这里能看到所有的specs仓库pull请求,如下图:
红圈标识的就是我刚才pull上来的请求,点进去以后就能看到对应的审核进度.
6、查看我们自己创建的pods依赖库 如果收到了cocoapods官方发过来的审核通过邮件以后,你可能很着急的想在自己的电脑上执行pod search命令,看看能不能搜索到自己创建的pods依赖库。不过你肯定会失望的,因为还需要执行一条命令才能在我们的本地电脑上使用search命令搜索到我们的依赖库:
1
|
$ pod setup
|
在我的cocoapods系列教程中的第一篇:cocoapods详解之----进阶篇中的最后部分介绍过这条命令,它会将所有的pods依赖库tree跟新到本地。执行完这条命令,再去执行
1
|
$ pod search wzmarqueeview
|
就能显示出对应的介绍信息了! 。
说了那么多,到这里整个pods依赖库创建过程才算真正结束!小伙伴们,你成功了吗???遇到问题还请留言.
7、参考文档 。
1、http://guides.cocoapods.org 。
原文链接:http://blog.csdn.net/wzzvictory/article/details/20067595 。
最后此篇关于IOS CocoaPods详解之制作篇的文章就讲到这里了,如果你想了解更多关于IOS CocoaPods详解之制作篇的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
IO 设备如何知道属于它的内存中的值在memory mapped IO 中发生了变化? ? 例如,假设内存地址 0 专用于保存 VGA 设备的背景颜色。当我们更改 memory[0] 中的值时,VGA
我目前正在开发一个使用Facebook sdk登录(通过FBLoginView)的iOS应用。 一切正常,除了那些拥有较旧版本的facebook的人。 当他们按下“使用Facebook登录”按钮时,他
假设我有: this - is an - example - with some - dashesNSRange将使用`rangeOfString:@“-”拾取“-”的第一个实例,但是如果我只想要最后
Card.io SDK提供以下详细信息: 卡号,有效期,月份,年份,CVV和邮政编码。 如何从此SDK获取国家名称。 - (void)userDidProvideCreditCardInfo:(Car
iOS 应用程序如何从网络服务下载图片并在安装过程中将它们安装到用户的 iOS 设备上?可能吗? 最佳答案 您无法控制应用在用户设备上的安装,因此无法在安装过程中下载其他数据。 只需在安装后首次启动应
我曾经开发过一款企业版 iOS 产品,我们公司曾将其出售给大型企业,供他们的员工使用。 该应用程序通过 AppStore 提供,企业用户获得了公司特定的配置文件(包含应用程序配置文件)以启用他们有权使
我正在尝试将 Card.io SDK 集成到我的 iOS 应用程序中。我想为 CardIO ui 做一个简单的本地化,如更改取消按钮标题或“在此保留信用卡”提示文本。 我在 github 上找到了这个
我正在使用 CardIOView 和 CardIOViewDelegate 类,没有可以设置为 YES 的 BOOL 来扫描 collectCardholderName。我可以看到它在 CardIOP
我有一个集成了通话工具包的 voip 应用程序。每次我从我的 voip 应用程序调用时,都会在 native 电话应用程序中创建一个新的最近通话记录。我在 voip 应用程序中也有自定义联系人(电话应
iOS 应用程序如何知道应用程序打开时屏幕上是否已经有键盘?应用程序运行后,它可以接收键盘显示/隐藏通知。但是,如果应用程序在分屏模式下作为辅助应用程序打开,而主应用程序已经显示键盘,则辅助应用程序不
我在模拟器中收到以下错误: ImageIO: CGImageReadSessionGetCachedImageBlockData *** CGImageReadSessionGetCachedIm
如 Apple 文档所示,可以通过 EAAccessory Framework 与经过认证的配件(由 Apple 认证)进行通信。但是我有点困惑,因为一些帖子告诉我它也可以通过 CoreBluetoo
尽管现在的调试器已经很不错了,但有时找出应用程序中正在发生的事情的最好方法仍然是古老的 NSLog。当您连接到计算机时,这样做很容易; Xcode 会帮助弹出日志查看器面板,然后就可以了。当您不在办公
在我的 iOS 应用程序中,我定义了一些兴趣点。其中一些有一个 Kontakt.io 信标的名称,它绑定(bind)到一个特定的 PoI(我的意思是通常贴在信标标签上的名称)。现在我想在附近发现信标,
我正在为警报提示创建一个 trigger.io 插件。尝试从警报提示返回数据。这是我的代码: // Prompt + (void)show_prompt:(ForgeTask*)task{
您好,我是 Apple iOS 的新手。我阅读并搜索了很多关于推送通知的文章,但我没有发现任何关于 APNS 从 io4 到 ios 6 的新更新的信息。任何人都可以向我提供 APNS 如何在 ios
UITabBar 的高度似乎在 iOS 7 和 8/9/10/11 之间发生了变化。我发布这个问题是为了让其他人轻松找到答案。 那么:在 iPhone 和 iPad 上的 iOS 8/9/10/11
我想我可以针对不同的 iOS 版本使用不同的 Storyboard。 由于 UI 的差异,我将创建下一个 Storyboard: Main_iPhone.storyboard Main_iPad.st
我正在写一些东西,我将使用设备的 iTunes 库中的一部分音轨来覆盖 2 个视频的组合,例如: AVMutableComposition* mixComposition = [[AVMutableC
我创建了一个简单的 iOS 程序,可以顺利编译并在 iPad 模拟器上运行良好。当我告诉 XCode 4 使用我连接的 iPad 设备时,无法编译相同的程序。问题似乎是当我尝试使用附加的 iPad 时
我是一名优秀的程序员,十分优秀!