[转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程
原文链接地址:http://blog.sina.com.cn/s/blog_81136c2d0102v1ck.html
对于此问题,有没有解决办法呢?答案是肯定的,事实上在ios中定义了scheme的解决方案。下面阿堂将总结分享下具体的操作过程,与广大网友分享下。
具体操作时,我们需要设定两套不同的编译参数环境,我们把这个环境称为scheme。xcode中的scheme是一些target的集合,它们配置不同的编译参数,也可能包括了一些可运行的测试集合。xcode中的scheme位于xcode的左上角,如下图,点击 PresentationLayer会弹出scheme菜单,从中可以编辑,新建和管理scheme。
从上图中,我们选择new scheme菜单项,接着会弹出一个对话框,从中选择target为 PresentationLayer,如下图所示
然后点击ok按钮就创建成功了,这样刚创建好的scheme为PresentationLayer2。
此时再选择edit scheme菜单项编辑 PresentationLayer2.如下图,选择info标签,将build configuration(编辑配置)修改为release。这里说明下编译配置各个项的含义: debug是为调试编译而配置的,release 是为了发布编译而配置的。
由于我们需要为不同的scheme配置不同的参数。由于移除NSLog和NSAssert的方式不同,所以下面我们分别介绍一下它们。
一. 移除NSAssert
移除NSAssert比较简单,我们需要在target中选择build settings, 找到 preprocessor macros(预处理宏)项目,配置它的release为 NS_BLOCK_ASSERTIONS, 具体操作步骤为: 双击release的空白处,此时会弹出对话框,点击对话框中的+添加NS_BLOCK_ASSERTIONS,如下图。
NS_BLOCK_ASSERTIONS是foundation框架中定义好的预处理宏,如果在编译环境中设置NS_BLOCK_ASSERTIONS,在编译的时候nsassert宏将被移除,我们可以分别运行scheme中的
PresentationLayer-->iPhone 6.0 Simulator 和
PresentationLayer2-->iPhone 6.0 Simulator
进行测试。
比较测试结果,可以发现PresentationLayer会抛出异常,而 PresentationLayer2可以执行通过。
结果如下图
二. 移除NSlog
移除NSLog 比NSAssert复杂一些,需要修改代码。思路是重新定义一个宏替代NSLog,这个宏是有条件编译的。为了能够在工程所有源代码中使用这个宏,需要在<工程名>-Prefix.pch文件中定义这个宏。这个文件引入的.h文件和定义的宏作用于全部工程中的源代码模块,这样可以省去在每个.h文件中定义宏。打开 PresentationLayer工程中的PresentationLayer-Prefix.pch,添加定义新的日志宏
#ifdef DEBUG
# define DLog(...) NSLog(__VA_ARGS__)
#else
# define DLog(...)
#endif
编译器在编译的时候判断是否定义DEBUG,如果定义了,则使用DLog替代NSLog。
#ifdef...#else...#endif是条件编译语句,是在编译的时候编译器进行判断。
与移除nsassert类似,需要在target中选择build settings,找到Preprocessor Macros项目,配置它的Debug 为DEBUG或(DEBUG=1),如下图
我们可以分别运行scheme中的
PresentationLayer-->iPhone 6.0 Simulator 和
PresentationLayer2-->iPhone 6.0 Simulator
进行测试,可以发现PresentationLayer执行时会有日志输出,而 PresentationLayer2则没有。
[转载]IOS项目打包除去NSLog和NSAssert处理之阿堂教程的更多相关文章
- 使用BUCK进行iOS项目打包
关于BUCK BUCK是Facebook开源的快速打包工具,可以用于多种语言及平台的项目打包,例如:C.C++.Java.iOS.Android等等.用于大型的iOS.Android项目,可以显著提升 ...
- 怎么给iOS项目打包
1 首先要选中项目中的真机測试,不要模拟器 ,然后从上边的菜单条中找product watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvc29tZXJhaW43 ...
- 利用宏定义令iOS项目当中的NSLog不执行
今天在博客园主页看到一篇帖子,提到NSLog消耗运行时性能: http://www.cnblogs.com/sunnyxx/p/3680623.html 解决方案如下,在Prefix.pch文件当中 ...
- 自动打包iOS项目
基于Lexrus的博文iOS-makefile,本文对自动打包涉及到的操作步骤以及理论基础进行了适当的补充. 请在阅读本文前先阅读<iOS makefile>.文章地址:http: ...
- (转载)Eclipse将引用了第三方jar包的Java项目打包成可执行jar的两种方法
转载自:http://www.cnblogs.com/lanxuezaipiao/p/3291641.html 方案一:用Eclipse自带的Export功能 步骤1:准备主清单文件 "MA ...
- 记录下hbuilder vue项目打包APP 在IOS上点击延迟的问题
做的项目打包成APP在IOS 上有延迟问题,在安卓下却不会,联想到之前 用IONIC时打包的APP也是 在IOS下有300毫秒延迟问题.所以 只能 认吧. 安装fastclick 插件: npm in ...
- iOS企业版打包(转载)
转自 http://www.cnblogs.com/shenlaiyaoshi/p/5472474.html 神来钥匙-陈诗友 iOS 企业版 打包 使用 iOS 企业版的证书发布应用可以跳过 A ...
- java桌面项目打包_by icewee_写得太棒了,直接转载了
前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: ecl ...
- 手把手教你利用Jenkins持续集成iOS项目
前言 众所周知,现在App的竞争已经到了用户体验为王,质量为上的白热化阶段.用户们都是很挑剔的.如果一个公司的推广团队好不容易砸了重金推广了一个APP,好不容易有了一些用户,由于一次线上的bug导致一 ...
随机推荐
- debian安装vld来查看Opcode,PHP调优。
一: 我的环境: Debian 7 (wheezy) x64 PHP 5.4.4-14 (apt-get 而来) Apache/2.2.22 (同上,非源码编译) 二 :安装vld. (# 代表是r ...
- adb shell dumpsys 命令 查看内存
android程序内存被分为2部分:native和dalvik,dalvik就是我们平常说的java堆,我们创建的对象是在这里面分配的,而bitmap是直接在native上分配的,对于内存的限制是 n ...
- Android多线程及异步处理问题
1.问题提出 1)为何需要多线程? 2)多线程如何实现? 3)多线程机制的核心是啥? 4)到底有多少种实现方式? 2.问题分析 1)究其为啥需要多线程的本质就是异步处理,直观一点说就是不要让用户感觉到 ...
- No.4小白的HTML+CSS心得篇
书读百遍,其义自见 遵照这句话 今天再次重新把慕课网的HTML+CSS看了一遍,再次阅读感受不再是那么陌生,从而心里默默地喜欢上了这种方式,坚持. 好了,开始今天的收获小总结 1.html中,表单&l ...
- Orchard 添加搜索栏
Orchard 提供索引和搜索的功能. 索引功能需要开启 Indexing 模块, 同时我们要开启Lucene 模块(做实际检索工作的东西). 然后还要开启Search模块(调用Lucene 查询然后 ...
- RSA, ACS5.X 集成配置
目的是RSA和ACS集成,ACS作为RADIUS服务器提供二次验证服务. ①配置RSA SecurID Token Servers 按照如下网址配置: http://www.cisco.com/c ...
- java的for循环问题的解决,以及安卓中ListView插入数据的问题
package test.testdemo; import org.springframework.jdbc.core.JdbcTemplate; import com.util.Pub; publi ...
- Sort list by merge sort
使用归并排序对链表进行排序 O(nlgn) 的时间效率 /** * Definition for singly-linked list. * struct ListNode { * int val; ...
- apache加载php模块失败
LoadModule php5_module "G:/php54/php5apache2_2.dll" apache2 conf加入这个之后无法加载 解决办法 在这句之前加入PHP ...
- 深入浅出—JAVA(2)
2.类与对象 当你在设计类时,要记得对象是靠类的模型塑造出来的. 1.对象是已知的事物2.对象会执行的动作 对象本身已知的事物被称为 实例变量:它们代表对象的状态.切该类型的每一个对象都会独立的拥有一 ...