zoukankan      html  css  js  c++  java
  • iOS开发:Release/Debug模式与Configuration

    一、release与debug模式

    Debug和Release仅仅是编译选项的不同,那么为什么要区分Debug和Release版本呢?

    Debug和Release,主要是针对其面向的目标不同的而进行区分的。

    Debug通常称为调试版本,通过一系列编译选项的配合,编译的结果通常包含调试信息,而且不做任何优化,为开发人员提供强大的应用程序调试能力。

    而Release通常称为发布版本,是为用户使用的,一般客户不允许在发布版本上进行调试。所以不保存调试信息,同时,它往往进行了各种优化,以期达到代码最小和速度最优。为用户的使用提供便利。

    我们说一下在xcode上怎么配置debug和release。

    1. 配置
    首先为了让debug和release的区别更加明显,我们会给各自一个option,这样我们可以保证在debug中输出的log,到了release就看不到了。

    比如下图的-DMY_DEBUG -DMY_RELEASE,到了代码里面如下实现

    #ifdef MY_DEBUG
    NSLog(@"debug version")
    #endif


    2. 运行
    再次我们可以配置debug和release,那编译的时候怎么选择是用debug还是release,答案如下(通过product-》edit scheme调出)

    二、Build Configuration

    Xcode默认会有2个编译模式,一个是Debug,一个是Release。
    Release下不能调试程序,编译时有做编译优化,会比用Debug打包出来的运行快,另外包也会更小。

    使用场景

    我自己碰到的使用场景是,我司的域名有3套:

    针对开发时的域名
    针对预上线时的域名
    针对上线时对外公开的域名
    这个时候,就会有多套域名,全部加起来可能有15个左右。每次打包时,就会特别混乱。(注释掉现在使用的域名,打开原本注释掉的那部分,出差错的可能蛮高的,而且不利于阅读)

    这个时候,我们就使用它来针对3个环境下不同域名做配置。

    配置Build Configuration
    1. 添加Configuration
    这里我们添加DEVELOP、BETA、保留原有的(release)。这里我们选择直接duplicatte Debug的配置,因为Release的不能做断点调试。

    2. 查看Configuration
    添加完第1步的Configuration之后,在Edit Scheme里就会看到新添加的配置项

    3. 更改Preprocessor Macros
    第1步里我们直接复制了Debug的配置项,那这里的值就会有问题,需要自己设置。

    4. 在程序里配置对应的Configuration下不同域名

    也可以这样使用

    5. 测试
    运行程序,修改Scheme下不同的Configuration,就能得到不同的值,那结果就是正确的了。

    三、基于以上的实验,app还可以在不同环境下配置不同的AppIcon和AppName

    AppIcon

    使用Asset Catalog,分别给三种环境下配置3个名字

    AppIcon
    AppIconDEVELOP
    AppIconBETA
    然后去Target - Build Settings里搜索Asset Catalog App Icon Set Name这一项


    App Name

    Target - Build Settings里点+号,添加一个User-Defined Setting

    比如我们请一个叫APP_DISPLAY_NAME的key值,下面BETA叫BETA,DEVELOP叫DEVELOP, Release还是用系统原配置。

    进到Target - Info里,修改Bundle name为$(APP_DISPLAY_NAME)

    运行结果

    打包配置

    这几天我们做了一件很蠢的事,把开发用的环境打包发给了Apple。
    为了弥补这件事,顺便规范以后的打包问题,于是做了一些配置上的补救。
    查了下Apple的文档,原来可以配置,我将Release环境以外的Skip Install配置成NO,就不会Archive出ipa了。

    参考文章:

    1、http://www.51testing.com/html/93/352093-844586.html

    2、 ios 学习之 debug和release版本的运行

    3、 IOS-40-测试环境与正式环境的代码通过标示符来区分

    4、http://www.jianshu.com/p/51a2bbe877aa
    ————————————————
    版权声明:本文为CSDN博主「江湖hi客」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/gongwutianya/article/details/52205192

    ------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。
  • 相关阅读:
    Django 报错RuntimeError: Model class apps.alarms.models.SendAlarmRecord doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.
    Go获取Windows下的窗口
    linux中得到当前目录指定文件或者目录的绝对路径
    关于在IDEA中使用maven的运行test目录下的main方法无法找到类的?
    数值变量互换的三种方式
    对于List和普通数组元素怎么去重的方法
    UE编辑器UltraEdit格式化XML数据
    java操作JSON字符串转换成对象的时候如何可以不建立实体类也能获取数据
    java设置RabbitMQ的消费处理出现:ConditionalRejectingErrorHandler : Execution of Rabbit message listener failed.
    org.springframework.http.converter.HttpMessageNotReadableException
  • 原文地址:https://www.cnblogs.com/feng9exe/p/15433019.html
Copyright © 2011-2022 走看看