说一下背景程序员
自从这个项目不死不活的迭代了2年,从项目搭建到如今,一直都是本身在开发和维护,因此项目结构很是清晰,可是以前的水平写的代码如今看来也是惨不忍睹,不过本人比较懒,也就没有考虑太重构的事情 - - 是否是一位不合格的程序员呢,哈哈哈!swift
这个项目中开始是用oc写的,今年开始,因为喜欢上了swift,因此致使此次的迭代使用了swift开发,因此项目目前应该算是oc和swift混编(也没看到swift编译快到哪里去呀?),如何混编,这里就很少赘述了,百度搜一下不少,总结一下,大体就两点:app
1.swift调用oc的代码,须要使用“桥接文件”,桥接文件基本上在你建立swift代码的时候会提示你建立,桥接文件里导入的是在swift代码中要使用到的oc代码。 ui
桥接文件的配置路径在BuildSettings 中搜索 Swiftdebug
只要路径正确,配置完成后,在桥接文件里引入swift代码中要使用的oc库便可。blog
2. oc代码调用swift代码文件。 在建立swift文件的时候,系统会自动建立一个 "productName-Swift.h"的文件,productName就是项目名,在要使用swift代码文件的地方 引入便可。这个文件是找不到的,但其实是存在的。图片
--------------------------分割线-------------------------开发
以上是项目的背景,下面要说到使用targets了部署
在这个项目以前,历来没有使用过targets,不是懒 而是由于以前的项目没这个必要get
可是此次客户有一个需求,这个app须要有一个内部版本,内部版本开放一些特殊的功能,而线上版本没有,因此才考虑使用targets来配置一下两种环境。
若是在相同代码或者90%代码不变的状况下,有部署多端或者部署多个环境的要求下,建议仍是使用targets来管理,很方便。
1.建立targets
这个很少说,很简单,单击目前已有的targets,选择“Duplicate”,复制一个相同环境的tagets,而后修改tagets名称。 而后 Manage Schemes,
将两个tagets都选上,这样打包或者debug的时候,就能够选择不一样的环境配置了
2.配置内部版target
上面第一步建立好了targets后,须要对这个targets进行配置,首先就是在BuildSettings中搜索 “preprocessing”,设置一个内部环境独有的宏 kTargetInternal,这样就能够在代码中使用此宏了。
除了配置宏,还要配置info.plist。在上面的步骤中,当咱们从新"Duplicate'一个targets的时候,也会从新生成一个plist文件,buildsetting搜索 'Packaging'
OK,配置结束,这个时候运行基本上没问题,你能够在这个targets中配置属于这个环境独有的图片,启动图等等。
必定要注意一下,若是你是用oc和swift混编的话,注意这里:
因为无论有几个targets,在建立swift文件的时候,会默认生成一个productName-Swift.h的文件,因此这里必定不要配 $(TARGET_NAME)-Swift,这样会使你的程序报错,会提示你找不到xxxswift文件。无论在哪一个targets中,必定要写死,