$ pod list
# 列出所有可用的第三方库
$ pod search query
搜索名称包含query的类库,query可以替换为你想搜索的名字(如json),不区分大小写。也可以使用pod search --full query命令作更仔细的搜索,该命令不但搜索类库的名称,同时还搜索类库的描述文本,所以搜索速度也相对慢一些。
pod list和pod search命令只搜索存在于本地~/.cocoapods文件夹的所有第三方库,并不会连接到远程服务器。如竖银果你要从服务器更新本地第三方库的描述文件,可以:
$ pod repo update master
创芹纤老建自己项目的Podspec描述文件
CocoaPods还是一个相对年轻的项目,所有的项目的Podspec文件都托管在。可能有一些库并未收录其中。下面我们通过为微博sso认证登录库编写Podspec文件来学习相关的概念。
初始化一个Podspec文件
$ pod spec create weibo_ios_sdk_sso-oauth
该命令将在本目录产生一个名为weibo_ios_sdk_sso-oauth.podspec的文件。用编辑器打开该文件,里面已经有非常丰富的说明文档。下面我们介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖ios核心框架和第三方库。
去除所有的注释,podspec文件如下所示:
Pod::Spec.new do |s|
s.name = 'ADVProgressBar'
s.version = '0.0.1'
s.license = 'MIT'
s.summary = 'Progress Bar Design with Percentage values.'
s.homepage = ''
s.author = { 'appdesignvault' =>'appdesignvault' }
s.source = { :git =>'/ADVProgressBar.git', :commit =>'f17b15c15574d6d101cd5fcfd58239e16e806647' }
s.platform = :ios
s.source_files = 'ADVProgressBar/Classes/*.{h,m}'
s.resources = "ADVProgressBar/Resources/*.png"
s.framework = 'UIKit'
s.requires_arc = true
end
其中s.name和s.summary用来声明库的名称和一个简短的说明文档。pod search命令就是根据这两项内容作为搜索文本的。s.homepage声明库的主页,s.version库原代码的版本,s.license所采用的授权版本,s.author库的作者。
s.source 声明原代码的地址,以微博sso认证登录库为例,它托管在中,在其未尾加上.git扩展名就是库的原代码地址了,所以该行应声明为:
s.source = { :git =>'.git'}
对于很多第三方库而言,在发布的时候都会打上一个tag,如版本0.0.1就会打上一个名为v0.0.1的tag,但是weibo_ios_sdk_sso-oauth库还未打上所何tag,我们可以选择一个最新的commit来作为该库0.0.1版的代码。s.source最终如下:
s.source = { :git =>'.git', :commit =>'68defea78942ecc782ffde8f8ffa747872af226d'}
以后我们可以根据该库不同的版本创建相应的podspec文件,例如0.0.2,0.1.0等。
让我们在浏览器中看一下weibo_ios_sdk_sso-oauth的目录结嫌升构:
--
|
+-- demo
|
+-- src
|
+-- .gitignore
|
+-- README.md
demo目录保存一个示例项目,src才是库的原代码目录。src的目录结构如下:
-- src
|
+-- JSONKit
|
+-- SinaWeibo
|
+-- sinaweibo_ios_sdk.xcodeproj
|
+-- SinaWeibo-Prefix.pch
JSONKit目录说明这个库本身依赖于JSONKit第三方库。我们可以在podspec文件中的s.dependency声明段中声明。SinaWeibo目录才是包含所有原代码的目录,我们需要在s.source_files中声明
s.source_files = 'src/SinaWeibo/*.{h,m}'
前一部分src/SinaWeibo/是一个相对目录,目录的层级关系一定要跟代码库的保持一致。最后一部分*.{h,m}是一个类似正则表达式的字符串,表示匹配所有以.h和.m为扩展名的文件。
src/SinaWeibo/目录下还有一个SinaWeibo.bundle目录,该目录存放一些资源文件(如图片等),这些文件并不需要进行编译。可以使用s.resourcs声明
s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
前一部分跟上面相同,**表示匹配所有子目录,*.png表示所有以.png为扩展名的图片文件。
通过查看代码我们知道,weibo_ios_sdk_sso-oauth还依赖一个ios的核心库QuartzCore
s.framework = 'QuartzCore'
在前面我们已经说过,weibo_ios_sdk_sso-oauth库自身也依赖于另外一个第三方库JSONKit,声明如下:
s.dependency 'JSONKit', '~>1.4'
这行声明与Podfile文件中的声明类似。
最终的结果如下:
Pod::Spec.new do |s|
s.name = "weibo_ios_sdk_sso-oauth"
s.version = "0.0.1"
s.summary = 'weibo.com sso oauth, 微博sso认证登录功能'
s.homepage = ""
s.license = 'MIT'
s.author = {'mobileresearch' =>'mobileresearch'}
s.source = { :git =>'.git', :commit =>'68defea78942ecc782ffde8f8ffa747872af226d' }
s.platform = :ios
s.source_files = 'src/SinaWeibo/*.{h,m}'
s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
s.framework = 'QuartzCore'
s.dependency 'JSONKit', '~>1.4'
end
可以将该spec文件保存到本机的~/.cocoapods/master/目录中仅供自己使用,也可以将其提交到CocoaPods/Specs代码库中。下面我们将其保存到本机中
$ mkdir -p ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
$ cp weibo_ios_sdk_sso-oauth.podspec ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
是否可以通过搜索找到该库:
$ pod search weibo
同样在需要依赖于weibo_ios_sdk_sso-oauth这个库的项目,可以将下列添加到项目的Podfile文件中
pod 'weibo_ios_sdk_sso_oauth', '0.0.1'
保存文件,并用pod install安装weibo_ios_sdk_sso-oauth库。
一、RPM打包的目的1、当目标机中不存在编译环境时,可以先在本地环境中编译打包,然后直接在目标机中用rpm -ivh *.rpm安装即可。
2、当需要在目标机中安装多个软件或者增加多个文件时,可以将整体打成RPM包,方便使用。
二、RPM打包命令
$cd ~ #进入home目录 $ sudo yum -y install rpmdevtools #安装rpm打包所需的工具 $rpmdev-setuptree #生成rpm打包目录 $cd rpmbuild/SPECS #进入SPECS目录 $rpmdev-newspec test.spec #生成spec文件模板 $mv your_path/source.tar.gz ../SOURCES #将要打包的源码以tar.gz的格式移动到SOURCES目录
此时会在home目录下生成一个rpmbuild目录,此目录下有五个子目录 BUILD 编译时所用的暂存目录 RPMS 放打包好拿腊的二进制rpm包 SOURCES 放置源代码和补丁文件 SPECS 放置spec文件 SRPMS 放置RPM源码包
三、spec文件简要说明
RPM打包的关键之处就在于spec文件的编写
1、spec基本信息
Name: 软件名称 Version: 软件版本 Release: 发布次数 如: 1%{?dist} Summary: 软件说明 Group: 软件分组 License: 授权模式,例如 GPL,即自由软件 URL: 源码包的URL地址,可随意填写 Source0: 源码包消芦滑,可指定多个,下面可用%{SOURCE0}变量引用 BuildRoot: 编译过程中的中间存档目录,考虑到多用户的环境,一般定义为: %{_tmppath}/%{name}-%{version}-%{release}-root , 后面可使用$RPM_BUILD_ROOT 方式引用 BuildArch: 平台 %{_arch} BuildRequires: 编译过程依赖的工具 Requires: 打包生成的rpm包安装时所依赖的软件包 %description 说明文档 %prep 准备部分,比如创建目录,解压源码包等,可使用%setup内部函数 %build 在BUILD目录编译,可使用%configure内部函数,或者其他编译工具,如cmake, perl等 %install 安装到BUILDROOT虚拟目录 %clean 清理文件 %files 将指定的文件添加到rpm包中,文档类型可用%doc,配置文件可 用%config %changelog 更新记录.格式: 第一行 "* 日期 作者 "哗春 第二行 "- 更新内容" 最终的生成的rpm名称: {Name}-{Version}-{Relesae}-{BuildArch}.rpm
2、spec内部变量
在spec文件运行时,定义的宏会主动读取/usr/lib/rpm/macros中的变量
RPM_BUILD_DIR ~/rpmbuild/BUILD
RPM_BUILD_ROOT ~/rpmbuild/BUILDROOT
3、spec文件示例(以git为例)
Name: git Version: 2.10 Release: 1%{?dist} Summary: this is the test code License: GPL URL: http://www.hao123.com Source0: %{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-root BuildRequires: automake Requires: rpm %description %prep %setup -q %build autoconf ./configure --prefix=/opt/git/ make %{?_smp_mflags} %install make DESTDIR=$RPM_BUILD_ROOT install %clean [ "$RPM_BUILD_ROOT" != "/" ] &&rm -rf "$RPM_BUILD_ROOT" make clean %files %defattr (-,root,root) /opt/git/ %changelog
4、生成RPM包
$rpmbuild -ba test.spec #生成RPM包
生成的RPM包在rpmbuild/RPMS目录下。
Spec文件用于告诉rpmbuild如何构建RPM或者SRPM包 RPM,SRPM区别参见鸟哥悔高的Linux私房菜
。Spec文件包含preamble和body两部分,preamble部分主要备滑包含一些包的元数据,body部分主要用于打包,安装等。
Preamble参数说明:
构仿前腊建后的包名为N-V-R(NAME-VERSION-RELEASE)
Body参数说明:
BuildRoots
buildroot相当于系统“/”目录,里面的文件结构,最后在rpm安装的时候会按照buildroot目录下的文件层级结构安装到”/“目录下。
参考文献
rpm packaging guide
rpm doc
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)