iOS調試經過UILocalNotification或RemoteNotification啓動的app

相信不少同窗都爲調試蘋果的通知煩惱過,特別是經過通知啓動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方法裏了~~而後想怎麼調試都隨你了~~
大功告成~~
相關文章
相關標籤/搜索