專利名稱:Ios平臺上捕獲系統消息的方法和裝置的制作方法
技術領域:
本發明涉及通信領域,具體而言,涉及一種ios平臺上捕獲系統消息的方法和裝置。
背景技術:
隨著通信技術的發展,IOS系統越來越被人熟知,在IOS系統中,系統消息可以簡單理解為方法調用,指的是由IOS操作系統或app (application,第三方應用程序)發起的對操作系統公開的api (Application Programming Interface,應用程序編程接口)方法調用。例如當對象被創建時,iOS操作系統會調用NSObject的init方法,就稱這次調用為一次系統消息。在IOS系統中,捕獲消息對于app行為監測很重要,要準確檢測app的行為,需要對于一些關鍵系統消息進行捕獲,并記錄下來。·現有的技術中,捕獲系統消息的一般方法是繼承目標方法所在的類,重寫目標方法,在目標方法中記錄下方法調用信息或插入自定義代碼,然后在調用父類的方法實現。這樣既保留了父類方法的邏輯,又加入了自定義邏輯。例如要監測某對象“創建”的消息,就需要繼承此對象,然后重寫“創建”方法,記錄下創建消息。這種方法工作量大,容易遺漏,例如,要捕獲所有視圖對象的創建消息,并記錄下視圖是何時被創建的,就需要在每一個視圖實現類中重新創建方法,而一個app中往往存在很多視圖類,這就需要加入大量重復的邏輯,工作量大還容易出錯。另一種方法是讓這些視圖類都繼承自同一個父類,在父類中加入重新創建方法,由于IOS的編程語目ObjectiveC是單繼承的,如果僅僅是為了記錄視圖創建時間就占用了繼承的位置,很不值得,其他更重要的功能往往也需要繼承,就發生了沖突。針對相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,目前尚未提出有效的解決方案。
發明內容
本發明提供了一種IOS平臺上捕獲系統消息的方法和裝置,以解決相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,目前尚未提出有效的解決方案。根據本發明的一個方面,提供了一種IOS平臺上捕獲系統消息的方法,該方法包括獲取當前所需執行的api的指針指向的方法體,其中,指針指向的方法體包括如下邏輯調用api自身和記錄當前所需執行的api的發生狀態;執行獲取到的當前所需執行的api的指針指向的方法體。進一步地,在獲取當前所需執行的api的指針指向的方法體之前,方法包括為api所在的類創建分類;在創建的分類中創建自定義方法,其中,自定義方法包含如下邏輯遞歸調用自身和記錄系統消息發生狀態;將自定義方法的方法體和api中的方法體進行交換。
進一步地,在為api所在的類創建分類之前,方法還包括確定api的名稱和該api所在的類。進一步地,確定api的名稱和該api所在的類的步驟包括在IOS系統的api文檔中查找到api所對應的信息;根據查找到的api所對應的信息確定api的名稱和該api所在的類。進一步地,將自定義方法的方法體和api的方法體進行交換包括確定用于指向自定義方法的方法體的第一指針;確定用于指向api的方法體的第二指針;將確定的第一指針和確定的第二指針交換。根據本發明的另一方面,提供了一種IOS平臺上捕獲系統消息的,該裝置包括獲取單元,用于獲取當前所需執行的api的指針指向的方法體,其中,指針指向的方法體包括如下邏輯調用api自身和記錄當前所需執行的api的發生狀態;執行單元,用于執行獲取單元獲取到的當前所需執行的api的指針指向的方法體。進一步地,該裝置還包括第一創建單元,用于在獲取當前所需執行的api的指針指向的方法體之前,為api所在的類創建分類;第二創建單元,用于在獲取當前所需執行的api的指針指向的方法體之前,在第一創建單元創建的分類中創建自定義方法,其中,自定義方法包含如下邏輯遞歸調用自身和記錄系統消息發生狀態;交換單元,用于在獲取當前所需執行的api的指針指向的方法體之前,將自定義方法的方法體和api中的方法體進行交換,其中,業務邏輯為api所對應的業務邏輯。進一步地,該裝置還包括確定單元,用于在為api所在的類創建分類之前,確定所需監控的api的名稱和api所在的類。進一步地,確定單元包括查找模塊,用于在IOS系統的api文檔中查找到api所對應的信息;第一確定模塊,用于根據查找模塊查找到的api所對應的信息確定api的名稱·和該api所在的類。進一步地,交換單元包括第二確定模塊,用于確定指向自定義方法的方法體的第一指針;第三確定模塊,用于確定指向api的方法體的第二指針;交換模塊,用于將確定的第一指針和確定的第二指針交換。通過本發明,將所需監控的系統方法api的指針設置為指向自定義的方法,其中,自定義的方法包含有如下邏輯調用該api自身的邏輯和記錄該api的發生狀態,當系統方法api被調用時,由于該api的指針指向自定義的方法,則執行自定義的方法中的邏輯,調用該api自身的邏輯并記錄該api的發生狀態,執行系統方法的同時,實現系統消息的捕獲,這種捕獲系統消息的方法無需重寫目標方法,解決了相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,減小捕獲系統消息的工作量,進一步地,提高了準確性。
此處所說明的附圖用來提供對本發明的進一步理解,構成本申請的一部分,本發明的示意性實施例及其說明用于解釋本發明,并不構成對本發明的不當限定。在附圖中圖I是根據本發明實施例的IOS平臺上捕獲系統消息的方法的一種優選的流程圖2是根據本發明實施例的IOS平臺上捕獲系統消息的裝置的一種優選的結構框圖;圖3是根據本發明實施例的IOS平臺上捕獲系統消息的裝置的另一種優選的結構框圖;圖4是根據本發明實施例的IOS平臺上捕獲系統消息的裝置的又一種優選的結構框圖;以及圖5是根據本發明實施例的IOS平臺上捕獲系統消息的裝置的又一種優選的結構框圖。
具體實施例方式下文中將參考附圖并結合實施例來詳細說明本發明。需要說明的是,在不沖突的 情況下,本申請中的實施例及實施例中的特征可以相互組合。實施例I在本優選的實施例中提供了一種在IOS平臺上捕獲系統消息的方法,圖I示出該方法的一種優選的流程圖,如圖I所示,該方法包括如下步驟S102,獲取當前所需執行的api的指針指向的方法體,其中,指針指向的方法體包括如下邏輯調用api自身和記錄當前所需執行的api的發生狀態;具體地,在執行該api之前,將所需監控的系統消息api指針指向上述自定義的方法。S104,執行獲取到的當前所需執行的api的指針指向的方法體。具體來說,當上述api方法被調用時,由于該api的指針指向自定義的方法,則執行自定義的方法,即調用該api自身的邏輯,并記錄該api已發生。在上述優選的實施方式中,將所需監控的系統方法api的指針設置為指向自定義的方法,其中,自定義的方法包含有如下邏輯調用該api自身的邏輯和記錄該api的發生狀態,當系統方法api被調用時,由于該api的指針指向自定義的方法,則執行自定義的方法中的邏輯,調用該api自身的邏輯并記錄該api的發生狀態,執行系統方法的同時,實現系統消息的捕獲,這種捕獲系統消息的方法無需重寫目標方法,解決了相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,減小捕獲系統消息的工作量,進一步地,提高了準確性。在本發明的一個實施方式中,還對上述方法進行了優化,具體地,在獲取當前所需執行的api的指針指向的方法體之前,該方法還包括為api所在的類創建分類;在創建的分類中創建自定義方法,其中,自定義方法包含如下邏輯遞歸調用自身和記錄系統消息發生狀態;將自定義方法的方法體和api中的方法體進行交換。上述優選的技術方案的實施,通過交換自定義方法的方法體和api中的方法體,實現在系統方法api被調用時,調用api自身并記錄api的發生狀態,進一步地,完成系統消息的捕獲。本發明還提供了一種將自定義方法的方法體和api的方法體進行交換的優選的方案,具體來說,該方案包括如下步驟確定用于指向自定義方法的方法體的第一指針;確定用于指向api的方法體的第二指針;將確定的第一指針和確定的第二指針交換。上述優選的方案的實施,將指向自定義方法的指針和系統api的指針進行交換,即可實現將自定義方法的方法體和api的方法體進行交換,進一步地,當系統方法api被調用時,實現調用該api自身的邏輯并記錄該api的發生狀態,完成捕獲系統消息。優選的,在為api所在的類創建分類之前,該方法還包括確定api的名稱和該api所在的類。本發明還提供了一種確定api的名稱和該api所在的類的方案,具體來說,在IOS系統的api文檔中查找到api所對應的信息,根據查找到的api所對應的信息確定api的名稱和該api所在的類。上述優選的技術方案的實施,在IOS系統的api文檔中查找即可獲得相關的api信息,操作簡單,且準確率高。下面結合具體示例對上述方法進行進一步說明在進行系統消息捕獲前,需進行如下準備工作確定所需監測的api和該api所在的類,優選的,可以通過查閱IOS官方api文檔獲得這些信息,例如,確定所需監測的api的名稱為sysMethod,該api所在的類為SomeClass ;然后為確定的SomeClass創建分類, 假設創建的分類為MyMonitor,并在MyMonitor中創建方法,倉Il建的方法名稱為MyMonitor_sysMethod,該方法包含兩部分邏輯第一部分邏輯為遞歸調用自身,第二部分邏輯為記錄下系統消息sysMethod發生了 ;將sysMethod的方法體和MyMonitor_sysMethod的方法體進行交換,優選的,通過交換用于指向sysMethod的指針和用于指向MyMonitor_sysMethod的指針實現sysMethod的方法體和MyMonitor_sysMethod的方法體的交換。這樣,當系統方法sysMethod被調用時,由于此時sysMethod的指針指向MyMonitor_sysMethod,因此 MyMonitor_sysMethod 會被執行,執行 MyMonitor_sysMethod的第一部分邏輯時,會調用MyMonitor_sysMethod自身,由于此時MyMonitor_sysMethod的指針指向sysMethod,因此會執行sysMethod的內容,這就保證了原系統方法的執行體一定會被執行,之后執行MyMonitor_sysMethod的第二部分邏輯,此時會記錄下系統方法被調用了。實施例2在上述實施例I的基礎上,本實施例提供了一種在IOS平臺上捕獲系統消息的裝置,圖2示出上述裝置的一種優選的結構框圖,如圖2所示,該裝置包括獲取單元202,用于獲取當前所需執行的api的指針指向的方法體,其中,指針指向的方法體包括如下邏輯調用api自身和記錄當前所需執行的api的發生狀態;執行單元204,與獲取單元202連接,用于執行獲取單元獲取到的當前所需執行的api的指針指向的方法體。在上述優選的實施方式中,將所需監控的系統方法api的指針設置為指向自定義的方法,其中,自定義的方法包含有如下邏輯調用該api自身的邏輯和記錄該api的發生狀態,當系統方法api被調用時,由于該api的指針指向自定義的方法,則執行自定義的方法中的邏輯,調用該api自身的邏輯并記錄該api的發生狀態,執行系統方法的同時,實現系統消息的捕獲,這種捕獲系統消息的方法無需重寫目標方法,解決了相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,減小捕獲系統消息的工作量,進一步地,提高了準確性。本發明還對上述方案進行了優化,具體來說,如圖3所示,該裝置還包括第一創建單元302,用于在獲取當前所需執行的api的指針指向的方法體之前,為api所在的類創建分類;第二創建單元304,與第一創建單元302連接,用于在獲取當前所需執行的api的指針指向的方法體之前,在第一創建單元創建的分類中創建自定義方法,其中,自定義方法包含如下邏輯遞歸調用自身和記錄系統消息發生狀態;交換單元306,與第二創建單元304和獲取單元202連接,用于在獲取當前所需執行的api的指針指向的方法體之前,將自定義方法的方法體和api中的方法體進行交換,其中,業務邏輯為api所對應的業務邏輯。上述優選的技術方案的實施,通過交換自定義方法的方法體和api中的方法體,實現在系統方法api被調用時,調用api自身并記錄api的發生狀態,進一步地,完成系統消息的捕獲。優選的,如圖4所示,該裝置還包括確定單元402,與第一創建單元302連接,用于在為api所在的類創建分類之前,確定所需監控的api的名稱和api所在的類,其中,確定單元402包括查找模塊4021,用于在IOS系統的api文檔中查找到api所對應的信息;第一確定模塊4022,與查找模塊4021連接,用于根據查找模塊查找到的api所對應的信息確定api的名稱和該api所在的類。 本發明還對上述交換單元206進行了優化,具體地,如圖5所示,交換單元306包括第二確定模塊502,用于確定指向自定義方法的方法體的第一指針;第三確定模塊504,用于確定指向api的方法體的第二指針;交換模塊506,分別與第二確定模塊502和第三確定模塊504連接,用于將確定的第一指針和確定的第二指針交換。上述優選的方案的實施,將指向自定義方法的指針和系統api的指針進行交換,即可實現將自定義方法的方法體和api的方法體進行交換,進一步地,當系統方法api被調用時,實現調用該api自身的邏輯并記錄該api的發生狀態,完成捕獲系統消息。下面結合具體示例對上述裝置的使用方法進行進一步說明在進行系統消息捕獲前,需進行如下準備工作確定所需監測的api和該api所在的類,優選的,可以通過查閱IOS官方api文檔獲得這些信息,例如,確定所需監測的api的名稱為sysMethod,該api所在的類為SomeClass ;然后為確定的SomeClass創建分類,假設創建的分類為MyMonitor,在MyMonitor中創建方法,倉Il建的方法名稱為MyMonitor_sysMethod,該方法包含兩部分邏輯第一部分邏輯為遞歸調用自身,第二部分邏輯為記錄下系統消息sysMethod發生了 ;將sysMethod的方法體和MyMonitor_sysMethod的方法體進行交換,優選的,通過交換用于指向sysMethod的指針和用于指向MyMonitor_sysMethod的指針實現sysMethod的方法體和MyMonitor_sysMethod的方法體的交換。這樣,當系統方法sysMethod被調用時,由于此時sysMethod的指針指向MyMonitor_sysMethod,因此 MyMonitor_sysMethod 會被執行,執行 MyMonitor_sysMethod的第一部分邏輯時,會調用MyMonitor_sysMethod自身,由于此時MyMonitor_sysMethod的指針指向sysMethod,因此會執行sysMethod的內容,這就保證了原系統方法的執行體一定會被執行,之后執行MyMonitor_sysMethod的第二部分邏輯,此時會記錄下系統方法被調用了。從以上的描述中,可以看出,本發明的實施例將所需監控的系統方法api的指針設置為指向自定義的方法,其中,自定義的方法包含有如下邏輯調用該api自身的邏輯和記錄該api的發生狀態,當系統方法api被調用時,由于該api的指針指向自定義的方法,則執行自定義的方法中的邏輯,調用該api自身的邏輯并記錄該api的發生狀態,執行系統方法的同時,實現系統消息的捕獲,這種捕獲系統消息的方法無需重寫目標方法,解決了相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,減小捕獲系統消息的工作量,進一步地,提高了準確性。顯然,本領域的技術人員應該明白,上述的本發明的各模塊或各步驟可以用通用的計算裝置來實現,它們可以集中在單個的計算裝置上,或者分布在多個計算裝置所組成的網絡上,可選地,它們可以用計算裝置可執行的程序代碼來實現,從而,可以將它們存儲在存儲裝置中由計算裝置來執行,并且在某些情況下,可以以不同于此處的順序執行所示出或描述的步驟,或者將它們分別制作成各個集成電路模塊,或者將它們中的多個模塊或步驟制作成單個集成電路模塊來實現。這樣,本發明不限制于任何特定的硬件和軟件結合。
以上所述僅為本發明的優選實施例而已,并不用于限制本發明,對于本領域的技術人員來說,本發明可以有各種更改和變化。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。
權利要求
1.一種IOS平臺上捕獲系統消息的方法,其特征在于,包括 獲取當前所需執行的api的指針指向的方法體,其中,所述指針指向的方法體包括如下邏輯調用所述api自身和記錄當前所需執行的api的發生狀態; 執行獲取到的所述當前所需執行的api的指針指向的方法體。
2.根據權利要求I所述的方法,其特征在于,在獲取當前所需執行的api的指針指向的方法體之前,所述方法包括 為所述api所在的類創建分類; 在創建的所述分類中創建自定義方法,其中,所述自定義方法包含如下邏輯遞歸調用自身和記錄系統消息發生狀態; 將所述自定義方法的方法體和所述api中的方法體進行交換。
3.根據權利要求2所述的方法,其特征在于,在為所述api所在的類創建分類之前,所述方法還包括確定所述api的名稱和該api所在的類。
4.根據權利要求3所述的方法,其特征在于,確定所述api的名稱和該api所在的類的步驟包括 在IOS系統的api文檔中查找到所述api所對應的信息; 根據查找到的所述api所對應的信息確定所述api的名稱和該api所在的類。
5.根據權利要求2至4中任一項所述的方法,其特征在于,將所述自定義方法的方法體和所述api的方法體進行交換包括 確定用于指向所述自定義方法的方法體的第一指針; 確定用于指向所述api的方法體的第二指針; 將確定的所述第一指針和確定的所述第二指針交換。
6.一種IOS平臺上捕獲系統消息的裝置,其特征在于,包括 獲取單元,用于獲取當前所需執行的api的指針指向的方法體,其中,所述指針指向的方法體包括如下邏輯調用所述api自身和記錄當前所需執行的api的發生狀態; 執行單元,用于執行所述獲取單元獲取到的所述當前所需執行的api的指針指向的方法體。
7.根據權利要求6所述的裝置,其特征在于,還包括 第一創建單元,用于在獲取當前所需執行的api的指針指向的方法體之前,為所述api所在的類創建分類; 第二創建單元,用于在獲取當前所需執行的api的指針指向的方法體之前,在所述第一創建單元創建的所述分類中創建自定義方法,其中,所述自定義方法包含如下邏輯遞歸調用自身和記錄系統消息發生狀態; 交換單元,用于在獲取當前所需執行的api的指針指向的方法體之前,將所述自定義方法的方法體和api中的方法體進行交換,其中,所述業務邏輯為所述api所對應的業務邏輯。
8.根據權利要求7所述的裝置,其特征在于,還包括確定單元,用于在為所述api所在的類創建分類之前,確定所需監控的api的名稱和所述api所在的類。
9.根據權利要求8所述的裝置,其特征在于,所述確定單元包括 查找模塊,用于在IOS系統的api文檔中查找到所述api所對應的信息;第一確定模塊,用于根據所述查找模塊查找到的所述api所對應的信息確定所述api的名稱和該api所在的類。
10.根據權利要求7至9中任一項所述的裝置,其特征在于,所述交換單元包括 第二確定模塊,用于確定指向所述自定義方法的方法體的第一指針; 第三確定模塊,用于確定指向所述api的方法體的第二指針; 交換模塊,用于將確定的所述第一指針和確定的所述第二指針交換。
全文摘要
本發明公開了一種IOS平臺上捕獲系統消息的方法和裝置,其中,該方法包括獲取當前所需執行的api的指針指向的方法體,其中,指針指向的方法體包括如下邏輯調用api自身和記錄當前所需執行的api的發生狀態;執行獲取到的當前所需執行的api的指針指向的方法體。本發明解決了相關技術中IOS平臺捕獲系統消息時因加入大量代碼而導致的工作量大、容易出錯的問題,減小捕獲系統消息的工作量,進一步地,提高了準確性。
文檔編號G06F9/44GK102902541SQ20121036601
公開日2013年1月30日 申請日期2012年9月27日 優先權日2012年9月27日
發明者王海 申請人:北京國雙科技有限公司