创建Cocoapods Private 踩过的那些坑

14 篇文章 0 订阅
12 篇文章 0 订阅
一.首先呢我们需要先来创建一个私有仓库 , 我们在github上建立一个空的仓库,命名为yohunlSpecs,这个仓库是用来存放我们自己的所有的私有库的specs文件的,就如同官方的  https://github.com/CocoaPods/Specs  是用来存放所有官方的specs文件一样

  1. Repository name: 仓库名称,这里写上我们的依赖库名字 O2View ,必填。
  2. Description: 仓库的描述信息,可选。
  3. Public or Private: 仓库的公开性,开源的话选 Public 。 如果是公司内部使用的话这里推荐大家使用私有的仓库,但是 github 的私有仓库是要收费的 $7/month (壕请无视 - -!)。大部分公司都是有自己的git服务器,不过一般只能在公司内网使用,或者可以选择Gitlab,CodingBitbucket任意一种。

二:添加我们在教程一中创建的工程  工程名称 的spec文件到上面创建的 工程名称 库中去

(PS:由于这个工程名称是采用pod lib create 创建的,本身已经建立了podspec文件了.当然,如果你的工程是已经建立好了的,可以采用命令  pod spec create specName来创建,官方创建spec文件的文档http://guides.cocoapods.org/making/specs-and-specs-repo.html,如果带有子库的化,podspec文件将会变得有些复杂

cocoaPods私有库官网

 

 

 

三.私有库中添加资源(图片、音视频等)

方法共有三种:

  • 第一种

    spec.resources = ["Images/*.png", "Sounds/*"]

    但是这些资源会在打包的时候直接拷贝的app的Bundle中,这样说不定会和其它资源产生命名冲突

  • 第二种

    spec.resource = "Resources/MYLibrary.bundle"

    把资源都放在bundle中,然后打包时候这个bundle会直接拷贝进app的mainBundle中。使用的时候在mainBundle中查找这个bundle然后再搜索具体资源

      NSURL *bundleURL = [[NSBundle mainBundle] URLForResource:@"JZShare" withExtension:@"bundle"];
      NSBundle *bundle = [NSBundle bundleWithURL:bundleURL];
      UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];
  • 第三种
    spec.resource_bundles = {
    'MyLibrary' => ['Resources/*.png'],
    'OtherResources' => ['OtherResources/*.png']
    }
    这种方法利用 framework 的命名空间,有效防止了资源冲突。
    使用方法是先拿到最外面的 bundle,然后再去找下面指定名字 的 bundle 对象,再搜索具体资源
    NSBundle *bundle = [NSBundle bundleForClass:[MYSomeClass class]];
    NSURL *bundleURL = [bundle URLForResource:@"MyLibrary" withExtension:@"bundle"];
    NSBundle *resourceBundle = [NSBundle bundleWithURL: bundleURL];
    UIImage *img = [UIImage imageNamed:icon inBundle:bundle compatibleWithTraitCollection:nil];

四.如果私有库添加了静态库或者dependency用了静态库

那么执行pod lib lint还有pod spec lint时候需要加上—user-libraries选项
否则会出现'The 'Pods' target has transitive dependencies错误

命令可如下:

pod lib lint --verbose --allow-warnings --no-clean --sources='仓库地址,https://github.com/CocoaPods/Specs.git' --skip-import-validation

五.如果私有库只引用其他库的subspec

只需要依赖想依赖的subspec,不用管主spec(因为依赖subspec必然要依赖主spec)


六.到了最关键的一步 上述的subspec文件如果写好了 开始执行上传的过程,上传的过程可能出现的问题就是 上传使用http的仓库地址可用 ,但是使用SSH的地址失败,那么就需要做一个操作(克隆远程仓库时,用env命令设置GIT_SSL_NO_VERIFY环境变量为"ture",并同时调用正常的git clone命令。完整的命令如下:

  1. env GIT_SSL_NO_VERIFY=true git clone https://<host_name/git/project.git  
 当你做了如上操作后 还是提交仓库失败 ,那么你可能需要 更新tag 更新一个tag 再上传,如果上传OK即为正确咯 ,你的其他工程可引用此pod私有库了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值