052*:CocoaPods的原理和组件化实现
问题:
目录:
1:HomeBrew
2:RVM
3:Ruby
4:CocoaPods
前言:
Cocoapods安装顺序
Xcode->HomeBrew->RVM->Ruby->Cocoapods;
正文:
一:安装HomeBrew
1:HomeBrew简介
Homebrew:
Homebrew 是一款 Mac OSX 环境下高效便捷的包管理器(通过 brew 命令执行相关包管理),推荐日常 Mac OSX 环境下安装、卸载软件的使用;
2:HomeBrew国内自动安装脚本
提取码:hd5t
3:安装步骤
3.1:下载网盘中的文件
3.2:打开终端运行脚本命令
Homebrew 国内自动安装脚本 /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
3.3:按照提示,进行下载
下载完成的提示:
Homebrew 安装完成之后,处理安装 Ruby 版本。
3.4:查看安装结果版本号
brew -v
二:下载RVM
1:RVM简介
RVM 是一个命令行工具,可以提供一个便捷的多版本 Ruby 环境的管理和切换。
2:下载RVM
上github下载rvm,https://github.com/rvm/rvm.git
网盘: 提取码:hd5t
3:安装RVM
3.1:双击打开下载下来文件夹中的/bin/rvm-installer
3.2:查看安装结果版本号
rvm -v
三:Ruby的安装
ruby 的安装与切换 1:列出已知的 ruby 版本 rvm list known 2:安装一个 ruby 版本 rvm install 1.9.3 这里安装了最新的 1.9.3, rvm list known列表里面的都可以拿来安装。 3:使用一个 ruby 版本 rvm use 1.9.3 4:如果想设置为默认版本,可以这样 rvm use 1.9.3 --default 5:查询已经安装的 ruby rvm list 6:卸载一个已安装版本 rvm remove 1.9.2
7:ruby版本号查询ruby -v
四:安装cocoapods
1:更新Ruby源
更换国内镜像 1:查看镜像 gem sources -l 2:删除原先的镜像 gem sources --remove https://rubygems.org/ 3:重点这里不要用淘宝的镜像了,用这个镜像 gem sources -a https://gems.ruby-china.com/ 4:查看是否更换成功 gem sources -l
2:安装cocoapods
1:Mac OS X 10.11前 sudo gem install cocoapods 2:Mac OS X 10.11后 sudo gem install -n /usr/local/bin cocoapods
3:安装本地库
pod setup
4:执行完毕后, 查看pod版本看安装是否成功:
pod --version
五:CocoaPods使用
1:创建命令
1:cd 项目目录地址 2: 创建 Podfile 文件 pod init 3:编辑 vim Podfile 4: 安装 pod install 5: 更新所有依赖的开源库 pod update 6: 搜索框架 pod search AFNetworking
2:podfile文件实例
# 1:指明依赖库的来源地址,不使用默认 CDN source '[https://github.com/CocoaPods/Specs.git](https://github.com/CocoaPods/Specs.git)' # 2:说明平台是ios,版本是8.0 platform :ios, '8.0' # 3:屏蔽所有第三方框架警告 inhibit_all_warnings! # 4:针对ProjectName target引入第三方的库 target 'ProjectName' do # 5:Pods for ProjectName # 5.1:网络库 pod 'AFNetworking' pod 'YTKNetwork' pod 'SDWebImage' pod 'Reachability', '~> 3.2' # 5.2:服务类 pod 'QQ_XGPush' pod 'Bugly' # 5.3:UI pod 'Masonry' pod 'MBProgressHUD' pod 'MJRefresh' pod 'EAIntroView' pod 'SDCycleScrollView' pod 'DZNEmptyDataSet' pod 'XLForm' pod 'SHSPhoneComponent' pod 'BEMCheckBox' pod 'SCLAlertView-Objective-C' # 5.4:工具组件类 pod 'ChameleonFramework' pod 'FDFullscreenPopGesture' pod 'IQKeyboardManager' pod 'YYKit' pod 'UIAlertController+Blocks' pod 'LBXScan/LBXNative' pod 'LBXScan/UI' pod 'UITableView+FDTemplateLayoutCell' end
3:编辑 Podfile文件。
执行 vim Podfile
命令后,会打开上一步骤创建的 Podfile
文件,你需要通过 vim
编辑此文件,默认进入命令模式。
编辑 Podfile文件时,至少需要会使用的几个 shell 命令:
键盘命令 | 描述 |
---|---|
i |
input,输入模式 |
ESC |
从输入模式退出到命令模式 |
shift + : |
在命令模式下,输入该键盘组合命令,就会进入末行模式 |
wq |
在末行模式下,输入 wq ,即 write and quit,保存并退出! |
4:Podfile 版本号含义:
= version 要求版本大于或者等于version,当有新版本时,都会更新至最新版本 < version 要求版本小于version,当超过version版本后,都不会再更新 <= version 要求版本小于或者等于version,当超过version版本后,都不会再更新 ~> version 比如 version=1.1.0 时,范围在[1.1.0, 2.0.0)。注意2.0.0是开区间,也就是不包括2.0.0。
六:创建组件化工程
1:创建组件
1.1:使用终端创建ZKComponent模块
pod lib create ZKComponent
1.2:配置模块信息
1: 配置你的名字
2:配置你的邮箱
3:配置平台
4:配置语言
5:配置是否需要demo
6:适配None
7: 配置测试
8:配置前缀
1.3:配置完成如下:
1.4:之后自动打开demo项目,项目结构如下:
1.5:本地组件的目录如下:
2: 创建组件代码
2.1:在classes中写入自己组件的代码:ZKAddTest
2.2:使用pod install 来安装项目,相当于git push。从本地的临时仓库里面拉去代码,让example项目对组件进行依赖。
2.2.1:首先cd 到example的目录中,之后pod install
2.3:组件中定义一个头文件,引入需要暴露的文件的名字
2.4:再examplate中引入组件的头文件,之后调用
3: 组件中引入第三方的库,以及引入头文件
1:创建ZKComponentThree组件
2:在组件中的podspec 中引入第三方库,以及引入头文件
# 1:组件中引入其他的第三方。 s.dependency 'AFNetworking' s.dependency 'Masonry' # 2:组件中引入 头文件 s.prefix_header_contents = '#import "Masonry.h"', '#import "AFNetworking.h"'
3:使用pod install 安装引入第三方库
4:安装结果:
4:如果:项目中引入的自己的组件的话,需要指明路径。可以做到加载第三方组件和自己的本地组件。
1:需要指明路径,之后执行pod install
5:资源文件加载
1:加载图片资源,解开加载图片的路径配置,不然无法访问图片。
2:引用图片,bundle获取图片
NSString *bundlePaht = [[NSBundle bundleForClass:[self class]].resourcePath stringByAppendingPathComponent:@"/ZKComponentThree.bundle"]; NSBundle *bundle = [NSBundle bundleWithPath:bundlePaht]; UIImageView *imageView = [[UIImageView alloc] init]; imageView.image = [UIImage imageNamed:@"share_wechat" inBundle:bundle compatibleWithTraitCollection:nil];
6:创建远程私有库
具体步骤:登录github-->点击右上角“+”-->选择 new repository-->输入Repository name为MySpecs,选择仓库类型为 private,点击Create repository。
1:进入到引用组件的项目的目录,也就是主工程目录
cd /Users/xiaodong/Desktop/ZKComponentTest/Example
2:远端仓库建立联系
git remote add origin https://github.com/zyzmlc/ZKComponentTest.git
3:查看关联远端
注意:
1:ERROR: Error installing sass: ERROR: Failed to build gem native extension.
udo gem install sass Building native extensions. This could take a while... ERROR: Error installing sass: ERROR: Failed to build gem native extension. current directory: /Library/Ruby/Gems/2.3.0/gems/ffi-1.11.1/ext/ffi_c /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/ruby -I /Library/Ruby/Site/2.3.0 -r ./siteconf20191022-2775-1q9uxye.rb extconf.rb mkmf.rb can't find header files for ruby at /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/lib/ruby/include/ruby.h extconf failed, exit code 1 Gem files will remain installed in /Library/Ruby/Gems/2.3.0/gems/ffi-1.11.1 for inspection. Results logged to /Library/Ruby/Gems/2.3.0/extensions/universal-darwin-18/2.3.0/ffi-1.11.1/gem_make.out
解决方法:
1:如果是之前的 Mac OS 版本,网上都是通过 下面命令 来解决,但是我在 Mac OS 10.14 版本下,依然存在报错。
xcode-select --install
2:执行第二个命令
open /Library/Developer/CommandLineTools/Packages/macOS_SDK_headers_for_macOS_10.14.pkg
引用:
1:CocoaPods详解之----使用篇 pod install/pod update更新慢的问题,
2:浅析 Cocoapods-Binary 实现
3:【iOS开发】 2020最新安装CocoaPods -- 快速安装Homebrew, 升级Ruby版本
9:iOS 如何发布自己的CocoaPods框架到GitHub