URL 和 通知 方式下打开APP的调试方法

开发过程中通过command +R的启动的APP,我们都可以用打断点的方法调试,但是有时候我们运行app的方式并非command+R的方式的。

这样的情景大致可以分为

1)通过点击通知打开APP (包括远程通知和本地通知)

2)通过URL 打开APP (配置URL scheme ,  从外部打开APP)

如果接受到上面情景打开使用app的时候,备注:(如果你的APP 未完全退出,处于后台挂起状态,那么你在Xcode中的断点也会触发,从而进行调试)。

但是如果你的app已经完全退出,这时候你的Xcode和APP看似已经完全失去链接。这时候你通过以上两种方式打开APP你的XCode左上角的方标是灰色的,


在Xcode中的断点也就没了响应。

这种情况下的调试我们应该如何进行,别着急Xcode早就为我们想好了,而且步骤也非常简单。

你还是如往常一样把测试机和Xcode链接起来,然后找到Xcode功能栏,Product->Scheme->Edit Scheme ,在出来的页面中选中Run选项,将 Launch 默认的 Automatically 换成Wait for executable to be launched (也就是将Run的 Launch模式 从自动变成 等待开始可执行方式 ) 。


这时候你再运行程序,你会发现程序并没有启动,而是处于一个等待启动的状态,(这就是我们刚刚设置的那个Launch状态)。


你再以上面的两种方式打开的时候,你就会发现你设置在 didFinishLaunchingWithOptions 里的断点被触发了,这时候你就可以按照自己的需求调试代码了~ bingo!

通常情况下,点击程序启动(command+R)启动程序,在didFinishLaunchingWithOptions的launchOptions是nil,其他方式打开的时候launchOptions是有值的。不为空时,要根据相应的key是否存在来判断是通过哪种方式启动的。

系统里给launchOptions的一些key 值 我就不全部粘贴了,有兴趣的可以自己去UIApplication的声明文件里自己去看,这里就简单说下常用的判断方法.

/用户自己点击启动

if(!launchOptions) {

NSLog(@"用户点击app启动");

} else {

NSURL *url = [launchOptions objectForKey:UIApplicationLaunchOptionsURLKey]; //app 通过urlscheme启动

if (url) {

NSLog(@"app 通过urlscheme启动 url = %@",url);

}

UILocalNotification *localNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsLocalNotificationKey];

//通过本地通知启动

if(localNotification) {

NSLog(@"app 通过本地通知启动 localNotification = %@",localNotification);

}

NSDictionary *remoteCotificationDic = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

//远程通知启动

if(remoteCotificationDic) {

NSLog(@"app 通过远程推送通知启动 remoteCotificationDic = %@",remoteCotificationDic);

}

}


好的,就说这么多~

解决我的问题,也希望可以解决你的问题并给我一个大大的喜欢,如有不对,欢迎指正...

end!

你可能感兴趣的:(URL 和 通知 方式下打开APP的调试方法)