CocoaPods出现错误[!] CDN: trunk URL couldn‘t be downloaded:
好久没有写问题章了,得有几年了吧,最近在做flutter的混合开发项目,在做flutter的iOS插件的时候碰到的问题,比较初级,记录下来。
1、问题描述:
CocoaPods出现错误[!] CDN: trunk Repo update failed与[!] CDN: trunk URL couldn't be downloaded:
或者:CDN: trunk Redirecting from https://cdn.cocoapods.org/Specs/0/2/a/MTBBarcodeScanner/0.1.1/MTBBarcodeScanner.podspec.json to https://raw.githubusercontent.com/CocoaPods/Specs/master/Specs/0/2/a/MTBBarcodeScanner/0.1.1/MTBBarcodeScanner.podspec.json
环境贴出来
fullter对应版本 默认使用的是stable,也可以切换master版本
ios pod版本
iOS 版本:8.0/9.0
2、问题原因
CocoaPods升级到1.8.4版本后,pod install 安装库的版本的时候报错,如上。原因是升级后podfile的默认源为trunk, 而非master,podfile的数据源变成了https://cdn.cocoapods.org/.那问什么要默认用这个数据源呢,我查了一些文章:
说明【只是普及知识】:优势:
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术
在1.8.0之前,我们默认安装cocoapods的时候会执行pod setup命令,会从https://github.com/CocoaPods/Specs.git拉取整个仓库代码了,通常来说,由于墙或者国内网络原因,这一步的过程是非常漫长的,至少也是半个小时以上的存在.
在执行pod update的时候,也是同样,不会重新更新整个repo仓库,而是只会拉取当前工程所需的依赖.
总结一下:
- 使用CDN后我们就不用执行pod setup的操作
- 使用CDN后不会拉取整个 仓库, 而改为了只会拉取当前所需,放在了 trunk的仓库
怎么使用呢?
#添加或者修改podfile源
-source 'https://github.com/CocoaPods/Specs.git'
+source 'https://cdn.cocoapods.org/'
可有什么用呢,依旧很慢,崩溃。
但是,我们是国内,除非使用idea墙,即使墙也很慢,因为源就很慢,剩下的的脑补,下载奔溃.podfile文件中指定source源为master,因为默认的是trunk源,修改后pod install和pod update就可以正常操作,设置方法如下图所示。case:网上大多数的解决方案是切换“https://github.com/CocoaPods/Specs.git”此数据源,但是。。。脑补吧。
3、解决方案(直接看这个)
我个人适用,不代表所有人。
1. 切换数据源,但是是国内的镜像源
#podfile文件,切换数据源,清华镜像数据源
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
# 1.8.0之前版本,默认master源,但很慢
#source 'https://github.com/CocoaPods/Specs.git'
# 1.8.0后版本,适用cdn分发,速度变快了,但是很慢
#source 'https://cdn.cocoapods.org/'
2、podfile增加use_frameworks!
# ....
target 'Runner' do
# Flutter Pod
# 增加设置
use_frameworks!
#self add
copied_flutter_dir = File.join(__dir__, 'Flutter')
copied_framework_path = File.join(copied_flutter_dir, 'Flutter.framework')
copied_podspec_path = File.join(copied_flutter_dir, 'Flutter.podspec')
unless File.exist?(copied_framework_path) && File.exist?(copied_podspec_path)
## ....
3、清华镜像数据源官方设置
CocoaPods 镜像使用帮助
CocoaPods 是一个 Cocoa 和 Cocoa Touch 框架的依赖管理器,具体原理和 Homebrew 有点类似,都是从 GitHub 下载索引,然后根据索引下载依赖的源代码。对于旧版的 CocoaPods 可以使用如下方法使用 tuna 的镜像:
$ pod repo remove master
$ pod repo add master https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
$ pod repo update
新版的 CocoaPods 不允许用pod repo add直接添加master库了,但是依然可以:
$ cd ~/.cocoapods/repos
$ pod repo remove master
$ git clone https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git master
最后进入自己的工程,在自己工程的podFile第一行加上:
source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'
连接:https://mirror.tuna.tsinghua.edu.cn/help/CocoaPods/
4、执行
#命令行进入flutter项目的ios目录
flutter clean
pod install
至此,完成,没搞过flutter和iOS来说很蛋疼,继续趟坑中。。。有研究的小伙伴可以一起。。
本文由 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。最后编辑时间为: 2021/06/08 10:59