组件化第二篇:CocoaPods的使用

常用命令总结写在前面,具体分析往下看

# 检索框架
pod search 框架名关键字

# 创建项目,并cd到工程文件所在目录,创建Podfile文件
pod init

# pod install和pod update的选择(CocoaPods1.0.1之后)
# 安装框架,不会直接更新repo库
pod install
# 更新框架,如果不加--no-repo-update,默认会更新repo库
pod update [--verbose] --no-repo-update

Podfile文件内容(建议使用Xcode进行编辑)

# 支持的iOS系统的最低版本
platform:ios,'8.0'
# 忽略引入库的所有警告(强迫症者的福音啊)
inhibit_all_warnings!
# 使用framework(包含swift库就必须使用此设置,纯OC库可以不设置)
use_frameworks!

# 下面两行是指明依赖库的来源地址
source 'https://gitclub.cn/CocoaPods/Specs.git'
source '你自己的私有库镜像源'

# 做一些安装之前的更改
pre_install do |installer| 
    ...
end

# 依赖目标一般为项目名称
# 针对MyApp target引入AFNetworking
# 针对MyAppTests target引入OCMock,
target 'MyApp' do 
    pod 'AFNetworking', '~> 3.0' 
    target 'MyAppTests' do
       # ???
       inherit! :search_paths 
       pod 'OCMock', '~> 2.0.1' 
    end
end

# ----------------以下命令一般采取系统默认设置,无特别需求无需设置----------------
# install! 这个命令是cocoapods声明的一个安装命令,用于安装引入Podfile里面的依赖库
install! 'cocoapods', 
  :deterministic_uuids => false, 
  :integrate_targets => false

# 默认情况下,我们不需要指定,直接使用与Podfile所在目录的工程名一样就可以了。如果要指定另外的名称,而不是使用工程的名称,可以这样指定
workspace 'MyWorkspace'

# 作用于哪个工程
project 'MyProject'

# 这个是cocoapods的一些配置,官网并没有太详细的说明,一般采取默认就好了,也就是不写.
post_install do |installer|       
   installer.pods_project.targets.each do |target| 
     puts target.name 
   end
end
# ----------------以上命令一般采取系统默认设置,无特别需求无需设置----------------

Cocopods工作原理图

Cocopods工作原理.png

检索第三方框架

  • 检索命令
pod search 框架关键字
  • 命令作用:从本地缓存第三方框架描述信息生成的检索文件中检索相关框架的信息
  • 遇到的问题
    • 问题描述:Unable to find a pod with name, author, summary, or description matching 'xxx'
    • 解决方案:删除cocoapods索引文件
    sudo rm ~/Library/Caches/CocoaPods/search_index.json
    

安装第三方框架

  • 使用Xcode新建一个工程
  • 打开终端,cd到工程目录下
  • 生成Podfile文件
    • Podfile文件是使用ruby语法编写的框架依赖描述文件,就是告诉cocoapods需要下载哪些框架
    • Podfile文件配置语法详见Podfile语法参考(译)
    • 创建命令:pod init
    • 使用Xcode or vim编辑器编辑Podfile文件
    • 在终端中使用vim编辑器编辑Podfile步骤
      • vi podfile在vim编辑器中打开podfile文件
      • i键进入编辑模式
      • 编辑完成后,按esc键退出编辑模式
      • :wq组合键并回车退出vim编辑器
      • 记得在Podfile文件的顶部加入下面的repo源地址:
      source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
      
    • Podfile示例
      # 指定的repo镜像源
      source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
      
      # 最低支持的iOS版本
      platform :ios, '8.0'
      
      # 依赖目标一般为项目名称
      target '依赖目标' do
          # 以framework的形式使用第三方库
          use_frameworks!
      
          pod 'AFNetworking', '~> 3.0'    # 网络库
          pod 'SDWebImage', '~>3.8'       # 图片加载
          pod 'SVProgressHUD'             # Loading框 + 提示框
          pod 'MJRefresh'                 # 下拉刷新
          pod 'HandyFrame'                # 使用frame布局
          pod 'YYModel'                   # 模型转换
      end
      
  • 安装框架
    // --verbose表示打印详细信息
    // --no-repo-update表示不更新本地框架信息源
    
    // 安装框架,此命令在新版本中不会更新索引库
    pod install
    // 更新框架,防止更新索引库
    pod update [--verbose] --no-repo-update
    
  • 遇到的问题
    • 问题描述:The dependency 'SSZipArchive', '~> 1.6.2' is not used in any concrete target.
    • 解决方案:指定依赖目标
    • 从cocoapods 1.0.1及后续版本必须明确指定依赖目标
    # 依赖目标一般为项目名称
    target '依赖目标' do
    
    # target数组 如果有新的target直接加入该数组
    targetsArray = ['targetName1', 'targetName2', 'targetName3']
    # 循环指定公用的库
    targetsArray.each do |t|
        target t do
            pod 'MJRefresh', '~> 1.4.6'
            pod 'Masonry', '~> 0.6.1'
        end
    end
    
    # 指定额外依赖的不同的三方库
    target 'targetName1' do
      pod 'xxx1'
      pod 'xxx2'
    end
    
    target 'targetName2' do
        pod 'xxx3'
    end
    
  • 安装完后生成的文件
    • Podfile.lock文件:记录上一次下载的框架的版本号
    • *.xcworkspace文件:工作区文件
  • 以后要添加新的库,就编辑Podfile文件,cd到工程根目录下,然后执行pod install --no-repo-update命令就可以了
  • pod installpod update没有指定框架版本号时是有区别
    • pod installPodfile.lock文件存在时直接读取并下载框架,如果是团队开发为了保证版本一致,建议使用此命令
    • pod update直接读取Podfile文件中的信息,不管Podfile.lock文件是否存在,所以在团队开发时可能导致大家使用的第三方库的版本不一致
  • pod installpod update选择
    • 一般情况下,第一次从共享库把项目下载下来之后,应该使用pod install命令安装,而不是选择pod update,目的是为了保证大家使用的第三方框架版本一致
    • 如果以后大家需要升级第三方框架,那么大家约定好统一再执行一次pod update
    • 建议在编写podfile文件时,明确指定第三方库的版本,格式如下:pod '第三方库名称', '~> 版本号',这样不管使用pod install还是pod update效果都是一致的

参考资料

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,319评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,801评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,567评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,156评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,019评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,090评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,500评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,192评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,474评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,566评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,338评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,212评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,572评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,890评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,169评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,478评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,661评论 2 335

推荐阅读更多精彩内容