说一下背景

自从这个项目不死不活的迭代了2年,从项目搭建到现在,一直都是自己在开发和维护,所以项目结构非常清晰,但是之前的水平写的代码现在看来也是惨不忍睹,不过本人比较懒,也就没有考虑过重构的事情 - - 是不是一位不合格的程序员呢,哈哈哈!

这个项目中开始是用oc写的,今年开始,由于喜欢上了swift,所以导致这次的迭代使用了swift开发,所以项目目前应该算是oc和swift混编(也没看到swift编译快到哪里去呀?),如何混编,这里就不多赘述了,百度搜一下很多,总结一下,大致就两点:

1.swift调用oc的代码,需要使用“桥接文件”,桥接文件基本上在你创建swift代码的时候会提示你创建,桥接文件里导入的是在swift代码中要使用到的oc代码。

桥接文件的配置路径在BuildSettings 中搜索  Swift

只要路径正确,配置完成后,在桥接文件里引入swift代码中要使用的oc库即可。

2. oc代码调用swift代码文件。 在创建swift文件的时候,系统会自动创建一个 "productName-Swift.h"的文件,productName就是项目名,在要使用swift代码文件的地方 引入即可。这个文件是找不到的,但实际上是存在的。

--------------------------分割线-------------------------

以上是项目的背景,下面要说到使用targets了

在这个项目之前,从来没有使用过targets,不是懒 而是因为之前的项目没这个必要

但是这次客户有一个需求,这个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中,一定要写死,

最新文章

  1. [转]as3中的SharedObject的保存路径
  2. android之自定义广播
  3. sql server 2000通过机器名可以连,通过ip连不上的问题
  4. [翻译]HTML中不知名的语义标签
  5. CentOS 下 Codeblocks 的 安装 + 汉化 以及 基本使用介绍
  6. cocos2d源码剖析
  7. android SimpleCursorAdapter的使用
  8. [Hadoop] - TaskTracker源码分析
  9. android源码、博文2
  10. CSS 学习笔记 - Flex 布局
  11. 25个增强iOS应用程序性能的提示和技巧(0基础篇)
  12. vbs注册表增删改
  13. android 屏幕保持唤醒 不锁屏 android.permission.WAKE_LOCK
  14. Django REST framework+Vue 打造生鲜超市(十三)
  15. python笔记06-10
  16. Sobel 边缘检测算子
  17. 判断一个js对象是否是Array
  18. Fetch使用
  19. Java 7 for Absolute Beginners/Java 7基础教程--读后感
  20. 084 HBase的数据迁移(含HDFS的数据迁移)

热门文章

  1. 无法反序列化的java.util.ArrayList实例出来VALUE_STRING的(Can not deserialize instance of java.util.ArrayList out of VALUE_STRING)
  2. 企业架构 Red Hat Drools KIE Project 三大核心产品
  3. 文件数据库sqlite3 C++ 线程安全和并发
  4. node.js通过iconv-lite完成gbk字符解码例子
  5. Win10 cmd控制台程序会被鼠标单击暂停的解决办法
  6. Win10访问共享文件夹如何取消用户名密码
  7. linux升级python到2.7版本
  8. Linux MySQL 5.6.43 安装
  9. 【Linux】数据流重定向
  10. 快排的时间复杂度O(n) = nlogn计算过程