iOS开发中如何创建多个target
在开发iOS应用程序的过程中,经常需要根据不同的需求,切换到不同的项目配置,或者打不同的包(测试环境、开发环境、生产环境等等),如果每次都是手动配置,一则比较麻烦,二则容易配置错,那么有没有更好的方案来解决这个问题呢?答案是:有的。我们可以根据不同的需求,创建不同的target,在不同需求要切换配置或打包时,直接选择对应的target完成工作,从而提高我们的开发效率。
创建多个target有两种方式,一种是创建多个info.plist的配置文件,另一种是拷贝整个工程所需的文件,如:源文件、资源文件、配置文件等等。下面介绍这两种方式的创建过程:
方式一
复制target
首先复制target,然后在弹出的框中,选择Duplicate Only,即可复制一个target

修改名字
1.修改target的名字
双击复制出来的target即可修改名字

2.修改plist名字
把复制出来的*** copy-Info.plist文件改成其它名字,然后在General的配置里面,重新选择target的配置文件

3.修改scheme的名字
选择Manage Schemes...,然后在目标scheme上门双击(具体是:单击一下,等3s再单击,如果快速双击,是无法进行名字的修改的),之后修改名字

经过上面的修改,一个新的target就创建完成,之后我们可以修改Bundle Identifier、Version、Team等,以及资源文件等。
方式二
方式二就简单许多,直接复制工程所需的文件,之后我们可以看到工程的根目录下面,会多出一个文件夹,里面的文件内容和工程是一样的,所以是一个独立的工程空间,包括:源文件、配置文件、资源文件等等。我们在新工程里面的修改不会影响到旧工程。


根据上面的两种方案可以看出,第一种仅仅是创建了一个工程的配置文件,来实现多target的功能;而第二种是完全创建了一个新的工程目录,拷贝了之前的所有文件,之后的修改也不会影响到旧工程了,类似工程的备份功能。
预编译
在同一target下,我们也会需要不同的配置,如果都在代码里面进行判断,每次都要手动修改,也是比较麻烦的问题。针对这个问题,我们可以用预编译宏来解决。通常,target里会有一个Debug模式下的默认的宏:Debug=1,我们可以继续添加,或者直接使用这个宏来进行不同的配置。

实例代码如下:
#ifdef DEBUG
#define BASE_URL @"https://www.baidu.com"
#else
#define BASE_URL @"https://www.chaoaicai.com"
#endif
通过以上配置,那么以后我们在切换开发和生产模式时,就不同再手动修改base_url了,是不是感觉爽的飞起。
以上就是针对多target配置的介绍,如有不足之处,欢迎指出,共同进步。
参考资料
iOS开发中如何创建多个target的更多相关文章
- ios 开发中 动态库 与静态库的区别
使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...
- iOS开发中 workspace 与 static lib 工程的联合使用
在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形 ...
- 简述 Ruby 与 DSL 在 iOS 开发中的运用
阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...
- 深入理解 iOS 开发中的锁
来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...
- iOS开发中遇到的一些问题及解决方案【转载】
iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // // MyScrollView.m // Creat ...
- 白话 Ruby 与 DSL 以及在 iOS 开发中的运用
每日一篇优秀博文 2017年10月7日 周六 白话 Ruby 与 DSL 以及在 iOS 开发中的运用 阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain S ...
- iOS开发中的单元测试(三)——URLManager中的测试用例解析
本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088 此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍 ...
- 总结iOS开发中的断点续传那些事儿
前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...
- iOS开发中静态库之".framework静态库"的制作及使用篇
iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...
随机推荐
- python webserver, based on SimpleHTTPServer
#-*- coding:utf-8 -*- #author: lichmama #email: nextgodhand@163.com #filename: httpd.py import io im ...
- tp框架为什么验证码加载不出来?----- ob_clean() 可解决
在用tp做验证码时,代码逻辑都正确,但就是加载不出图片来,如何解决呢?在创建验证码之前加上 ob_clean(); public function haha(){ ob_clean(); $v = n ...
- @RequestParam与@PathVariable的区别
在spring MVC中,两者的作用都是将request里的参数的值绑定到contorl里的方法参数里的,区别在于,URL写法不同. 使用@RequestParam时,URL是这样的:http://h ...
- 【SqlServer系列】表单查询
1 概述 如下几个问题,如果你能解决,请继续往下看,若不能解决,请先复习SQL基础知识,再来阅读本篇文章.本篇文章深度中等左右. Q1:表StudentScores如下,用一条SQL语句查询出每门 ...
- .NetCore~Json代替了Xml
回到目录 在进行.netCore时代后,最大的变化就是对Json的使用更加主动,基本代替了之前的XML,像一些用户配置,系统配置,包包配置等都是基于json的,而web.config这个文件基本变成一 ...
- Wince 创新布局
如果你的项目是用wince开发并且机器是小型的pda,你可以考虑有这种布局方式. IDE上布局,如图 /// <summary> /// 显示层 /// </summary> ...
- SQLServer中的执行计划缓存由于长时间缓存对性能造成的干扰
本文出处:http://www.cnblogs.com/wy123/p/7190785.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- input复选框操作的部分高频率使用代码
1. 获取单个checkbox选中项(三种写法): $("input:checkbox:checked").val() 或者 $("input:[type='checkb ...
- SQL Server事务遭遇网络异常时的处理机制浅析
SQL Server数据库中,如果应用程序正在执行一个事务的时候突然遭遇了网络异常,例如网络掉包,网络中断等,那么这个事务会怎么样? SQL Server数据库是通过什么机制来判断处理呢? 估计很多人 ...
- Charles录制App的接口har文件
Charles录制App的接口har文件 如果我们想录制我们自己App后台请求接口的信息,并生成har文件,要怎么做呢?其实很简单,就是通过Charles,让手机的访问请求走这个Charles代理就行 ...