首先你要关掉Xcode,打开终端,用 cd 命令进入包含你项目的那个目录下:cd ~/Path/To/Folder/Containing/TestPeoject
接下来,输入下面的命令:
pod init
这将为你的项目创建一个PodFile
输入下面的命令行打开PodFile,并使用Xcode进行编辑:
open -a Xcode Podfile
注意:你不能使用TextEdit来编辑Podfile,因为它有可能用图形化的更有吸引力的typeset quotes代替standard quotes,这可能导致CocoaPods不能理解并抛出错误,所以最好用Xcode或者别的编程文本编辑器来编辑你的Podfile。
默认的podFile看起来是这样的:
# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
# use_frameworks!
target 'TestPeoject' do
end
target 'TestPeojectTests' do
end
target 'TestPeojectUITests' do
end
把 # platform :ios, '8.0' 和 # use_frameworks! 两行注释打开
# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
# use_frameworks!
target 'TestPeoject' do
end
target 'TestPeojectTests' do
end
target 'TestPeojectUITests' do
end
这就告诉了CocoaPods--你的项目使用的是iOS 8.0,并且将使用框架来代替静态库。
想要在Swift中使用CocoaPods,你必须明确的写出use_frameworks! 来选择使用框架。如果你忘了写这个,CocoaPods能检测到你使用使用Swift CocoaPods,你安装pods的时候就会报错。
关于“库”
你会看到"library"通常代指库或框架。很抱歉这个教程也在无意间混杂了这两个概念。实际上,当某人提到"Swift library",他们实际上指的是"Swift dynamic frameworks",因为swift不允许静态库。
你可能想知道,"库(library)和框架(frameworkd)和cocoaPod之间的不同之处"。
Cocoapod或者简写为"pod"是一种惯常的叫法,用来表示使用Cocoapods工具添加库或者框架到你的应用程序中。
iOS 8引入了动态框架,这就允许了代码、图片和其他的东西(assets)可以被一起打包。在iOS 8之前,CocoaPods被作为静态库来创建,就是很"臃肿的"二进制文件。这意味着它包含了一些代码说明设置(例如i386 for the simulator, armv7 for devices等),但是它们不允许包含任何资源,例如图片或资产。
另外一个重要的区别是动态框架有命名空间类,而静态库没有。所以,如果单个项目中不同的静态库里分别有一个叫做MyTestClasses的类,那么Xcode可能不能成功创建工程因为它会因重复的标识而导致连接失败。然而,Xcode很乐意在一个工程里的不同框架下分别有一个名字相同的类。
为什么这很重要?不像OC,标准的Swift运行时库(runtime libraries)没有包含在iOS中!这意味着你的框架必须包含了必要的Swift运行时库。因此,用Swift语言写的pods必须以动态框架形式创建。如果苹果允许Swift静态库,那么使用同一个标准运行时依赖的不同库中将会产生重复符号。
幸运的是,CocoaPods为你做了这些事。它甚至能做到一次性包含需要的依赖关系。你所要做的就是在使用swift cocoaPods时记得在Podfile中包含use_frameworks! ,那就没问题了。
安装依赖
修改Podfile文件如下:
# Uncomment this line to define a global platform for your project
# platform :ios, '8.0'
# Uncomment this line if you're using Swift
# use_frameworks!
target 'TestPeoject' do
pod 'AFNetworking', '~> 3.1.0'
end
target 'TestPeojectTests' do
end
target 'TestPeojectUITests' do
end
这个是告诉CocoaPods你想添加大于3.1.0版本小于3.2.0版本的AFNetworking到你的工程中作为一个依赖性文件。
关于Podsfile
pod 'AFNetworking' //不显式指定依赖库版本,表示每次都获取最新版本
pod 'AFNetworking', '2.0' //只使用2.0版本
pod 'AFNetworking', '> 2.0' //使用高于2.0的版本
pod 'AFNetworking', '>= 2.0' //使用大于或等于2.0的版本
pod 'AFNetworking', '< 2.0' //使用小于2.0的版本
pod 'AFNetworking', '<= 2.0' //使用小于或等于2.0的版本
pod 'AFNetworking', '~> 0.1.2' //使用大于等于0.1.2但小于0.2的版本
pod 'AFNetworking', '~>0.1' //使用大于等于0.1但小于1.0的版本
pod 'AFNetworking', '~>0' //高于0的版本,写这个限制和什么都不写是一个效果,都表示使用最新版本
最后,从工程的 workspace 文件启动 Xcode 来编写你的程序。
如果在 .swift 文件中,无法 import 到你的依赖库,或者无法自动提示时:
1.选择target(就是左边你的工程target)—— BuildSettings —— search Paths 下的 User Header Search Paths(如图所示:)
2.双击后面的空白区域:(如图所示:)
出现下面的图,并且点击“+”号添加一项:并且输入:“$(PODS_ROOT)”(没有引号),选择:recursive(会在相应的目录递归搜索文件):
这样设置完成之后,再在工程中导入cocoaPods安装的第三方类库就有提示了。
网友评论