在某些公司的局域网内,我们可能是无法访问github网站的。如果做iOS开发,我们需要这些第三方库依赖。如何通过github上的开源库,我们来设置自己的依赖呢。
通过下面这些操作,你可以对 git的specs索引库有更深的理解。
以MJRefresh为例,在一台可以访问github的电脑,找到github上git地址addressA
git clone addressA
将MJRefresh 克隆到本地
将代码复制到不能访问github的电脑
cd到当前文件夹
git remote -v 查看当前的远程地址,是实际上github的仓库地址,名称为origin
git remote add me addressB
该操作是添加新的远端仓库地址。addressB是你创建的git仓库地址,别名是me
git push me 推送到远端代码
git push me --tags 这一步很关键。
因为有了这一步,第三方库就是有版本号。我们使用的pod 'MJRefresh' ,'3.1.2'命令中的3.1.2就是对应的tag号。
但是:做到了以上这些还不够。我们即使在Podfile文件中头部添加这句话
source 'https://xxxx.com/myCocoaPods/MJRefrsh.git'
或者是这样写
pod 'MJRefresh' ,'3.1.2' , :source => 'https://xxxx.com/myCocoaPods/MJRefrsh.git'
为什么会这样呢?
回到你的finder 打开如下路径:/用户/MacUserName/.cocoapods
或者shift+command+. 打开显示隐藏文件夹
在这个路径下(/用户/fjzlsc/.cocoapods/repos/master/specs)我们可以看到几乎所有的cocoapod上出现的索引库。里面采用哈希分布,0-f 三层 共有161616个哈希索引,每个索引下有一系列的库
我们在/用户/fjzlsc/.cocoapods/repos/master/specs中搜索:MJRefresh
它的路径是0/f/b/的索引下面,通过搜索,我们还能搜索出别人在基础继续修改的库,如:
打开MJRefresh,我们可以看到MJRefresh下所有的版本号对应的文件夹
重点来了:这个以podspec.json 为结尾的文件,就是关键的索引文件
打开这个文件,我们可以看到:
{
"name": "MJRefresh",
"version": "3.1.2",
"summary": "An easy way to use pull-to-refresh",
"homepage": "https://github.com/CoderMJLee/MJRefresh",
"license": "MIT",
"authors": {
"MJ Lee": "199109106@qq.com"
},
"platforms": {
"ios": "6.0"
},
"source": {
"git": "https://github.com/CoderMJLee/MJRefresh.git",
"tag": "3.1.2"
},
"source_files": "MJRefresh/**/*.{h,m}",
"resources": "MJRefresh/MJRefresh.bundle",
"requires_arc": true
}
我们要着重修改下面这部分
"source": {
"git": "https://github.com/CoderMJLee/MJRefresh.git",
"tag": "3.1.2"
},
我们将source改为自己的git代码https://xxxx.com/myCocoaPods/MJRefrsh.git
然后,我们也需要像cocoapod一样模拟一个索引库,但是这个索引库,我们没必要像Cocoapods一样建立哈希查找索引,只需要把自己工程需要的库放进去即可。
建立方法也很简单:
https://xxxx.com/myCocoaPods/mySpecs.git
里面我们只需要把刚才MJRefresh文件下所有文件(以podspec.json 为结尾的文件)和文件夹拷贝一下。然后使用脚本语言,把所有的source中的git地址修改一下。
这样,我可以把MJRefresh文件夹上传至远端仓库上https://xxxx.com/myCocoaPods/mySpecs.git,这样
我们在配置podfile时,只要在头部添加这句话
source 'https://xxxx.com/myCocoaPods/MySpecs.git'
或者是这样写
pod 'MJRefresh' ,'3.1.2' , :source => 'https://xxxx.com/myCocoaPods/MySpecs.git'
至此,我们在局域网或者受限网络环境下,使用cocoapods功能完全实现。
缺点:需要手动维持第三方库的更新。你都不能访问外网了,就只能手动升级了。
参考文章:Podfile语法参考