美文网首页
你真的了解Cocoapods吗?

你真的了解Cocoapods吗?

作者: StevenHu_Sir | 来源:发表于2020-01-08 17:52 被阅读0次

1.Cocoapods

是一个类库管理工具(管理第三方的第三方),它可以很方便的查找、下载最新的第三方库,能够找到真正好用的库,以此来缩短我们的开发周期和提升软件的质量,解决了库与库之间的依赖关系,让我们能自动化的、更直观的管理第三方库,但是Cocoapods不易操作,它必须要有自己的运行环境,而且要牢记终端命令行的指令

2.如何配置/使用

  • 首先需要在我的电脑上安装Cocoapods的运行环境
  • 通过终端,命令行,下载,更新我所需要的第三方,下载到本地,通过脚本文件的运行继承到我们的项目中去,提供给我们使用,不需要再重新配置
  • 当第三方的版本变化时,我也可以通过Pod install/update 对我的第三方库进行安装以及实时更新

2.1 \color{blue}{cocoapods安装步骤}:

1> 安装需要用到Ruby,虽然Mac自带了Ruby,不过版本有点老了,最好更新一下

$ sudo gem update --system

如果出现报错:

Operation not permitted @ rb_sysopen - /System/Library/Frameworks/Ruby.framework/Versions/2.3/usr/bin/gem

解决办法:

$ sudo gem install -n /usr/local/bin cocoapods
或者
$ sudo gem install cocoapods -n /usr/local/bin

2> 查看Ruby 环境

$ ruby -v

如果没有响应,则需要安装镜像

$ gem sources --remove https://rubygems.org/  
$ gem sources -a https://ruby.taobao.org/ 

查看下源路径是否更换了

$ gem sources -l

如果显示如下图

效果图

则镜像安装成功,否则失败,重新安装镜像
请确保只有 gems.ruby-china.org!,然后就可以更新Ruby了

$ sudo gem update --system

3> 开始安装Cocoapods

$ sudo gem install cocoapods

报错信息:

ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions for the /usr/bin directory.

/usr/bin没有权限,执行以下代码

$sudo chmod 777 /usr/bin
//chmod: Unable to change file mode on /usr/bin: Operation not permitted
$sudo gem install -n /usr/local/bin cocoapods

4>查看Cocoapods版本

$pod --version  //1.8.4

查找第三方库:

$ pod search jsonkit

不报错,则安装成功~

2.2 \color{red}{cocoapods卸载步骤}:

1>在安装之前最好先卸载老版本

$ sudo gem uninstall cocoapods

2> 删除Cocoapos相关的东西

$ sudo gem uninstall cocoapods-core
$ sudo gem uninstall cocoapods-deintegrate

3> 查看安装Pod的地址
打开终端输入命令: $which pod 回车

/usr/local/bin/pod

4> 删除 pod

$ sudo rm -rf /usr/local/bin/pod

5> 检查Cocoapods是否删除

输入如下命令:$pod search AFNetworking或者pod  然后显示 pod: command not found

2.3 \color{brown}{cocoapods 更新步骤}:

sudo gem update --system //更新语句;
gem sources -l //验证你的Ruby镜像是并且仅是taobao(更新)
sudo gem install -n /usr/local/bin cocoapods //更新到所在文件夹中;
pod setup //开始更新);
du -sh * (查看文件大小);
pod --version (查看版本)。

2.4-路径配置Xcode

  • 配置Cocospods路径: /usr/local/bin
15784763666900.png
  • Cocospods导入头文件无提示:
    BuildSettings -> User Header Search Paths -> $(PODS_ROOT) -> recursive
15784764457068.png
  • Podfile使用与创建

使用时需要新建一个名为 Podfile 的文件,以如下格式,将依赖的库名字依次列在文件中即可:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
use_frameworks!

target 'Cocopods' do
pod 'AFNetworking', '~> 3.1.0'
pod 'SDWebImage', '~> 3.8.1'

end
  • 创建第一个Cocoapods应用:

cd 到项目目录下,指向 pod init 初始化

pod install 下载依赖

3.Cocoapods安装太慢怎么办?

3.1切换镜像源:清华大学开源软件镜像站

CocoaPods 镜像使用帮助

  • 对于旧版的 CocoaPods 可以使用如下方法使用 tuna 的镜像
$ pod repo remove master
$ pod repo add master https://mirrors.tuna.tsinghua.edu.cn/git/CocoaPods/Specs.git
$ pod repo update

可选源:https://git.coding.net/hging/Specs.git

  • 新版的 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'

3.2 下载依赖太慢(pod install)

15784762297472.png
$pod install --no-repo-update //不更新,若想更新只用pod install
$pod update --no-repo-update

cocoapods报错补充

1.[!] Unable to find a pod with name, author, summary, or description matching jsonkit

则执行以下命令:删除本地pod索引

rm ~/Library/Caches/CocoaPods/search_index.json

2.[!]Could not automatically select an Xcode project. Specify one in your Podfile like so:project 'path/to/Project.xcodeproj'

问题分析:没有指定工程目录

解决在Podfile文件里指定下工程目录就行了

# Uncomment the next line to define a global platform for your project
platform :ios, '9.0'
project 'ShuTiao.xcodeproj'
source 'https://github.com/CocoaPods/Specs.git'
inhibit_all_warnings!
target 'ShuTiao' do
  pod 'Masonry'
  pod 'AFNetworking'
  pod 'SDWebImage'
  pod 'SVProgressHUD'  
  # 基础宏定义byStevenHu
  pod 'HKMacros', :git => 'https://gitee.com/Steven_Hu/HKMacros.git'
end

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

use_frameworks!和#use_frameworks!的区别

1、 用cocoapods 导入swift 框架到swift项目和OC项目都必须要 use_frameworks!
2、用动态库,必须要在Podfile文件中添加 use_frameworks!

静态库 VS 动态库

  • 静态库:在编译时会将库copy一份到目标程序中,编译完成之后,目标程序不依赖外部的库,也可以运行。
    缺点: 会使应用程序变大

  • 动态库:(.dylib)编译时只存储了指向动态库的引用。可以多个程序指向这个库,在运行时才加载,不会使应用体积变大,但是运行时加载会损耗部分性能,并且依赖外部的环境,如果库不存在或者版本不正确则无法运行

  • Framework:实际上是一种打包方式,将库的二进制文件,头文件和有关的资源文件打包到一起,方便管理和分发。

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

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

导入项目

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

    • #use_frameworks! 必须创建头文件,在头文件里面 #import "xxx.h"
    • use_frameworks! 如果有头文件,在头文件里面 #import "xxx/xxx.h",其它swift文件中用到不需要再import;如果没有头文件,则在每个需要用到的swift文件里 import xxx。
  • 2、用cocoapods导入swift框架到swift项目

    • 必须use_frameworks!
    • 不需要头文件,在需要用到框架的swift文件里 import xxx
  • 3、用cocoapods导入OC框架到OC项目

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

总结

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

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

未完,待续~

相关文章

网友评论

      本文标题:你真的了解Cocoapods吗?

      本文链接:https://www.haomeiwen.com/subject/zdbsactx.html