ios define NSLog debug 应用发布nslog注释
2014-02-26 17:28
211 查看
ios define NSLog debug 应用发布nslog注释
看看新闻网>看引擎>开源产品发表于2小时前(2014-01-12 20:29)
阅读(5) | 评论(1)
1人收藏此文章,
赞0
1 选择工程的Target -> Build Settings -> Preprocessor Macros.
如图,默认 Debug项,是“DEBUG=1”.
2 在程序中设置全局宏定义
在程序的 ApplicationName-Prefix.pch 文件中,加入如下,很简单
#ifdef DEBUG_MODE #define DLog( s, ... ) NSLog( @"<%p %@:(%d)> %@", self, [[NSString stringWithUTF8String:__FILE__] lastPathComponent], __LINE__, [NSString stringWithFormat:(s), ##__VA_ARGS__] ) #else #define DLog( s, ... ) #endif
3 这样就设置好了,测试
在任意ViewController.m中写入
DLog(@"1234");
结果:
2012-07-25 17:09:54.448 xxxx[7094:707] <0x28f790 ViewController.m:(64)> 1234
这样发布的时候DLog就不会有输出了。
在Objective-c开发程序的时候,有专门的日志操作类NSLog,它将指定的输出,输出到(stderr),我们可以利用Xcode的日志输出窗口,那么既然是要记录到具体日志文件,我们就想输出日志写入到具体的日志文件即可。
代码
1、 宏定义(下面是我在程序中常用到的日志宏,用DEBUG开关管理,
也就是说只有在DEBUG模式下才让日志输出 :)
#ifdef DEBUG
# define LOG(fmt, …) do {
\
NSString* file = [[NSString alloc] initWithFormat:@”%s”,
__FILE__]; \
NSLog((@”%@(%d) ” fmt), [file lastPathComponent],
__LINE__, ##__VA_ARGS__); \
[file release];
\
} while(0)
# define LOG_METHOD NSLog(@”%s”, __func__)
# define LOG_CMETHOD NSLog(@”%@/%@”, NSStringFromClass([self
class]), NSStringFromSelector(_cmd))
# define COUNT(p) NSLog(@”%s(%d): count = %d\n”, __func__,
__LINE__, [p retainCount]);
# define LOG_TRACE(x) do {printf x; putchar(‘\n’); fflush(stdout);}
while (0)
#else
# define LOG(…)
# define LOG_METHOD
# define LOG_CMETHOD
# define COUNT(p)
# define LOG_TRACE(x)
#endif
可以看到,除了标准的用户定义输出外,我还加入了许多有用的信息,
比如源程序文件位置,行号,类名,函数名等。具体的应用可以在具体的开发过程中添加、删除。
2、 应用:
- (void)redirectNSLogToDocumentFolder{
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,
YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *fileName =[NSString stringWithFormat:@"%@.log",[NSDate
date]];
NSString *logFilePath = [documentsDirectory stringByAppendingPathComponent:fileName];
freopen([logFilePath cStringUsingEncoding:NSASCIIStringEncoding],”a+”,stderr);
}
- (void)applicationDidFinishLaunching:(UIApplication
*)application {
// 真机测试时保存日志
if ([CDeviceInfo getModelType] != SIMULATOR) {
[self redirectNSLogToDocumentFolder];
}
}
真机测试的时候,可以利用freopen将标准错误输出保存到指定的文件当中,
这样就可以在问题发生后分析日志文件。
3、 设置DEBUG标志是否正确定义
Xcode 一般会在 debug 运行配置项里面已经定义号了DEBUG 标志,如果没定义我们就自己写上,以我的
Xcode 4 为例,在项目get Info中找到 PreProcessor Macros 这个属性,对于 Debug 配置我们给他写上 DEBUG,而在 Release 配置中把它留空。 这样我们刚才那段预处理命令就可以根据这个标志来判断我们编译的时调试版本还是发布版本,从而控制 NSLog 的输出。 (因为 Xcode 4 会把 debug/release 两个配置项同时对比展现出来,而 3.x 版本的只能分别设置,如果你用的时xcode 3.x 开发工具, 那么就分别对 Debug/Release 都检查一下)。
相关文章推荐
- ios define NSLog debug 应用发布nslog注释
- iOS 应用发布
- 无需App Store,无线发布iOS应用(OTA)
- iOS已发布应用中对异常信息捕获和处理
- Flash发布iOS应用全攻略(一)——如何在Flash里发布iOS应用
- IBM发布AppScan Source 8.7:减少iOS企业级应用安全风险
- iOS 应用发布流程
- [Cocoa]iOS 开发者账户,联机调试,发布应用事宜
- IOS开发创建开发证书及发布App应用(九)——等待审核(审核几种状态)
- IOS企业应用in-house发布流程
- [ios] xcode 4.2 创建 adhoc 发布应用测试方法
- iOS 12已遭破解 越狱应用暂不公开发布
- 越狱开发ios应用发布真机测试(无需注册账号)
- 发布iOS应用(xcode5)到App Store(苹果商店) 详细解析
- Flash发布iOS应用全攻略(一)——如何在Flash里发布iOS应用
- 求大神指教,ios应用发布到appstore遇到了问题
- ios 用个人签名的应用不能同时发布企业 Distribution
- IOS应用的发布
- iOS 应用发布
- iOS已发布应用中对异常信息捕获和处理