vlc | branch: master | Marvin Scholz <epira...@gmail.com> | Tue Feb 14 23:50:29 2017 +0100| [9fe1c7c2ca01e433427edbd1a244cff745aa8c85] | committer: Marvin Scholz
macOS: Add initialization of breakpad crash reporter > http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=9fe1c7c2ca01e433427edbd1a244cff745aa8c85 --- bin/darwinvlc.m | 42 ++++++++++++++++++++++++++++++ modules/gui/macosx/Resources/Info.plist.in | 8 ++++++ 2 files changed, 50 insertions(+) diff --git a/bin/darwinvlc.m b/bin/darwinvlc.m index 93314c8..981d7a9 100644 --- a/bin/darwinvlc.m +++ b/bin/darwinvlc.m @@ -35,6 +35,10 @@ #import <CoreFoundation/CoreFoundation.h> #import <Cocoa/Cocoa.h> +#ifdef HAVE_BREAKPAD +#import <Breakpad/Breakpad.h> +#endif + /** * Handler called when VLC asks to terminate the program. @@ -75,6 +79,36 @@ static void vlc_terminate(void *data) }); } +#ifdef HAVE_BREAKPAD +BreakpadRef initBreakpad() +{ + BreakpadRef bp = nil; + + /* Create caches directory in case it does not exist */ + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]; + NSString *bundleName = [[[NSBundle mainBundle] infoDictionary] objectForKey:@"CFBundleIdentifier"]; + NSString *cacheAppPath = [cachePath stringByAppendingPathComponent:bundleName]; + if (![fileManager fileExistsAtPath:cacheAppPath]) { + [fileManager createDirectoryAtPath:cacheAppPath withIntermediateDirectories:NO attributes:nil error:nil]; + } + + /* Get Info.plist config */ + NSMutableDictionary *breakpad_config = [[[NSBundle mainBundle] infoDictionary] mutableCopy]; + + /* Use in-process reporting */ + [breakpad_config setObject:[NSNumber numberWithBool:YES] + forKey:@BREAKPAD_IN_PROCESS]; + + /* Set dump location */ + [breakpad_config setObject:cacheAppPath + forKey:@BREAKPAD_DUMP_DIRECTORY]; + + bp = BreakpadCreate(breakpad_config); + return bp; +} +#endif + /***************************************************************************** * main: parse command line, start interface and spawn threads. *****************************************************************************/ @@ -259,6 +293,10 @@ int main(int i_argc, const char *ppsz_argv[]) * runloop is used. Otherwise, [NSApp run] needs to be called, which setups more stuff * before actually starting the loop. */ +#ifdef HAVE_BREAKPAD + BreakpadRef breakpad; + breakpad = initBreakpad(); +#endif @autoreleasepool { if(NSApp == nil) { CFRunLoopRun(); @@ -277,5 +315,9 @@ out: libvlc_release(vlc); +#ifdef HAVE_BREAKPAD + BreakpadRelease(breakpad); +#endif + return ret; } diff --git a/modules/gui/macosx/Resources/Info.plist.in b/modules/gui/macosx/Resources/Info.plist.in index 28e6738..31535d3 100644 --- a/modules/gui/macosx/Resources/Info.plist.in +++ b/modules/gui/macosx/Resources/Info.plist.in @@ -1477,6 +1477,14 @@ <string>@VERSION@</string> <key>CFBundleSignature</key> <string>VLC#</string> + <key>BreakpadProduct</key> + <string>VLC-macOS</string> + <key>BreakpadVendor</key> + <string>VideoLAN</string> + <key>BreakpadRequestComments</key> + <string>1</string> + <key>BreakpadURL</key> + <string>https://crashes.videolan.org/crashreports</string> <key>CFBundleURLTypes</key> <array> <dict> _______________________________________________ vlc-commits mailing list vlc-commits@videolan.org https://mailman.videolan.org/listinfo/vlc-commits