CocoaPods出现错误[!] CDN: trunk URL couldn‘t be downloaded:

/ Mac / 没有评论 / 2159浏览

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 1

环境贴出来

fullter对应版本 默认使用的是stable,也可以切换master版本 2 3 ios pod版本 4 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仓库,而是只会拉取当前工程所需的依赖.

总结一下:

怎么使用呢?

#添加或者修改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来说很蛋疼,继续趟坑中。。。有研究的小伙伴可以一起。。