Mac上安装Cocoapods基础和一些踩坑记录

Cocoapods 为Xcode中的项目添加依赖库,我其实觉得这个真不好用,用过Android Studio本身自带,链接第三方依赖库比这个方便。废话不多说,直接上步骤。

Cocoapods安装步骤

一、更新Ruby环境

1
gem update --system

二、换Ruby镜像

1
2
3
gem sources -l  #查看当前镜像
gem sources --remove https://rubygems.org/ #移除当前的镜像 淘宝的Ruby镜像也不更新
gem sources -a https://gems.ruby-china.com #换成这个

三、安装CocoaPods

1
sudo gem install cocoapods

上面如果没有权限需要输入 sudo gem install -n /usr/local/bin cocoapods ,横下以下是各种折腾。


如果出现: MacBook-Air ~ % sudo gem install cocoapods
ERROR: Could not find a valid gem ‘cocoapods’ (>= 0), here is why:
Unable to download data from https://rubygems.org/ - timed out (https://rubygems.org/specs.4.8.gz)

请检查 gem sources -l是否是 https://gems.ruby-china.com

如果再出现各种奇葩问题,这儿可以卸载 gem 安装的所有东西然后再重新安装。

可以在终端输入 sudo rm -rf /usr/local/bin/pod 然后在查看gem list看到中间部分以cocoapods开头的列表

cocoapods (1.9.2)
cocoapods-core (1.9.2)
cocoapods-deintegrate (1.0.4)
cocoapods-downloader (1.3.0)
cocoapods-plugins (1.0.0)
cocoapods-search (1.0.0)
cocoapods-stats (1.1.0)
cocoapods-trunk (1.5.0)
cocoapods-try (1.2.0)

这儿以第一个为例挨个卸载,sudo gem uninstall cocoapods -v 1.9.2 sudo gem uninstall cocoapods-core -v 1.9.2 后面的类似。删除过后再执行重新sudo gem install cocoapods

上面的完成过后再次执行下面的命令,关键的时候来了,呵呵呵…. (网上说 这个过程是漫长的,要有耐心),这哪是慢,根本不行好么,坑死人了。

1
pod setup

看别人说pod setup 过后会出现 Setting up CocoaPods master repo这个,这个至少会去下载,我特么直接出现Setup completed 这个,无论怎么网上的找方法试过了都没折,自己的笔记本上再 活动监视器 搜索git至少还在 10k/s再走,然后之前回家等了两三个小时 然后居然直接中断了,什么垃圾东西呀,这是人干的事么。

我公司这一台什么都没有下载直接Setup completed 说完成了,clone repo到本地成功,压根就没有下载下来。然后我在电脑上执行 pod search AFNetworking

是100%的出现 [!] Unable to find a pod with name, author, summary, or description matching AFNetworking

关于出现这个的帖子https://www.cnblogs.com/huaida/p/12701080.html,大部分说是因为缓存,然后删除~/Library/Caches/CocoaPods/search_index.json,这根本没用好么,然后试了一下这个

1
2
3
4
5
pod repo remove master
cd ~/.cocoapods/repos
git clone https://github.com/CocoaPods/Specs.git master
rm ~/Library/Caches/CocoaPods/search_index.json
pod search afnetworking

这个执行到从git仓库拉一样的慢成”苟“我去这个也太受不了了,恶心人么,这不是。

冷静一下 pod setup本身是把这个 https://github.com/CocoaPods/Specs.git 地址中的文件clone下来,这儿慢的原因就是从git上下载,后来了解到可以直接把这个仓库克隆到国内的码云https://gitee.com ,这样子再从码云上clone下来。

然后这个是从git导入到码云上的地址: https://gitee.com/Kziwws/Specs.git ,然后把这句git clone https://github.com/CocoaPods/Specs.git master 换成 git clone https://gitee.com/Kziwws/Specs.git,这个clone 到 ~/.cocoapods/repos 这个目录。这下速度从三四个小时变成七八分钟就完成了。

1
2
3
@MacBook-Pro ~ % cd ~/.cocoapods/
@MacBook-Pro .cocoapods % du -sh *
1.6G repos #这大概1.81G呢 你得稍微等一下

其实上面 pod setupgit clone https://gitee.com/Kziwws/Specs.git ~/.cocoapods/repos/master等效的。如果上面不行用这个句命令。


经过上面一些列的折腾基本上一会下载完成了,然后你再输入 pod search AFNetworking,如果出现 Creating search index for spec repo ‘master’.. Done! 一直等待。你就安静等一会儿。

如果出现:

[!] CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/all_pods_versions_8_9_b.txt Response: Timeout was reached

或者

[!] CDN: trunk Repo update failed - 3 error(s):

CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/Specs/a/e/1/XJNetworking/1.0.0/XJNetworking.podspec.json Response: Timeout was reached

CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/Specs/a/e/1/XJNetworking/1.0.1/XJNetworking.podspec.json Response: Timeout was reached

CDN: trunk URL couldn’t be downloaded: https://cdn.cocoapods.org/Specs/a/e/1/XJNetworking/1.0.2/XJNetworking.podspec.json Response: Timeout was reached

解决:CDN: trunk URL couldn’t be downloaded ,参考一下这篇帖子https://blog.csdn.net/miaopf123/article/details/104406595,然后再 pod search AFNetworking 会出现:

1
2
3
4
5
6
7
8
9
10
11
12
-> AFNetworking (4.0.1)
A delightful networking framework for Apple platforms.
pod 'AFNetworking', '~> 4.0.1'
- Homepage: https://github.com/AFNetworking/AFNetworking
- Source: https://github.com/AFNetworking/AFNetworking.git
- Versions: 4.0.1, 4.0.0, 3.2.1, 3.2.0, 3.1.0, 3.0.4, 3.0.3, 3.0.2, 3.0.1,
3.0.0, 3.0.0-beta.3, 3.0.0-beta.2, 3.0.0-beta.1, 2.7.0, 2.6.3, 2.6.2, 2.6.1,
2.6.0, 2.5.4, 2.5.3, 2.5.2, 2.5.1, 2.5.0, 2.4.1, 2.4.0, 2.3.1, 2.3.0, 2.2.4,
2.2.3, 2.2.2, 2.2.1, 2.2.0, 2.1.0, 2.0.3, 2.0.2, 2.0.1, 2.0.0, 2.0.0-RC3,
2.0.0-RC2, 2.0.0-RC1, 1.3.4, 1.3.3, 1.3.2, 1.3.1, 1.3.0, 1.2.1, 1.2.0, 1.1.0,
1.0.1, 1.0, 1.0RC3, 1.0RC2, 1.0RC1, 0.10.1, 0.10.0, 0.9.2, 0.9.1, 0.9.0,
0.7.0, 0.5.1 [master repo] ~

这儿在多说一点,如果经过上面的折腾还是没有成功,你直接https://gitee.com/Kziwws/Specs.git 下载这个到桌面然后zip大概 367M,也相对挺快的。

把右边的标记1~8的文件拷贝到左边的目录里,然后右边标记的零的如果直接拷贝不过来的,直接用记事本挨个打开把内容拷贝到右边来的文件相应的里面来。然后执行 pod repo remove trunk,基本就可以使用了。


四、CocoaPods基础使用

一、找到项目目录

1
2
3
cd /Users/wenshuang/Desktop/testPodDemo
touch Podfile #项目里会出现Podfile文件
vim pod file #开始打开Podfile文件

二、输入i 开始编辑,输入所需要到的第三方库,如:

1
2
3
4
platform :ios,‘8.0’
target‘testPodDemo’do
pod‘AFNetworking’,‘~> 3.0.4’
end

三、在按 esc 然后输入 : 然后再输入wq 然后回车,保存。

四、在终端里输入

1
pod install

然后等一会就会出现

1
2
3
4
5
6
7
8
9
10
MacBook-Pro testPodDemo % pod install
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (3.0.4)
Generating Pods project
Integrating client project

[!] Please close any current Xcode sessions and use `testPodDemo.xcworkspace` for this project from now on.

Pod installation complete! There is 1 dependency from the Podfile and 1 total pod installed.

然后再用Xcode重新打开 testPodDemo.xcworkspace 这个文件就可以了。

使用 rbenv 安装与管理 CocoaPods 环境

使用 rbenv 安装与管理 CocoaPods 环境完整指南

在使用 ElementX iOS 项目或其他 iOS 开发时,经常会遇到 CocoaPods 安装失败的问题,尤其是当系统 Ruby 版本(如 2.6.10)与项目要求的 Ruby 版本(≥ 3.1.0)不匹配时。本指南详细介绍如何使用 rbenv 这一 Ruby 版本管理工具,来创建隔离、可控的 CocoaPods 环境,彻底解决版本冲突和依赖问题。


第一部分:为什么需要 rbenv?

常见问题场景

  1. 系统 Ruby 版本过旧:macOS 自带的 Ruby 2.6.x 无法满足现代 gem 的要求
  2. 权限问题:使用 sudo gem install 可能导致系统文件混乱
  3. 版本冲突:不同项目需要不同版本的 Ruby 或 CocoaPods
  4. 环境污染:全局安装可能破坏系统工具依赖

rbenv 的优势

  • 版本隔离:每个项目可使用独立的 Ruby 版本
  • 无需 sudo:所有安装都在用户目录下
  • 切换灵活:轻松在不同 Ruby 版本间切换
  • 环境干净:不干扰系统 Ruby

第二部分:完整安装步骤

1. 安装 Homebrew(如未安装)

1
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

2. 安装 rbenv 和 ruby-build

1
brew install rbenv ruby-build

3. 配置 Shell 环境

根据你使用的 Shell,将初始化脚本添加到配置文件:

Zsh 用户(macOS Catalina 及以后)

1
2
echo 'eval "$(rbenv init - zsh)"' >> ~/.zshrc
source ~/.zshrc

Bash 用户

1
2
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~/.bash_profile

4. 验证 rbenv 安装

1
2
rbenv --version
# 应输出类似: rbenv 1.2.0

第三部分:安装和管理 Ruby

1. 查看可用的 Ruby 版本

1
2
rbenv install --list
# 查看所有可用版本

2. 安装所需 Ruby 版本

ElementX 项目需要 Ruby ≥ 3.1.0,推荐安装最新稳定版:

1
2
3
4
# 安装 Ruby 3.3.0
rbenv install 3.3.0

# 安装过程可能需要几分钟,请耐心等待

3. 设置 Ruby 版本

全局设置(所有终端会话):

1
rbenv global 3.3.0

局部设置(仅当前项目):

1
2
3
cd /path/to/your/project
rbenv local 3.3.0
# 这会创建 .ruby-version 文件

4. 验证 Ruby 版本

1
2
3
4
ruby -v
# 应输出: ruby 3.3.0...
which ruby
# 应输出: /Users/你的用户名/.rbenv/shims/ruby

第四部分:安装 CocoaPods

1. 安装 CocoaPods gem

1
2
3
4
5
6
7
8
9
# 确保使用的是 rbenv 管理的 Ruby
which ruby
# 确认路径包含 .rbenv

# 安装 CocoaPods
gem install cocoapods

# 可选:安装特定版本
# gem install cocoapods -v 1.15.2

2. 验证安装

bash

1
2
3
4
pod --version
# 应输出: 1.16.2 或类似
which pod
# 应输出: /Users/你的用户名/.rbenv/shims/pod

第五部分:配置 CocoaPods 仓库

1. 初始仓库状态

首次安装后,仓库是空的:

1
2
pod repo list
# 输出: 0 repos

2. 添加 CocoaPods 主仓库

官方 CDN 源(国际网络推荐):

1
2
3
4
5
# 移除可能的残留
pod repo remove trunk 2>/dev/null || true

# 添加官方源
pod repo add trunk https://cdn.cocoapods.org/

国内镜像源(如遇网络问题):

1
2
pod repo remove trunk
pod repo add trunk https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git

3. 验证仓库配置

1
2
pod repo list
# 现在应该能看到 trunk 仓库

第六部分:在项目中使用的完整流程

1. 准备 ElementX 项目

1
2
3
4
5
6
7
8
9
# 克隆项目(如尚未克隆)
git clone https://github.com/element-hq/element-x-ios.git
cd element-x-ios

# 设置项目 Ruby 版本
rbenv local 3.3.0

# 验证 Ruby 版本
ruby -v

2. 安装项目依赖

1
2
3
4
5
6
7
8
# 清理可能的旧配置
rm -rf Pods Podfile.lock *.xcworkspace

# 安装依赖(首次运行会下载完整仓库)
pod install --repo-update

# 或使用更详细的输出
pod install --verbose --repo-update

3. 打开项目

1
2
3
# 使用生成的 workspace 文件
open ElementX.xcworkspace
# 或手动在 Finder 中双击

4. 处理常见问题

问题1pod install 失败,报网络错误

1
2
3
4
5
# 切换镜像源
pod repo remove trunk
pod repo add trunk https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
pod cache clean --all
pod install

问题2:CocoaPods 版本不兼容

1
2
3
4
5
6
7
# 查看项目是否有 Gemfile
cat Gemfile

# 如有 Gemfile,使用 bundler
gem install bundler
bundle install
bundle exec pod install

问题3:rbenv 命令找不到

1
2
3
4
# 重新初始化
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(rbenv init -)"' >> ~/.zshrc
source ~/.zshrc

第七部分:环境管理技巧

1. 查看当前环境状态

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/bin/bash
echo "=== Ruby 环境 ==="
echo "版本: $(ruby -v)"
echo "路径: $(which ruby)"
echo "rbenv 版本: $(rbenv --version 2>/dev/null || echo '未安装')"

echo -e "\n=== CocoaPods 环境 ==="
echo "版本: $(pod --version 2>/dev/null || echo '未安装')"
echo "路径: $(which pod 2>/dev/null || echo '未找到')"

echo -e "\n=== 仓库状态 ==="
pod repo list 2>/dev/null || echo "仓库未配置"

echo -e "\n=== 安装的 gems ==="
gem list | grep -E "(cocoapods|bundler)"

2. 常用 rbenv 命令

1
2
3
4
5
6
7
8
9
10
11
12
13
# 查看已安装的 Ruby 版本
rbenv versions

# 切换 Ruby 版本
rbenv shell 3.3.0 # 当前 shell
rbenv local 3.2.0 # 当前目录
rbenv global 3.3.0 # 全局

# 卸载 Ruby 版本
rbenv uninstall 2.7.0

# 更新 rbenv
brew upgrade rbenv ruby-build

3. 清理和维护

1
2
3
4
5
6
7
8
9
10
11
# 清理 CocoaPods 缓存
pod cache clean --all

# 更新所有 gems
gem update

# 清理旧版本的 gems
gem cleanup

# 重新生成 rbenv shims
rbenv rehash

第八部分:文件位置说明

rbenv 安装的文件结构

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~/.rbenv/
├── versions/ # 所有安装的 Ruby 版本
│ └── 3.3.0/
│ ├── bin/
│ ├── lib/
│ │ └── ruby/
│ │ └── gems/
│ │ └── 3.3.0/ # Gems 安装目录
│ │ ├── gems/
│ │ │ └── cocoapods-1.16.2/
│ │ └── specifications/
│ └── share/
├── shims/ # 可执行文件代理
└── plugins/ # rbenv 插件

CocoaPods 相关目录

1
2
3
4
5
6
7
8
9
10
11
12
13
14
~/.cocoapods/repos/             # Podspecs 仓库(pod repo add 后创建)
└── trunk/ # 主仓库
├── Specs/ # 所有 podspec 文件
└── .git/

~/Library/Caches/CocoaPods/ # 下载的 Pod 缓存
└── Pods/
└── Release/

项目目录/
├── Podfile # 依赖定义
├── Podfile.lock # 版本锁定
├── Pods/ # 安装的依赖(pod install 后生成)
└ *.xcworkspace # 工作空间文件

第九部分:项目特定配置示例

ElementX 项目的典型配置

1. 项目根目录的 .ruby-version 文件(自动生成):

1
3.3.0

2. 可选的 Gemfile

1
2
3
4
5
6
7
8
9
source "https://rubygems.org"

gem "cocoapods", "1.16.2"
gem "fastlane"

# 平台特定
platform :ruby do
gem "ruby-macho"
end

3. 对应的 Podfile 关键部分

1
2
3
4
5
6
7
8
9
10
11
12
13
# 确保源配置正确
source 'https://cdn.cocoapods.org/'
# 或 source 'https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git'

platform :ios, '15.0'
use_frameworks! :linkage => :static

target 'ElementX' do
# 项目依赖...
pod 'MatrixSDK', '~> 0.24.0'
pod 'MatrixSDK/SwiftSupport'
# ...其他依赖
end

第十部分:故障排除

常见问题与解决方案

问题 症状 解决方案
rbenv 命令未找到 zsh: command not found: rbenv 1. 检查 ~/.zshrc 配置 2. 重启终端 3. 运行 rbenv init
pod 命令未找到 pod: command not found 1. 运行 rbenv rehash 2. 验证 which ruby 路径 3. 重新安装 CocoaPods
仓库下载失败 [!] Unable to add a source... 1. 检查网络连接 2. 切换镜像源 3. 使用 pod install --verbose 查看详情
Ruby 版本不匹配 requires Ruby version >= 3.1.0 1. rbenv install 3.3.0 2. rbenv local 3.3.0 3. 重新安装 gems
签名错误 Automatic signing failed 1. 检查 Xcode 的 Bundle Identifier 2. 确保 Team 选择正确 3. 清理项目重新编译

调试命令集

1
2
3
4
5
6
7
8
# 完整环境检查
rbenv doctor 2>/dev/null || curl -fsSL https://github.com/rbenv/rbenv-installer/raw/main/bin/rbenv-doctor | bash

# 诊断 CocoaPods 问题
pod env

# 查看详细的安装日志
pod install --verbose 2>&1 | tee pod_install.log

《庾居》

顾长人决终渐歇
谁执低眉纸迹往事越
翌生两世
患失不惑
夜长身影疏狂
薄年清辉待敛容
袂尔星辰夜寐
蕎麦苦瘠白花开
菡萏染淤清浮来
不辨妍媸
不论相识
不可思量
心生久腹分自当
背时离其问何妨
结侣提携
夙明初日熟稔乡
共卮回时残缺辞
生有所畏
清霄温凉
误尽人间芳菲

by:霜

《妄念》

“我们凭着本能,在黑夜中开了迷宫的门,没有走出去。在一次次的碰壁中,我们擦燃了火焰。一个人就是木屑或是草堆,是易燃的,不然何来那么多的心如死灰。”

嘴唇尝到泪水,
身体正经历一个雨天,它在收尾,可收尾是那么迟缓。
用颤栗的手掌握着你临近深渊的手掌,
将散的魂魄仍在寻觅缺失的螺丝,
我无法解决自己在人世间松动的问题,
为你摇曳,不确定何为悲,何为欢。
一直坠,
也一直追。
鲸鱼搁浅,为一生到异地,见风景,死而无憾。
我拂逆青春太多年,匆忙成熟,只为你摘我一瓣花。
花,你摘去,香气附赠。
郁郁的我啊,
去舀一勺你的泪,来解渴,来弥补缺失,来劝说自己值得。
秋天凝一滴心头血给这个清晨,
露珠重,滑离了叶。
大树于是恸哭。
你未醒来,我未醒来的清晨,
鸟鸣过于烈脆,如恶语,不承认我们的重叠。
瓜分昙花一现的温柔。
洗去昨夜的风。

《转自片刻-卡尔西法》

CocosCreator中XMLHttpReques 网络数据请求

XMLHttpRequest 用于短连接, Web 平台上最广泛使用的标准网络接口,在IOS中 类似 AFNetworking 做IOS的应该知道。标准文档请参考 MDN 中文文档

初始化

  • 可以直接使用 new XMLHttpRequest() 来创建一个连接对象。
  • cc.loader.getXMLHttpRequest() 来创建。

使用
提交一个表单,它里面有两个字段,假如为 phone = 10086888888 和 password=1234`x。参数有特殊符号转换为ASCII HEX值。如果你用 POST 方法,那么服务器将会接收到一个字符串类似于下面三种情况之一,其中的区别依赖于你采用何种编码类型:

  • POST ,Content-Type 为 application/x-www-form-urlencoded 编码类型

    Content-Type: application/x-www-form-urlencoded
    phone=10086888888&password=1234%60x

  • POST ,Content-Type 为 text/plain 编码类型

    Content-Type: text/plain
    phone=10086888888
    password=1234%60x

  • POST ,Content-Type 为 multipart/form-data 编码类型
    multipart/form-data不会对参数编码,使用的boundary(分割线),相当于&,
    boundary的值是——–314911788813839

    Content-Type: multipart/form-data;
    ——–314911788813839
    Content-Disposition: form-data; name=”phone”
    10086888888&
    ——–314911788813839
    Content-Disposition: form-data; name=”password”
    1234%60x
    ——–314911788813839

  • 使用 GET 方法 请求Content-Type 属性会被忽略,像下面这样的字符串将被简单的附加到 URL

    ?phone=10086888888&password=1234%60x

XMLHttpRequest的基础使用在MDN web docs参考,

直接上代码。如果有问题可以下面评论留言交流。

Read More

《半承言》

风雨如晦即君子,酒故重逢伴乌蓬。
匆揉四海据拥有,闲岁梦入北风中。

by:霜

[风雨如晦,鸡鸣不已。
既见君子,云胡不喜?
风雨交加昏天地,窗外鸡鸣声不息。
风雨之时见到你,心里怎能不欢喜。]

《赤雨》

隐雨飒沓檐声无边
淋落在晦黯之间
绿阴泛起了思恋
长天皓洁一瞬
是谁乱了经年
变迁红尘蔓延
把一缕缠绵化作美眷
誓言心田
付流蒹葭
揭颜一发
一盏清茶
心自放下
泼墨熟宣执笔而画
微微红浥侧面脸颊
情愫一遍
昨日丢失梦里的潇洒
一匣信件
道不尽情意的话
谁能轻易
赴约此间风月
乱成桑麻
难情落寞心血来合
凭谁问
钟鼓馔玉
枯骨青灰皆如何

by:霜