iOS CocoaPods 私有pod操作流程

pod repo

如果已添加过pod repo 可以跳过

  • 从0开始

    在git服务端创建一个新的空仓库就好

  • 从已经创建好的仓库拉取

添加pod repo

pod repo add XXX自定义名字 XXX上面的仓库地址

可以通过下面两种方式查看是否添加成功

//方式1 到文件夹中查看
cd ~/.cocoapods/repos
//方式2 
pod repo list
新建pod
  • 从0开始
pod lib create XXX自定义名字

​ 按照流程配置即可

  • 从已经创建好的远程仓库拉取

在创建了Example工程的情况下,我们都是在Pods->Development Pods下添加我们的代码,且可以方便的在Example中调试使用。

修改pod
  1. 添加代码文件

    1. 选择要添加的文件
    2. Add to targets 这里要选择当前的私有pod


      添加代码
    3. 添加成功后,如下图
添加成功
  1. 添加资源文件

    资源文件的添加要主要:

    1. 添加图片这样的资源文件可以先添加到.xcassets文件中,这样在私有pod打包之后,iOS会根据机型选择合适的图片进行应用瘦身,打包成Bundle的资源文件读取方式要用下面的方式,不然读取不到。

      NSBundle *bundle = [NSBundle bundleWithPath:[[NSBundle bundleForClass:[self class]] pathForResource:@"XXXBundle" ofType:@"bundle"]];
      NSURL *url = [bundle URLForResource:soundTypeName withExtension:nil];
      

      有一点需要注意:

      XXXBundle是我们在下面第三步中podspec文件中填写的。

      [NSBundle bundleForClass:[self class]],当在类中写这个代码是没有问题的,但当是在category中读取时,[self class]只会获取添加category的类,这样就无法读到正确的bundle。

      解决办法:

      在当前库中建立一个新的空类,然后 [NSBundle bundleForClass:[Empty class]],这样便可以定位到当前库中。

    2. 添加非图片资源时可以先打成Bundle,也可以跟添加代码一样添加。

  2. 修改podspec文件

    podspec示例如下

    Pod::Spec.new do |s|
      s.name             = 'XXXUI'
      s.version          = '0.0.1'
      s.summary          = '这是一个什么组件'
      s.description      = <<-DESC
         比summary更详细的描述
                           DESC
      s.homepage         = 'git主页'
      s.license          = { :type => 'MIT', :file => 'LICENSE' }
      s.author           = { 'myname' => 'myemail@mail.com' }
      s.source           = { :git => '代码地址', :tag => "feature/V#{s.version.to_s}" }
    
      s.ios.deployment_target = '8.0'
    
      s.subspec 'ColorAndFont' do |ss|
          ss.source_files = 'XXXUI/ColorAndFont/*.{h,m}'
          ss.public_header_files = 'XXXUI/ColorAndFont/*.h'
      end
    
      s.subspec 'Button' do |ss|
          ss.source_files = 'XXXUI/Button/*.{h,m}'
          ss.public_header_files = 'XXXUI/Button/*.h'
          ss.dependency 'XXXUI/ColorAndFont'
      end
    
      s.resource_bundles = {
         'XXXUIBundle' => ['XXXUI/Assets/*.png']
      }
      
      # s.public_header_files = ''
      # s.frameworks = 'UIKit', 
      # s.dependency 'AFNetworking', '~> 2.3'
    end
    

    主要注意点:

    1. name 私有pod的名字
    2. version版本号
    3. homepage 项目主页
    4. author项目作者
    5. source项目地址,注意后面的tag写法,这里是读取了feature分支下的对应版本
    6. subspec添加下级目录,会按照设置的二级目录整理代码和资源文件
    7. resource_bundles资源文件,这样操作会把指定目录下的资源文件在编译之后打包成一个独立的Bundle,从而防止了跟主工程中资源文件命名冲突的可能性
    8. frameworks当前pod需要的系统库
    9. dependency当前pod需要的第三方库,当多个不同的私有pod使用同一个第三方库的不同版本时会产生冲突,如果有冲突建议协商修改为统一的版本
    10. 同一个私有pod中,如果按照subspec分成了子库(文件夹),如果相互之间需要引用,需要添加dependency,如上面的ss.dependency 'XXXUI/ColorAndFont',就代表着Button字库中需要依赖ColorAndFont字库
  1. 修改README文件

    这个文件的内容,会展示在项目主页,可以修改表示作者、使用注意事项等


    README
验证pod
  1. Example工程添加

    pod添加好之后,进入pod的Example文件中,执行下面命令,会把pod安装到当前Example工程中,这里我们可以测试私有pod是否可以正常编译、使用

    pod install
    
  2. 本地验证

    进入到私有pod工程主目录


    目录

    执行命令,进行本地验证

    pod lib lint
    

    验证过程中如果有过多的警告导致验证不过,可以通过命令忽略警告

    pod lib lint --allow-warnings
    
  3. 远程验证

    pod spec lint 
    
推送pod
  1. 推送私有pod代码

    验证通过的代码可推送到远端

  2. 推送podsepc到pod repo

    pod repo push XXXrepo XXXUI
    
使用pod
  1. 在要使用私有pod的工程的Podfile中添加,引入私有pod repo的地址,同时为了正常使用cocoapods需要加入cocoapods地址

    platform :ios, '8.0'
    source 'http://xxxx.git'
    source 'https://cdn.cocoapods.org/'
    use_frameworks!
    
    pod 'XXXUI', '~> 0.0.1' 
    
  2. 安装pod

    pod install
    
总结

可能会用到的其他命令

//查看pod repo
pod repo list
//查看pod是否可用
pod search XXXUI
//查看pod缓存
pod cache list
//清除缓存
pod cache clean XXXUI
//清除全部缓存
pod cache clean —all 
//不更新repo 快速安装、更新
pod install --no-repo-update
pod update --no-repo-update
//更新repo 安装
pod install --repo-update

Podfle使用建议,建议使用pod ‘AFNetworking’, ‘~>0.1.2′

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