irpas技术客

Swift -《从0到1 - 4》:Swift项目使用CocoaPods(更新Mac m1安装方法)_西半球_swift 使用cocoapods

大大的周 5068

GitHub Demo 地址

Swift项目使用CocoaPods [GitHub Demo 地址](https://github.com/iotjin/JhSwiftDemo) cocoapods介绍cocoapods安装依赖关系一、cocoapods安装二、更新 M1 Mac安装CocoaPods2.1、SIP系统完整性保护2.2、终端通过`Rosetta`打开2.3、安装homebrew2.4、安装rvm2.5、安装ruby2.6、安装pods2.7、安装ffi 三、使用CocoaPods三方库安装之前的文件结构安装成功之后的文件结构 遇到问题关于 `use_frameworks!`1、用cocoapods导入OC框架到swift项目2、用cocoapods导入swift框架到swift项目3、用cocoapods导入OC框架到OC项目

cocoapods介绍

CocoaPods是OS X和iOS下的一个第三类库管理工具,通过CocoaPods工具我们可以为项目添加被称为“Pods”的依赖库(这些类库必须是CocoaPods本身所支持的),并且可以轻松管理其版本

cocoapods安装依赖关系

cocoapods安装需要ruby,更新ruby需要rvm,下载rvm需要gpg,下载gpg需要homebrew,所以安装顺序是homebrew->gpg->rvm->ruby-cocoapods,注意这是完整流程,如果只是更新做cocoapods更新操作即可,不需要从第一步开始。 也可以通过homebrew安装ruby,然后再安装cocoapods

一、cocoapods安装

CocoaPods的安装教程可以看: iOS安装CocoaPods详细过程

二、更新 M1 Mac安装CocoaPods

参考:

2021最新安装CocoaPods – 快速安装Homebrew, 升级Ruby版本 While executing gem … (Gem::FilePermissionError) 在 Apple Silicon (M1) 上运行 CocoaPods CocoaPods 最新系统安装 2021-01-28(包含M1)

最近换成m1版本的mac,重新安装pods发现上面的 iOS安装CocoaPods详细过程会执行到pods安装那里会报错。 如下:

ERROR: While executing gem ... (Gem::FilePermissionError) You don't have write permissions for the /System/Library/Frameworks/Ruby.framework/Versions/2.6/usr/lib/ruby/gems/2.6.0 directory.

我在网上搜了一下解决方案如下:

主要是安装homebrew,通过homebrew下载新的ruby,并设置ruby环境变量,然后在安装cocoaPods

下面有些步骤可能没有用到,不过在安装尝试时都装了,这里做个记录

2.1、SIP系统完整性保护

因为装了一些软件,安装CocoaPods之前我已经把Mac系统的SIP系统完整性保护关闭了 SIP相当于杀毒软件,会检查安装的软件有没有问题,防止潜在恶意软件修改 Mac 上受保护的文件和文件夹 不知道SIP不关会不会影响安装pods

Mac系统关闭SIP系统完整性保护详细操作

检查 SIP 状态

csrutil status

你会看到以下信息中的一个,指示SIP状态

未关闭 enabled:

System Integrity Protection status: enabled.

已关闭 disabled:

System Integrity Protection status: disabled

关闭SIP步骤

关机,然后重新启动你的Mac电脑,在开机时一直按住Command+R迸入Recovery模式。(如果是Apple Silicon M1芯片的电脑,只需要长按开机键就可以进入恢复模式了) 进入Recovery模式后在实用工具菜单中打开终端。 在终端上输入命令 csrutil disable然后回车。

csrutil disable

最后点击左上角苹果图标 ? ,再点击重新启动就可以了

2.2、终端通过Rosetta打开

1.访达-应用程序-实用工具里,右键点击终端-显示简介 (如果找不到实用工具,请以列表或分栏的方式显示项目) 2.勾选使用Rosetta打开 设置完成终端顶部显示zsh

2.3、安装homebrew

官方命令如下:

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

上面可能比较慢,还有个国内安装脚本 国内安装脚本文档

苹果电脑 常规安装脚本(推荐 完全体 几分钟安装完成): 我选择的是中科大的源

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

安装完成查看是否成功

brew -v

可能会有两个警告,把警告下面的两行代码复制在命令行运行一下就没有了 执行brew -v 命令看看是不是有两个提示,你的 homebrew-core和homebrew-cask目录被git认为不是一个安全的目录,需要手动添加 git config --global --add safe.directory 你的homebrew-core路径 git config --global --add safe.directory 你的homebrew-cask路径

结果:

Homebrew 3.5.7-69-gb556db7 Homebrew/homebrew-core (git revision b80ccf81ce9; last commit 2022-08-04) Homebrew/homebrew-cask (git revision 06bbd7a853; last commit 2022-08-04) 2.4、安装rvm

rvm安装命令,哪个快用哪个

curl -L get.rvm.io | bash -s stable curl -L https://get.rvm.io | bash -s stable curl -sSL https://get.rvm.io | bash -s stable

查看rvm是否安装

rvm -v Ruby enVironment Manager 1.29.12 (latest) (c) 2009-2020 Michal Papis, Piotr Kuczynski, Wayne E. Seguin 2.5、安装ruby

在之前的mac上,是通过升级系统自带的ruby(sudo gem update --system命令),然后再安装pods,这里安装一个新的ruby,然后设置环境变量

方式1:brew安装,我用的这种

brew install ruby

方式2:rvm安装

查看已知ruby版本

rvm list known

安装指定ruby版本,并设置使用指定版本

rvm install 3.0.0 rvm use 3.0.0 --default

查看ruby版本命令

ruby -v ruby 3.1.2p20 (2022-04-12 revision 4491bb740a) [arm64-darwin21]

当ruby安装完成之后,会提醒你将ruby的路径导入到环境变量中,如下提示:

==> Summary 🍺 /opt/homebrew/Cellar/ruby/3.1.2: 15,996 files, 42.8MB ==> Running `brew cleanup ruby`... Disable this behaviour by setting HOMEBREW_NO_INSTALL_CLEANUP. Hide these hints with HOMEBREW_NO_ENV_HINTS (see `man brew`). ==> Caveats ==> ruby By default, binaries installed by gem will be placed into: /opt/homebrew/lib/ruby/gems/3.1.0/bin You may want to add this to your PATH. ruby is keg-only, which means it was not symlinked into /opt/homebrew, because macOS already provides this software and installing another version in parallel can cause all kinds of trouble. If you need to have ruby first in your PATH, run: echo 'export PATH="/opt/homebrew/opt/ruby/bin:$PATH"' >> ~/.zshrc For compilers to find ruby you may need to set: export LDFLAGS="-L/opt/homebrew/opt/ruby/lib" export CPPFLAGS="-I/opt/homebrew/opt/ruby/include"

将ruby的路径导入到环境变量中

echo 'export PATH="/usr/local/opt/ruby/bin:$PATH"' >> ~/.zshrc source ~/.zshrc

再查看which -a ruby 会有两个ruby路径

/opt/homebrew/opt/ruby/bin/ruby /usr/bin/ruby

gem版本

gem --version 3.3.11

安装完成后查看其 Ruby 源:

gem sources -l *** CURRENT SOURCES *** https://gems.ruby-china.com/

如果显示的ruby源不是ruby-china,则需要进行源替换:

移除现有的Ruby镜像

gem sources --remove https://gems.ruby-china.org/

添加国内最新镜像源(淘宝的Ruby镜像已经不更新了)

gem sources -a https://gems.ruby-china.com/ 2.6、安装pods sudo gem install -n /usr/local/bin cocoapods

查看pods版本

pod --version 1.11.3 2.7、安装ffi

为了兼容x86 _64,需要安装下ffi插件

sudo gem install ffi 三、使用CocoaPods

在swift项目中使用CocoaPods和oc一样,先创建Podfile文件,然后添加三方库

1、直接创建名字为Podfile的文件,然后通过文件编辑器打开文件 2、在Podfile文件中添加pod 三方库名称,下面是我的demo中用的三方库 3、终端cd 到项目路径下,运行pod install

三方库 platform :ios, '9.0' target 'JhSwiftDemo' do use_frameworks! # 屏蔽所有第三方框架警告 inhibit_all_warnings! # source 'https://github.com/CocoaPods/Specs.git' # -------------- 指令 -------------- # pod install --no-repo-update 跳过检查更新 # pod install # pod install --repo-update 检查更新 # removing SDWebImage # pod --version 查看版本 # sudo gem update cocoapods 更新升级CocoaPods # sudo gem update --system 更新升级gem # sudo gem install -n /usr/local/bin cocoapods 安装CocoaPods # -------------- 指令 -------------- # -------------- Swift -------------- # 网络请求 pod 'Alamofire', '4.9.1' pod 'Moya', '13.0.1' pod 'ReachabilitySwift', '5.0.0' # 模型转换,数据处理 pod 'SwiftyJSON', '5.0.1' pod 'HandyJSON', '5.0.2' # 自动布局 pod 'SnapKit', '4.2.0' # 网络图片加载缓存 pod 'Kingfisher', '4.10.1' pod 'IQKeyboardManagerSwift', '6.5.9' pod 'Gifu', '3.3.1' # 数据存储与数据安全 pod 'SQLite.swift', '0.13.2' #pod 'RealmSwift' pod 'SwiftyUserDefaults', '5.3.0' #pod 'KeychainAccess' pod 'Cache', '5.3.0' pod 'CryptoSwift', '1.4.3' # 时间转换 pod 'SwiftDate', '6.3.1' # 标准库扩展 pod 'Dollar', '9.0.0' # 扩展库 #pod 'SwifterSwift' # 日志 #pod 'XCGLogger' #pod 'Log' # 异步、函数响应式编程 #pod 'PromiseKit' #pod 'AsyncSwift' #pod 'RxSwift', '6.5.0' #pod 'RxCocoa', '6.5.0' # 主题和颜色 pod 'SwiftTheme', '0.6.4' # 主题 #pod 'UIImageColors' # 从图像中获取最主要和最突出的颜色 #pod 'Hue' #pod 'DynamicColor' #pod 'UIColor_Hex_Swift' # 弹框 pod 'SCLAlertView', '0.8' pod 'SwiftMessages', '9.0.6' #pod 'BulletinBoard' #pod 'FloatingPanel' # 浮动界面 #pod 'XLActionController' # 底部菜单栏控件 # 加载框 pod 'Toast-Swift', '5.0.1' #pod 'PKHUD' #pod 'ProgressHUD' #pod 'Toaster' # pop pod 'Popover', '1.3.0' #pod 'PopupDialog' #pod 'AMPopTip' # 顶部 pod 'SwiftEntryKit', '2.0.0' #pod 'NotificationBannerSwift' # 加载动画 #pod 'NVActivityIndicatorView' # 图片选择器 pod 'HXPHPicker', '1.0.8' #pod 'ZLPhotoBrowser' #pod 'YPImagePicker' #pod 'BSImagePicker' #pod 'ImagePicker' # 图片浏览 pod 'Lantern', '1.1.2' #pod 'JXPhotoBrowser' #pod 'ImageViewer' # 滑动面板 #pod 'JXSegmentedView' #pod 'Panels' # 轮播 pod 'FSPagerView', '0.8.3' # 侧滑菜单 pod 'SideMenu', '5.0.1' #pod 'SlideMenuControllerSwift' pod 'ESTabBarController-swift', '2.8.0' #pod 'RAMAnimatedTabBarController' # 引导页 pod 'Instructions', '2.1.1' #pod 'RazzleDazzle' #pod 'ZLaunchAd' # 二维码 pod 'EFQRCode', '6.2.1' pod 'swiftScan', '1.2.1' #pod 'WeScan' # 图表 SwiftUICharts pod 'AAInfographics', '6.0.0' #pod 'AAInfographics', :git => 'https://github.com/AAChartModel/AAChartKit-Swift.git' #pod 'Charts' #pod 'SwiftCharts' #pod 'SwiftChart' # 最后更新2018 #pod 'PNChartSwift',:git => 'https://github.com/kevinzhow/PNChart-Swift.git' # 最后更新2017 # 富文本 #pod 'SwiftyAttributes' #pod 'Atributika' #pod 'SwiftRichString' #pod 'TextAttributes' # 日历 pod 'JTAppleCalendar', '7.1.7' #pod 'CVCalendar' #pod 'HorizonCalendar' #pod 'CalendarKit' # 下拉刷新 pod 'ESPullToRefresh', '2.9.3' #pod 'DGElasticPullToRefresh' #pod 'PullToRefresher' # UI #pod 'Eureka' # 表单 #pod 'Former' # 表单 #pod 'FoldingCell' # 折叠cell #pod 'SwipeCellKit' # 滑动cell #pod 'Reusable' #cell #pod 'ActiveLabel' #pod 'LTMorphingLabel' #pod 'MarqueeLabel' #pod 'TextFieldEffects' # 浮动输入 #pod 'SkyFloatingLabelTextField' # 浮动输入 #pod 'RichTextView' #pod 'NextGrowingTextView' #pod 'PhoneNumberKit' #pod 'Cosmos', '~> 23.0' # 星星评分 #pod 'RAMPaperSwitch' #pod 'Koloda' #pod 'JXMarqueeView' # 跑马灯 # 音视频 #pod 'BMPlayer' #pod 'Player' # web #pod 'vapor' #pod 'Swifter' #pod 'SwiftSoup' # HTML解析 #pod 'Starscream' # WebSocket # 其它 #pod 'URLNavigator' # 路由 #pod 'BluetoothKit' # 蓝牙 #pod 'Appz' # App跳转 #pod 'MonkeyKing' # 社会化分享 #pod 'Siren' # 版本检查 #pod 'Tiercel' # 资源下载 #pod 'R.swift' # 资源使用 #pod 'SwiftGen' # 资源管理 #pod 'SwiftLocation' #pod 'SwiftOCR' #pod 'OAuthSwift' # -------------- OC -------------- pod 'AFNetworking', '4.0.1' pod 'DZNEmptyDataSet','1.8.1' pod 'MJExtension','3.4.0' pod 'MJRefresh','3.7.2' pod 'Masonry','1.1.0' pod 'SVProgressHUD','2.2.5' pod 'MBProgressHUD', '1.1.0' pod 'LEEAlert','1.5.1' pod 'BRPickerView','2.7.6' # ios14适配 SDWebImage升级到至少5.8.3版本,防止图片不显示、黑屏 pod 'SDWebImage','5.12.1' #pod 'IQKeyboardManager','6.5.9' # 选择图片依赖HXPhotoPicker和SDWebImage,可以分开加或者使用: pod 'HXPhotoPicker/SDWebImage', '3.1.9' #pod 'HXPhotoPicker' #pod 'FDFullscreenPopGesture', '1.1' #全屏手势 拖进来了 #pod 'GKPhotoBrowser','2.2.1' #pod 'PPBadgeView','2.1.0' #小红点 # 更改所有第三方框架 Target 版本 post_install do |installer| installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = '9.0' end end end end 安装之前的文件结构

安装成功之后的文件结构

之后打开项目都点击[项目名称].xcworkspace

遇到问题

安装时报错,需要更新CocoaPods 更新命令

sudo gem update cocoapods 更新升级CocoaPods 关于 use_frameworks!

use_frameworks!和#use_frameworks!的区别、解决Swift项目中use_frameworks!冲突的问题

use_frameworks! -> static libraries 方式 -> .a

(1) swift项目cocoapods 默认 use_frameworks! (2) OC项目cocoapods 默认 #use_frameworks!

1、用cocoapods导入OC框架到swift项目

(1)#use_frameworks! 必须创建头文件,在头文件里面 #import “xxx.h” (2)use_frameworks! 如果有头文件,在头文件里面 #import “xxx/xxx.h”,其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里 import xxx。

2、用cocoapods导入swift框架到swift项目

(1)必须use_frameworks! (2)不需要头文件,在需要用到框架的swift文件里 import xxx

3、用cocoapods导入OC框架到OC项目

(1)#use_frameworks! 在需要用到的文件里 #import “xxx.h”;也可以通过pch文件,用法类似swift中的头文件。 (2)use_frameworks! 与(1)类似,用法上没有区别。

总结:

(1)用swift项目考虑到会使用 OC 和 swift 两种第三方框架,所以Podfile中使用swift项目默认的 use_frameworks! 更为妥当,并且frameworks动态链接库具有一定的优势。

(2)可以建立一个Bridge头文件,用来import那些OC框架的.h文件:#import “xxx/xxx.h”。或者不建头文件,像swift框架一样,直接在需要用到的swift文件中import xxx。

解决Swift项目中use_frameworks!冲突的问题,详见:https://blog.csdn.net/feng2qing/article/details/73835805


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #Swift #使用cocoapods #CocoaPods是OS #