iOS创建多工程并且相互引用
业务需求模拟
公司需要开发一款学习类的app,针对不同的用户层级开放两个用户端:学生端、老师端。
项目分析
方法一(普通版):
新建俩个项目,一个是学生app,老师app
在开发的过程中,你会发现这俩个app有很多公共的模块,比如登录模块,用户中心模块.........
当你在学生端写完登录模块的时候,然后手动拷贝登录模块的代码到老师端,接着进行开发
-----来自菜鸟的阐述
方法二(改进版)
新建俩个项目,一个是学生app,老师app
把公共的模块组件化,在学生app,老师app分别我pod引用,省略了手动拷贝的操作。当公共组件更新的时候,分别在两个app项目端进行更新。
-----来自不那么菜的菜鸟的阐述
方法三(进阶版)
新建一个工作组workspace,在这个工作组上面新增学生project和老师project,两个工程公用一个工作组。同时工作组pod公共组件,俩project公用一套公共模块,这样可以及时更新。
-----来自具有逼格的老鸟的阐述
项目启动
方法一就不多做介绍了,
方法二中提及的公共组件的封装,欢迎去看我上一篇文章提到的公共组件封装的文章,以下是连接:
公共组件的封装
如果你已经看完了方法二中提及的文章,下面开始进行方法三的具体操作了。
1.创建工作组workspace
本地创建一个“MyProject”的文件夹
接着打开Xcode,File->New->Workspace

创建在“MyProject”的文件目录下,保存。

打开MyWorkspace工作组

打开之后你会发现是一个空的工作台

再接着让我们来创建两个用户端吧。
File->New->Project


保存在myworkspace工作组下

此时你会发现工作台下面有一个“StudentProject”的项目了

现在我们来看下项目结构

再接着创建“TeacherProject”
步骤如上,保存路径的时候 注意

创建之后 我们再来看看工作台

大功告成
一个工作台下面包含了两个工程。

将自制公共组件和第三方SDK导入项目中,俩工程都能调用公共组件模块和第三方SDK
首先打开终端,cd到“MyProject”目录下,创建Podfile文件

接着输入
source 'https://github.com/jiangxiaobin1011/JSpecs.git' //自制组件库索引
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '9.0'
workspace 'MyWorkspace.xcworkspace' //工作台路径
project 'StudentProject/StudentProject.xcodeproj' //主工程路径
def commonPods
pod 'AFNetworking', '~> 3.1.0' //共有第三方库申明
end
target 'StudentProject' do
project 'StudentProject/StudentProject.xcodeproj'
pod 'Masonry', '~> 1.0.2'
commonPods
pod 'JCategoryKit' //自制组件库引用
end
target 'TeacherProject' do
project 'TeacherProject/TeacherProject.xcodeproj'
commonPods
end
ps:拷贝的时候记得删掉“//+提示内容” ,不然pod识别不了
好了 接下来打开myworkspace

想要引用pod里的文件,记得在工程 buildsetting的user headr里面添加“$(PODS_ROOT)”

进阶:
尽量让两个工程不要互相依赖,互相解耦,这样的话 其中任何一个项目都能作为一个独立的项目隔离出来。也就是所谓的工程组件化。
关于工程组件化的思想 推荐大家去看这篇文章