2012-02-21 26 views
7

我們使用testflight.com sdk和flurry.com sdk來跟蹤未處理的異常。問題是在我們添加testflight.com sdk之後,沒有任何例外情況被亂七八糟。實施Testflight.com和Flurry.com異常處理

void uncaughtExceptionHandler(NSException *exception) 
{ 
    [FlurryAnalytics logError:@"ERROR_NAME" message:@"ERROR_MESSAGE" exception:exception]; 
} 

- (BOOL) application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{  
    #if !TARGET_IPHONE_SIMULATOR 
    NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler); 

    struct sigaction newSignalAction; 
    memset(&newSignalAction, 0, sizeof(newSignalAction)); 
    newSignalAction.sa_handler = &signalHandler; 
    sigaction(SIGABRT, &newSignalAction, NULL); 
    sigaction(SIGILL, &newSignalAction, NULL); 
    sigaction(SIGBUS, &newSignalAction, NULL); 

    [FlurryAnalytics startSession:kFlurryKey]; 
    [TestFlight takeOff:kTestflightKey];  

    [[UIApplication sharedApplication] 
    registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | 
            UIRemoteNotificationTypeSound | 
            UIRemoteNotificationTypeAlert)];  
    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;  
    #endif 
    . 
    . 
    . 

我不知道testflight.com是怎麼做的,但它似乎像他們截獲的異常,並登記數據自己沒有:

時未處理的異常出現看起來像這樣的方法觸發讓註冊方法運行?

這兩種方式能夠共存嗎?

+0

你解決這個問題? – Jules 2012-10-31 08:44:48

+0

我沒有試圖說實話。我現在沒有編寫太多可可,所以我的焦點在別處。 – 2012-10-31 12:25:18

回答

4

我得到了Testflightapp.com團隊的確認,這是一個已知問題。他們希望在他們說的下一個版本中修復。

+1

依然不動:( – 2012-03-30 15:17:54

+0

我使用TestFlight,Crittercism,並亂舞。原來TestFlight不斷改寫的任何其他異常處理。這ATLEAST是什麼Crittercism告訴我,因爲他們有同樣的問題,發現這個通過調試。 – Bot 2012-04-17 18:45:53

0

我不能夠直接測試,但TestFlight documentation似乎這樣說:

如果使用未捕獲的異常或信號處理程序調用起飛前安裝的處理程序。我們的SDK會在我們運行時調用您的處理程序。

他們甚至給一些example code這可能會幫助你得到這個工作。

+1

是的,我知道,而且我盡我所能地看到了正確的方式。編輯原始帖子以顯示我如何在我的應用程序委託中實現它。 – 2012-02-22 07:34:26

+0

我會建議問TestFlight,然後如果你確定它不工作,我猜它必須是他們的SDK中的問題,而不是像他們說的那樣將控制權傳遞給你定義的處理程序。 – mattjgalloway 2012-02-22 09:02:16

+0

是的,有一張票登記了他們,和Flurry。如果他們能夠找到原因,將在這裏發佈解決方案。 – 2012-02-22 13:28:25

0

我在博客上找到了一個解決方案,不確定它是否適用於Flurry,它說的是在[TestFlight takeOff:@「KEY」]方法後調用UninstallCrashHandlers方法(在TestFlight.h中聲明)兩次,然後註冊您想要用於崩潰報告的其他服務。見VS Crashlytics

爲TestFlight示例代碼禁用TestFlight的崩潰報告是相當簡單的。添加以下代碼的包括AppDelegate.m:

... 
#import TestFlight.h 

// Function prototype for UninstallCrashHandler 
extern void UninstallCrashHandlers(BOOL restore); 

在didFinishLaunchingWithOptions首先調用此方法NO,然後用YES,如:

- (BOOL)application:(UIApplication *)application 
     didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [TestFlight takeOff:@"<TestFlightKey>"]; 

    UninstallCrashHandlers(NO); 
    UninstallCrashHandlers(YES); 

    [Crashlytics startWithAPIKey:@"<CrashlyticsKey>"]; 

    return YES; 
} 

裁判:http://www.grahamdennis.me/blog/2012/10/21/how-to-disable-testflights-crash-handlers/

+0

如果任何人都可以檢查並確認,我會將答案標記爲解決方案,我不再爲移動平臺開發,所以我無法檢查自己。 – 2013-06-13 12:49:55