首页 > 代码库 > iOS本地项目依赖项(CocoaPods管理本地库)

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           = { "夏科杰" => "codesourse@gmail.com" }
  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



iOS本地项目依赖项(CocoaPods管理本地库)