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' => '[email protected]' }
      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的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本

你可能感兴趣的:(iOS CocoaPods 私有pod操作流程)