最近一段时间经常遇到iOS开发圈里的的朋友在问cocoapods的问题,cocoapods自从1.8正式推出CDN后在大陆使用问题不断。众所周知的gfw导致在大陆连接境外的服务器丢包率奇高,然后又有中国特色的DNS污染,这就导致了cocoapods的CDN在大陆基本是残废。 然后,不明所以的iOS开发者就到处去找资料,各种折腾,结果很不理想。网络上一大把的cocoapods安装教程,但很多的都是复制粘贴,作者也没有去维护更新。于是跟着网上的教程越是折腾问题越多,停都停不下来。 > 为了写这一篇文章,我特意用Paralles Desktop建了一个macOS10.15的虚拟机 ## 安装 首先肯定是安装brew,[Homebrew](https://brew.sh/index_zh-cn.html)是macOS系统下的包管理器,通过它可以安装基本的开发工具。安装cocoapods的多种方式都要使用[Homebrew](https://brew.sh/index_zh-cn.html),[Homebrew](https://brew.sh/index_zh-cn.html)的官方主页就有它的精简安装命令。在这里我把这个命令拷贝过来了: ```shell /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" ``` 打开终端,在终端里执行该命令,然后输入用户密码,等待拉取[Homebrew](https://brew.sh/index_zh-cn.html)的仓库。如果觉得网络问题拉取brew的仓库太慢可以使用[中国科学技术大学开源软件镜像站](https://mirrors.ustc.edu.cn)。 说到这里我就顺便把替换[Homebrew](https://brew.sh/index_zh-cn.html)的仓库地址一起说一下。 首先在终端里执行brew的安装命令,如果没有使用代理大概率遇到`curl: (7) Failed to connect to raw.githubusercontent.com port 443: Connection refused`。这个时候可以考虑弄一个[代理](https://portal.shadowsocks.nz/aff.php?aff=36423),如果不想搞[代理](https://portal.shadowsocks.nz/aff.php?aff=36423)也能通过这一步,在这里就说说不使用[代理](https://portal.shadowsocks.nz/aff.php?aff=36423)的安装方法吧,至于[代理](https://portal.shadowsocks.nz/aff.php?aff=36423)在文章末尾会说。 浏览器打开[IPAddress.com](https://www.ipaddress.com),在它的搜索框输入`raw.githubusercontent.com`,回车后可以看到一个ip:`199.232.68.133`,有时候可能查到的不是这个,这没关系。把查询到的ip添加到系统的hosts文件里: ```shell sudo vim /etc/hosts # i 进入编辑模式 # 插入: 199.232.68.133 raw.githubusercontent.com # ## # 127.0.0.1 localhost # 255.255.255.255 broadcasthost # ::1 localhost # 199.232.68.133 raw.githubusercontent.com # esc :wq 保存退出 ``` 完成上面的操作就可以访问`raw.githubusercontent.com`了,重新执行brew安装的命令。 如果系统里面没有安装过xcode这个时候就去系统更新里面看看,系统更新会安装`Command Line Tools for Xcode`,安装的时候brew安装不会被退出,等待`Command Line Tools for Xcode`安装完成。 当`Command Line Tools for Xcode`安装完成后会立马拉取brew的git仓库,这个时候可以到`/usr/local/Homebrew`目录里换国内的源了。 ```shell # 进入Homebrew的仓库所在的上一级目录 cd /usr/local # 删除Homebrew仓库文件夹 sudo rm -rf Homebrew # 拉取国内的仓库到本地 sudo git clone http://mirrors.ustc.edu.cn/brew.git Homebrew # 将拉取的仓库文件加权限修复,username就是电脑当前用户名 sudo chown -R username:admin Homebrew # 重新执行brew的安装命令 /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" # 这个时候跳过了Homebrew的仓库,但是还有homebrew-core的 # 网络好的可以使用github的远程仓库,网络不好的就结束任务继续执行下面的命令 cd /usr/local/Homebrew/Library/Taps mkdir homebrew cd homebrew #如果有这个文件夹就不需要额外创建 git clone http://mirrors.ustc.edu.cn/homebrew-core.git homebrew-core /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" #然后brew大概就安装完成了,如果有问题可以留言 ``` 上面brew安装好了,那么接下来先尝试直接用brew安装cocoapods吧,以我的经验brew直接安装的版本没有gem安装的新。 ```shell brew install cocoapods pod --version ``` 这个时候cocoapods就安装好了,不过不能立刻使用,只是将cocoapods的软件部分装好,至于接下来放到后面聊。 接下来就是开另一个虚拟机(在用brew安装cocoapods之前拷贝了一份),用ruby的gem管理器安装cocoapods。 ```shell # 安装ruby,目前的版本是2.7.1 brew install ruby # 安装好之后注意输出日志中的: # By default, binaries installed by gem will be placed into: # /usr/local/lib/ruby/gems/2.7.0/bin # export PATH="/usr/local/opt/ruby/bin:$PATH" # 回到家目录 cd ~ # macOS10.15已经默认开始使用zsh了,如果系统是升级上来的有可能还是bash # 输出SHELL,确定SHELL环境 echo $SHELL # 如果是输出:/bin/zsh vim .zshrc # 如果是输出:/bin/bash vim .base_profile # 在文件末尾插入,如果文件是空的也一样 export PATH="/usr/local/lib/ruby/gems/2.7.0/bin:/usr/local/opt/ruby/bin:$PATH" # :wq 保存退出 # 然后关闭终端再打开,执行source .zshrc OR source .base_profile也行 # 查看ruby的版本,确保ruby环境配置没问题 ruby -v # 如果输出的不是2.7以上,那就是PATH没生效,概率极低,反正我是没遇到 # ruby安装好配置好PATH后就OK了 # 这个时候开始安装cocoapods了 gem install cocoapods # 之前是要替换中国的ruby源,我在虚拟机上的时候没有替换也能安装,我就没替换了 # 文章末尾加一个替换ruby源的链接吧 ``` 到这来我掌握的两种cocoapods安装方式已经搞定了如果在接下来使用pod的时候遇到问题那不是cocoapods安装的问题了,一般都是网络和本地的repo问题了。 ## 配置 1.7.2之前版本的cocoapods安装到这一步就应该执行` pod setup`了,然后该去喝茶了,这个茶大概率要喝上一天。cocoapods的master repo仓库现在差不多有3个G了,把它全部弄下来要么就挂[代理](https://portal.shadowsocks.nz/aff.php?aff=36423)要么就靠菩萨保佑。当然也可以使用国内的master repo仓库,或者直接在Podfile文件里指定source地址,不过这样做就没有将新的CDN功能给用上了。指定source和使用国内的master repo仓库我就详细说了,网上各种blog说的很详细了,至于它们的准确性就自己去尝试吧。 cocoapods的使用高度依赖repo,之前使用` pod setup`的时候会创建并拉取master repo,而现在已经变了,需要自己添加repo了。 ```shell # 删除老版本的repo,可以换个名字,而不是直接删除 rm ~/.cocoapods # 添加cdn的repo,目前cdn只有这一个url,而且名字只能用trunk,不然会提示 CDN: Repo trunk does not exist! pod repo add-cdn trunk https://cdn.cocoapods.org/ # 如果网络条件好执行下面的搜索命令就OK了 pod search AFNetworking --verbose # ruby的有一个URI的api被弃用了,然后在使用cocoapods的时候会有大量的警告 # 在终端的配置文件里插入 export RUBYOPT="-W0" 然后就没那些警告了 # 我没有尝试master和trunk两个repo同时存在的情况 # 如果有某位看官尝试过然后遇到了问题并解决了可以留言 ``` ## 使用 使用的时候最多的问题就是: > CDN: cdnrepo URL couldn't be downloaded: https://raw.githubusercontent.com/CocoaPods/Specs/master/Specs/xxxxxxxx.json > > Response: Couldn't connect to server, retries: 4,3,2,1 这个完全是`raw.githubusercontent.com`的DNS有问题导致的,按前面安装brew的时候找不到`raw.githubusercontent.com`处理。 其它的更多的问题后续添加吧,各位看官也可以留言遇到的问题大家一起探讨。 ## 附 把欠各位看官的链接补上吧: - [代理推荐](https://portal.shadowsocks.nz/aff.php?aff=36423),对,你们没看错,我就是为了推广 - [代理软件macOS端](https://github.com/yichengchen/clashX) - [RubyGems的国内源](https://gems.ruby-china.com)更换教程 - 设置国内的CocoaPods 镜像:[CocoaPods 镜像使用帮助](https://mirrors.tuna.tsinghua.edu.cn/help/CocoaPods/) - [HomeBrew国内镜像安装方法](https://juejin.im/post/5c738bacf265da2deb6aaf97)
已有 2 条评论
路过
代理的使用和遇到的问题可以在评论里聊,不然就404了