如何编写一个CocoaPods的spec文件

原文:http://www.apkbus.com/android-131350-1-10.html

CocoaPods命令介绍

上一篇文章
中,已经介绍过CocoaPods的几条基本命令。
pod setup
用于初始化本地第三方库的Spec描述文件,所有的spec文件存都存放在
~/.cocoapods
目录中。
pod install
用来安装或删除Podfile文件声明中的第三方依赖库。下面继续介绍其它一些命令。
  1. $ pod list
  2. # 列出所有可用的第三方库
复制代码
  1. $ pod search query
复制代码
搜索名称包含 query的类库, query可以替换为你想搜索的名字(如json),不区分大小写。也可以使用 pod search --full query命令作更仔细的搜索,该命令不但搜索类库的名称,同时还搜索类库的描述文本,所以搜索速度也相对慢一些。 

pod listpod search命令只搜索存在于本地 ~/.cocoapods文件夹的所有第三方库,并不会连接到远程服务器。如果你要从服务器更新本地第三方库的描述文件,可以:
  1. $ pod repo update master
  2. 创建自己项目的Podspec描述文件
复制代码
CocoaPods还是一个相对年轻的项目,所有的项目的Podspec文件都托管在 。可能有一些库并未收录其中。下面我们通过为微博sso认证登录库编写Podspec文件来学习相关的概念。 

初始化一个Podspec文件
  1. $ pod spec create weibo_ios_sdk_sso-oauth
复制代码
该命令将在本目录产生一个名为 weibo_ios_sdk_sso-oauth.podspec的文件。用编辑器打开该文件,里面已经有非常丰富的说明文档。下面我们介绍如何声明第三方库的代码目录和资源目录,还有该第三方库所依赖ios核心框架和第三方库。 

去除所有的注释,podspec文件如下所示:
  1. Pod::Spec.new do |s|
  2. s.name = 'ADVProgressBar'
  3. s.version = '0.0.1'
  4. s.license = 'MIT'
  5. s.summary = 'Progress Bar Design with Percentage values.'
  6. s.homepage = 'https://github.com/appdesignvault'
  7. s.author = { 'appdesignvault' => 'appdesignvault' }
  8. s.source = { :git => 'https://github.com/appdesignvault/ADVProgressBar.git', :commit => 'f17b15c15574d6d101cd5fcfd58239e16e806647' }
  9. s.platform = :ios 
  10. s.source_files = 'ADVProgressBar/Classes/*.{h,m}'
  11. s.resources = "ADVProgressBar/Resources/*.png"
  12. s.framework = 'UIKit'

  13. s.requires_arc = true 
  14. end
复制代码
其中 s.names.summary用来声明库的名称和一个简短的说明文档。 pod search命令就是根据这两项内容作为搜索文本的。 s.homepage声明库的主页, s.version库原代码的版本, s.license所采用的授权版本, s.author库的作者。 

s.source 声明原代码的地址,以微博sso认证登录库为例,它托管在
  1. https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth
复制代码
中,在其未尾加上 .git扩展名就是库的原代码地址了,所以该行应声明为:
  1. s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git'}
复制代码
对于很多第三方库而言,在发布的时候都会打上一个 tag,如版本 0.0.1就会打上一个名为v0.0.1的tag,但是 weibo_ios_sdk_sso-oauth库还未打上所何tag,我们可以选择一个最新的commit来作为该库0.0.1版的代码。 s.source最终如下:
  1. s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d'}
复制代码
以后我们可以根据该库不同的版本创建相应的podspec文件,例如0.0.2,0.1.0等。 

让我们在浏览器中看一下weibo_ios_sdk_sso-oauth的目录结构:
  1. --
  2. |
  3. +-- demo
  4. |
  5. +-- src
  6. |
  7. +-- .gitignore
  8. |
  9. +-- README.md
复制代码
demo目录保存一个示例项目,src才是库的原代码目录。src的目录结构如下:
  1. -- src
  2. |
  3. +-- JSONKit
  4. |
  5. +-- SinaWeibo
  6. |
  7. +-- sinaweibo_ios_sdk.xcodeproj
  8. |
  9. +-- SinaWeibo-Prefix.pch
复制代码
JSONKit目录说明这个库本身依赖于JSONKit第三方库。我们可以在podspec文件中的 s.dependency声明段中声明。SinaWeibo目录才是包含所有原代码的目录,我们需要在 s.source_files中声明
  1. s.source_files = 'src/SinaWeibo/*.{h,m}'
复制代码
前一部分src/SinaWeibo/是一个相对目录,目录的层级关系一定要跟代码库的保持一致。最后一部分 *.{h,m}是一个类似正则表达式的字符串,表示匹配所有以.h和.m为扩展名的文件。 

src/SinaWeibo/目录下还有一个 SinaWeibo.bundle目录,该目录存放一些资源文件(如图片等),这些文件并不需要进行编译。可以使用 s.resourcs声明
  1. s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
复制代码
前一部分跟上面相同, **表示匹配所有子目录, *.png表示所有以.png为扩展名的图片文件。 

通过查看代码我们知道,weibo_ios_sdk_sso-oauth还依赖一个ios的核心库QuartzCore
  1. s.framework = 'QuartzCore'
复制代码
在前面我们已经说过,weibo_ios_sdk_sso-oauth库自身也依赖于另外一个第三方库JSONKit,声明如下:
  1. s.dependency 'JSONKit', '~> 1.4'
复制代码
这行声明与Podfile文件中的声明类似。 

最终的结果如下:
  1. Pod::Spec.new do |s|
  2. s.name = "weibo_ios_sdk_sso-oauth"
  3. s.version = "0.0.1"
  4. s.summary = 'weibo.com sso oauth, 微博sso认证登录功能'
  5. s.homepage = "https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth"
  6. s.license = 'MIT'
  7. s.author = {'mobileresearch' => 'mobileresearch'}
  8. s.source = { :git => 'https://github.com/mobileresearch/weibo_ios_sdk_sso-oauth.git', :commit => '68defea78942ecc782ffde8f8ffa747872af226d' }
  9. s.platform = :ios
  10. s.source_files = 'src/SinaWeibo/*.{h,m}'
  11. s.resources = "src/SinaWeibo/SinaWeibo.bundle/**/*.png"
  12. s.framework = 'QuartzCore'
  13. s.dependency 'JSONKit', '~> 1.4'
  14. end
复制代码
可以将该spec文件保存到本机的~/.cocoapods/master/目录中仅供自己使用,也可以将其提交到CocoaPods/Specs代码库中。下面我们将其保存到本机中
  1. $ mkdir -p ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
  2. $ cp weibo_ios_sdk_sso-oauth.podspec ~/.cocoapods/master/weibo_ios_sdk_sso-oauth/0.0.1
复制代码
是否可以通过搜索找到该库:
  1. $ pod search weibo
复制代码
同样在需要依赖于weibo_ios_sdk_sso-oauth这个库的项目,可以将下列添加到项目的Podfile文件中
  1. pod 'weibo_ios_sdk_sso_oauth', '0.0.1'
复制代码
保存文件,并用 pod install安装weibo_ios_sdk_sso-oauth库。 
在Kivy开发中,使用Buildozer工具打包APK文件时需要一个名为buildozer.spec的配置文件。buildozer.spec文件可以手动创建,也可以使用buildozer init命令自动生成。 手动创建buildozer.spec文件的方法如下: 1. 在应用程序的根目录下创建一个名为buildozer.spec文件。 2. 在文件中添加以下内容: ``` [app] # (required) Title of your application title = My Application # (optional) Package name package.name = myapp # (optional) Package domain (needed for android/ios packaging) package.domain = org.test # (optional) Source code where the main.py live source.dir = . # (optional) Application versioning (method 1) version = 0.1 # (optional) Application versioning (method 2) # version.regex = __version__ = ['"](.*)['"] # version.filename = %(source.dir)s/main.py # (optional) Application versioning (method 3) # version.git = git describe --tags --long # version.git.branch = False # (optional) Application dependencies # comma separated e.g. requirements = sqlite3,kivy # requirements = kivy # (optional) Custom source folders for requirements # Sets custom source for any requirements with recipes # as pkg1=../my_repos/pkg1,pkg2=../my_repos/pkg2 # source.pkgs_dir = ../my_repos/ # (optional) Android specific # (optional) Minimum API required (21 by default) # android.minapi = 21 # (optional) Android specific # (optional) Target API to use, if different from minapi # android.api = 28 # (optional) Android specific # (optional) Path to a custom AndroidManifest.xml # android.manifest = ./android/AndroidManifest.xml # (optional) Android specific # (optional) Space separated list of Java .jar files to add to the libs dir # android.add_jars = foo.jar,bar.jar # (optional) Android specific # (optional) Space separated list of Java .aar files to add to the libs dir # android.add_aars = foo.aar,bar.aar # (optional) Android specific # (optional) Gradle dependencies to add (currently only supports # comma separated list of kv files) # android.gradle_dependencies = com.android.support:appcompat-v7:26.0.1 # (optional) Android specific # (optional) Android logcat filters to use # android.logcat_filters = *:S python:D # (optional) Android specific # (optional) Android additional libraries to copy into libs/armeabi # android.libs_armeabi = mylibs/armeabi/libsqlite3.so # (optional) Android specific # (optional) Android additional libraries to copy into libs/armeabi-v7a # android.libs_armeabi_v7a = mylibs/armeabi-v7a/libsqlite3.so # (optional) Android specific # (optional) Android additional libraries to copy into libs/x86 # android.libs_x86 = mylibs/x86/libsqlite3.so # (optional) Android specific # (optional) Android additional libraries to copy into libs/arm64-v8a # android.libs_arm64_v8a = mylibs/arm64-v8a/libsqlite3.so # (optional) Android specific # (optional) Add Java code to be used (can be copy/pasted) (must be valid Java) # android.add_java_to_build = # (optional) Android specific # (optional) Gradle repositories to include # android.gradle_repositories = mavenCentral() # (optional) Android specific # (optional) Force the use of a pre-built python # android.use_pure_python = False # (optional) iOS specific # ios.ipa = myapp.ipa # (optional) iOS specific # ios.codesign.allowed = mac # (optional) iOS specific # ios.codesign.p12 = myapp.p12 # (optional) iOS specific # ios.codesign.password = mypassword # (optional) iOS specific # ios.codesign.provisioning_profile = myapp.mobileprovision # (optional) iOS specific # ios.sdk = 10.1 # (optional) OSX specific # osx.python_version = 3.7.1 # (paths) Exclusions # comma separated filenames and regex values # exclude_patterns = __pycache__,*.pyc,.git,*venv*,.DS_Store,tests # (buildozer) Debugging options # log_level = 2 # warn_on_root = 1 ``` 3. 在文件中,可以根据自己的需要修改各个参数的值。 4. 保存buildozer.spec文件。 如果你想使用buildozer init命令自动生成buildozer.spec文件,在应用程序根目录下打开命令行窗口,输入以下命令: ``` buildozer init ``` 该命令会自动生成一个buildozer.spec文件,并根据你的Python环境和系统配置,自动设置各个参数的值。你可以在生成的buildozer.spec文件中修改各个参数的值以满足你的需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值