博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS中多Target的实现
阅读量:7086 次
发布时间:2019-06-28

本文共 2138 字,大约阅读时间需要 7 分钟。

一、多Target的应用场景

现在公司中可能会同时存在多个项目,而且因为业务关系,这些项目基本上大同小异,功能大体相同,差异较小,这个时候,如果我们每个项目都单独一份代码的话,那么其中有很大一部分重复工作,既费时又费力,那么有没有简单有效的解决方案呢,在iOS中我们可以通过多Target的方式实现。

二、主要两点操作

  • 当一个文件为多个Target公用时,可以用宏区分
  • 当一个文件为单独的Target专用时,可以设置选择属于自己的Target

三、实现

1、创建MutableTarget

我们在Xcode中创建一个新的项目,项目目录结构如下图:

因为我们实现多Target之后,多个项目可能有不同的设置项,所以此处我们将默认的plist文件名字换掉以作区分:

为了区分不同Target的不同界面,我们现将默认的Target名字修改为Target1

然后我们创建一个类TargetOneViewController

因为此时项目中只有一个Target,所以此时是默认选中了Target1的:

其实现如下:

修改入口类,此时我们运行项目效果如下:

2、创建Target2

接下来我们为MutableTarget项目创建一个新的Target,方法有两种:

  • 第一种:Xcode->File->New->Target (不推荐)
  • 第二种:(推荐)如下图:

然后新的Target就会创建好了,之所以推荐这种方式创建新的Target是因为,这方式创建的Target其实是复制了原来的Target,这点从名字就可以看出来,新的Target会拥有原来的Target的配置作为默认配置,我们将新的Target重命名为Target2

创建Target2的plist文件

因为我们不同Target对应的可能是不同的App,而且两个App可能会同时安装在一个设备上,所以我们需要两套plist文件来配置不同的Target,此处我们直接将Target1的plist文件复制一份,修改名字,然后添加到项目中:

因为新的plist文件是配置Target2的,所以此处我们选中Target2,下一步,添加plist文件引用路径:

此时我们尝试运行Target2,我们发现此处的名字并没有修改掉:

为了方便理解,我们将此处的名字修改为相应的Target的名字,点击Manager Schemes修改为相应的名字(选中Target1 copy,回车即可编辑修改):

之后我们运行Target1Target2,结果如下:

结果发现,尽管我们运行了不同的Target,但是效果却是一样的,这是因为此时我们的入口类代码如下:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UINavigationController *target1Nav = [[UINavigationController alloc] initWithRootViewController:[[NSClassFromString(@"TargetOneViewController") alloc] init]]; self.window.rootViewController = target1Nav;  return  YES;}复制代码

我们一直加载的是TargetOneViewController,所以结果都是一样的,然后我们创建一个新的类TargetTwoViewController实现如下:

- (void)viewDidLoad { [super  viewDidLoad]; self.view.backgroundColor = [UIColor  whiteColor]; UILabel *label = [[UILabel  alloc] init]; label.frame = self.view.bounds; label.backgroundColor = [UIColor  clearColor]; label.textColor = [UIColor  blueColor]; label.textAlignment = NSTextAlignmentCenter; label.text = @"这是第二个target"; [self.view addSubview:label];}复制代码

那么如何让Target2加载TargetTwoViewController类呢,此时我们就需要在入口类区分什么时候加载Target1,什么时候加载Target2

3、使用宏区分不同的Target

如何区分不同的Target呢,Xcode给我们提供了定义宏的地方:

我们在此处添加宏定义Target,宏定义的名字可以任意写,但是两个Target中的宏定义名字要保持一致,只是直不同:

**注:**此处DebugRelease两种模式都要添加。 然后入口类中代码这么修改:

运行:

至此,多Target的使用基本几经介绍完毕

转载地址:http://gggml.baihongyu.com/

你可能感兴趣的文章
量化标配:工作站个人版裸机配置
查看>>
『中级篇』手动建立一个base Image(14)
查看>>
BIOS和CMOS
查看>>
grep、egrep及相应的正则表达式和用法
查看>>
Android7.0新特性
查看>>
Python中的列表
查看>>
linux中日志的管理
查看>>
在linux下查看内核版本、gcc版本、操作系统多少位等参数
查看>>
鹅厂奋战历程简录
查看>>
从零开始成为一名开源程序员,其实只需要九步!
查看>>
1周2次课
查看>>
OSI模型和TCP/IP协议栈
查看>>
基于centos6.x环境下GRE隧道的搭建及分析
查看>>
linux下安装oracle11g实例
查看>>
Centos7搭建OpenNebula云平台
查看>>
Shell流程控制之if语句
查看>>
快过高铁!构建云分布式应用还能这样操作?!
查看>>
ftp服务器的搭建于三种访问途径
查看>>
字节流与字符流的区别及相互转换
查看>>
教你将PDF文件旋转的方法
查看>>