1.Cocoapods
是一个类库管理工具(管理第三方的第三方
),它可以很方便的查找、下载最新的第三方库,能够找到真正好用的库,以此来缩短我们的开发周期和提升软件的质量,解决了库与库之间的依赖关系,让我们能自动化的、更直观的管理第三方库,但是Cocoapods不易操作,它必须要有自己的运行环境,而且要牢记终端命令行的指令。
2.如何配置/使用
- 首先需要在我的电脑上安装Cocoapods的运行环境
- 通过终端,命令行,下载,更新我所需要的第三方,下载到本地,通过脚本文件的运行继承到我们的项目中去,提供给我们使用,不需要再重新配置
- 当第三方的版本变化时,我也可以通过Pod install/update 对我的第三方库进行安装以及实时更新
2.1 :
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 :
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 :
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
- Cocospods导入头文件无提示:
BuildSettings -> User Header Search Paths -> $(PODS_ROOT) -> recursive
- 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 可以使用如下方法使用 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)swift项目cocoapods 默认
导入项目
-
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。
未完,待续~
网友评论