关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题
前言:
最近做项目时遇到了很多莫名其妙的问题,其中就有这个打印(NSLog)。也不多废话了,我们先来回顾一下Xcode8发布以来,我们遇到的一些关于打印的问题,当然也有解决方法:
1、Xcode8打印问题
先看下面这个图片,相信使用Xcode升级到Xcode8的都不陌生吧。

当时的感觉就是莫名其妙,这里打印出来的一大堆日志,然而对于我们开发并没有多大用处,个人感觉是apple测试Xcode时查看的打印信息,发布时忘记删掉的原因(谨代表个人想法,若有错误,望指出)。当然,网上也给出了解决方法:
很简单

在EditScheme -> Run -> Arguments
在Environment Variables一栏中添加OS_ACTIVITY_MODE并设值为Disable,注意打勾。然后clean一下。运行项目即可解决。
2、Xcode8+iOS10 真机测试。
上面说了,我们为了屏蔽掉那堆没多大用处的log。添加了OS_ACTIVITY_MODE并设值为Disable。这也是前提,现在问题出现了:我使用iOS10真机测试时发现宏定义的NSLog打印在控制台不显示现象。当时首先想到的也是:添加了OS_ACTIVITY_MODE并设值为Disable的问题。如果不想看到那堆没多大用处的log,又想显示打印信息,怎么办?网上有一些给出的方法,也能很好的解决问题,但前提是你使用的宏定义大体是这样的:
#ifdef DEBUG
#define NSLog(...) NSLog(@"\n%s方法,\n第%d行,打印内容:\n%@\n打印结束\n", __PRETTY_FUNCTION__, __LINE__, [NSString stringWithFormat:__VA_ARGS__])
#else
#define NSLog(...)
#endif
那么你可以这样解决问题,方法如下:
#ifdef DEBUG
#define NSLog(format, ...) printf("[%s] %s [第%d行] %s\n", __TIME__, __FUNCTION__, __LINE__, [[NSString stringWithFormat:format, ## __VA_ARGS__] UTF8String]);
#else
#define NSLog(format, ...)
#endif
解释:这是因为在完成OS_ACTIVITY_MODE设置后会发现真机调试时NSLog不输出了。所以需要定义成另一个函数来输出,例如printf()。
可以看下这篇文章:Xcode8模拟器警告与iOS10真机调试NSLog无效
3、Xcode8.1 +iOS10以上系统,真机测试和模拟器测试,打印均不显示问题
<1>真机测试
如果只是真机测试打印显示无效的话,可以直接按照上面第二个方法去解决,也是能解决问题的,究其原因:还是添加了OS_ACTIVITY_MODE并设值为Disable的问题。
<2>模拟器测试
如果在改过真机测试打印显示无效的问题后,模拟器测试打印还是无效的话,现在的解决方法就直接了:删除OS_ACTIVITY_MODE并设值为Disable这个设置。
为此也做过很多尝试,感觉最直接的方法还是直接去掉OS_ACTIVITY_MODE并设值为Disable这个设置,是最好的解决方法。Xcode8.1也解决了“打印一堆没多大用处的log”的问题,所以去掉一开始添加OS_ACTIVITY_MODE并设值为Disable 的想法吧。不过这还是只针对Xcode8以上(当然不包括Xcode8)。
这篇文章也很不错:iOS开发-NSLog不打印设置
关于Xcode8.1 / iOS10+ 真机测试系统打印或者宏定义打印不显示问题的更多相关文章
- iOS:Xcode8以下真机测试iOS10.0和iOS10.1配置包
一.介绍 xcode的升级都已经到8系列了,可是还是有很多开发者使用的xcode还是7系列,然而xcode7...最多支持9.3,无法给升级到10.0和10.1的iPhone手机用户进行真机测试.此时 ...
- 关于iOS10 Xcode8真机测试项目出现的问题 "code signing is required for product type 'xxxxx' in SDK 'iOS 10.0"..
昨天用真机测试项目出现这样的错误,在网上搜集了一些信息,所以将自己的经验分享出来帮助更多的人. 第一步: 检查你的1和2是否填写正确,如果你是运行别人的项目,BundleIdentifier要和你的X ...
- Xcode8适配iOS10.1真机测试
将10.1测试包相关文件存放到指定位置,如图步骤提示: 解压文件:
- 解决Xcode 9.2系统真机测试时出现 could not find developer disk image问题
解决Xcode在ipad/iphone 9.2 系统真机测试时出现could not find developer disk image问题 第一种方法:拷贝这个文件(http://download. ...
- 让Xcode8.0支持iOS11.2设备真机测试
最新支持11.2 (15C5097c)! 11.1 全版本! Xcode只可以支持iPhone手机对应iOS系统以下的真机测试.一般想要支持最新的iPhone手机系统,有两个方法. 第一.就需要更新X ...
- 让Xcode支持高版本系统设备真机测试
最新支持11.2 (15C107) Xcode只可以支持iPhone手机对应iOS系统以下的真机测试.一般想要支持最新的iPhone手机系统,有两个方法. 第一.就需要更新Xcode,这一个方法有一个 ...
- 解决Xcode真机测试时ineligible devices的问题
升级了Xcode到6.3,连接真机测试时,出现不能选择设备.如图: 设备系统版本是8.3的,Xcode连接其他低系统版本的设备做真机测试时就不会有这个问题. 有人说这是Xcode6.3的bug. 我的 ...
- iOS—Xcode 7真机测试
Xcode 7真机测试详解 1.准备 注意:一定要让你的真机设备的系统版本和app的系统版本想对应,如果不对应就会出现一个很常见的问题:could not find developer disk im ...
- Xcode真机测试could not find developer disk image解决方法
原文地址:http://my.oschina.net/u/2340880/blog/521700 Xcode真机测试could not find developer disk image解决方法 在使 ...
随机推荐
- css3 input边框蓝光特效
1.style样式 <style type="text/css"> .demok3_input { transition: all 0.30s ease-in-out; ...
- CSS书写顺序
CSS书写顺序 1.位置属性(position, top, right, z-index, display, float等)2.大小(width, height, margin, padding)3. ...
- C#中的多态性
1.重载(overload) public void Sleep() { Console.WriteLine("Animal睡觉"); } public int Sleep(int ...
- ArcGIS Server开发教程系列(2)配置ARCMAP和ARCCatalog发布服务
1. Arc catalog的配置 打开catalog,如图新增刚刚创建的server 1. Use GIS services: 用户身份连接 使用此种连接,可以浏览.使用站点内发布的所有 ...
- Spring系列之Spring常用注解总结
传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点:1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文件 ...
- java ssh 框架下 利用junit4 spring-test进行单元测试
ssh框架下 由于bean实列 都交给spring 管理,要做单元测试就比较苦难,junit4 引入注解方便很多: 1. 加入依赖包 使用Spring的测试框架需要加入以下依赖包: JUnit 4 ...
- IoC/DI基本思想的演变
---------------------------------------------------------------------------------- (1)IoC/DI的概念 IoC ...
- Linux下提示 bash: xxx command not found
今天在虚拟机上安装了CentOS5.5,发现运行一些很正常的诸如:init,shutdown,fdisk 等命令时,悍然提示: bash: xxx command not found. 那么,首先就要 ...
- Android 光线传感器的调用
1.activity如果要使用传感器,就必须实现SensorEventListener接口 2.得到传感器管理对象(sensormanager) 3.使用sensormanager.registerl ...
- python set
set是一个工厂函数(filter也是工厂函数),是一个可变的集合 frozenset 不可变的集合,与set共性,他也在内部自动去重, >>> num5=frozenset([1, ...