借助workspace结合Cocoapods实现项目的模块管理

借助workspace结合Cocoapods实现项目的模块管理_第1张图片
“工欲善其事必先利其器。”

iOS中可以使用workspace来管理多项目, 而CocoaPods是依赖管理工具, 用来管理第三方类库, 用起来相当方便。
假设我们需要完成一个比较复杂的app,这个app包含了几个功能相对独立的模块,而每个模块又依赖其他的第三方类库,那么此时就需要结合workspace和CocoaPods来管理。

那么究竟怎么操作呢?请跟着我的步骤来。

一 、创建一个包含了多工程的workspace

为此我们先来创建一个名叫test的workspace:打开xcode,File->New->Workspace,输入test的名字并为test选择好存储路径确认即可。此处我将workspace放到文稿下面的test文件夹。

借助workspace结合Cocoapods实现项目的模块管理_第2张图片
新建workspace

在test目录下新建两个工程,testMain(application)和testFramework(framework)。建好后的test目录如下:

借助workspace结合Cocoapods实现项目的模块管理_第3张图片
建好的test目录

在workspace的工作区,右击选择 Add File to “test”...,向workspace中添加testMain和testFramework工程。
借助workspace结合Cocoapods实现项目的模块管理_第4张图片
向test添加工程

添加好后,选中testMain工程,选择TARGETS->General->Embedded Binaries,选择testFramework.framework。
借助workspace结合Cocoapods实现项目的模块管理_第5张图片
为testMain添加工程依赖

查看testFramework工程的Per-configuration Build Products Path设置
借助workspace结合Cocoapods实现项目的模块管理_第6张图片
查看testFramework的设置

并将其copy出来,设置testMain的Framework Search Path,此处testMain的Project和Target对应的Framework Search Path均要设置。
借助workspace结合Cocoapods实现项目的模块管理_第7张图片
设置testMain的Framework Search Path

此时在testMain的任意.m文件中包含Framework的头文件,编译应该已经没有问题。( 如遇找不到testFramework/testFramework.h文件错误,可以Window->Projects 选择testMain工程delete数据,重新编译就好
借助workspace结合Cocoapods实现项目的模块管理_第8张图片
清理工程数据

二、 用CocoaPods管理各个工程依赖的第三方库

假定工程testMain依赖SDWebImage,testFramework依赖AFNetworking,那么根据这个依赖我们来编辑test的Podfile。
打开终端,cd命令进入test目录,在test下用vim Podfile新建Podfile文件并打开,编辑如下。(后续会解释为什么这么写)


借助workspace结合Cocoapods实现项目的模块管理_第9张图片
Podfile的内容

保存退出,并确定关闭了test.xcworkspace后在终端执行
pod install命令。
打开test.xcworkspace,工程面板已经变成如下图所示。


借助workspace结合Cocoapods实现项目的模块管理_第10张图片
pod install 后的workspace

至此,配置完毕。

三、 Podfile的书写

编辑Podfile的时候,有两点特别需要注意:
其一,命名。只能为“Podfile”,字符大小写要更这里给出的完全一致,不能有错
其二,Podfile的书写格式。针对本文中使用的范例,给出格式解析如下:

workspace 'test.xcworkspace' //项目包含了一个名为test的workspace
xcodeproj 'testMain/testMain.xcodeproj' //workspace的主工程,以及相对于workspace的路径

  //配置workspace的第一个target “testMain” 的库依赖
target 'testMain' do
  platform :ios, '7.0'  //工程的使用环境设置
  xcodeproj 'testMain/testMain.xcodeproj'  //工程已经相对于workspace的路径
   pod 'SDWebImage', "~> 3.7.0" //要导入的第三方库以及库的版本

end //第一个Target的配置完毕

  //第二个target “testFramework”与上同
target ’testFramework’ do
  platform :ios, '7.0'
  xcodeproj 'testFramework/testFramework.xcodeproj'
  pod 'AFNetworking', "~> 3.0"
end

四、 引入workspace和Cocoapods管理项目的优点

上面已经很完整详细的说明了怎样通过workspace和Cocoapods对项目实现模块化管理。
最后,再来总结下这样做的利弊。
就我自己使用的体验来看,优点如下:
1.降低模块之间的耦合,使得我们自己的代码独立出来,业务更加清晰。
2.可以实现功能上的完整,提高代码的复用率。
3.针对多人参与的工程,这样也一定程度的降低了配置管理的难度。
至于缺点,就我来看应该只有一条:必须要由一个资深的开发人员来完成模块的划分,否则,项目还是很容易回到没有模块化时的混乱场景中。

本文完,如有不妥之处,欢迎拍砖

你可能感兴趣的:(借助workspace结合Cocoapods实现项目的模块管理)