您的位置:首页 > 移动开发 > IOS开发

创建Cocoapods Private 踩过的那些坑

2017-08-04 20:00 239 查看
一.首先呢我们需要先来创建一个私有仓库 ,我们在github上建立一个空的仓库,命名为yohunlSpecs,这个仓库是用来存放我们自己的所有的私有库的specs文件的,就如同官方的 https://github.com/CocoaPods/Specs 是用来存放所有官方的specs文件一样



Repository name: 仓库名称,这里写上我们的依赖库名字 O2View ,必填。
Description: 仓库的描述信息,可选。
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命令。完整的命令如下:)

env GIT_SSL_NO_VERIFY=true git clone https://<host_name/git/project.git  

 当你做了如上操作后 还是提交仓库失败 ,那么你可能需要 更新tag 更新一个tag 再上传,如果上传OK即为正确咯 ,你的其他工程可引用此pod私有库了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CocoaPods git iOS 私有库 wr