相信很多同学都为调试苹果的通知烦恼过,特别是通过通知启动app这个功能,简直让人欲哭无泪!!!
然而我们都遇到的问题,苹果怎么可能没有想到,原来早就有了官方的解决办法,只是我们不知道而已。。。
这次又是从stackOverFlow上找到了答案,必须记录一下!!!
 
iOS10以后,通知框架被完全重构了,可以参考喵神的博客:https://onevcat.com/2016/08/notification/
这里因为要兼容iOS8,所以先说说iOS10之前的处理方法
 
UILocalNotification和APNS怎么发就不说了,首先先说一下苹果的通知响应;
只要用户开启了通知权限,那么app就可以收到通知,收到的场景分两种:
一种是app还没有启动,那这时候系统会根据通知的权限设置有弹窗,声音,标记等出现,这时候点击弹窗,app就会启动,
并且启动的时候,在方法- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions里的launchOptions字典中,就会包含通知的内容,可以通过UIApplicationLaunchOptionsLocalNotificationKey或者UIApplicationLaunchOptionsRemoteNotificationKey来获取其中的内容;
其中,通过UIApplicationLaunchOptionsLocalNotificationKey取到的是一个UILocalNotification,
而通过UIApplicationLaunchOptionsRemoteNotificationKey取到的是remoteNotification的userInfo;
需要在这里进行处理
注意,这时候app还没有启动完成,所以跳转页面什么的是做不了的,倒是可以根据这个来设置rootViewController;或者在这里设置一个标记,在rootViewController didAppear之后执行
注意,这个场景iOS10也是一样的,获取到的数据类型也一样!
 
另一种是app已经启动,这时候又要区分app是否在前台
如果在前台,那系统会直接调用
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
或者
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo;
两个方法
如果不在前台,那系统还是会根据权限设置出现弹窗,声音,标记等,这时候点击标记,才会调用上面的这两个方法
注意:这个场景iOS10以后又了新的方法,处理方法跟这两个不一样,请参考喵神博客!
 
 
好,切入正题
我们在调试的时候,肯定是连着手机断点调试最方便,但是对于通过通知启动的这种场景,怎么调试???
有问到过可以通过xcode的device查看手机log来看,但这种也没有直接断点来的方便呐!
问题就是:可以在启动之前就直接断点吗???
答案是:可以!!!
这个东西既然是苹果设计的,苹果当然就想到了这个问题,也给出了解决方案:
在xcode的工具条上选择 product—Scheme—edit scheme 到编辑scheme界面
左侧选择选择Run,右侧选择info,然后在下面的launch选项上选择:Wait for executable to be launched ;如图
然后close,跟原来一样run 就可以了
这时候你会发现,app并没有启动,而是“卡”在了那里,
如果你在didLaunch方法里打个断点,然后点击通知启动app,就能直接断点到didLaunch方法里了~~然后想怎么调试都随你了~~
大功告成~~

iOS调试通过UILocalNotification或RemoteNotification启动的app的更多相关文章

  1. IOS 本地通知 UILocalNotification

    IOS 本地通知 UILocalNotification [本文章第四部分中的代码逻辑来自网上的借鉴,并非我自己原创] 大概一个月前,我开始跟着做IOS项目了.学习C++,了解Objective-C, ...

  2. iOS调试

    iOS高效调试 写代码难免出现bug.储备些调试技能绝对能够提高你的工作效率,让bug无所遁形.下面就和大家分享一些我在工作中常用的iOS调试小技能. 1. 打印 最简单,基础的调试方法就是打印日志了 ...

  3. iOS 9 failed for URL: "XXX://@" - error: "This app is not allowed to query for scheme XXX" iOS 从APP里启动另一APP

    iOS 从C APP里启动 D APP 首先在D APP里设置 URL Schemes 在info.plist 文件里添加URL Schemes URL Types -->item0 --> ...

  4. Xamarin.iOS调试提示需要iOS SDK

    Xamarin.iOS调试提示需要iOS SDK   错误信息:The version of Xamarin.iOS requires th iOS 9.3 SDK (shipped with Xco ...

  5. iOS 调试心得

    修复 bug 占用我们日常开发的大部分时间,熟练的使用调试工具可以给我们节约大部分的时间. LLDB 的常用命令 expression expresion 是一个非常常用的命令,我们可以通过这个命令来 ...

  6. iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT

    原文地址:iOS 调试 crash breakpoint EXC_BAD_ACCESS SIGABRT作者:流年若离殇 在调试程序的时候,总是碰到crash的bug,而且一追踪就是一些汇编的代码,让人 ...

  7. 提高Android和iOS调试编译速度

    http://www.cnblogs.com/findumars/p/7841252.html 提高Android和iOS调试编译速度   如果您使用Delphi开发App,就会遇到:Android和 ...

  8. uniapp - 关于ios调试

    [ios调试] 1.一台windows电脑.一根apple数据线(一旦连接以后,apple设备就会自动识别itunes软件,如果没有安装会提示) 2.安装itunes (爱思助手) 3.官方教程:ht ...

  9. Windows服务调试状态下用Console启动

    最近一直在用服务,发现服务也没有那么难调试. Windows服务调试状态下用Console启动:步骤分两步 第一步改Program,启动代码 static class Program { /// &l ...

随机推荐

  1. 浅谈浏览器http的缓存机制

    针对浏览器的http缓存的分析也算是老生常谈了,每隔一段时间就会冒出一篇不错的文章,其原理也是各大公司面试时几乎必考的问题. 之所以还写一篇这样的文章,是因为近期都在搞新技术,想“回归”下基础,也希望 ...

  2. 【腾讯Bugly干货分享】动态链接库加载原理及HotFix方案介绍

    本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57bec216d81f2415515d3e9c 作者:陈昱全 引言 随着项目中动 ...

  3. 简述 OAuth 2.0 的运作流程

    本文将以用户使用 github 登录网站留言为例,简述 OAuth 2.0 的运作流程. 假如我有一个网站,你是我网站上的访客,看了文章想留言表示「朕已阅」,留言时发现有这个网站的帐号才能够留言,此时 ...

  4. Entity Framework 6 Recipes 2nd Edition(11-4)译 -> 在”模型定义”函数里调用另一个”模型定义”函数

    11-4.在”模型定义”函数里调用另一个”模型定义”函数 问题 想要用一个”模型定义”函数去实现另一个”模型定义”函数 解决方案 假设我们已有一个公司合伙人关系连同它们的结构模型,如Figure 11 ...

  5. Atitit 智能云网络摄像机的前世今生与历史 优点  密码默认888888

    Atitit 智能云网络摄像机的前世今生与历史 优点  密码默认888888 用户名admin  密码aaaaaa 网络摄像机是一种结合传统摄像机与网络技术所产生的新一代摄像机,它可以将影像通过网络传 ...

  6. Git : SSH 协议服务器

    SSH 协议用于为 Git 提供远程读写操作,是远程写操作的标准服务. SSH协议语法格式 对于拥有 shell 登录权限的用户账号,可以用下面的语法访问 Git 版本库: 语法 1 : ssh:// ...

  7. 字符串转化为Json格式的数据--(记录四)

    var pName = $(".productName").html(); var pPrice = $(".productPrice").html(); // ...

  8. C# XML转JSON,不引用第三方JSON.NET类库

    应用场景:需要调用第三方接口(返回XML)数据,然后供自己多个系统使用(涉及跨域,使用JSONP) 代理:调用接口(把XML转换为JSONP解决跨域问题) B/S应用系统:调用代理返回的数据进行UI显 ...

  9. php内核分析(一)-sapi_module_struct

    这里阅读的php版本为PHP-7.1.0 RC3,阅读代码的平台为linux 首先是寻找php的入口,php有很多种模式,apache,php-fpm, cli模式,我要入手的话,只能先从最简单的cl ...

  10. 【趣味分享】C#实现回味童年的24点算法游戏

    一.24点游戏玩法规则效果展示 1.初始化界面 2.开始游戏界面 3.游戏超时界面 4.查看答案界面 5.答对界面 6.答错界面 7.计算表达式的验证界面 8.一副牌算完开始新一副牌界面 到这里24点 ...