在开发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的使用

多个Target的使用

如何在iOS项目中创建多个target?

iOS开发中如何创建多个target的更多相关文章

  1. ios 开发中 动态库 与静态库的区别

    使用静态库的好处 1,模块化,分工合作 2,避免少量改动经常导致大量的重复编译连接 3,也可以重用,注意不是共享使用 动态库使用有如下好处: 1使用动态库,可以将最终可执行文件体积缩小 2使用动态库, ...

  2. iOS开发中 workspace 与 static lib 工程的联合使用

    在iOS开发中,其实workspace的使用没有完全发挥出来,最近做了一些研究,也想把之前写过的代码整理下,因为iOS里面的布局方式,交互方式也就那么几种.所以,整理好了之后,更能快捷开发,而且能够形 ...

  3. 简述 Ruby 与 DSL 在 iOS 开发中的运用

    阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain Specific Language) 翻译成中文就是:"领域特定语言".首先,从定义就 ...

  4. 深入理解 iOS 开发中的锁

    来源:伯乐在线 - 夏天然后 链接:http://ios.jobbole.com/89474/ 点击 → 申请加入伯乐在线专栏作者 摘要 本文的目的不是介绍 iOS 中各种锁如何使用,一方面笔者没有大 ...

  5. iOS开发中遇到的一些问题及解决方案【转载】

    iOS开发中遇到的一些问题及解决方案[转载] 2015-12-29 [385][scrollView不接受点击事件,是因为事件传递失败] // //  MyScrollView.m //  Creat ...

  6. 白话 Ruby 与 DSL 以及在 iOS 开发中的运用

    每日一篇优秀博文 2017年10月7日 周六 白话 Ruby 与 DSL 以及在 iOS 开发中的运用 阅读本文不需要预先掌握 Ruby 与 DSL 相关的知识 何为 DSL DSL(Domain S ...

  7. iOS开发中的单元测试(三)——URLManager中的测试用例解析

    本文转载至 http://www.cocoachina.com/cms/plus/view.php?aid=8088   此前,我们在<iOS开发中的单元测试(一)&(二)>中介绍 ...

  8. 总结iOS开发中的断点续传那些事儿

    前言 断点续传概述 断点续传就是从文件赏赐中断的地方重新开始下载或者上传数据,而不是从头文件开始.当下载大文件的时候,如果没有实现断点续传功能,那么每次出现异常或者用户主动的暂停,都会从头下载,这样很 ...

  9. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

随机推荐

  1. FileOutputStreamTest

    package JBJADV003; import java.io.FileOutputStream;import java.io.OutputStream;import java.io.IOExce ...

  2. 反编译Unity3D手机游戏

    [旧博客转移 - 2015年11月17日 10:08] 现在大部分U3D手游都没有进行加密处理,要反编译其实很简单 APK是安卓的安装包,安卓是基于Linux的,Linux的安装包一般都是zip,所以 ...

  3. 角点检测和匹配——Harris算子

    一.基本概念 角点corner:可以将角点看做两个边缘的交叉处,在两个方向上都有较大的变化.具体可由下图中分辨出来: 兴趣点interest point:兴趣点是图像中能够较鲁棒的检测出来的点,它不仅 ...

  4. Randoop测试类和方法(用例自动生成)

    详细使用方法见randoop官网: https://randoop.github.io/randoop/manual/index.html 测试程序之前,先检测下你的Randoop是否配置好: 打开c ...

  5. Postmessage运用-往飞信添加信息

    1.定位窗口 fHwnd:=FindWindow(nil,'短信中心'); then begin showmessage('请先登录飞信2013短信中心'); exit; end; { applica ...

  6. Java文件操作(IO流)

     File 在java中用来表示文件和文件夹的具体类. File的构建 File的常见方法   字节流:       对象序列化:   字符流:     转接流: InputStreamReader. ...

  7. STL系列

    STL—对象的构造与析构 STL—内存的配置与释放 STL—vector STL—vector空间的动态增长

  8. 20170713_js闭包/匿名函数/作用域

    js:闭包 var getNum; function getCounter() { var n = 1; var inner = function () {return n++; } console. ...

  9. linux+windows mysql导入导出sql文件

    linux下 一.导出数据库用mysqldump命令(注意mysql的安装路径,即此命令的路径):1.导出数据和表结构:mysqldump -u用户名 -p密码 数据库名 > 数据库名.sql# ...

  10. serv-u 多域配置

    serv-U后,默认情况下可以通过在浏览器中输入http://IP 的方式登录到serv-u ftp 服务器控制台,也就是说serv-u在80端口监听,这样,如果想配置多个域或者是想在自己电脑上安装A ...