美文网首页iOS Question Book
URL 和 通知 方式下打开APP的调试方法

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

作者: 夕W | 来源:发表于2018-08-18 16:11 被阅读0次

    开发过程中通过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的调试方法

        本文链接:https://www.haomeiwen.com/subject/jzsfiftx.html