iOS本地项目依赖项(CocoaPods管理本地库)
iOS做本地依赖项其实是比较麻烦的,做静态库.a和.framework,但是当你用静态库去访问静态库的时候,你的程序就会报错,而且版本管理麻烦。
然后我们就想到用cocoapods做依赖库,由于是公司的代码所以不能可能放到github上面去,所以就要求建立本地依赖库。
首先,我们要安装git和cocoapods
git安装和使用就看这篇文章 http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
cocoapods的使用安装就看这篇文章 http://code4app.com/article/cocoapods-install-usage
具体怎么搭建这个环境就不细说了。
接下来申请一个github的账号,找到页面右上角 New repository
创建完成我们用git clone 到本地
git clone https://github.com/codesourse/podtest.git
这里我们要用到LICENSE 和git的版本管理
CocoaPods强制要求所有的Pods依赖库都必须有license文件,否则验证不会通过。license的类型有很多种,详情可以参考网站tl;dr Legal。在创建github仓库的时候,我已经选择了MIT类型的license。
然后我们要在该目录下创建.podspec的文件
该文件为Pods依赖库的描述文件,每个Pods依赖库必须有且仅有那么一个描述文件。文件名称要和我们想创建的依赖库名称保持一致,我的podtest依赖库对应的文件名为podtest.podspec。
podspec的文件内容
Pod::Spec.new
do |s|
s.name = "podtest"
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 = { "夏科杰" => "[email protected]" }
s.source = { :git => ‘/Users/xiakejie/cocoapods/podtest‘, :tag => "1.0.0"}
# s.social_media_url = ‘https://twitter.com/NAME‘
s.platform = :ios, ‘4.3‘
# s.ios.deployment_target = ‘5.1‘
# s.osx.deployment_target = ‘10.7‘
s.requires_arc = true
s.source_files = ‘podtest/**/*.{h,m}‘
# 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
自解析:
name: 导入pod后的目录名 version: 当前版本号 deployment_target: 配置的target prefix_header_file: 预编译头文件路径,将该文件的内容插入到Pod的pch文件内 source: 来源的具体路径,是http链接还是本地路径 requires_arc: 是否需要arc source_files: 指定该目录下包含哪些文件 其他可选参数还包括: dependency: 指定依赖,如果依赖的库不存在或者依赖库的版本不符合要求将会报错 libraries: 指定导入的库,比如sqlite3 frameworks: 指定导入的framework weak_frameworks: 弱链接,比如说一个项目同时兼容iOS6和iOS7,但某一个framework只在iOS7上有,这时候如果用强链接,那么在iOS7上运行就会crash,使用weak_frameworks可以避免这种情况。
整个podspec语法是一个嵌套结构从Pod::Spec.new do |s|到最后一个end是最大的循环,表示整个podspec导入的文件。中间每一个subspec到end结束是一个子目录,Pods会为每个subspec创建一个逻辑目录,相当于Xcode的group概念。|**|中间是subspec的名字,可以随便命名,但后面使用的名称必须一致。
通配符说明
a{bb,bc}def.{h,m}表示四个文件abbdef.h abbdef.m abcdef.h abcdef.m
*.{h,m,mm}表示所有的.h .m .mm文件
Class/**/*.{h,m}表示Class目录下的所有.h .m文件
配置完这个我们需要用git 打个tag,然后cocoapods打个tag最后拷贝到pod本地库中
git tag 1.0.0
set the new tag to 1.0.0
pod lib lint
然后在你要依赖的项目中放入podfile,内容是
pod ‘podtest‘, :podspec => ‘/Users/xiakejie/cocoapods/podtest/podtest.podspec‘
最后我们只需要简单一句pod install
如果这中间遇到
/Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/user_interface/error_report.rb:13:in `report‘: incompatible character encodings: UTF-8 and ASCII-8BIT (Encoding::CompatibilityError)
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/command.rb:58:in `report_error‘
from /Library/Ruby/Gems/2.0.0/gems/claide-0.7.0/lib/claide/command.rb:300:in `handle_exception‘
from /Library/Ruby/Gems/2.0.0/gems/claide-0.7.0/lib/claide/command.rb:274:in `rescue in run‘
from /Library/Ruby/Gems/2.0.0/gems/claide-0.7.0/lib/claide/command.rb:264:in `run‘
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/lib/cocoapods/command.rb:45:in `run‘
from /Library/Ruby/Gems/2.0.0/gems/cocoapods-0.35.0/bin/pod:43:in `<top (required)>‘
from /usr/bin/pod:23:in `load‘
from /usr/bin/pod:23:in `<main>‘
那就看这篇文章吧
http://www.tuicool.com/articles/iaqU3im
我们的依赖项目就制作完成
参考
http://blog.csdn.net/djl4104804/article/details/25408395
http://www.iwangke.me/2013/04/18/advanced-cocoapods/
http://guides.cocoapods.org/using/the-podfile.html
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。