小结:Swift、OC语言中多target在代码中如何区分

一、对swift工程

经实践,网上的方法都无法成功,后来思考DEBUG宏定义方式,经实测有效,方式如下:

注意:不能把swift flags 小三角折叠后双击设置-DTarget4AppStore, 这样会自动清空之前生成或定义的宏定义

 #if Target4AppStore
        self.view.backgroundColor = UIColor.yellow//效果在运行appstore target时,通过界面调试工具可看到背景图为黄色
  #else
        self.view.backgroundColor = kBGColor
#endif

二、对OC工程

build setting中搜索 macro,在preprocessor Macros展开状态下,对新复制出的target的debug和release下都加上宏定义。

//
//  ViewController.m
//  mulTargetsTest
//
//  Created by myl on 2017/4/12.
//  Copyright ? 2017年 huatu. All rights reserved.
//

#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
  [super viewDidLoad];

#if IS_MACRO //macao 版,Xcode缺陷:文本高亮状态不会随着切换scheme变化,但是运行起来是对的。
  #if DEBUG
    self.view.backgroundColor = [UIColor blueColor];
  #else
    self.view.backgroundColor = [UIColor brownColor];
  #endif
#elif  IS_BEIJING//北京版
  #if DEBUG
    self.view.backgroundColor = [UIColor cyanColor];
  #else
    self.view.backgroundColor = [UIColor blackColor];
  #endif

#elif  IS_TIANJING//天津版,还未复制出target,不会走这
  #if DEBUG
    self.view.backgroundColor = [UIColor cyanColor];
  #else
    self.view.backgroundColor = [UIColor blackColor];
  #endif
#else//广州版
  #if DEBUG
  self.view.backgroundColor = [UIColor redColor];
  #else
   self.view.backgroundColor = [UIColor orangeColor];
  #endif
#endif

}

@end

以上代码已经过实际测试,完全正确。

时间: 2024-10-20 00:11:45

小结:Swift、OC语言中多target在代码中如何区分的相关文章

D语言中的Range与C#中IEnumreable的区别

基本的Range使用的接口函数有 front, popFront, empty三个函数,只要实现这三个函数,就是一个Range .使用这三个函数来访问元素时代表着这是一个有序的集合,因此可以称Range为序列集,这是一个队列式的操作. 而C#中的IEnumreable只要求能访问元素,并无有序要求,这与C#中的opApply接口相同. 在D语言中有两种迭代方式,一种是实现 front, popFront ,empty这三个接口,另一种是实现opApply接口,只要实现其中一个就可以使用forea

关于语言中的warning(包括PHP中的notice)的问题

PHP的notice 今天在用PHP写一个文件读写的问题,截取里面的数据会有notice,如下,(不影响运行).由于自己没有在公司内部做过PHP的产品,也不知道对notice的要求是什么?于是到百度GOOGLE求答案,都是对各种notice的处理. 与其他PHP技术人员讨论,怎么处理的都有:有说全部都处理的:有说直接@的:有说直接改报告错误级别的. C++的warning 同时想到了C++程序中的warning的如下,以前写的小模块waring都是处理掉的.现在公司不要求对waring进行处理,

javascript中模拟实现java语言中的map

//javascript中模拟实现java语言中的map 实现代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script type="text/javascript"> //private var obj={};//空的对象容器,用于承装键值对 function Map() { //put方法 th

在Swift语言中,关于Any,AnyObject,AnyClass的区别与联系

在Swift语言中,协议定义类或结构体应该遵守的变量和方法集合,如下所示,这个一个标准的协议的声明: protocol NSObjectProtocol { func isEqual(object: AnyObject?) -> Bool var hash: Int { get } var superclass: AnyClass? { get } func `self`() -> Self! func isProxy() -> Bool func isKindOfClass(aClas

Swift语言中 String 的一些操作方法

整理自慕课网liuyubobobo老师在<玩儿转Swift>课程中的讲解,在此表示感谢!同时推荐这套视频课程http://www.imooc.com/learn/127 var str = "Welcome to Play Swift! Step by step to learn Swift." // Range的用法和相关字符串的操作代码片段  str.rangeOfString(“Step”)  // 字符串片段“Step”所处的字符范围 23..<27, 也即第

GO语言中import的规则和用法

GO语言中引入包使用import,我将在本文讲解下规则和用法. 一些规则: 1.包中不能有main方法. 2.同文件夹中可以直接用方法名调用. 3.main函数建议放在package main里4.main不能调用同个目录下的其它文件中的方法. 5.还可以把包放在上级的目录中,如: /src/myFolder/foo/bar1.go #package foo /src/myFolder/foo/bar2.go #package foo /src/myFolder/foo/bar3.go #pac

Java语言中String累的总结

String类 1.Java.lang包简介 java.lang包是java内置的一个基础包,其中包含了一系列程序中经常要用到的类: 在默认情况下,每个java程序都会自动导入该包,因此无需在程序中显式地声明. 2.String类 Java语言中,字符串是String类的对象: Java语言中,String是引用数据类型: 可以通过使用String类提供的方法来完成对字符串的操作: 创建一个字符串对象之后,将不能更改构成字符串的字符: 每当更改了字符串版本时,就创建了一个新的字符串对象,并在其内

C语言中,头文件和源文件的关系(转)

简单的说其实要理解C文件与头文件(即.h)有什么不同之处,首先需要弄明白编译器的工作过程,一般说来编译器会做以下几个过程: 1.预处理阶段 2.词法与语法分析阶段 3.编译阶段,首先编译成纯汇编语句,再将之汇编成跟CPU相关的二进制码,生成各个目标文件 (.obj文件)4.连接阶段,将各个目标文件中的各段代码进行绝对地址定位,生成跟特定平台相关的可执行文件,当然,最后还可以用objcopy生成纯二进制码,也就是去掉了文件格式信息.(生成.exe文件) 编译器在编译时是以C文件为单位进行的,也就是

C语言中,定义的含义?声明的含义?它们之间的区别是什么?

在C语言中,对于定义和声明,也许我们非常的熟悉,但不一定真正的了解! 定义的含义:所谓定义,就是创建(编译器)一个对象,为这个对象分配一块内存空间并取名,也就是我们平常所说的变量名或对象名,一旦这个名字和这块内存空间匹配,那么在定义的这个对象或变量的生命周期中,所创建的这个变量名将不能再被改变,并且内存空间的位置也不会改变.在一个区域内(函数内,全局),一个名字只能被定义一次,不能重复定义. 声明的含义:声明有两重含义 第一重含义:告诉编译器,这个名字已经匹配到了一块内存空间上,后面的代码所用到