From 145b94b47d25198adeca01b0278a4bf28e96b316 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Marguerie?= Date: Thu, 4 Oct 2018 14:04:54 -0700 Subject: [PATCH] Do not crash if there is no disk, just return nil instance Summary: This should not affect prod as flipper (also called sonar) should only be an internal debug product but i needed to fix it to start the app. Reviewed By: jknoxville Differential Revision: D10156590 fbshipit-source-id: 84a76e5cbe2f4bbe89627895efcfb7e6cdadae13 --- iOS/FlipperKit/FlipperClient.mm | 46 ++++++++++++++++++++------------- 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/iOS/FlipperKit/FlipperClient.mm b/iOS/FlipperKit/FlipperClient.mm index 43b566109..f8cc30f6a 100644 --- a/iOS/FlipperKit/FlipperClient.mm +++ b/iOS/FlipperKit/FlipperClient.mm @@ -36,7 +36,12 @@ using WrapperPlugin = facebook::flipper::FlipperCppWrapperPlugin; static FlipperClient *sharedClient = nil; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - sharedClient = [[self alloc] init]; + try { + sharedClient = [[self alloc] init]; + } catch (const std::exception &e) { + // fail. + sharedClient = nil; + } }); return sharedClient; } @@ -52,9 +57,9 @@ using WrapperPlugin = facebook::flipper::FlipperCppWrapperPlugin; NSFileManager *manager = [NSFileManager defaultManager]; - if ([manager fileExistsAtPath:privateAppDirectory isDirectory:NULL] == NO) { - //TODO: Handle errors properly - [manager createDirectoryAtPath:privateAppDirectory withIntermediateDirectories:YES attributes:nil error:nil]; + if ([manager fileExistsAtPath:privateAppDirectory isDirectory:NULL] == NO && + ![manager createDirectoryAtPath:privateAppDirectory withIntermediateDirectories:YES attributes:nil error:nil]) { + return nil; } #if TARGET_OS_SIMULATOR @@ -62,20 +67,25 @@ using WrapperPlugin = facebook::flipper::FlipperCppWrapperPlugin; #endif static const std::string UNKNOWN = std::string("unknown"); - facebook::flipper::FlipperClient::init({ - { - "localhost", - "iOS", - [deviceName UTF8String], - UNKNOWN, - [appName UTF8String] ?: UNKNOWN, - [appId UTF8String] ?: UNKNOWN, - [privateAppDirectory UTF8String], - }, - sonarThread.getEventBase(), - connectionThread.getEventBase() - }); - _cppClient = facebook::flipper::FlipperClient::instance(); + try { + facebook::flipper::FlipperClient::init({ + { + "localhost", + "iOS", + [deviceName UTF8String], + UNKNOWN, + [appName UTF8String] ?: UNKNOWN, + [appId UTF8String] ?: UNKNOWN, + [privateAppDirectory UTF8String], + }, + sonarThread.getEventBase(), + connectionThread.getEventBase() + }); + _cppClient = facebook::flipper::FlipperClient::instance(); + } catch (const std::system_error &e) { + // Probably ran out of disk space. + return nil; + } } return self; }