diff --git a/README.md b/README.md index f6aa41a..61e6019 100644 --- a/README.md +++ b/README.md @@ -72,3 +72,4 @@ 1. [\[2018-12-28\] gitlab 安装、配置](./misc/1.md) 2. [\[2019-01-15\] api 接口管理工具](./misc/2.md) +3. [\[2021-06-08\] 解决 CocoaPods 命令 pod install 安装 github.com 上的包非常缓慢或者失败](./misc/3.md) diff --git a/misc/3.md b/misc/3.md new file mode 100644 index 0000000..7e5d425 --- /dev/null +++ b/misc/3.md @@ -0,0 +1,102 @@ +# 解决 CocoaPods 命令 pod install 安装 github.com 上的包非常缓慢或者失败 + +CocoaPods 执行 `pod install` 会安装 `github.com` 上的包,但 `github.com` 很不稳定。 +一个解决方案是,使用脚本将 `github.com` 的资源转换为其他域的资源。 + +## CocoaPods v1.7.2 + +CocoaPods 从 1.7.2 版本开始使用 `https://cdn.cocoapods.org/` 代替原有的 `https://github.com/CocoaPods/Specs.git`, +这样可以按需下载需要的包定义,而不用一次性下载整个 `Specs` 库(整个库是 3GB 左右),参考 [CocoaPods 1.7.2 — Master Repo CDN is Finalized!](https://blog.cocoapods.org/CocoaPods-1.7.2/)。 + +``` +source 'https://github.com/artsy/Specs.git' +- source 'https://github.com/CocoaPods/Specs.git' ++ source 'https://cdn.cocoapods.org/' +``` + +## 解决方案 + +脚本是使用 `python` 写的,很简单,放在 `https://github.com/senntyou/CocoaPods-Specs-Modify`,如要使用,需要先克隆到本地。 + +``` +git clone https://github.com/senntyou/CocoaPods-Specs-Modify.git + +cd CocoaPods-Specs-Modify + +python modify.py +``` + +`modify.py` 脚本中,默认 `specsDir` 取 `~/.cocoapods/repos/trunk/Specs/`,`targetSite` 取 `github.com.cnpmjs.org/`,可以根据需要更改,再运行脚本 + +``` +# Specs目录 +specsDir = os.path.expanduser('~') + '/.cocoapods/repos/trunk/Specs/' + +# github 域名 +githubSite = 'github.com/' + +# 替换域名 +targetSite = 'github.com.cnpmjs.org/' +``` + +## 示例 + +比如,原来的包定义是 + +``` +{ + "name": "MJRefresh", + "version": "3.6.1", + "summary": "An easy way to use pull-to-refresh", + "homepage": "https://github.com/CoderMJLee/MJRefresh", + "license": "MIT", + "authors": { + "MJ Lee": "richermj123go@vip.qq.com" + }, + "platforms": { + "ios": "9.0" + }, + "source": { + "git": "https://github.com/CoderMJLee/MJRefresh.git", + "tag": "3.6.1" + }, + "source_files": "MJRefresh/**/*.{h,m}", + "resources": "MJRefresh/MJRefresh.bundle", + "requires_arc": true +} +``` + +更改后的包变成 + +``` +{ + "name": "MJRefresh", + "version": "3.6.1", + "summary": "An easy way to use pull-to-refresh", + "homepage": "https://github.com.cnpmjs.org/CoderMJLee/MJRefresh", + "license": "MIT", + "authors": { + "MJ Lee": "richermj123go@vip.qq.com" + }, + "platforms": { + "ios": "9.0" + }, + "source": { + "git": "https://github.com.cnpmjs.org/CoderMJLee/MJRefresh.git", + "tag": "3.6.1" + }, + "source_files": "MJRefresh/**/*.{h,m}", + "resources": "MJRefresh/MJRefresh.bundle", + "requires_arc": true +} +``` + +`github.com` 变成 `github.com.cnpmjs.org` + +## 后续 + +更多博客,查看 [https://github.com/senntyou/blogs](https://github.com/senntyou/blogs) + +作者:[深予之 (@senntyou)](https://github.com/senntyou) + +版权声明:自由转载-非商用-非衍生-保持署名([创意共享 3.0 许可证](https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh))