2013-08-05 99 views
1

我正在編寫一個jail break調整。我喜歡所有應用程序,包括基於應用程序商店的應用程序。我需要編寫一個文件來捕獲一些數據。基於這個answer,最好的方法是讓所有應用程序向SpringBoard發送通知,並讓SpringBoard將文件寫入/ var/mobile/application。但我無法編譯CFNotificationCenterAddObserver。它給出錯誤「沒有匹配函數調用....」。以下是代碼片段。哦,是的,我已經包含了「CoreFoundation.h」和「CFNotificationCenter.h」(不那麼愚蠢:-)CFNotificationCenterAddObserver沒有調用錯誤的匹配函數

想法下面的代碼是收聽來自SpringBoard通知和發佈通知從所有其他應用程序。

有沒有人知道如何解決這個錯誤。我看到一些github上樣品%男星,但儘管我已經包括的CoreFoundation框架無法消化它?

void LogEvent(CFNotificationCenterRef center, 
       void *observer, 
       CFStringRef name, 
       const void *object, 
       CFDictionaryRef userInfo) 
{ 
    NSLog(@"RecordEvent"); 
} 
%hook UIApplication 
-(void)applicationDidFinishLaunching:(UIApplication*) application 
{ 
    if( [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.springboard"] ) 
    { 

     CFNotificationCenterAddObserver(
      CFNotificationCenterGetDistributedNotifyCenter(), 
      NULL, 
      &LogEvent, 
      @"RecordTouch", 
      NULL, 
      CFNotificationSuspensionBehaviorDeliverImmediately); 
    } 

    %orig; 
} 
%end 

回答

3
CFNotificationCenterAddObserver(
      CFNotificationCenterGetDistributedNotifyCenter(), 
      NULL, 
      LogEvent, 
      (CFStringRef)@"RecordTouch", 
      NULL, 
      CFNotificationSuspensionBehaviorDeliverImmediately 
); 
+0

現在我得到的鏈接錯誤。是因爲6.1嗎? #if(TARGET_OS_MAC &&!(TARGET_OS_EMBEDDED || TARGET_OS_IPHONE))|| TARGET_OS_WIN32 CF_EXPORT CFNotificationCenterRef CFNotificationCenterGetDistributedCenter(void); #endif – Jailbroken

+1

嘗試'extern「C」CFNotificationCenterRef CFNotificationCenterGetDistributedCenter(void);' – creker

+0

它工作!謝謝。 – Jailbroken

相關問題