CocoaPods使用中级篇

目录

profile相关参数

1. 依赖相关的指令

  • pod : 声明一个依赖库
    • 版本
    //使用最新的版本
    pod 'SSZipArchive' 
    
    //指定使用某个版本
    pod 'Objection', '0.9'
    
    //0.1.2与0.2版本之间的最新版本
    pod 'Objection', '~> 0.1.2'
    
    • Build配置
    
      //只有在debug模式下才使用PonyDebugger库
      pod 'PonyDebugger', :configuration => 'Debug'
    
    • Subspecs 配置
      Subspecs 配置, 只使用pod中某一个或者某一些子pod      库(需要pod库支持)
    //使用QueryKit下的Attribute库:
    pod 'QueryKit/Attribute'
    
    //使用QueryKit下的Attribute库和QuerySet库:
    pod 'QueryKit', :subspecs => ['Attribute', 'QuerySet']
    
    • 本地pod库(cocoapod会在指定的文件夹下找podspec,所以当前文件夹下一定要有podspec文件)
        pod 'AFNetworking', :path => '~/Documents/AFNetworking'
      
    • 设置pod库
      //使用master分支
      pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git'
    
      //使用指定分支
      pod 'AFNetworking', :git =>         'https://github.com/gowalla/AFNetworking.git', :branch => 'dev'
    
      //使用指定tag
      pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :tag => '0.7.0'
    
      //使用某一次commit
      pod 'AFNetworking', :git => 'https://github.com/gowalla/AFNetworking.git', :commit => '082f8319af
    
    • 设置podSpec的来源
pod 'JSONKit', :podspec => 'https://example.com/JSONKit.podspec'
  • Target : 与project中的target保持一致,默认target会继承外面的依赖库

简单应用:

target 'ZipApp' do
  pod 'SSZipArchive'
end

继承别的target的依赖库

target 'ZipApp' do
  pod 'SSZipArchive'

  target 'ZipAppTests' do
    inherit! :search_paths
    pod 'Nimble'
  end
end

继承多个target的依赖库(ShowsTests 同时有ShowsApp和)

target 'ShowsApp' do
  pod 'ShowsKit'

  # Has its own copy of ShowsKit + ShowTVAuth
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end
  • 抽象Target : 方便其他target继承(这个抽象的target是不存在的)
abstract_target 'Networking' do
  pod 'AlamoFire'

  target 'Networking App 1'
  target 'Networking App 2'
end
# Note: There are no targets called "Shows" in any of this workspace's Xcode projects
abstract_target 'Shows' do
  pod 'ShowsKit'

  # The target ShowsiOS has its own copy of ShowsKit (inherited) + ShowWebAuth (added here)
  target 'ShowsiOS' do
    pod 'ShowWebAuth'
  end

  # The target ShowsTV has its own copy of ShowsKit (inherited) + ShowTVAuth (added here)
  target 'ShowsTV' do
    pod 'ShowTVAuth'
  end

  # Our tests target has its own copy of
  # our testing frameworks, and has access
  # to ShowsKit as well because it is
  # a child of the abstract target 'Shows'

  target 'ShowsTests' do
    inherit! :search_paths
    pod 'Specta'
    pod 'Expecta'
  end
end
  • inherit!:给当前target设置集成模式

参数有

:complete : 全部继承父target
:none :全部不继承
:search_paths :只继承父target的searchPaths

例如:
target 'App' do
  target 'AppTests' do
    inherit! :search_paths
  end
end

2. Target配置

platform: 两个参数。一个是name, 一个是target
name属性
osx for OS X, :ios for iOS, :tvos for tvOS, or :watchos for watchOS.

target:版本

例如:

platform :ios, '4.0'
platform :ios
inhibit_all_warnings : 忽略所有库中的警告,也可以指定某一个具体库的警告。例如:
//全部忽略
platform :ios, '8.0'

inhibit_all_warnings!

source 'https://github.com/CocoaPods/Specs.git'

target 'TestPod' do

  pod 'SummerOCProjectFrame', '~> 0.0'

end

//某一个忽略
pod 'SummerOCProjectFrame', '~> 0.0', :inhibit_warnings => true

3. Source : 可以指定CocoaPods Master Repository,也可以自定义的Repository。例如:

source 'https://github.com/artsy/Specs.git'
source 'https://github.com/CocoaPods/Specs.git'

4. Hooks: 提供在初始化过程中接口

plugin:插件。描述在初始化时候使用的插件。例如:
plugin 'cocoapods-keys', :keyring => 'Eidolon'
plugin 'slather'
pre_install:在pod下载完初始化前可以通过它做逻辑处理。例如:
pre_install do |installer|
  # Do something fancy!
end
post_install:在形成project后写入本地前可以通过它做逻辑处理。比如设置target的build setting, 代码如下:
post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['GCC_ENABLE_OBJC_GC'] = 'supported'
    end
  end
end

5. def name end。 如果project依赖的库很多,比如有自己开发的库,有第三方的库,可以对这些库进行分类。例如:

def myPods
pod xxx
pod xxx1
pod xxx2
end

def thirdPods
pod yyy
pod yyy1
pod yyy2
end

target 'xxx' do
  myPods
  thirdPods
end

参考:https://guides.cocoapods.org/syntax/podfile.html#podfile

podspec相关参数

  • 一些参数:

    • prefix_header_file : 给pod库设置pch文件
    • dependency : 设置依赖库
    • weak_framework :兼容高低版本api的问题,类似于主工程中frame里面的option属性
    • libraries, framework
    • compiler_flags,例如
    spec.compiler_flags = '-DOS_OBJECT_USE_OBJC=0', '-Wno-format'
    
    • prefix_header_contents :给pod库的pch文件增加文件,例如:
      spec.prefix_header_contents = '#import <UIKit/UIKit.h>'
      spec.prefix_header_contents = '#import <UIKit/UIKit.h>', '#import <Foundation/Foundation.h>'
    
    • source_files, public_header_files(不写默认是所有.h文件),private_header_files。source支持如下几种源:
    //git源 :git => :tag, :branch, :commit, :submodules
    spec.source = { :git => 'https://github.com/AFNetworking/AFNetworking.git',
                  :tag => spec.version.to_s }
    
    //:svn => :folder, :tag, :revision
    spec.source = { :svn => 'http://svn.code.sf.net/p/polyclipping/code', :tag => '4.8.8' }
    
    //:hg => :revision
    spec.source = { :hg => 'https://bitbucket.org/dcutting/hyperbek', :revision => "#{s.version}" }
    
    //:http => :flatten, :type, :sha256, :sha1
     spec.source = { :http => 'http://dev.wechatapp.com/download/sdk/WeChat_SDK_iOS_en.zip' }
    
    //:path
    
    • vendored_frameworks: pod库的frame
    • vendored_libraries: 第三方.a文件
spec.vendored_libraries  = 'xxx/Classes/ThirdParty/*.{a}'
  • resource_bundles,resources
spec.resource_bundles = {
    'MapBox' => ['MapView/Map/Resources/*.png'],
   'OtherResources' => ['MapView/Map/OtherResources/*.png']
  }

spec.resources = ['Images/*.png', 'Sounds/*']
  • preserve_path: install 或者 update之后不会更新的文件路径
spec.preserve_path = 'IMPORTANT.txt'
spec.preserve_paths = 'Frameworks/*.framework'  
  • exclude_files : 不包含的文件。例如:
spec.exclude_files = 'Classes/**/unused.{h,m}'
  • subspec : 子spec。可以使用spec中所有属性。比如不同的source_file, 不同的dependencies。例如:
 //不同的source_file
subspec 'Twitter' do |sp|
  sp.source_files = 'Classes/Twitter'
end

subspec 'Pinboard' do |sp|
  sp.source_files = 'Classes/Pinboard'
end

  Pod::Spec.new do |s|
  s.name = 'RestKit'

  //不同的dependencies
  s.subspec 'Core' do |cs|
    cs.dependency 'RestKit/ObjectMapping'
    cs.dependency 'RestKit/Network'
    cs.dependency 'RestKit/CoreData'
  end

  s.subspec 'ObjectMapping' do |os|
  end
  end

参考:https://guides.cocoapods.org/syntax/podspec.html

清除pod缓存

第一步:
pod cache list //查看看缓存
pod cache clean --all //清除缓存 

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

推荐阅读更多精彩内容

  • 一. CocoaPods的介绍 什么是CocoaPods?CocoaPods是一个负责管理iOS项目中第三方开源库...
    辉712阅读 3,926评论 0 7
  • 项目组件化、平台化是技术公司的共同目标,越来越多的技术公司推崇使用pod管理第三方库以及私有组件,一方面使项目架构...
    swu_luo阅读 21,754评论 0 39
  • 前言 前几天发布我的开源库<最简单方便的iOS轮播开源库:JYCarousel>到CocoaPods的时候。对Co...
    Dely阅读 17,194评论 12 82
  • CocoaPods 是什么? CocoaPods 是一个负责管理 iOS 项目中第三方开源库的工具。CocoaPo...
    朝洋阅读 25,679评论 3 51
  • 背景 上一篇博客最新的CocoaPods的使用教程(一)里主要讲解了CocoPods得简单的日常使用。但是我们经常...
    Dely阅读 5,806评论 11 34