GRMrGecko
14 years ago
commit
3002113549
50 changed files with 42544 additions and 0 deletions
-
12Classes/Framework/GeckoReporter.h
-
26Classes/Framework/MGMBugWindow.h
-
83Classes/Framework/MGMBugWindow.m
-
27Classes/Framework/MGMContactWindow.h
-
95Classes/Framework/MGMContactWindow.m
-
16Classes/Framework/MGMFeedback.h
-
20Classes/Framework/MGMFeedback.m
-
11Classes/Framework/MGMLocalized.h
-
12Classes/Framework/MGMLog.h
-
92Classes/Framework/MGMLog.m
-
42Classes/Framework/MGMReportWindow.h
-
136Classes/Framework/MGMReportWindow.m
-
28Classes/Framework/MGMReporter.h
-
113Classes/Framework/MGMReporter.m
-
20Classes/Framework/MGMSender.h
-
391Classes/Framework/MGMSender.m
-
15Classes/Framework/MGMSenderDelegate.h
-
37Classes/Framework/MGMSystemInfo.h
-
255Classes/Framework/MGMSystemInfo.m
-
19Classes/Test/MGMController.h
-
32Classes/Test/MGMController.m
-
50GeckoReporter Test-Info.plist
-
30GeckoReporter-Info.plist
-
7376GeckoReporter.ai
-
BINGeckoReporter.icns
-
601GeckoReporter.xcodeproj/grmrgecko.pbxuser
-
1603GeckoReporter.xcodeproj/grmrgecko.perspectivev3
-
654GeckoReporter.xcodeproj/project.pbxproj
-
22License.txt
-
13Prefix.pch
-
15ReadMe.txt
-
BINResources/Framework/English.lproj/GeckoReporter.strings
-
1414Resources/Framework/English.lproj/MGMBugWindow.xib
-
1442Resources/Framework/English.lproj/MGMContactWindow.xib
-
2846Resources/Framework/English.lproj/MGMReportWindow.xib
-
206Resources/Framework/ModelNames.plist
-
BINResources/Framework/es.lproj/GeckoReporter.strings
-
1414Resources/Framework/es.lproj/MGMBugWindow.xib
-
1442Resources/Framework/es.lproj/MGMContactWindow.xib
-
2847Resources/Framework/es.lproj/MGMReportWindow.xib
-
BINResources/Framework/pt_PT.lproj/GeckoReporter.strings
-
1414Resources/Framework/pt_PT.lproj/MGMBugWindow.xib
-
1442Resources/Framework/pt_PT.lproj/MGMContactWindow.xib
-
2846Resources/Framework/pt_PT.lproj/MGMReportWindow.xib
-
1Resources/Test/English.lproj/InfoPlist.strings
-
4399Resources/Test/English.lproj/MainMenu.xib
-
4399Resources/Test/es.lproj/MainMenu.xib
-
4399Resources/Test/pt_PT.lproj/MainMenu.xib
-
13main.m
-
174sendreport.php
@ -0,0 +1,12 @@ |
|||
// |
|||
// GeckoReporter.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/27/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMReporter.h" |
|||
#import "MGMSender.h" |
|||
#import "MGMSystemInfo.h" |
|||
#import "MGMLog.h" |
@ -0,0 +1,26 @@ |
|||
// |
|||
// MGMBugWindow.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/2/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
@class MGMSender; |
|||
|
|||
@interface MGMBugWindow : NSObject { |
|||
IBOutlet NSWindow *mainWindow; |
|||
IBOutlet NSTextView *bugView; |
|||
IBOutlet NSTextView *reproduceView; |
|||
IBOutlet NSTextField *userEmailField; |
|||
IBOutlet NSButton *sendButton; |
|||
IBOutlet NSButton *cancelButton; |
|||
MGMSender *mailSender; |
|||
} |
|||
- (void)setButtonsEnabled:(BOOL)flag; |
|||
- (void)close; |
|||
- (IBAction)send:(id)sender; |
|||
- (IBAction)cancel:(id)sender; |
|||
@end |
@ -0,0 +1,83 @@ |
|||
// |
|||
// MGMBugWindow.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/2/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMBugWindow.h" |
|||
#import "MGMReporter.h" |
|||
#import "MGMSender.h" |
|||
#import "MGMLocalized.h" |
|||
#import "MGMLog.h" |
|||
|
|||
@implementation MGMBugWindow |
|||
+ (id)new { |
|||
return [[self alloc] init]; |
|||
} |
|||
- (id)init { |
|||
if (self = [super init]) { |
|||
if (![NSBundle loadNibNamed:@"MGMBugWindow" owner:self]) { |
|||
[self release]; |
|||
self = nil; |
|||
} else { |
|||
NSUserDefaults *userDefautls = [NSUserDefaults standardUserDefaults]; |
|||
if ([userDefautls objectForKey:MGMGRUserEmail]) |
|||
[userEmailField setStringValue:[userDefautls objectForKey:MGMGRUserEmail]]; |
|||
|
|||
[mainWindow makeKeyAndOrderFront:self]; |
|||
} |
|||
|
|||
} |
|||
return self; |
|||
} |
|||
|
|||
- (void)dealloc { |
|||
MGMLog(@"%s Releasing", __PRETTY_FUNCTION__); |
|||
if (mailSender!=nil) |
|||
[mailSender release]; |
|||
if (mainWindow!=nil) |
|||
[mainWindow release]; |
|||
[super dealloc]; |
|||
self = nil; |
|||
} |
|||
|
|||
- (void)setButtonsEnabled:(BOOL)flag { |
|||
[sendButton setEnabled:flag]; |
|||
[cancelButton setEnabled:flag]; |
|||
} |
|||
|
|||
- (void)close { |
|||
[mainWindow orderOut:self]; |
|||
[self release]; |
|||
} |
|||
|
|||
- (IBAction)send:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] setObject:[userEmailField stringValue] forKey:MGMGRUserEmail]; |
|||
if (mailSender==nil) { |
|||
mailSender = [[MGMSender new] retain]; |
|||
[mailSender sendBug:[[bugView textStorage] string] reproduce:[[reproduceView textStorage] string] delegate:self]; |
|||
} |
|||
[sendButton setTitle:MGMLocalized(@"Sending...", nil)]; |
|||
[self setButtonsEnabled:NO]; |
|||
} |
|||
- (IBAction)cancel:(id)sender { |
|||
[self close]; |
|||
} |
|||
|
|||
- (void)sendError:(NSError *)error { |
|||
NSAlert *theAlert = [[NSAlert new] autorelease]; |
|||
[theAlert addButtonWithTitle:MGMLocalized(@"Ok", nil)]; |
|||
[theAlert setMessageText:MGMLocalized(@"Error could not send bug report.", nil)]; |
|||
[theAlert setInformativeText:[error localizedDescription]]; |
|||
[theAlert setAlertStyle:2]; |
|||
[theAlert runModal]; |
|||
[self setButtonsEnabled:YES]; |
|||
} |
|||
|
|||
- (void)sendFinished:(NSString *)received { |
|||
MGMLog(@"%@", received); |
|||
[self close]; |
|||
} |
|||
@end |
@ -0,0 +1,27 @@ |
|||
// |
|||
// MGMContactWindow.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/3/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
@class MGMSender; |
|||
|
|||
@interface MGMContactWindow : NSObject { |
|||
IBOutlet NSWindow *mainWindow; |
|||
IBOutlet NSTextView *messageView; |
|||
IBOutlet NSTextField *userEmailField; |
|||
IBOutlet NSTextField *userNameField; |
|||
IBOutlet NSPopUpButton *subjectPopUp; |
|||
IBOutlet NSButton *sendButton; |
|||
IBOutlet NSButton *cancelButton; |
|||
MGMSender *mailSender; |
|||
} |
|||
- (void)setButtonsEnabled:(BOOL)flag; |
|||
- (void)close; |
|||
- (IBAction)send:(id)sender; |
|||
- (IBAction)cancel:(id)sender; |
|||
@end |
@ -0,0 +1,95 @@ |
|||
// |
|||
// MGMContactWindow.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/3/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMContactWindow.h" |
|||
#import "MGMReporter.h" |
|||
#import "MGMSender.h" |
|||
#import "MGMLocalized.h" |
|||
#import "MGMLog.h" |
|||
|
|||
@implementation MGMContactWindow |
|||
+ (id)new { |
|||
return [[self alloc] init]; |
|||
} |
|||
- (id)init { |
|||
if (self = [super init]) { |
|||
if (![NSBundle loadNibNamed:@"MGMContactWindow" owner:self]) { |
|||
[self release]; |
|||
self = nil; |
|||
} else { |
|||
NSUserDefaults *userDefautls = [NSUserDefaults standardUserDefaults]; |
|||
if ([userDefautls objectForKey:MGMGRUserEmail]) |
|||
[userEmailField setStringValue:[userDefautls objectForKey:MGMGRUserEmail]]; |
|||
if ([userDefautls objectForKey:MGMGRUserName]) |
|||
[userNameField setStringValue:[userDefautls objectForKey:MGMGRUserName]]; |
|||
|
|||
[mainWindow makeKeyAndOrderFront:self]; |
|||
} |
|||
|
|||
} |
|||
return self; |
|||
} |
|||
|
|||
- (void)dealloc { |
|||
MGMLog(@"%s Releasing", __PRETTY_FUNCTION__); |
|||
if (mailSender!=nil) |
|||
[mailSender release]; |
|||
if (mainWindow!=nil) |
|||
[mainWindow release]; |
|||
[super dealloc]; |
|||
} |
|||
|
|||
- (void)setButtonsEnabled:(BOOL)flag { |
|||
[sendButton setEnabled:flag]; |
|||
[cancelButton setEnabled:flag]; |
|||
} |
|||
|
|||
- (void)close { |
|||
[mainWindow orderOut:self]; |
|||
[self release]; |
|||
self = nil; |
|||
} |
|||
|
|||
- (IBAction)send:(id)sender { |
|||
if ([[userEmailField stringValue] isEqualToString:@""] || [[userNameField stringValue] isEqualToString:@""]) { |
|||
NSAlert *theAlert = [[NSAlert new] autorelease]; |
|||
[theAlert addButtonWithTitle:MGMLocalized(@"Ok", nil)]; |
|||
[theAlert setMessageText:MGMLocalized(@"Fields not filled.", nil)]; |
|||
[theAlert setInformativeText:MGMLocalized(@"Please be sure all fields are filled as all fields are required.", nil)]; |
|||
[theAlert setAlertStyle:2]; |
|||
[theAlert runModal]; |
|||
} else { |
|||
[[NSUserDefaults standardUserDefaults] setObject:[userEmailField stringValue] forKey:MGMGRUserEmail]; |
|||
[[NSUserDefaults standardUserDefaults] setObject:[userNameField stringValue] forKey:MGMGRUserName]; |
|||
if (mailSender==nil) { |
|||
mailSender = [[MGMSender new] retain]; |
|||
[mailSender sendMessage:[[messageView textStorage] string] subject:[subjectPopUp titleOfSelectedItem] delegate:self]; |
|||
} |
|||
[sendButton setTitle:MGMLocalized(@"Sending...", nil)]; |
|||
[self setButtonsEnabled:NO]; |
|||
} |
|||
} |
|||
- (IBAction)cancel:(id)sender { |
|||
[self close]; |
|||
} |
|||
|
|||
- (void)sendError:(NSError *)error { |
|||
NSAlert *theAlert = [[NSAlert new] autorelease]; |
|||
[theAlert addButtonWithTitle:MGMLocalized(@"Ok", nil)]; |
|||
[theAlert setMessageText:MGMLocalized(@"Error could not send message.", nil)]; |
|||
[theAlert setInformativeText:[error localizedDescription]]; |
|||
[theAlert setAlertStyle:2]; |
|||
[theAlert runModal]; |
|||
[self setButtonsEnabled:YES]; |
|||
} |
|||
|
|||
- (void)sendFinished:(NSString *)received { |
|||
MGMLog(@"%@", received); |
|||
[self close]; |
|||
} |
|||
@end |
@ -0,0 +1,16 @@ |
|||
// |
|||
// MGMFeedback.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/2/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
@interface MGMFeedback : NSObject { |
|||
|
|||
} |
|||
- (IBAction)openBugReport:(id)sender; |
|||
- (IBAction)openContact:(id)sender; |
|||
@end |
@ -0,0 +1,20 @@ |
|||
// |
|||
// MGMFeedback.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/2/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMFeedback.h" |
|||
#import "MGMBugWindow.h" |
|||
#import "MGMContactWindow.h" |
|||
|
|||
@implementation MGMFeedback |
|||
- (IBAction)openBugReport:(id)sender { |
|||
[MGMBugWindow new]; |
|||
} |
|||
- (IBAction)openContact:(id)sender { |
|||
[MGMContactWindow new]; |
|||
} |
|||
@end |
@ -0,0 +1,11 @@ |
|||
/* |
|||
* MGMLocalized.h |
|||
* GeckoReporter |
|||
* |
|||
* Created by Mr. Gecko on 1/6/10. |
|||
* Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
* |
|||
*/ |
|||
|
|||
#define FRAMEWORKBUNDLE [NSBundle bundleWithIdentifier:@"com.MrGeckosMedia.GeckoReporter"] |
|||
#define MGMLocalized(key,comment) NSLocalizedStringFromTableInBundle(key, @"GeckoReporter", FRAMEWORKBUNDLE, comment) |
@ -0,0 +1,12 @@ |
|||
// |
|||
// MGMLog.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/1/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
void MGMLog(NSString *format, ...); |
|||
void MGMLogv(NSString *format, va_list args); |
@ -0,0 +1,92 @@ |
|||
// |
|||
// MGMLog.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/1/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMLog.h" |
|||
|
|||
@protocol NSFileManagerProtocol <NSObject> |
|||
- (NSDictionary *)attributesOfItemAtPath:(NSString *)path error:(NSError **)error; |
|||
- (NSDictionary *)fileSystemAttributesAtPath:(NSString *)path; |
|||
|
|||
- (BOOL)removeItemAtPath:(NSString *)path error:(NSError **)error; |
|||
- (BOOL)removeFileAtPath:(NSString *)path handler:(id)handler; |
|||
|
|||
- (BOOL)moveItemAtPath:(NSString *)srcPath toPath:(NSString *)dstPath error:(NSError **)error; |
|||
- (BOOL)movePath:(NSString *)source toPath:(NSString *)destination handler:(id)handler; |
|||
@end |
|||
|
|||
static NSRecursiveLock *MGMLock = nil; |
|||
|
|||
void MGMInitLock() { |
|||
if (MGMLock==nil) { |
|||
MGMLock = [NSRecursiveLock new]; |
|||
} |
|||
} |
|||
|
|||
void MGMLogs(NSString *string) { |
|||
MGMInitLock(); |
|||
[MGMLock lock]; |
|||
char *buffer; |
|||
int length; |
|||
NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding]; |
|||
if (data!=nil) { |
|||
buffer = (char *)[data bytes]; |
|||
length = [data length]; |
|||
} else { |
|||
buffer = (char *)[string UTF8String]; |
|||
length = [string length]; |
|||
} |
|||
NSFileManager<NSFileManagerProtocol> *manager = [NSFileManager defaultManager]; |
|||
fwrite(buffer, 1, length, stderr); |
|||
NSString *applicationIdentifier = [[NSBundle mainBundle] bundleIdentifier]; |
|||
NSString *logPath = [[NSString stringWithFormat:@"~/Library/Logs/%@.log", applicationIdentifier] stringByExpandingTildeInPath]; |
|||
NSString *log2Path = [[NSString stringWithFormat:@"~/Library/Logs/%@_2.log", applicationIdentifier] stringByExpandingTildeInPath]; |
|||
NSDictionary *attributes = nil; |
|||
if ([manager respondsToSelector:@selector(attributesOfItemAtPath:error:)]) |
|||
attributes = [manager attributesOfItemAtPath:logPath error:nil]; |
|||
else |
|||
attributes = [manager fileSystemAttributesAtPath:logPath]; |
|||
if ([[attributes objectForKey:NSFileSize] intValue]>=262144) { |
|||
if ([manager fileExistsAtPath:log2Path]) { |
|||
if ([manager respondsToSelector:@selector(removeItemAtPath:error:)]) |
|||
[manager removeItemAtPath:log2Path error:nil]; |
|||
else |
|||
[manager removeFileAtPath:log2Path handler:nil]; |
|||
} |
|||
if ([manager respondsToSelector:@selector(moveItemAtPath:toPath:error:)]) |
|||
[manager moveItemAtPath:logPath toPath:log2Path error:nil]; |
|||
else |
|||
[manager movePath:logPath toPath:log2Path handler:nil]; |
|||
} |
|||
FILE *logFile = fopen([logPath fileSystemRepresentation], "a"); |
|||
fwrite(buffer, 1, length, logFile); |
|||
fclose(logFile); |
|||
[MGMLock unlock]; |
|||
} |
|||
|
|||
void MGMLog(NSString *format, ...) { |
|||
va_list ap; |
|||
va_start(ap, format); |
|||
MGMLogv(format, ap); |
|||
va_end(ap); |
|||
} |
|||
|
|||
void MGMLogv(NSString *format, va_list args) { |
|||
NSAutoreleasePool *pool = [NSAutoreleasePool new]; |
|||
if (![format hasSuffix:@"\n"]) |
|||
format = [format stringByAppendingString:@"\n"]; |
|||
NSString *message = [[[NSString alloc] initWithFormat:format arguments:args] autorelease]; |
|||
NSProcessInfo *procInfo = [NSProcessInfo processInfo]; |
|||
NSString *logString = [NSString stringWithFormat:@"%@ %@[%d] %@", |
|||
[[NSCalendarDate calendarDate] descriptionWithCalendarFormat:@"%Y-%m-%d %H:%M:%S.%F"], |
|||
[procInfo processName], |
|||
[procInfo processIdentifier], |
|||
message |
|||
]; |
|||
MGMLogs(logString); |
|||
[pool drain]; |
|||
} |
@ -0,0 +1,42 @@ |
|||
// |
|||
// MGMReportWindow.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/27/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
@class MGMSender; |
|||
|
|||
extern NSString * const MGMSaveLastDate; |
|||
|
|||
@interface MGMReportWindow : NSObject { |
|||
IBOutlet NSMenu *mainMenu; |
|||
IBOutlet NSMenuItem *hideMenu; |
|||
IBOutlet NSMenuItem *quitMenu; |
|||
IBOutlet NSWindow *mainWindow; |
|||
IBOutlet NSTextField *titleField; |
|||
IBOutlet NSTextField *dateField; |
|||
IBOutlet NSTextView *userReportView; |
|||
IBOutlet NSTextField *userEmailField; |
|||
IBOutlet NSButton *sendButton; |
|||
IBOutlet NSButton *sendAllButton; |
|||
IBOutlet NSButton *ignoreButton; |
|||
IBOutlet NSButton *ignoreAllButton; |
|||
NSString *reportFile; |
|||
NSDate *reportDate; |
|||
MGMSender *mailSender; |
|||
|
|||
NSMenu *appMainMenu; |
|||
} |
|||
+ (id)newWindowWithReport:(NSString *)theReportFile reportDate:(NSDate *)theReportDate; |
|||
- (id)initWithReport:(NSString *)theReportFile reportDate:(NSDate *)theReportDate; |
|||
- (void)setButtonsEnabled:(BOOL)flag; |
|||
- (void)close; |
|||
- (IBAction)sendReport:(id)sender; |
|||
- (IBAction)sendAllReports:(id)sender; |
|||
- (IBAction)ignoreReport:(id)sender; |
|||
- (IBAction)ignoreAllReports:(id)sender; |
|||
@end |
@ -0,0 +1,136 @@ |
|||
// |
|||
// MGMReportWindow.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/27/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMReportWindow.h" |
|||
#import "MGMReporter.h" |
|||
#import "MGMSender.h" |
|||
#import "MGMSystemInfo.h" |
|||
#import "MGMLocalized.h" |
|||
#import "MGMLog.h" |
|||
|
|||
NSString * const MGMSaveLastDate = @"MGMSaveLastDate"; |
|||
|
|||
@implementation MGMReportWindow |
|||
+ (id)newWindowWithReport:(NSString *)theReportFile reportDate:(NSDate *)theReportDate { |
|||
return [[self alloc] initWithReport:theReportFile reportDate:theReportDate]; |
|||
} |
|||
- (id)initWithReport:(NSString *)theReportFile reportDate:(NSDate *)theReportDate { |
|||
if (self = [super init]) { |
|||
if (![NSBundle loadNibNamed:@"MGMReportWindow" owner:self]) { |
|||
[self release]; |
|||
self = nil; |
|||
} else { |
|||
reportFile = [theReportFile retain]; |
|||
reportDate = [theReportDate retain]; |
|||
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
|||
NSUserDefaults *userDefautls = [NSUserDefaults standardUserDefaults]; |
|||
MGMSystemInfo *sysInfo = [MGMSystemInfo new]; |
|||
NSString *applicationName = [sysInfo applicationName]; |
|||
|
|||
appMainMenu = [[[NSApplication sharedApplication] mainMenu] retain]; |
|||
[[NSApplication sharedApplication] setMainMenu:mainMenu]; |
|||
if ([[infoDictionary objectForKey:@"LSUIElement"] boolValue]) |
|||
[[NSApplication sharedApplication] requestUserAttention:NSInformationalRequest]; |
|||
else |
|||
[[NSApplication sharedApplication] activateIgnoringOtherApps:YES]; |
|||
NSBeep(); |
|||
|
|||
if (applicationName==nil) |
|||
applicationName = [sysInfo applicationEXECName]; |
|||
[hideMenu setTitle:[NSString stringWithFormat:MGMLocalized(@"Hide %@", nil), applicationName]]; |
|||
[quitMenu setTitle:[NSString stringWithFormat:MGMLocalized(@"Quit %@", nil), applicationName]]; |
|||
|
|||
[titleField setStringValue:[NSString stringWithFormat:MGMLocalized(@"%@ crashed the last time you ran it. Would you like to send me a crash report so I can look into it?", nil), applicationName]]; |
|||
[dateField setStringValue:[reportDate descriptionWithCalendarFormat:MGMLocalized(@"%a, %m/%d/%Y %I:%M:%S %p", nil) timeZone:nil locale:nil]]; |
|||
[mainWindow setTitle:[NSString stringWithFormat:MGMLocalized(@"%@ Crashed", nil), applicationName]]; |
|||
|
|||
if ([userDefautls objectForKey:MGMGRUserEmail]) |
|||
[userEmailField setStringValue:[userDefautls objectForKey:MGMGRUserEmail]]; |
|||
|
|||
[mainWindow makeKeyAndOrderFront:self]; |
|||
} |
|||
|
|||
} |
|||
return self; |
|||
} |
|||
- (void)dealloc { |
|||
#if releaseDebug |
|||
MGMLog(@"%s Releasing", __PRETTY_FUNCTION__); |
|||
#endif |
|||
if (reportFile!=nil) |
|||
[reportFile release]; |
|||
if (reportDate!=nil) |
|||
[reportDate release]; |
|||
if (mailSender!=nil) |
|||
[mailSender release]; |
|||
if (mainWindow!=nil) |
|||
[mainWindow release]; |
|||
[super dealloc]; |
|||
} |
|||
|
|||
- (void)setButtonsEnabled:(BOOL)flag { |
|||
[sendButton setEnabled:flag]; |
|||
[sendAllButton setEnabled:flag]; |
|||
[ignoreButton setEnabled:flag]; |
|||
[ignoreAllButton setEnabled:flag]; |
|||
} |
|||
|
|||
- (void)close { |
|||
[[NSApplication sharedApplication] setMainMenu:appMainMenu]; |
|||
[appMainMenu release]; |
|||
[mainWindow orderOut:self]; |
|||
[self release]; |
|||
self = nil; |
|||
} |
|||
|
|||
- (IBAction)sendReport:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] setObject:[userEmailField stringValue] forKey:MGMGRUserEmail]; |
|||
if (mailSender==nil) { |
|||
mailSender = [[MGMSender new] retain]; |
|||
[mailSender sendReport:reportFile reportDate:reportDate userReport:[[userReportView textStorage] string] delegate:self]; |
|||
} |
|||
[sendButton setTitle:MGMLocalized(@"Sending...", nil)]; |
|||
[self setButtonsEnabled:NO]; |
|||
} |
|||
- (IBAction)sendAllReports:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] setObject:[userEmailField stringValue] forKey:MGMGRUserEmail]; |
|||
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:MGMGRSendAll]; |
|||
if (mailSender==nil) { |
|||
mailSender = [[MGMSender new] retain]; |
|||
[mailSender sendReport:reportFile reportDate:reportDate userReport:[[userReportView textStorage] string] delegate:self]; |
|||
} |
|||
[sendAllButton setTitle:MGMLocalized(@"Sending...", nil)]; |
|||
[self setButtonsEnabled:NO]; |
|||
} |
|||
- (IBAction)ignoreReport:(id)sender { |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], MGMSaveLastDate, nil]]; |
|||
[self close]; |
|||
} |
|||
- (IBAction)ignoreAllReports:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] setObject:[NSNumber numberWithBool:YES] forKey:MGMGRIgnoreAll]; |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], MGMSaveLastDate, nil]]; |
|||
[self close]; |
|||
} |
|||
|
|||
- (void)sendError:(NSError *)error { |
|||
NSAlert *theAlert = [[NSAlert new] autorelease]; |
|||
[theAlert addButtonWithTitle:MGMLocalized(@"Ok", nil)]; |
|||
[theAlert setMessageText:MGMLocalized(@"Error could not send crash report.", nil)]; |
|||
[theAlert setInformativeText:[error localizedDescription]]; |
|||
[theAlert setAlertStyle:2]; |
|||
[theAlert runModal]; |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], MGMSaveLastDate, nil]]; |
|||
[self close]; |
|||
} |
|||
|
|||
- (void)sendFinished:(NSString *)received { |
|||
MGMLog(@"%@", received); |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], MGMSaveLastDate, nil]]; |
|||
[self close]; |
|||
} |
|||
@end |
@ -0,0 +1,28 @@ |
|||
// |
|||
// MGMReporter.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/27/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
extern NSString * const MGMGRDoneNotification; |
|||
extern NSString * const MGMGRUserEmail; |
|||
extern NSString * const MGMGRUserName; |
|||
extern NSString * const MGMGRLastCrashDate; |
|||
extern NSString * const MGMGRSendAll; |
|||
extern NSString * const MGMGRIgnoreAll; |
|||
|
|||
#define releaseDebug 1 |
|||
|
|||
@class MGMSender; |
|||
|
|||
@interface MGMReporter : NSObject { |
|||
BOOL foundReport; |
|||
NSDate *lastDate; |
|||
MGMSender *mailSender; |
|||
} |
|||
+ (id)sharedReporter; |
|||
@end |
@ -0,0 +1,113 @@ |
|||
// |
|||
// MGMReporter.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/27/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMReporter.h" |
|||
#import "MGMReportWindow.h" |
|||
#import "MGMSender.h" |
|||
#import "MGMSystemInfo.h" |
|||
#import "MGMLog.h" |
|||
|
|||
static MGMReporter *MGMReporterSingleton = nil; |
|||
|
|||
NSString * const MGMReportsPath = @"~/Library/Logs/CrashReporter"; |
|||
NSString * const MGMGRDoneNotification = @"MGMGRDoneNotification"; |
|||
NSString * const MGMGRUserEmail = @"MGMGRUserEmail"; |
|||
NSString * const MGMGRUserName = @"MGMGRUserName"; |
|||
NSString * const MGMGRLastCrashDate = @"MGMGRLastCrashDate"; |
|||
NSString * const MGMGRSendAll = @"MGMGRSendAll"; |
|||
NSString * const MGMGRIgnoreAll = @"MGMGRIgnoreAll"; |
|||
|
|||
@implementation MGMReporter |
|||
+ (id)sharedReporter { |
|||
@synchronized(self) { |
|||
if (MGMReporterSingleton == nil) { |
|||
MGMReporterSingleton = [[self alloc] init]; |
|||
} |
|||
} |
|||
return MGMReporterSingleton; |
|||
} |
|||
- (id)init { |
|||
if (self = [super init]) { |
|||
foundReport = NO; |
|||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(done:) name:MGMGRDoneNotification object:nil]; |
|||
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
|||
if ([userDefaults objectForKey:MGMGRIgnoreAll]==nil || ![[userDefaults objectForKey:MGMGRIgnoreAll] boolValue]) { |
|||
NSFileManager *manager = [NSFileManager defaultManager]; |
|||
NSString *applicationName = [[MGMSystemInfo new] applicationEXECName]; |
|||
if (lastDate!=nil) { |
|||
[lastDate release]; |
|||
lastDate = nil; |
|||
} |
|||
lastDate = [[userDefaults objectForKey:MGMGRLastCrashDate] retain]; |
|||
NSDirectoryEnumerator *crashFiles = [manager enumeratorAtPath:[MGMReportsPath stringByExpandingTildeInPath]]; |
|||
NSString *crashFile = nil; |
|||
NSString *lastCrashFile = nil; |
|||
while (crashFile = [crashFiles nextObject]) { |
|||
if ([crashFile hasPrefix:applicationName]) { |
|||
NSString *file = [[MGMReportsPath stringByAppendingPathComponent:crashFile] stringByResolvingSymlinksInPath]; |
|||
BOOL readable = [manager isReadableFileAtPath:file]; |
|||
NSDictionary *attributes = [crashFiles fileAttributes]; |
|||
NSDate *creationDate = [attributes objectForKey:NSFileCreationDate]; |
|||
if (readable && (lastDate==nil || (creationDate==[lastDate laterDate:creationDate]))) { |
|||
if (lastDate!=nil) { |
|||
[lastDate release]; |
|||
lastDate = nil; |
|||
} |
|||
lastDate = [creationDate retain]; |
|||
lastCrashFile = file; |
|||
foundReport = YES; |
|||
} |
|||
} |
|||
} |
|||
if (foundReport) { |
|||
MGMLog(@"Latest Crash Report %@, %@", lastDate, lastCrashFile); |
|||
if ([userDefaults objectForKey:MGMGRSendAll]!=nil && [[userDefaults objectForKey:MGMGRSendAll] boolValue]) { |
|||
if (mailSender==nil) { |
|||
mailSender = [[MGMSender new] retain]; |
|||
[mailSender sendReport:lastCrashFile reportDate:lastDate userReport:@"User set to send all." delegate:self]; |
|||
} |
|||
} else { |
|||
[MGMReportWindow newWindowWithReport:lastCrashFile reportDate:lastDate]; |
|||
} |
|||
} else { |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], MGMSaveLastDate, nil]]; |
|||
} |
|||
} else { |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], MGMSaveLastDate, nil]]; |
|||
} |
|||
} |
|||
return self; |
|||
} |
|||
|
|||
- (void)dealloc { |
|||
#if releaseDebug |
|||
MGMLog(@"%s Releasing", __PRETTY_FUNCTION__); |
|||
#endif |
|||
if (lastDate!=nil) |
|||
[lastDate release]; |
|||
if (mailSender!=nil) |
|||
[mailSender release]; |
|||
[super dealloc]; |
|||
} |
|||
- (void)done:(NSNotification *)note { |
|||
if ([[note userInfo] objectForKey:MGMSaveLastDate]!=nil && [[[note userInfo] objectForKey:MGMSaveLastDate] boolValue]) { |
|||
[[NSUserDefaults standardUserDefaults] setObject:lastDate forKey:MGMGRLastCrashDate]; |
|||
} |
|||
[self release]; |
|||
self = nil; |
|||
} |
|||
|
|||
- (void)sendError:(NSError *)error { |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:NO], MGMSaveLastDate, nil]]; |
|||
} |
|||
|
|||
- (void)sendFinished:(NSString *)received { |
|||
MGMLog(@"%@", received); |
|||
[[NSNotificationCenter defaultCenter] postNotificationName:MGMGRDoneNotification object:nil userInfo:[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:YES], MGMSaveLastDate, nil]]; |
|||
} |
|||
@end |
@ -0,0 +1,20 @@ |
|||
// |
|||
// MGMSender.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/28/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
#import "MGMSenderDelegate.h" |
|||
|
|||
@interface MGMSender : NSObject { |
|||
id<MGMSenderDelegate> delegate; |
|||
NSMutableData *receivedData; |
|||
NSURLConnection *theConnection; |
|||
} |
|||
- (void)sendReport:(NSString *)theReportPath reportDate:(NSDate *)theReportDate userReport:(NSString *)theUserReport delegate:(id)theDelegate; |
|||
- (void)sendBug:(NSString *)theBug reproduce:(NSString *)theReproduce delegate:(id)theDelegate; |
|||
- (void)sendMessage:(NSString *)theMessage subject:(NSString *)theSubject delegate:(id)theDelegate; |
|||
@end |
@ -0,0 +1,391 @@ |
|||
// |
|||
// MGMSender.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/28/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMSender.h" |
|||
#import "MGMReporter.h" |
|||
#import "MGMSystemInfo.h" |
|||
#import "MGMLocalized.h" |
|||
#import "MGMLog.h" |
|||
|
|||
NSString * const MGMDefaultTimeZone = @"GMT"; |
|||
NSString * const MGMDefaultTimeFormat = @"%a, %m/%d/%y %H:%M:%S %Z"; |
|||
NSString * const MGMDefaultCrashEmail = @"crashreports@mrgeckosmedia.com"; |
|||
NSString * const MGMDefaultBugsEmail = @"bugs@mrgeckosmedia.com"; |
|||
NSString * const MGMDefaultContactEmail = @"support@mrgeckosmedia.com"; |
|||
NSString * const MGMDefaultURL = @"https://mrgeckosmedia.com/sendreport.php"; |
|||
|
|||
NSString * const MGMGRTimeZone = @"MGMGRTimeZone"; |
|||
NSString * const MGMGRTimeFormat = @"MGMGRTimeFormat"; |
|||
NSString * const MGMGRReportFileAttached = @"MGMGRReportFileAttached"; |
|||
NSString * const MGMGRCrashEmail = @"MGMGRCrashEmail"; |
|||
NSString * const MGMGRBugsEmail = @"MGMGRBugsEmail"; |
|||
NSString * const MGMGRContactEmail = @"MGMGRContactEmail"; |
|||
NSString * const MGMGRURL = @"MGMGRURL"; |
|||
NSString * const MGMGRLogFiles = @"MGMGRLogFiles"; |
|||
|
|||
@interface MGMSender (MGMPrivate) |
|||
- (NSData *)buildBodyWithObjects:(NSDictionary *)theObjects boundary:(NSString *)theBoundary; |
|||
- (NSDictionary *)defaultObjects; |
|||
@end |
|||
|
|||
@implementation MGMSender |
|||
- (void)dealloc { |
|||
#if releaseDebug |
|||
MGMLog(@"%s Releasing", __PRETTY_FUNCTION__); |
|||
#endif |
|||
if (theConnection!=nil) |
|||
[theConnection release]; |
|||
if (receivedData!=nil) |
|||
[receivedData release]; |
|||
[super dealloc]; |
|||
} |
|||
|
|||
- (NSData *)buildBodyWithObjects:(NSDictionary *)theObjects boundary:(NSString *)theBoundary { |
|||
NSMutableData *data = [NSMutableData data]; |
|||
NSArray *keys = [theObjects allKeys]; |
|||
|
|||
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
|||
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
|||
NSFileManager *manager = [NSFileManager defaultManager]; |
|||
NSString *timeZone, *timeFormat; |
|||
if ([userDefaults objectForKey:MGMGRTimeZone]!=nil && ![[userDefaults objectForKey:MGMGRTimeZone] isEqualToString:@""]) { |
|||
timeZone = [userDefaults objectForKey:MGMGRTimeZone]; |
|||
} else if ([infoDictionary objectForKey:MGMGRTimeZone]!=nil && ![[infoDictionary objectForKey:MGMGRTimeZone] isEqualToString:@""]) { |
|||
timeZone = [infoDictionary objectForKey:MGMGRTimeZone]; |
|||
} else { |
|||
timeZone = MGMDefaultTimeZone; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRTimeFormat]!=nil && ![[userDefaults objectForKey:MGMGRTimeFormat] isEqualToString:@""]) { |
|||
timeFormat = [userDefaults objectForKey:MGMGRTimeFormat]; |
|||
} else if ([infoDictionary objectForKey:MGMGRTimeFormat]!=nil && ![[infoDictionary objectForKey:MGMGRTimeFormat] isEqualToString:@""]) { |
|||
timeFormat = [infoDictionary objectForKey:MGMGRTimeFormat]; |
|||
} else { |
|||
timeFormat = MGMDefaultTimeFormat; |
|||
} |
|||
|
|||
for (int i=0; i<[keys count]; i++) { |
|||
NSString *key = [keys objectAtIndex:i]; |
|||
id object = [theObjects objectForKey:key]; |
|||
[data appendData:[[NSString stringWithFormat:@"--%@\r\n", theBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
if ([object isKindOfClass:[NSString class]]) { |
|||
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:[object dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
} else if ([object isKindOfClass:[NSNumber class]]) { |
|||
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:[[object stringValue] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
} else if ([object isKindOfClass:[NSData class]]) { |
|||
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:object]; |
|||
} else if ([object isKindOfClass:[NSDate class]]) { |
|||
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
NSString *date; |
|||
if ([timeZone length]==3) { |
|||
date = [object descriptionWithCalendarFormat:timeFormat timeZone:[NSTimeZone timeZoneWithAbbreviation:timeZone] locale:nil]; |
|||
} else { |
|||
date = [object descriptionWithCalendarFormat:timeFormat timeZone:[NSTimeZone timeZoneWithName:timeZone] locale:nil]; |
|||
} |
|||
[data appendData:[date dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
} else if ([object isKindOfClass:[NSURL class]]) { |
|||
if ([object isFileURL]) { |
|||
NSString *objectPath = [object path]; |
|||
if ([manager fileExistsAtPath:objectPath] && [manager isReadableFileAtPath:objectPath]) { |
|||
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@\"\r\n", key, [objectPath lastPathComponent]] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:[@"Content-Type: plain/text\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:[@"Content-Transfer-Encoding: binary\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:[NSData dataWithContentsOfFile:objectPath]]; |
|||
} |
|||
} else { |
|||
[data appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
[data appendData:[[object absoluteString] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
} |
|||
} |
|||
[data appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
} |
|||
[data appendData:[[NSString stringWithFormat:@"--%@--", theBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; |
|||
|
|||
return data; |
|||
} |
|||
- (NSDictionary *)defaultObjects { |
|||
MGMSystemInfo *sysInfo = [MGMSystemInfo new]; |
|||
NSMutableDictionary *objects = [NSMutableDictionary new]; |
|||
[objects setObject:[sysInfo frameworkVersion] forKey:@"GRVersion"]; |
|||
[objects setObject:[sysInfo applicationName] forKey:@"Application"]; |
|||
[objects setObject:[sysInfo applicationIdentifier] forKey:@"Application Identifier"]; |
|||
[objects setObject:[sysInfo applicationVersion] forKey:@"Application Version"]; |
|||
[objects setObject:[sysInfo language] forKey:@"Language"]; |
|||
[objects setObject:[NSString stringWithFormat:@"%@ %@", [sysInfo architecture], [sysInfo CPUFamily]] forKey:@"System Architecture"]; |
|||
[objects setObject:[NSNumber numberWithInt:[sysInfo CPUCount]] forKey:@"CPU Count"]; |
|||
[objects setObject:[sysInfo modelName] forKey:@"Model Name"]; |
|||
[objects setObject:[sysInfo model] forKey:@"Model"]; |
|||
[objects setObject:[NSString stringWithFormat:@"%@ %@", [sysInfo OSVersion], [sysInfo OSVersionName]] forKey:@"System Version"]; |
|||
double CPUMHz = (double)[sysInfo CPUMHz]; |
|||
NSString *CPUFreq = @"MHz"; |
|||
if (CPUMHz>=1000) { |
|||
CPUFreq = @"GHz"; |
|||
CPUMHz /= 1000; |
|||
if (CPUMHz>=1000) { |
|||
CPUFreq = @"THz"; |
|||
CPUMHz /= 1000; |
|||
} |
|||
} |
|||
[objects setObject:[NSString stringWithFormat:@"%.2f %@", CPUMHz, CPUFreq] forKey:@"CPU Speed"]; |
|||
double RAMSize = (double)[sysInfo RAMSize]; |
|||
NSString *RAMType = @"MB"; |
|||
if (RAMSize>=1024) { |
|||
RAMType = @"GB"; |
|||
RAMSize /= 1024; |
|||
if (RAMSize>=1024) { |
|||
RAMType = @"TB"; |
|||
RAMSize /= 1024; |
|||
} |
|||
} |
|||
[objects setObject:[NSString stringWithFormat:@"%.2f %@", RAMSize, RAMType] forKey:@"RAM Size"]; |
|||
|
|||
return objects; |
|||
} |
|||
- (void)sendReport:(NSString *)theReportPath reportDate:(NSDate *)theReportDate userReport:(NSString *)theUserReport delegate:(id)theDelegate { |
|||
if (theDelegate!=nil) |
|||
delegate = theDelegate; |
|||
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
|||
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
|||
MGMSystemInfo *sysInfo = [MGMSystemInfo new]; |
|||
|
|||
NSString *email = nil, *url = nil, *userEmail = nil, *logFiles = nil; |
|||
BOOL reportAttached = NO; |
|||
if ([userDefaults objectForKey:MGMGRCrashEmail]!=nil && ![[userDefaults objectForKey:MGMGRCrashEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRCrashEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRCrashEmail]!=nil && ![[infoDictionary objectForKey:MGMGRCrashEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRCrashEmail]; |
|||
} else if ([userDefaults objectForKey:MGMGRBugsEmail]!=nil && ![[userDefaults objectForKey:MGMGRBugsEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRBugsEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRBugsEmail]!=nil && ![[infoDictionary objectForKey:MGMGRBugsEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRBugsEmail]; |
|||
} else if ([userDefaults objectForKey:MGMGRContactEmail]!=nil && ![[userDefaults objectForKey:MGMGRContactEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRContactEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRContactEmail]!=nil && ![[infoDictionary objectForKey:MGMGRContactEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRContactEmail]; |
|||
} else { |
|||
email = MGMDefaultCrashEmail; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRURL]!=nil && ![[userDefaults objectForKey:MGMGRURL] isEqualToString:@""]) { |
|||
url = [userDefaults objectForKey:MGMGRURL]; |
|||
} else if ([infoDictionary objectForKey:MGMGRURL]!=nil && ![[infoDictionary objectForKey:MGMGRURL] isEqualToString:@""]) { |
|||
url = [infoDictionary objectForKey:MGMGRURL]; |
|||
} else { |
|||
url = MGMDefaultURL; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRUserEmail]!=nil && ![[userDefaults objectForKey:MGMGRUserEmail] isEqualToString:@""]) { |
|||
userEmail = [userDefaults objectForKey:MGMGRUserEmail]; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRReportFileAttached]!=nil) { |
|||
reportAttached = [[userDefaults objectForKey:MGMGRReportFileAttached] boolValue]; |
|||
} else if ([infoDictionary objectForKey:MGMGRReportFileAttached]!=nil) { |
|||
reportAttached = [[infoDictionary objectForKey:MGMGRReportFileAttached] boolValue]; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRLogFiles]!=nil && ![[userDefaults objectForKey:MGMGRLogFiles] isEqualToString:@""]) { |
|||
logFiles = [userDefaults objectForKey:MGMGRLogFiles]; |
|||
} else if ([infoDictionary objectForKey:MGMGRLogFiles]!=nil && ![[infoDictionary objectForKey:MGMGRLogFiles] isEqualToString:@""]) { |
|||
logFiles = [infoDictionary objectForKey:MGMGRLogFiles]; |
|||
} |
|||
|
|||
srandomdev(); |
|||
NSString *boundary = [NSString stringWithFormat:@"----Boundary+%d", random()%100000]; |
|||
|
|||
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0]; |
|||
[postRequest setHTTPMethod:@"POST"]; |
|||
[postRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary, nil] forHTTPHeaderField:@"Content-Type"]; |
|||
|
|||
|
|||
NSMutableDictionary *objects = [NSMutableDictionary dictionaryWithDictionary:[self defaultObjects]]; |
|||
[objects setObject:@"crash" forKey:@"GRType"]; |
|||
if (email!=nil) |
|||
[objects setObject:email forKey:@"GREmail"]; |
|||
[objects setObject:[NSString stringWithFormat:@"Crash Report for %@", [sysInfo applicationName]] forKey:@"GRSubject"]; |
|||
[objects setObject:(reportAttached ? @"YES" : @"NO") forKey:@"GRReportAttached"]; |
|||
if (theUserReport!=nil) |
|||
[objects setObject:theUserReport forKey:@"GRUserReport"]; |
|||
if (userEmail!=nil) |
|||
[objects setObject:userEmail forKey:@"User Email Address"]; |
|||
if (theReportDate!=nil) |
|||
[objects setObject:theReportDate forKey:@"Crash Report Date"]; |
|||
if (theReportPath!=nil && ![theReportPath isEqualToString:@""]) |
|||
[objects setObject:[NSURL fileURLWithPath:theReportPath] forKey:@"reportFile"]; |
|||
if (logFiles!=nil && ![logFiles isEqualToString:@""]) { |
|||
NSArray *logs = [logFiles componentsSeparatedByString:@" "]; |
|||
for (int i=0; i<[logs count]; i++) { |
|||
[objects setObject:[NSURL fileURLWithPath:[[logs objectAtIndex:i] stringByExpandingTildeInPath]] forKey:[NSString stringWithFormat:@"logFile%d", i]]; |
|||
} |
|||
} |
|||
[postRequest setHTTPBody:[self buildBodyWithObjects:objects boundary:boundary]]; |
|||
|
|||
theConnection = [[NSURLConnection connectionWithRequest:postRequest delegate:self] retain]; |
|||
if (theConnection) { |
|||
receivedData = [[NSMutableData data] retain]; |
|||
} |
|||
} |
|||
- (void)sendBug:(NSString *)theBug reproduce:(NSString *)theReproduce delegate:(id)theDelegate { |
|||
if (theDelegate!=nil) |
|||
delegate = theDelegate; |
|||
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
|||
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
|||
MGMSystemInfo *sysInfo = [MGMSystemInfo new]; |
|||
|
|||
NSString *email = nil, *url = nil, *userEmail = nil; |
|||
if ([userDefaults objectForKey:MGMGRBugsEmail]!=nil && ![[userDefaults objectForKey:MGMGRBugsEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRBugsEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRBugsEmail]!=nil && ![[infoDictionary objectForKey:MGMGRBugsEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRBugsEmail]; |
|||
} else if ([userDefaults objectForKey:MGMGRCrashEmail]!=nil && ![[userDefaults objectForKey:MGMGRCrashEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRCrashEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRCrashEmail]!=nil && ![[infoDictionary objectForKey:MGMGRCrashEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRCrashEmail]; |
|||
} else if ([userDefaults objectForKey:MGMGRContactEmail]!=nil && ![[userDefaults objectForKey:MGMGRContactEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRContactEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRContactEmail]!=nil && ![[infoDictionary objectForKey:MGMGRContactEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRContactEmail]; |
|||
} else { |
|||
email = MGMDefaultBugsEmail; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRURL]!=nil && ![[userDefaults objectForKey:MGMGRURL] isEqualToString:@""]) { |
|||
url = [userDefaults objectForKey:MGMGRURL]; |
|||
} else if ([infoDictionary objectForKey:MGMGRURL]!=nil && ![[infoDictionary objectForKey:MGMGRURL] isEqualToString:@""]) { |
|||
url = [infoDictionary objectForKey:MGMGRURL]; |
|||
} else { |
|||
url = MGMDefaultURL; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRUserEmail]!=nil && ![[userDefaults objectForKey:MGMGRUserEmail] isEqualToString:@""]) { |
|||
userEmail = [userDefaults objectForKey:MGMGRUserEmail]; |
|||
} |
|||
|
|||
srandomdev(); |
|||
NSString *boundary = [NSString stringWithFormat:@"----Boundary+%d", random()%100000]; |
|||
|
|||
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0]; |
|||
[postRequest setHTTPMethod:@"POST"]; |
|||
[postRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary, nil] forHTTPHeaderField:@"Content-Type"]; |
|||
|
|||
|
|||
NSMutableDictionary *objects = [NSMutableDictionary dictionaryWithDictionary:[self defaultObjects]]; |
|||
[objects setObject:@"bug" forKey:@"GRType"]; |
|||
if (email!=nil) |
|||
[objects setObject:email forKey:@"GREmail"]; |
|||
[objects setObject:[NSString stringWithFormat:@"Bug Report for %@", [sysInfo applicationName]] forKey:@"GRSubject"]; |
|||
if (userEmail!=nil) |
|||
[objects setObject:userEmail forKey:@"User Email Address"]; |
|||
if (theBug!=nil) |
|||
[objects setObject:theBug forKey:@"GRBug"]; |
|||
if (theReproduce!=nil) |
|||
[objects setObject:theReproduce forKey:@"GRReproduce"]; |
|||
[postRequest setHTTPBody:[self buildBodyWithObjects:objects boundary:boundary]]; |
|||
|
|||
theConnection = [[NSURLConnection connectionWithRequest:postRequest delegate:self] retain]; |
|||
if (theConnection) { |
|||
receivedData = [[NSMutableData data] retain]; |
|||
} |
|||
} |
|||
- (void)sendMessage:(NSString *)theMessage subject:(NSString *)theSubject delegate:(id)theDelegate { |
|||
if (theDelegate!=nil) |
|||
delegate = theDelegate; |
|||
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; |
|||
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary]; |
|||
MGMSystemInfo *sysInfo = [MGMSystemInfo new]; |
|||
|
|||
NSString *email = nil, *url = nil, *userEmail = nil, *userName = nil; |
|||
if ([userDefaults objectForKey:MGMGRBugsEmail]!=nil && ![[userDefaults objectForKey:MGMGRBugsEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRBugsEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRBugsEmail]!=nil && ![[infoDictionary objectForKey:MGMGRBugsEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRBugsEmail]; |
|||
} else if ([userDefaults objectForKey:MGMGRCrashEmail]!=nil && ![[userDefaults objectForKey:MGMGRCrashEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRCrashEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRCrashEmail]!=nil && ![[infoDictionary objectForKey:MGMGRCrashEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRCrashEmail]; |
|||
} else if ([userDefaults objectForKey:MGMGRContactEmail]!=nil && ![[userDefaults objectForKey:MGMGRContactEmail] isEqualToString:@""]) { |
|||
email = [userDefaults objectForKey:MGMGRContactEmail]; |
|||
} else if ([infoDictionary objectForKey:MGMGRContactEmail]!=nil && ![[infoDictionary objectForKey:MGMGRContactEmail] isEqualToString:@""]) { |
|||
email = [infoDictionary objectForKey:MGMGRContactEmail]; |
|||
} else { |
|||
email = MGMDefaultBugsEmail; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRURL]!=nil && ![[userDefaults objectForKey:MGMGRURL] isEqualToString:@""]) { |
|||
url = [userDefaults objectForKey:MGMGRURL]; |
|||
} else if ([infoDictionary objectForKey:MGMGRURL]!=nil && ![[infoDictionary objectForKey:MGMGRURL] isEqualToString:@""]) { |
|||
url = [infoDictionary objectForKey:MGMGRURL]; |
|||
} else { |
|||
url = MGMDefaultURL; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRUserEmail]!=nil && ![[userDefaults objectForKey:MGMGRUserEmail] isEqualToString:@""]) { |
|||
userEmail = [userDefaults objectForKey:MGMGRUserEmail]; |
|||
} |
|||
if ([userDefaults objectForKey:MGMGRUserName]!=nil && ![[userDefaults objectForKey:MGMGRUserName] isEqualToString:@""]) { |
|||
userName = [userDefaults objectForKey:MGMGRUserName]; |
|||
} |
|||
|
|||
srandomdev(); |
|||
NSString *boundary = [NSString stringWithFormat:@"----Boundary+%d", random()%100000]; |
|||
|
|||
NSMutableURLRequest *postRequest = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:30.0]; |
|||
[postRequest setHTTPMethod:@"POST"]; |
|||
[postRequest setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary, nil] forHTTPHeaderField:@"Content-Type"]; |
|||
|
|||
NSMutableDictionary *objects = [NSMutableDictionary dictionaryWithDictionary:[self defaultObjects]]; |
|||
[objects setObject:@"contact" forKey:@"GRType"]; |
|||
if (email!=nil) |
|||
[objects setObject:email forKey:@"GREmail"]; |
|||
[objects setObject:[NSString stringWithFormat:@"%@ for %@", theSubject, [sysInfo applicationName]] forKey:@"GRSubject"]; |
|||
if (userEmail!=nil) |
|||
[objects setObject:userEmail forKey:@"User Email Address"]; |
|||
if (userEmail!=nil) |
|||
[objects setObject:userName forKey:@"User Name"]; |
|||
if (theMessage!=nil) |
|||
[objects setObject:theMessage forKey:@"GRMessage"]; |
|||
[postRequest setHTTPBody:[self buildBodyWithObjects:objects boundary:boundary]]; |
|||
|
|||
theConnection = [[NSURLConnection connectionWithRequest:postRequest delegate:self] retain]; |
|||
if (theConnection) { |
|||
receivedData = [[NSMutableData data] retain]; |
|||
} |
|||
} |
|||
|
|||
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSHTTPURLResponse *)response { |
|||
if ([response statusCode]!=200) { |
|||
[connection cancel]; |
|||
NSError *error = [NSError errorWithDomain:@"com.MrGeckosMedia.GRStatus" code:1 userInfo: |
|||
[NSDictionary dictionaryWithObject:[NSString stringWithFormat:MGMLocalized(@"Status Code Returned %d", nil), [response statusCode]] |
|||
forKey:NSLocalizedDescriptionKey]]; |
|||
MGMLog(@"%@", [error localizedDescription]); |
|||
if (delegate!=nil && [delegate respondsToSelector:@selector(sendError:)]) |
|||
[delegate sendError:error]; |
|||
[self release]; |
|||
self = nil; |
|||
} else { |
|||
[receivedData setLength:0]; |
|||
} |
|||
} |
|||
|
|||
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { |
|||
[receivedData appendData:data]; |
|||
} |
|||
|
|||
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { |
|||
MGMLog(@"Connection failed! Error - %@ %@", [error localizedDescription], [[error userInfo] objectForKey:NSErrorFailingURLStringKey]); |
|||
if (delegate!=nil && [delegate respondsToSelector:@selector(sendError:)]) |
|||
[delegate sendError:error]; |
|||
[self release]; |
|||
self = nil; |
|||
} |
|||
|
|||
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { |
|||
if (receivedData!=nil) { |
|||
NSString *receivedString = [[[NSString alloc] initWithData:[NSData dataWithData:receivedData] encoding:NSUTF8StringEncoding] autorelease]; |
|||
if (delegate!=nil && [delegate respondsToSelector:@selector(sendFinished:)]) |
|||
[delegate sendFinished:receivedString]; |
|||
} |
|||
[self release]; |
|||
self = nil; |
|||
} |
|||
@end |
@ -0,0 +1,15 @@ |
|||
// |
|||
// MGMSenderDelegate.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/2/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
|
|||
@protocol MGMSenderDelegate <NSObject> |
|||
- (void)sendError:(NSError *)error; |
|||
- (void)sendFinished:(NSString *)received; |
|||
@end |
@ -0,0 +1,37 @@ |
|||
// |
|||
// MGMSystemInfo.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/31/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
|
|||
@interface MGMSystemInfo : NSObject { |
|||
|
|||
} |
|||
- (NSString *)architecture; |
|||
- (BOOL)is64Bit; |
|||
- (NSString *)CPUFamily; |
|||
- (int)CPUCount; |
|||
- (NSString *)model; |
|||
- (NSString *)modelName; |
|||
- (int)CPUMHz; |
|||
- (int)RAMSize; |
|||
- (int)OSMajorVersion; |
|||
- (int)OSMinorVersion; |
|||
- (int)OSBugFixVersion; |
|||
- (NSString *)OSVersion; |
|||
- (NSString *)OSVersionName; |
|||
- (NSString *)language; |
|||
- (NSString *)applicationIdentifier; |
|||
- (NSString *)applicationName; |
|||
- (NSString *)applicationEXECName; |
|||
- (NSString *)applicationVersion; |
|||
- (NSBundle *)frameworkBundle; |
|||
- (NSString *)frameworkVersion; |
|||
- (NSString *)useragentWithApplicationNameAndVersion:(NSString *)nameAndVersion; |
|||
- (NSString *)useragent; |
|||
@end |
@ -0,0 +1,255 @@ |
|||
// |
|||
// MGMSystemInfo.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 12/31/09. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMSystemInfo.h" |
|||
#import "MGMReporter.h" |
|||
#import "MGMLocalized.h" |
|||
#import "MGMLog.h" |
|||
#import <sys/sysctl.h> |
|||
|
|||
#ifndef CPU_TYPE_ARM |
|||
#define CPU_TYPE_ARM ((cpu_type_t) 12) |
|||
#endif |
|||
|
|||
|
|||
NSString * const MGMCPUType = @"hw.cputype"; |
|||
NSString * const MGM64Capable = @"hw.cpu64bit_capable"; |
|||
NSString * const MGM64Bit = @"hw.optional.64bitops"; |
|||
NSString * const MGMX8_664 = @"hw.optional.x86_64"; |
|||
NSString * const MGMCPUFamily = @"hw.cpufamily"; |
|||
NSString * const MGMCPUCount = @"hw.ncpu"; |
|||
NSString * const MGMModel = @"hw.model"; |
|||
|
|||
@interface MGMSystemInfo (MGMPrivate) |
|||
- (int)valueFromSystem:(NSString *)theName; |
|||
- (NSString *)stringFromSystem:(NSString *)theName; |
|||
@end |
|||
|
|||
@implementation MGMSystemInfo |
|||
+ (id)new { |
|||
return [[[self alloc] init] autorelease]; |
|||
} |
|||
|
|||
- (int)valueFromSystem:(NSString *)theName { |
|||
int value = 0; |
|||
unsigned long length = sizeof(value); |
|||
if (sysctlbyname([theName UTF8String], &value, &length, NULL, 0)==0) { |
|||
return value; |
|||
} |
|||
return -1; |
|||
} |
|||
- (NSString *)stringFromSystem:(NSString *)theName { |
|||
unsigned long length = sizeof(int); |
|||
if (sysctlbyname([theName UTF8String], NULL, &length, NULL, 0)==0) { |
|||
char *utf8String = (char *)malloc(sizeof(char) * length); |
|||
if (sysctlbyname([theName UTF8String], utf8String, &length, NULL, 0)==0) { |
|||
NSString *returnString = [NSString stringWithUTF8String:utf8String]; |
|||
if (utf8String!=NULL) |
|||
free(utf8String); |
|||
return returnString; |
|||
} |
|||
if (utf8String!=NULL) |
|||
free(utf8String); |
|||
} |
|||
return nil; |
|||
} |
|||
|
|||
- (NSString *)architecture { |
|||
switch ([self valueFromSystem:MGMCPUType]) { |
|||
case CPU_TYPE_MC680x0: |
|||
return @"m68k"; |
|||
break; |
|||
case CPU_TYPE_X86: |
|||
case CPU_TYPE_X86_64: |
|||
return @"Intel"; |
|||
break; |
|||
case CPU_TYPE_POWERPC: |
|||
case CPU_TYPE_POWERPC64: |
|||
return @"PowerPC"; |
|||
break; |
|||
case CPU_TYPE_ARM: |
|||
return @"ARM"; |
|||
break; |
|||
} |
|||
return @"Unknown"; |
|||
} |
|||
|
|||
- (BOOL)is64Bit { |
|||
int value = [self valueFromSystem:MGM64Capable]; |
|||
if (value==-1) |
|||
value = [self valueFromSystem:MGM64Bit]; |
|||
if (value==-1) |
|||
value = [self valueFromSystem:MGMX8_664]; |
|||
if (value==-1) |
|||
value = 0; |
|||
return (value==1); |
|||
} |
|||
|
|||
- (NSString *)CPUFamily { |
|||
switch ([self valueFromSystem:MGMCPUType]) { |
|||
case CPU_TYPE_X86: |
|||
case CPU_TYPE_X86_64: |
|||
if ([self is64Bit]) { |
|||
return @"Core 2 Duo"; |
|||
} else { |
|||
if ([self CPUCount]==1) |
|||
return @"Core Solo"; |
|||
else |
|||
return @"Core Duo"; |
|||
} |
|||
break; |
|||
case CPU_TYPE_POWERPC: |
|||
case CPU_TYPE_POWERPC64: |
|||
switch ([self valueFromSystem:MGMCPUFamily]) { |
|||
case CPUFAMILY_POWERPC_G3: |
|||
return @"G3"; |
|||
break; |
|||
case CPUFAMILY_POWERPC_G4: |
|||
return @"G4"; |
|||
break; |
|||
case CPUFAMILY_POWERPC_G5: |
|||
return @"G5"; |
|||
break; |
|||
} |
|||
break; |
|||
} |
|||
return @"Unknown"; |
|||
} |
|||
|
|||
- (int)CPUCount { |
|||
return [self valueFromSystem:MGMCPUCount]; |
|||
} |
|||
|
|||
- (NSString *)model { |
|||
return [self stringFromSystem:MGMModel]; |
|||
} |
|||
|
|||
- (NSString *)modelName { |
|||
NSString *model = [self stringFromSystem:MGMModel]; |
|||
NSDictionary *modelNames = [NSDictionary dictionaryWithContentsOfFile:[[NSBundle bundleForClass:[self class]] pathForResource:@"ModelNames" ofType:@"plist"]]; |
|||
NSString *modelName = [modelNames objectForKey:model]; |
|||
if (modelName!=nil) |
|||
return modelName; |
|||
return model; |
|||
} |
|||
|
|||
- (int)CPUMHz { |
|||
SInt32 clockSpeed; |
|||
if (Gestalt(gestaltProcClkSpeedMHz, &clockSpeed)==noErr) { |
|||
return (int)clockSpeed; |
|||
} |
|||
return -1; |
|||
} |
|||
|
|||
- (int)RAMSize { |
|||
SInt32 ramSize; |
|||
if (Gestalt(gestaltPhysicalRAMSizeInMegabytes, &ramSize)==noErr) { |
|||
return (int)ramSize; |
|||
} |
|||
return -1; |
|||
} |
|||
|
|||
- (int)OSMajorVersion { |
|||
SInt32 majorVersion; |
|||
if (Gestalt(gestaltSystemVersionMajor, &majorVersion)==noErr) { |
|||
return (int)majorVersion; |
|||
} |
|||
return -1; |
|||
} |
|||
- (int)OSMinorVersion { |
|||
SInt32 minorVersion; |
|||
if (Gestalt(gestaltSystemVersionMinor, &minorVersion)==noErr) { |
|||
return (int)minorVersion; |
|||
} |
|||
return -1; |
|||
} |
|||
- (int)OSBugFixVersion { |
|||
SInt32 bugFixVersion; |
|||
if (Gestalt(gestaltSystemVersionBugFix, &bugFixVersion)==noErr) { |
|||
return (int)bugFixVersion; |
|||
} |
|||
return -1; |
|||
} |
|||
- (NSString *)OSVersion { |
|||
int majorVersion = [self OSMajorVersion]; |
|||
int minorVersion = [self OSMinorVersion]; |
|||
int bugFixVersion = [self OSBugFixVersion]; |
|||
return [NSString stringWithFormat:@"%d.%d.%d", majorVersion, minorVersion, bugFixVersion]; |
|||
} |
|||
|
|||
- (NSString *)OSVersionName { |
|||
if ([self OSMajorVersion]==10) { |
|||
int minorVersion = [self OSMinorVersion]; |
|||
if (minorVersion==0) |
|||
return @"Cheetah"; |
|||
if (minorVersion==1) |
|||
return @"Puma"; |
|||
if (minorVersion==2) |
|||
return @"Jaguar"; |
|||
if (minorVersion==3) |
|||
return @"Panther"; |
|||
if (minorVersion==4) |
|||
return @"Tiger"; |
|||
if (minorVersion==5) |
|||
return @"Leopard"; |
|||
if (minorVersion==6) |
|||
return @"Snow Leopard"; |
|||
if (minorVersion==7) |
|||
return @"Garfield"; |
|||
if (minorVersion==8) |
|||
return @"Liger"; |
|||
} |
|||
return @"Unknown"; |
|||
} |
|||
|
|||
- (NSString *)language { |
|||
NSArray *languages = [[NSUserDefaults standardUserDefaults] objectForKey:@"AppleLanguages"]; |
|||
if (languages!=nil && [languages count]>=1) |
|||
return [languages objectAtIndex:0]; |
|||
return @"Unknown"; |
|||
} |
|||
|
|||
- (NSString *)applicationIdentifier { |
|||
return [[NSBundle mainBundle] bundleIdentifier]; |
|||
} |
|||
|
|||
- (NSString *)applicationName { |
|||
return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleName"]; |
|||
} |
|||
|
|||
- (NSString *)applicationEXECName { |
|||
return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleExecutable"]; |
|||
} |
|||
|
|||
- (NSString *)applicationVersion { |
|||
return [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]; |
|||
} |
|||
|
|||
- (NSBundle *)frameworkBundle { |
|||
return FRAMEWORKBUNDLE; |
|||
} |
|||
|
|||
- (NSString *)frameworkVersion { |
|||
return [FRAMEWORKBUNDLE objectForInfoDictionaryKey:@"CFBundleVersion"]; |
|||
} |
|||
|
|||
- (NSString *)useragentWithApplicationNameAndVersion:(NSString *)nameAndVersion { |
|||
if (nameAndVersion==nil) |
|||
nameAndVersion = [NSString stringWithFormat:@"%@/%@", [self applicationName], [self applicationVersion]]; |
|||
NSString *useragent = [NSString stringWithFormat:@"%@ (Macintosh; U; %@ ", nameAndVersion, [self architecture]]; |
|||
if ([self OSMajorVersion]==10) |
|||
useragent = [useragent stringByAppendingString:@"Mac OS X "]; |
|||
else |
|||
useragent = [useragent stringByAppendingString:@"Mac OS "]; |
|||
useragent = [useragent stringByAppendingFormat:@"%@; %@)", [self OSVersion], [self language]]; |
|||
return useragent; |
|||
} |
|||
- (NSString *)useragent { |
|||
return [self useragentWithApplicationNameAndVersion:nil]; |
|||
} |
|||
@end |
@ -0,0 +1,19 @@ |
|||
// |
|||
// MGMController.h |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/1/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
@interface MGMController : NSObject { |
|||
IBOutlet NSWindow *mainWindow; |
|||
NSString *crashString; |
|||
} |
|||
- (IBAction)crashApplication:(id)sender; |
|||
- (IBAction)RemoveLastDate:(id)sender; |
|||
- (IBAction)RemoveSendAll:(id)sender; |
|||
- (IBAction)RemoveIgnoreAll:(id)sender; |
|||
@end |
@ -0,0 +1,32 @@ |
|||
// |
|||
// MGMController.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/1/10. |
|||
// Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
// |
|||
|
|||
#import "MGMController.h" |
|||
#import <GeckoReporter/GeckoReporter.h> |
|||
|
|||
@implementation MGMController |
|||
- (void)awakeFromNib { |
|||
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setup) name:MGMGRDoneNotification object:nil]; |
|||
[MGMReporter sharedReporter]; |
|||
} |
|||
- (void)setup { |
|||
[mainWindow makeKeyAndOrderFront:self]; |
|||
} |
|||
- (IBAction)crashApplication:(id)sender { |
|||
NSLog(@"This should crash this application %@", 1234567890); |
|||
} |
|||
- (IBAction)RemoveLastDate:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:MGMGRLastCrashDate]; |
|||
} |
|||
- (IBAction)RemoveSendAll:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:MGMGRSendAll]; |
|||
} |
|||
- (IBAction)RemoveIgnoreAll:(id)sender { |
|||
[[NSUserDefaults standardUserDefaults] removeObjectForKey:MGMGRIgnoreAll]; |
|||
} |
|||
@end |
@ -0,0 +1,50 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundleDevelopmentRegion</key> |
|||
<string>English</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>${EXECUTABLE_NAME}</string> |
|||
<key>CFBundleIconFile</key> |
|||
<string>GeckoReporter</string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>com.MrGeckosMedia.${PRODUCT_NAME:rfc1034identifier}</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundleName</key> |
|||
<string>${PRODUCT_NAME}</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>APPL</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>NSHumanReadableCopyright</key> |
|||
<string>Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>0.1</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>0.1</string> |
|||
<key>LSMinimumSystemVersion</key> |
|||
<string>${MACOSX_DEPLOYMENT_TARGET}</string> |
|||
<key>NSPrincipalClass</key> |
|||
<string>NSApplication</string> |
|||
<key>NSMainNibFile</key> |
|||
<string>MainMenu</string> |
|||
<key>MGMGRCrashEmail</key> |
|||
<string>crashreports@mrgeckosmedia.com</string> |
|||
<key>MGMGRBugsEmail</key> |
|||
<string>bugs@mrgeckosmedia.com</string> |
|||
<key>MGMGRContactEmail</key> |
|||
<string>support@mrgeckosmedia.com</string> |
|||
<key>MGMGRLogFiles</key> |
|||
<string>~/Library/Logs/com.MrGeckosMedia.${PRODUCT_NAME:rfc1034identifier}.log ~/Library/Logs/com.MrGeckosMedia.${PRODUCT_NAME:rfc1034identifier}_2.log</string> |
|||
<key>MGMGRReportFileAttached</key> |
|||
<true/> |
|||
<key>MGMGRTimeFormat</key> |
|||
<string>%A, %m/%d/%y %I:%M:%S %p</string> |
|||
<key>MGMGRTimeZone</key> |
|||
<string>CST</string> |
|||
<key>MGMGRURL</key> |
|||
<string>https://mrgeckosmedia.com/sendreport.php</string> |
|||
</dict> |
|||
</plist> |
@ -0,0 +1,30 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>CFBundleDevelopmentRegion</key> |
|||
<string>English</string> |
|||
<key>CFBundleExecutable</key> |
|||
<string>${EXECUTABLE_NAME}</string> |
|||
<key>CFBundleName</key> |
|||
<string>${PRODUCT_NAME}</string> |
|||
<key>CFBundleIconFile</key> |
|||
<string></string> |
|||
<key>CFBundleIdentifier</key> |
|||
<string>com.MrGeckosMedia.${PRODUCT_NAME:rfc1034Identifier}</string> |
|||
<key>CFBundleInfoDictionaryVersion</key> |
|||
<string>6.0</string> |
|||
<key>CFBundlePackageType</key> |
|||
<string>FMWK</string> |
|||
<key>CFBundleSignature</key> |
|||
<string>????</string> |
|||
<key>NSHumanReadableCopyright</key> |
|||
<string>Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/</string> |
|||
<key>CFBundleVersion</key> |
|||
<string>0.1</string> |
|||
<key>CFBundleShortVersionString</key> |
|||
<string>0.1</string> |
|||
<key>NSPrincipalClass</key> |
|||
<string></string> |
|||
</dict> |
|||
</plist> |
7376
GeckoReporter.ai
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,601 @@ |
|||
// !$*UTF8*$! |
|||
{ |
|||
0867D690FE84028FC02AAC07 /* Project object */ = { |
|||
activeBuildConfigurationName = Release; |
|||
activeExecutable = 2AC86A0C10EE8C12000743D2 /* GeckoReporter Test */; |
|||
activeTarget = 2AC86A0A10EE8C12000743D2 /* GeckoReporter Test */; |
|||
addToTargets = ( |
|||
8DC2EF4F0486A6940098B216 /* GeckoReporter */, |
|||
); |
|||
breakpoints = ( |
|||
); |
|||
codeSenseManager = 2A478DA210E8456500EBC4A9 /* Code sense */; |
|||
executables = ( |
|||
2AC86A0C10EE8C12000743D2 /* GeckoReporter Test */, |
|||
); |
|||
perUserDictionary = { |
|||
"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA1AED706398EBD00589147" = { |
|||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; |
|||
PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; |
|||
PBXFileTableDataSourceColumnWidthsKey = ( |
|||
20, |
|||
20, |
|||
198, |
|||
20, |
|||
99, |
|||
99, |
|||
29, |
|||
20, |
|||
); |
|||
PBXFileTableDataSourceColumnsKey = ( |
|||
PBXBreakpointsDataSource_ActionID, |
|||
PBXBreakpointsDataSource_TypeID, |
|||
PBXBreakpointsDataSource_BreakpointID, |
|||
PBXBreakpointsDataSource_UseID, |
|||
PBXBreakpointsDataSource_LocationID, |
|||
PBXBreakpointsDataSource_ConditionID, |
|||
PBXBreakpointsDataSource_IgnoreCountID, |
|||
PBXBreakpointsDataSource_ContinueID, |
|||
); |
|||
}; |
|||
"PBXConfiguration.PBXBreakpointsDataSource.v1:1CA23EDF0692099D00951B8B" = { |
|||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; |
|||
PBXFileTableDataSourceColumnSortingKey = PBXBreakpointsDataSource_BreakpointID; |
|||
PBXFileTableDataSourceColumnWidthsKey = ( |
|||
20, |
|||
20, |
|||
329, |
|||
20, |
|||
229, |
|||
229, |
|||
157, |
|||
20, |
|||
); |
|||
PBXFileTableDataSourceColumnsKey = ( |
|||
PBXBreakpointsDataSource_ActionID, |
|||
PBXBreakpointsDataSource_TypeID, |
|||
PBXBreakpointsDataSource_BreakpointID, |
|||
PBXBreakpointsDataSource_UseID, |
|||
PBXBreakpointsDataSource_LocationID, |
|||
PBXBreakpointsDataSource_ConditionID, |
|||
PBXBreakpointsDataSource_IgnoreCountID, |
|||
PBXBreakpointsDataSource_ContinueID, |
|||
); |
|||
}; |
|||
PBXConfiguration.PBXFileTableDataSource3.PBXExecutablesDataSource = { |
|||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; |
|||
PBXFileTableDataSourceColumnSortingKey = PBXExecutablesDataSource_NameID; |
|||
PBXFileTableDataSourceColumnWidthsKey = ( |
|||
22, |
|||
300, |
|||
722, |
|||
); |
|||
PBXFileTableDataSourceColumnsKey = ( |
|||
PBXExecutablesDataSource_ActiveFlagID, |
|||
PBXExecutablesDataSource_NameID, |
|||
PBXExecutablesDataSource_CommentsID, |
|||
); |
|||
}; |
|||
PBXConfiguration.PBXFileTableDataSource3.PBXFileTableDataSource = { |
|||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; |
|||
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; |
|||
PBXFileTableDataSourceColumnWidthsKey = ( |
|||
20, |
|||
834, |
|||
20, |
|||
48, |
|||
43, |
|||
43, |
|||
20, |
|||
); |
|||
PBXFileTableDataSourceColumnsKey = ( |
|||
PBXFileDataSource_FiletypeID, |
|||
PBXFileDataSource_Filename_ColumnID, |
|||
PBXFileDataSource_Built_ColumnID, |
|||
PBXFileDataSource_ObjectSize_ColumnID, |
|||
PBXFileDataSource_Errors_ColumnID, |
|||
PBXFileDataSource_Warnings_ColumnID, |
|||
PBXFileDataSource_Target_ColumnID, |
|||
); |
|||
}; |
|||
PBXConfiguration.PBXFileTableDataSource3.PBXSymbolsDataSource = { |
|||
PBXFileTableDataSourceColumnSortingDirectionKey = "-1"; |
|||
PBXFileTableDataSourceColumnSortingKey = PBXSymbolsDataSource_SymbolNameID; |
|||
PBXFileTableDataSourceColumnWidthsKey = ( |
|||
16, |
|||
200, |
|||
50, |
|||
774, |
|||
); |
|||
PBXFileTableDataSourceColumnsKey = ( |
|||
PBXSymbolsDataSource_SymbolTypeIconID, |
|||
PBXSymbolsDataSource_SymbolNameID, |
|||
PBXSymbolsDataSource_SymbolTypeID, |
|||
PBXSymbolsDataSource_ReferenceNameID, |
|||
); |
|||
}; |
|||
PBXConfiguration.PBXTargetDataSource.PBXTargetDataSource = { |
|||
PBXFileTableDataSourceColumnSortingDirectionKey = 1; |
|||
PBXFileTableDataSourceColumnSortingKey = PBXFileDataSource_Filename_ColumnID; |
|||
PBXFileTableDataSourceColumnWidthsKey = ( |
|||
20, |
|||
794, |
|||
60, |
|||
20, |
|||
48, |
|||
43, |
|||
43, |
|||
); |
|||
PBXFileTableDataSourceColumnsKey = ( |
|||
PBXFileDataSource_FiletypeID, |
|||
PBXFileDataSource_Filename_ColumnID, |
|||
PBXTargetDataSource_PrimaryAttribute, |
|||
PBXFileDataSource_Built_ColumnID, |
|||
PBXFileDataSource_ObjectSize_ColumnID, |
|||
PBXFileDataSource_Errors_ColumnID, |
|||
PBXFileDataSource_Warnings_ColumnID, |
|||
); |
|||
}; |
|||
PBXPerProjectTemplateStateSaveDate = 284508832; |
|||
PBXWorkspaceStateSaveDate = 284508832; |
|||
}; |
|||
perUserProjectItems = { |
|||
2A85029A10F05D6B00CA1273 = 2A85029A10F05D6B00CA1273 /* PBXTextBookmark */; |
|||
2AB297B910F51A920080C6A1 = 2AB297B910F51A920080C6A1 /* PBXTextBookmark */; |
|||
2AB297E110F5428A0080C6A1 = 2AB297E110F5428A0080C6A1 /* PBXTextBookmark */; |
|||
2AB297F610F542DF0080C6A1 /* PBXTextBookmark */ = 2AB297F610F542DF0080C6A1 /* PBXTextBookmark */; |
|||
2AB2988010F5537F0080C6A1 /* PBXBookmark */ = 2AB2988010F5537F0080C6A1 /* PBXBookmark */; |
|||
2AB2988E10F5590F0080C6A1 /* PBXTextBookmark */ = 2AB2988E10F5590F0080C6A1 /* PBXTextBookmark */; |
|||
2AB2989710F5590F0080C6A1 /* PBXTextBookmark */ = 2AB2989710F5590F0080C6A1 /* PBXTextBookmark */; |
|||
2AB2989A10F5590F0080C6A1 /* PBXTextBookmark */ = 2AB2989A10F5590F0080C6A1 /* PBXTextBookmark */; |
|||
2AB2989C10F5590F0080C6A1 /* PBXTextBookmark */ = 2AB2989C10F5590F0080C6A1 /* PBXTextBookmark */; |
|||
2AB298A510F55CBA0080C6A1 /* PBXTextBookmark */ = 2AB298A510F55CBA0080C6A1 /* PBXTextBookmark */; |
|||
2AB298A610F55CBA0080C6A1 /* PBXTextBookmark */ = 2AB298A610F55CBA0080C6A1 /* PBXTextBookmark */; |
|||
2AB298A710F55CBA0080C6A1 /* PBXTextBookmark */ = 2AB298A710F55CBA0080C6A1 /* PBXTextBookmark */; |
|||
}; |
|||
sourceControlManager = 2A478DA110E8456500EBC4A9 /* Source Control */; |
|||
userBuildSettings = { |
|||
}; |
|||
}; |
|||
2A478DA110E8456500EBC4A9 /* Source Control */ = { |
|||
isa = PBXSourceControlManager; |
|||
fallbackIsa = XCSourceControlManager; |
|||
isSCMEnabled = 0; |
|||
scmConfiguration = { |
|||
repositoryNamesForRoots = { |
|||
"" = ""; |
|||
}; |
|||
}; |
|||
}; |
|||
2A478DA210E8456500EBC4A9 /* Code sense */ = { |
|||
isa = PBXCodeSenseManager; |
|||
indexTemplatePath = ""; |
|||
}; |
|||
2A85014210EFA6A700CA1273 /* MGMFeedback.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{181, 0}"; |
|||
sepNavVisRange = "{0, 329}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2A85014310EFA6A700CA1273 /* MGMFeedback.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{181, 0}"; |
|||
sepNavVisRange = "{0, 424}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2A85014710EFA81C00CA1273 /* MGMBugWindow.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{182, 0}"; |
|||
sepNavVisRange = "{0, 617}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2A85014810EFA81C00CA1273 /* MGMBugWindow.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1012, 1092}}"; |
|||
sepNavSelRange = "{2035, 0}"; |
|||
sepNavVisRange = "{0, 0}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2A85029A10F05D6B00CA1273 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2AC86CD710EEC2B4000743D2 /* NSThread.h */; |
|||
name = "NSThread.h: 9"; |
|||
rLen = 3; |
|||
rLoc = 180; |
|||
rType = 0; |
|||
vrLen = 0; |
|||
vrLoc = 0; |
|||
}; |
|||
2A8502FC10F0636600CA1273 /* MGMSenderDelegate.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{187, 0}"; |
|||
sepNavVisRange = "{0, 340}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2902810F132290080C6A1 /* MGMContactWindow.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{186, 0}"; |
|||
sepNavVisRange = "{0, 669}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2902910F132290080C6A1 /* MGMContactWindow.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 1196}}"; |
|||
sepNavSelRange = "{1530, 13}"; |
|||
sepNavVisRange = "{941, 1725}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2922C10F17A950080C6A1 /* GeckoReporter-Info.plist */ = { |
|||
uiCtxt = { |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB297B910F51A920080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2A85014810EFA81C00CA1273 /* MGMBugWindow.m */; |
|||
name = "MGMBugWindow.m: 80"; |
|||
rLen = 0; |
|||
rLoc = 2035; |
|||
rType = 0; |
|||
vrLen = 0; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB297E110F5428A0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2A85014810EFA81C00CA1273 /* MGMBugWindow.m */; |
|||
name = "MGMBugWindow.m: 80"; |
|||
rLen = 0; |
|||
rLoc = 2035; |
|||
rType = 0; |
|||
vrLen = 0; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB297F610F542DF0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2A85014810EFA81C00CA1273 /* MGMBugWindow.m */; |
|||
name = "MGMBugWindow.m: 80"; |
|||
rLen = 0; |
|||
rLoc = 2035; |
|||
rType = 0; |
|||
vrLen = 0; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB2983210F54BA00080C6A1 /* English */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {2973, 646}}"; |
|||
sepNavSelRange = "{0, 0}"; |
|||
sepNavVisRange = "{0, 2172}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2984D10F54BB40080C6A1 /* pt_PT */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1601, 646}}"; |
|||
sepNavSelRange = "{1209, 0}"; |
|||
sepNavVisRange = "{0, 1212}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2985110F54C1E0080C6A1 /* es */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1524, 646}}"; |
|||
sepNavSelRange = "{1160, 0}"; |
|||
sepNavVisRange = "{0, 1163}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2985C10F54D490080C6A1 /* MGMLocalized.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{316, 34}"; |
|||
sepNavVisRange = "{0, 399}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AB2987E10F5537D0080C6A1 /* License.txt */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{670, 0}"; |
|||
sepNavVisRange = "{0, 1229}"; |
|||
}; |
|||
}; |
|||
2AB2988010F5537F0080C6A1 /* PBXBookmark */ = { |
|||
isa = PBXBookmark; |
|||
fRef = 2AB2987E10F5537D0080C6A1 /* License.txt */; |
|||
}; |
|||
2AB2988E10F5590F0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2A85014810EFA81C00CA1273 /* MGMBugWindow.m */; |
|||
name = "MGMBugWindow.m: 80"; |
|||
rLen = 0; |
|||
rLoc = 2035; |
|||
rType = 0; |
|||
vrLen = 0; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB2989710F5590F0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2AB2987E10F5537D0080C6A1 /* License.txt */; |
|||
name = "License.txt: 11"; |
|||
rLen = 0; |
|||
rLoc = 670; |
|||
rType = 0; |
|||
vrLen = 1229; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB2989A10F5590F0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2AB2989B10F5590F0080C6A1 /* Sparkle.strings */; |
|||
rLen = 0; |
|||
rLoc = 2147483647; |
|||
rType = 0; |
|||
}; |
|||
2AB2989B10F5590F0080C6A1 /* Sparkle.strings */ = { |
|||
isa = PBXFileReference; |
|||
lastKnownFileType = text.plist.strings; |
|||
name = Sparkle.strings; |
|||
path = "/Users/grmrgecko/Downloads/Sparkle 1.5b6/Extras/Source Code/en.lproj/Sparkle.strings"; |
|||
sourceTree = "<absolute>"; |
|||
}; |
|||
2AB2989C10F5590F0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2AB2989D10F5590F0080C6A1 /* Sparkle.strings */; |
|||
name = "Sparkle.strings: 1"; |
|||
rLen = 0; |
|||
rLoc = 0; |
|||
rType = 0; |
|||
vrLen = 2737; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB2989D10F5590F0080C6A1 /* Sparkle.strings */ = { |
|||
isa = PBXFileReference; |
|||
name = Sparkle.strings; |
|||
path = "/Users/grmrgecko/Downloads/Sparkle 1.5b6/Extras/Source Code/en.lproj/Sparkle.strings"; |
|||
sourceTree = "<absolute>"; |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {2588, 1105}}"; |
|||
sepNavSelRange = "{0, 0}"; |
|||
sepNavVisRange = "{0, 2737}"; |
|||
}; |
|||
}; |
|||
2AB298A510F55CBA0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2A85014810EFA81C00CA1273 /* MGMBugWindow.m */; |
|||
name = "MGMBugWindow.m: 80"; |
|||
rLen = 0; |
|||
rLoc = 2035; |
|||
rType = 0; |
|||
vrLen = 0; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB298A610F55CBA0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2AB2987E10F5537D0080C6A1 /* License.txt */; |
|||
name = "License.txt: 11"; |
|||
rLen = 0; |
|||
rLoc = 670; |
|||
rType = 0; |
|||
vrLen = 1229; |
|||
vrLoc = 0; |
|||
}; |
|||
2AB298A710F55CBA0080C6A1 /* PBXTextBookmark */ = { |
|||
isa = PBXTextBookmark; |
|||
fRef = 2AB2989D10F5590F0080C6A1 /* Sparkle.strings */; |
|||
name = "Sparkle.strings: 1"; |
|||
rLen = 0; |
|||
rLoc = 0; |
|||
rType = 0; |
|||
vrLen = 2737; |
|||
vrLoc = 0; |
|||
}; |
|||
2AC8693C10EE7EDE000743D2 /* Prefix.pch */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{0, 187}"; |
|||
sepNavVisRange = "{0, 241}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8694A10EE8062000743D2 /* GeckoReporter.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{75, 2}"; |
|||
sepNavVisRange = "{0, 280}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8694B10EE8062000743D2 /* MGMReporter.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{183, 0}"; |
|||
sepNavVisRange = "{0, 632}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8694C10EE8062000743D2 /* MGMReporter.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 1495}}"; |
|||
sepNavSelRange = "{183, 0}"; |
|||
sepNavVisRange = "{0, 1845}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8694D10EE8062000743D2 /* MGMReportWindow.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{187, 0}"; |
|||
sepNavVisRange = "{0, 1200}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8694E10EE8062000743D2 /* MGMReportWindow.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1475, 1807}}"; |
|||
sepNavSelRange = "{3461, 13}"; |
|||
sepNavVisRange = "{2748, 2013}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8694F10EE8062000743D2 /* MGMSender.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{181, 0}"; |
|||
sepNavVisRange = "{0, 716}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8695110EE8062000743D2 /* MGMSystemInfo.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{185, 0}"; |
|||
sepNavVisRange = "{0, 880}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC8695210EE8062000743D2 /* MGMSystemInfo.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 3224}}"; |
|||
sepNavSelRange = "{86, 99}"; |
|||
sepNavVisRange = "{0, 1448}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC869AD10EE82B3000743D2 /* English */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{44, 0}"; |
|||
sepNavVisRange = "{0, 44}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC869AF10EE82CF000743D2 /* GeckoReporter Test-Info.plist */ = { |
|||
uiCtxt = { |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC869B510EE83C3000743D2 /* MGMController.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{183, 0}"; |
|||
sepNavVisRange = "{0, 472}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC869B610EE83C3000743D2 /* MGMController.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{183, 0}"; |
|||
sepNavVisRange = "{0, 989}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC86A0A10EE8C12000743D2 /* GeckoReporter Test */ = { |
|||
activeExec = 0; |
|||
executables = ( |
|||
2AC86A0C10EE8C12000743D2 /* GeckoReporter Test */, |
|||
); |
|||
}; |
|||
2AC86A0C10EE8C12000743D2 /* GeckoReporter Test */ = { |
|||
isa = PBXExecutable; |
|||
activeArgIndices = ( |
|||
); |
|||
argumentStrings = ( |
|||
); |
|||
autoAttachOnCrash = 1; |
|||
breakpointsEnabled = 0; |
|||
configStateDict = { |
|||
}; |
|||
customDataFormattersEnabled = 1; |
|||
dataTipCustomDataFormattersEnabled = 1; |
|||
dataTipShowTypeColumn = 1; |
|||
dataTipSortType = 0; |
|||
debuggerPlugin = GDBDebugging; |
|||
disassemblyDisplayState = 0; |
|||
dylibVariantSuffix = ""; |
|||
enableDebugStr = 1; |
|||
environmentEntries = ( |
|||
); |
|||
executableSystemSymbolLevel = 0; |
|||
executableUserSymbolLevel = 0; |
|||
libgmallocEnabled = 0; |
|||
name = "GeckoReporter Test"; |
|||
savedGlobals = { |
|||
}; |
|||
showTypeColumn = 0; |
|||
sourceDirectories = ( |
|||
); |
|||
variableFormatDictionary = { |
|||
$cs = 1; |
|||
$ds = 1; |
|||
$eax = 1; |
|||
$ebp = 1; |
|||
$ebx = 1; |
|||
$ecx = 1; |
|||
$edi = 1; |
|||
$edx = 1; |
|||
$eflags = 1; |
|||
$eip = 1; |
|||
$es = 1; |
|||
$esi = 1; |
|||
$esp = 1; |
|||
$fs = 1; |
|||
$gs = 1; |
|||
$mxcsr = 1; |
|||
$ss = 1; |
|||
}; |
|||
}; |
|||
2AC86A9C10EE9149000743D2 /* main.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{227, 0}"; |
|||
sepNavVisRange = "{0, 254}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC86B4510EE9DD7000743D2 /* MGMLog.h */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 646}}"; |
|||
sepNavSelRange = "{176, 0}"; |
|||
sepNavVisRange = "{0, 287}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC86B4610EE9DD7000743D2 /* MGMLog.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 1196}}"; |
|||
sepNavSelRange = "{176, 0}"; |
|||
sepNavVisRange = "{0, 1785}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
2AC86CD710EEC2B4000743D2 /* NSThread.h */ = { |
|||
isa = PBXFileReference; |
|||
lastKnownFileType = sourcecode.c.h; |
|||
name = NSThread.h; |
|||
path = /Users/grmrgecko/Desktop/AppKit/NSThread.h; |
|||
sourceTree = "<absolute>"; |
|||
}; |
|||
2AC86CF010EEC54C000743D2 /* MGMSender.m */ = { |
|||
uiCtxt = { |
|||
sepNavIntBoundsRect = "{{0, 0}, {1176, 5239}}"; |
|||
sepNavSelRange = "{706, 0}"; |
|||
sepNavVisRange = "{0, 1732}"; |
|||
sepNavWindowFrame = "{{15, 4}, {1235, 774}}"; |
|||
}; |
|||
}; |
|||
8DC2EF4F0486A6940098B216 /* GeckoReporter */ = { |
|||
activeExec = 0; |
|||
}; |
|||
} |
1603
GeckoReporter.xcodeproj/grmrgecko.perspectivev3
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,654 @@ |
|||
// !$*UTF8*$! |
|||
{ |
|||
archiveVersion = 1; |
|||
classes = { |
|||
}; |
|||
objectVersion = 45; |
|||
objects = { |
|||
|
|||
/* Begin PBXBuildFile section */ |
|||
2A85014410EFA6A700CA1273 /* MGMFeedback.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A85014210EFA6A700CA1273 /* MGMFeedback.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2A85014510EFA6A700CA1273 /* MGMFeedback.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A85014310EFA6A700CA1273 /* MGMFeedback.m */; }; |
|||
2A85014910EFA81C00CA1273 /* MGMBugWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A85014710EFA81C00CA1273 /* MGMBugWindow.h */; settings = {ATTRIBUTES = (Private, ); }; }; |
|||
2A85014A10EFA81C00CA1273 /* MGMBugWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A85014810EFA81C00CA1273 /* MGMBugWindow.m */; }; |
|||
2A8502FD10F0636600CA1273 /* MGMSenderDelegate.h in Headers */ = {isa = PBXBuildFile; fileRef = 2A8502FC10F0636600CA1273 /* MGMSenderDelegate.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2AB2902A10F132290080C6A1 /* MGMContactWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AB2902810F132290080C6A1 /* MGMContactWindow.h */; settings = {ATTRIBUTES = (Private, ); }; }; |
|||
2AB2902B10F132290080C6A1 /* MGMContactWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AB2902910F132290080C6A1 /* MGMContactWindow.m */; }; |
|||
2AB297AF10F51A070080C6A1 /* GeckoReporter.icns in Resources */ = {isa = PBXBuildFile; fileRef = 2AB297A510F5173F0080C6A1 /* GeckoReporter.icns */; }; |
|||
2AB2984610F54BA00080C6A1 /* GeckoReporter.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2AB2983110F54BA00080C6A1 /* GeckoReporter.strings */; }; |
|||
2AB2984910F54BA00080C6A1 /* MGMBugWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AB2983710F54BA00080C6A1 /* MGMBugWindow.xib */; }; |
|||
2AB2984A10F54BA00080C6A1 /* MGMContactWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AB2983910F54BA00080C6A1 /* MGMContactWindow.xib */; }; |
|||
2AB2984B10F54BA00080C6A1 /* MGMReportWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AB2983B10F54BA00080C6A1 /* MGMReportWindow.xib */; }; |
|||
2AB2984C10F54BA00080C6A1 /* ModelNames.plist in Resources */ = {isa = PBXBuildFile; fileRef = 2AB2984110F54BA00080C6A1 /* ModelNames.plist */; }; |
|||
2AB2985D10F54D490080C6A1 /* MGMLocalized.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AB2985C10F54D490080C6A1 /* MGMLocalized.h */; settings = {ATTRIBUTES = (Private, ); }; }; |
|||
2AB2987F10F5537D0080C6A1 /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = 2AB2987E10F5537D0080C6A1 /* License.txt */; }; |
|||
2AC8695410EE8062000743D2 /* GeckoReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC8694A10EE8062000743D2 /* GeckoReporter.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2AC8695510EE8062000743D2 /* MGMReporter.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC8694B10EE8062000743D2 /* MGMReporter.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2AC8695610EE8062000743D2 /* MGMReporter.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC8694C10EE8062000743D2 /* MGMReporter.m */; }; |
|||
2AC8695710EE8062000743D2 /* MGMReportWindow.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC8694D10EE8062000743D2 /* MGMReportWindow.h */; settings = {ATTRIBUTES = (Private, ); }; }; |
|||
2AC8695810EE8062000743D2 /* MGMReportWindow.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC8694E10EE8062000743D2 /* MGMReportWindow.m */; }; |
|||
2AC8695910EE8062000743D2 /* MGMSender.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC8694F10EE8062000743D2 /* MGMSender.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2AC8695B10EE8062000743D2 /* MGMSystemInfo.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC8695110EE8062000743D2 /* MGMSystemInfo.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2AC8695C10EE8062000743D2 /* MGMSystemInfo.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC8695210EE8062000743D2 /* MGMSystemInfo.m */; }; |
|||
2AC869B410EE839E000743D2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AC869B310EE839E000743D2 /* MainMenu.xib */; }; |
|||
2AC86A0F10EE8C1F000743D2 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 2AC869AC10EE82B3000743D2 /* InfoPlist.strings */; }; |
|||
2AC86A1010EE8C1F000743D2 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2AC869B310EE839E000743D2 /* MainMenu.xib */; }; |
|||
2AC86A1210EE8C2B000743D2 /* MGMController.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC869B610EE83C3000743D2 /* MGMController.m */; }; |
|||
2AC86A7410EE901F000743D2 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; |
|||
2AC86A7510EE902E000743D2 /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* GeckoReporter.framework */; }; |
|||
2AC86A7810EE9053000743D2 /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 8DC2EF5B0486A6940098B216 /* GeckoReporter.framework */; }; |
|||
2AC86A9D10EE9149000743D2 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC86A9C10EE9149000743D2 /* main.m */; }; |
|||
2AC86B4710EE9DD7000743D2 /* MGMLog.h in Headers */ = {isa = PBXBuildFile; fileRef = 2AC86B4510EE9DD7000743D2 /* MGMLog.h */; settings = {ATTRIBUTES = (Public, ); }; }; |
|||
2AC86B4810EE9DD7000743D2 /* MGMLog.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC86B4610EE9DD7000743D2 /* MGMLog.m */; }; |
|||
2AC86CF110EEC54C000743D2 /* MGMSender.m in Sources */ = {isa = PBXBuildFile; fileRef = 2AC86CF010EEC54C000743D2 /* MGMSender.m */; }; |
|||
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */; }; |
|||
/* End PBXBuildFile section */ |
|||
|
|||
/* Begin PBXContainerItemProxy section */ |
|||
2AC86A7610EE9049000743D2 /* PBXContainerItemProxy */ = { |
|||
isa = PBXContainerItemProxy; |
|||
containerPortal = 0867D690FE84028FC02AAC07 /* Project object */; |
|||
proxyType = 1; |
|||
remoteGlobalIDString = 8DC2EF4F0486A6940098B216; |
|||
remoteInfo = GeckoReporter; |
|||
}; |
|||
/* End PBXContainerItemProxy section */ |
|||
|
|||
/* Begin PBXCopyFilesBuildPhase section */ |
|||
2AC86A1710EE8C7C000743D2 /* Frameworks */ = { |
|||
isa = PBXCopyFilesBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
dstPath = ""; |
|||
dstSubfolderSpec = 10; |
|||
files = ( |
|||
2AC86A7510EE902E000743D2 /* GeckoReporter.framework in Frameworks */, |
|||
); |
|||
name = Frameworks; |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
/* End PBXCopyFilesBuildPhase section */ |
|||
|
|||
/* Begin PBXFileReference section */ |
|||
0867D69BFE84028FC02AAC07 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; }; |
|||
0867D6A5FE840307C02AAC07 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; }; |
|||
1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; }; |
|||
2A85014210EFA6A700CA1273 /* MGMFeedback.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMFeedback.h; sourceTree = "<group>"; }; |
|||
2A85014310EFA6A700CA1273 /* MGMFeedback.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMFeedback.m; sourceTree = "<group>"; }; |
|||
2A85014710EFA81C00CA1273 /* MGMBugWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMBugWindow.h; sourceTree = "<group>"; }; |
|||
2A85014810EFA81C00CA1273 /* MGMBugWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMBugWindow.m; sourceTree = "<group>"; }; |
|||
2A8502FC10F0636600CA1273 /* MGMSenderDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSenderDelegate.h; sourceTree = "<group>"; }; |
|||
2AB2902810F132290080C6A1 /* MGMContactWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMContactWindow.h; sourceTree = "<group>"; }; |
|||
2AB2902910F132290080C6A1 /* MGMContactWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMContactWindow.m; sourceTree = "<group>"; }; |
|||
2AB2922C10F17A950080C6A1 /* GeckoReporter-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GeckoReporter-Info.plist"; sourceTree = SOURCE_ROOT; }; |
|||
2AB2927710F184CC0080C6A1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/MainMenu.xib; sourceTree = "<group>"; }; |
|||
2AB2977210F50BB80080C6A1 /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/MainMenu.xib; sourceTree = "<group>"; }; |
|||
2AB297A510F5173F0080C6A1 /* GeckoReporter.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = GeckoReporter.icns; sourceTree = SOURCE_ROOT; }; |
|||
2AB2983210F54BA00080C6A1 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/GeckoReporter.strings; sourceTree = "<group>"; }; |
|||
2AB2983810F54BA00080C6A1 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MGMBugWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2983A10F54BA00080C6A1 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MGMContactWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2983C10F54BA00080C6A1 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MGMReportWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2983E10F54BA00080C6A1 /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/MGMBugWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2983F10F54BA00080C6A1 /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/MGMContactWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2984010F54BA00080C6A1 /* es */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = es; path = es.lproj/MGMReportWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2984110F54BA00080C6A1 /* ModelNames.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = ModelNames.plist; sourceTree = "<group>"; }; |
|||
2AB2984310F54BA00080C6A1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/MGMBugWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2984410F54BA00080C6A1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/MGMContactWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2984510F54BA00080C6A1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = pt_PT; path = pt_PT.lproj/MGMReportWindow.xib; sourceTree = "<group>"; }; |
|||
2AB2984D10F54BB40080C6A1 /* pt_PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = pt_PT; path = pt_PT.lproj/GeckoReporter.strings; sourceTree = "<group>"; }; |
|||
2AB2985110F54C1E0080C6A1 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/GeckoReporter.strings; sourceTree = "<group>"; }; |
|||
2AB2985C10F54D490080C6A1 /* MGMLocalized.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMLocalized.h; sourceTree = "<group>"; }; |
|||
2AB2987E10F5537D0080C6A1 /* License.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = License.txt; sourceTree = SOURCE_ROOT; }; |
|||
2AC8693C10EE7EDE000743D2 /* Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Prefix.pch; sourceTree = "<group>"; }; |
|||
2AC8694A10EE8062000743D2 /* GeckoReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GeckoReporter.h; sourceTree = "<group>"; }; |
|||
2AC8694B10EE8062000743D2 /* MGMReporter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMReporter.h; sourceTree = "<group>"; }; |
|||
2AC8694C10EE8062000743D2 /* MGMReporter.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMReporter.m; sourceTree = "<group>"; }; |
|||
2AC8694D10EE8062000743D2 /* MGMReportWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMReportWindow.h; sourceTree = "<group>"; }; |
|||
2AC8694E10EE8062000743D2 /* MGMReportWindow.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMReportWindow.m; sourceTree = "<group>"; }; |
|||
2AC8694F10EE8062000743D2 /* MGMSender.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSender.h; sourceTree = "<group>"; }; |
|||
2AC8695110EE8062000743D2 /* MGMSystemInfo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMSystemInfo.h; sourceTree = "<group>"; }; |
|||
2AC8695210EE8062000743D2 /* MGMSystemInfo.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMSystemInfo.m; sourceTree = "<group>"; }; |
|||
2AC869AD10EE82B3000743D2 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; }; |
|||
2AC869AF10EE82CF000743D2 /* GeckoReporter Test-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GeckoReporter Test-Info.plist"; sourceTree = SOURCE_ROOT; }; |
|||
2AC869B010EE82F1000743D2 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; }; |
|||
2AC869B510EE83C3000743D2 /* MGMController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMController.h; sourceTree = "<group>"; }; |
|||
2AC869B610EE83C3000743D2 /* MGMController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMController.m; sourceTree = "<group>"; }; |
|||
2AC86A0B10EE8C12000743D2 /* GeckoReporter Test.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "GeckoReporter Test.app"; sourceTree = BUILT_PRODUCTS_DIR; }; |
|||
2AC86A9C10EE9149000743D2 /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; |
|||
2AC86B4510EE9DD7000743D2 /* MGMLog.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMLog.h; sourceTree = "<group>"; }; |
|||
2AC86B4610EE9DD7000743D2 /* MGMLog.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMLog.m; sourceTree = "<group>"; }; |
|||
2AC86CF010EEC54C000743D2 /* MGMSender.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMSender.m; sourceTree = "<group>"; }; |
|||
8DC2EF5B0486A6940098B216 /* GeckoReporter.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = GeckoReporter.framework; sourceTree = BUILT_PRODUCTS_DIR; }; |
|||
D2F7E79907B2D74100F64583 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; }; |
|||
/* End PBXFileReference section */ |
|||
|
|||
/* Begin PBXFrameworksBuildPhase section */ |
|||
2AC86A0910EE8C12000743D2 /* Frameworks */ = { |
|||
isa = PBXFrameworksBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
2AC86A7810EE9053000743D2 /* GeckoReporter.framework in Frameworks */, |
|||
2AC86A7410EE901F000743D2 /* Cocoa.framework in Frameworks */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
8DC2EF560486A6940098B216 /* Frameworks */ = { |
|||
isa = PBXFrameworksBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
8DC2EF570486A6940098B216 /* Cocoa.framework in Frameworks */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
/* End PBXFrameworksBuildPhase section */ |
|||
|
|||
/* Begin PBXGroup section */ |
|||
034768DFFF38A50411DB9C8B /* Products */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
8DC2EF5B0486A6940098B216 /* GeckoReporter.framework */, |
|||
2AC86A0B10EE8C12000743D2 /* GeckoReporter Test.app */, |
|||
); |
|||
name = Products; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
0867D691FE84028FC02AAC07 /* GeckoReporter */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AC8694810EE8062000743D2 /* Classes */, |
|||
32C88DFF0371C24200C91783 /* Other Sources */, |
|||
2AC8695D10EE808D000743D2 /* Resources */, |
|||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */, |
|||
034768DFFF38A50411DB9C8B /* Products */, |
|||
); |
|||
name = GeckoReporter; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
0867D69AFE84028FC02AAC07 /* External Frameworks and Libraries */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */, |
|||
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */, |
|||
); |
|||
name = "External Frameworks and Libraries"; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
1058C7B0FEA5585E11CA2CBB /* Linked Frameworks */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
1058C7B1FEA5585E11CA2CBB /* Cocoa.framework */, |
|||
); |
|||
name = "Linked Frameworks"; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
1058C7B2FEA5585E11CA2CBB /* Other Frameworks */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
0867D6A5FE840307C02AAC07 /* AppKit.framework */, |
|||
D2F7E79907B2D74100F64583 /* CoreData.framework */, |
|||
0867D69BFE84028FC02AAC07 /* Foundation.framework */, |
|||
); |
|||
name = "Other Frameworks"; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AB2983010F54BA00080C6A1 /* Framework */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AB2987E10F5537D0080C6A1 /* License.txt */, |
|||
2AB2922C10F17A950080C6A1 /* GeckoReporter-Info.plist */, |
|||
2AB2983110F54BA00080C6A1 /* GeckoReporter.strings */, |
|||
2AB2983710F54BA00080C6A1 /* MGMBugWindow.xib */, |
|||
2AB2983910F54BA00080C6A1 /* MGMContactWindow.xib */, |
|||
2AB2983B10F54BA00080C6A1 /* MGMReportWindow.xib */, |
|||
2AB2984110F54BA00080C6A1 /* ModelNames.plist */, |
|||
); |
|||
path = Framework; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC8694810EE8062000743D2 /* Classes */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AC8694910EE8062000743D2 /* Framework */, |
|||
2AC8695310EE8062000743D2 /* Test */, |
|||
); |
|||
path = Classes; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC8694910EE8062000743D2 /* Framework */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AC8694A10EE8062000743D2 /* GeckoReporter.h */, |
|||
2AC8694B10EE8062000743D2 /* MGMReporter.h */, |
|||
2AC8694C10EE8062000743D2 /* MGMReporter.m */, |
|||
2AC8694D10EE8062000743D2 /* MGMReportWindow.h */, |
|||
2AC8694E10EE8062000743D2 /* MGMReportWindow.m */, |
|||
2A85014210EFA6A700CA1273 /* MGMFeedback.h */, |
|||
2A85014310EFA6A700CA1273 /* MGMFeedback.m */, |
|||
2A85014710EFA81C00CA1273 /* MGMBugWindow.h */, |
|||
2A85014810EFA81C00CA1273 /* MGMBugWindow.m */, |
|||
2AB2902810F132290080C6A1 /* MGMContactWindow.h */, |
|||
2AB2902910F132290080C6A1 /* MGMContactWindow.m */, |
|||
2A8502FC10F0636600CA1273 /* MGMSenderDelegate.h */, |
|||
2AC8694F10EE8062000743D2 /* MGMSender.h */, |
|||
2AC86CF010EEC54C000743D2 /* MGMSender.m */, |
|||
2AC8695110EE8062000743D2 /* MGMSystemInfo.h */, |
|||
2AC8695210EE8062000743D2 /* MGMSystemInfo.m */, |
|||
2AC86B4510EE9DD7000743D2 /* MGMLog.h */, |
|||
2AC86B4610EE9DD7000743D2 /* MGMLog.m */, |
|||
2AB2985C10F54D490080C6A1 /* MGMLocalized.h */, |
|||
); |
|||
path = Framework; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC8695310EE8062000743D2 /* Test */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AC869B510EE83C3000743D2 /* MGMController.h */, |
|||
2AC869B610EE83C3000743D2 /* MGMController.m */, |
|||
); |
|||
path = Test; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC8695D10EE808D000743D2 /* Resources */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AB2983010F54BA00080C6A1 /* Framework */, |
|||
2AC869AB10EE82B3000743D2 /* Test */, |
|||
); |
|||
path = Resources; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC869AB10EE82B3000743D2 /* Test */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AB297A510F5173F0080C6A1 /* GeckoReporter.icns */, |
|||
2AC869AF10EE82CF000743D2 /* GeckoReporter Test-Info.plist */, |
|||
2AC869AC10EE82B3000743D2 /* InfoPlist.strings */, |
|||
2AC869B310EE839E000743D2 /* MainMenu.xib */, |
|||
); |
|||
path = Test; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
32C88DFF0371C24200C91783 /* Other Sources */ = { |
|||
isa = PBXGroup; |
|||
children = ( |
|||
2AC8693C10EE7EDE000743D2 /* Prefix.pch */, |
|||
2AC86A9C10EE9149000743D2 /* main.m */, |
|||
); |
|||
name = "Other Sources"; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
/* End PBXGroup section */ |
|||
|
|||
/* Begin PBXHeadersBuildPhase section */ |
|||
8DC2EF500486A6940098B216 /* Headers */ = { |
|||
isa = PBXHeadersBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
2AC8695410EE8062000743D2 /* GeckoReporter.h in Headers */, |
|||
2AC8695510EE8062000743D2 /* MGMReporter.h in Headers */, |
|||
2AC8695710EE8062000743D2 /* MGMReportWindow.h in Headers */, |
|||
2AC8695910EE8062000743D2 /* MGMSender.h in Headers */, |
|||
2AC8695B10EE8062000743D2 /* MGMSystemInfo.h in Headers */, |
|||
2AC86B4710EE9DD7000743D2 /* MGMLog.h in Headers */, |
|||
2A85014410EFA6A700CA1273 /* MGMFeedback.h in Headers */, |
|||
2A85014910EFA81C00CA1273 /* MGMBugWindow.h in Headers */, |
|||
2A8502FD10F0636600CA1273 /* MGMSenderDelegate.h in Headers */, |
|||
2AB2902A10F132290080C6A1 /* MGMContactWindow.h in Headers */, |
|||
2AB2985D10F54D490080C6A1 /* MGMLocalized.h in Headers */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
/* End PBXHeadersBuildPhase section */ |
|||
|
|||
/* Begin PBXNativeTarget section */ |
|||
2AC86A0A10EE8C12000743D2 /* GeckoReporter Test */ = { |
|||
isa = PBXNativeTarget; |
|||
buildConfigurationList = 2AC86A1810EE8C7C000743D2 /* Build configuration list for PBXNativeTarget "GeckoReporter Test" */; |
|||
buildPhases = ( |
|||
2AC86A0710EE8C12000743D2 /* Resources */, |
|||
2AC86A0810EE8C12000743D2 /* Sources */, |
|||
2AC86A0910EE8C12000743D2 /* Frameworks */, |
|||
2AC86A1710EE8C7C000743D2 /* Frameworks */, |
|||
); |
|||
buildRules = ( |
|||
); |
|||
dependencies = ( |
|||
2AC86A7710EE9049000743D2 /* PBXTargetDependency */, |
|||
); |
|||
name = "GeckoReporter Test"; |
|||
productName = "GeckoReporter Test"; |
|||
productReference = 2AC86A0B10EE8C12000743D2 /* GeckoReporter Test.app */; |
|||
productType = "com.apple.product-type.application"; |
|||
}; |
|||
8DC2EF4F0486A6940098B216 /* GeckoReporter */ = { |
|||
isa = PBXNativeTarget; |
|||
buildConfigurationList = 1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "GeckoReporter" */; |
|||
buildPhases = ( |
|||
8DC2EF500486A6940098B216 /* Headers */, |
|||
8DC2EF520486A6940098B216 /* Resources */, |
|||
8DC2EF540486A6940098B216 /* Sources */, |
|||
8DC2EF560486A6940098B216 /* Frameworks */, |
|||
); |
|||
buildRules = ( |
|||
); |
|||
dependencies = ( |
|||
); |
|||
name = GeckoReporter; |
|||
productInstallPath = "$(HOME)/Library/Frameworks"; |
|||
productName = GeckoReporter; |
|||
productReference = 8DC2EF5B0486A6940098B216 /* GeckoReporter.framework */; |
|||
productType = "com.apple.product-type.framework"; |
|||
}; |
|||
/* End PBXNativeTarget section */ |
|||
|
|||
/* Begin PBXProject section */ |
|||
0867D690FE84028FC02AAC07 /* Project object */ = { |
|||
isa = PBXProject; |
|||
buildConfigurationList = 1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "GeckoReporter" */; |
|||
compatibilityVersion = "Xcode 3.1"; |
|||
hasScannedForEncodings = 1; |
|||
knownRegions = ( |
|||
English, |
|||
Japanese, |
|||
French, |
|||
German, |
|||
"pt-PT", |
|||
pt_PT, |
|||
es, |
|||
); |
|||
mainGroup = 0867D691FE84028FC02AAC07 /* GeckoReporter */; |
|||
productRefGroup = 034768DFFF38A50411DB9C8B /* Products */; |
|||
projectDirPath = ""; |
|||
projectRoot = ""; |
|||
targets = ( |
|||
8DC2EF4F0486A6940098B216 /* GeckoReporter */, |
|||
2AC86A0A10EE8C12000743D2 /* GeckoReporter Test */, |
|||
); |
|||
}; |
|||
/* End PBXProject section */ |
|||
|
|||
/* Begin PBXResourcesBuildPhase section */ |
|||
2AC86A0710EE8C12000743D2 /* Resources */ = { |
|||
isa = PBXResourcesBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
2AB297AF10F51A070080C6A1 /* GeckoReporter.icns in Resources */, |
|||
2AC86A0F10EE8C1F000743D2 /* InfoPlist.strings in Resources */, |
|||
2AC86A1010EE8C1F000743D2 /* MainMenu.xib in Resources */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
8DC2EF520486A6940098B216 /* Resources */ = { |
|||
isa = PBXResourcesBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
2AC869B410EE839E000743D2 /* MainMenu.xib in Resources */, |
|||
2AB2984610F54BA00080C6A1 /* GeckoReporter.strings in Resources */, |
|||
2AB2984910F54BA00080C6A1 /* MGMBugWindow.xib in Resources */, |
|||
2AB2984A10F54BA00080C6A1 /* MGMContactWindow.xib in Resources */, |
|||
2AB2984B10F54BA00080C6A1 /* MGMReportWindow.xib in Resources */, |
|||
2AB2984C10F54BA00080C6A1 /* ModelNames.plist in Resources */, |
|||
2AB2987F10F5537D0080C6A1 /* License.txt in Resources */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
/* End PBXResourcesBuildPhase section */ |
|||
|
|||
/* Begin PBXSourcesBuildPhase section */ |
|||
2AC86A0810EE8C12000743D2 /* Sources */ = { |
|||
isa = PBXSourcesBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
2AC86A9D10EE9149000743D2 /* main.m in Sources */, |
|||
2AC86A1210EE8C2B000743D2 /* MGMController.m in Sources */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
8DC2EF540486A6940098B216 /* Sources */ = { |
|||
isa = PBXSourcesBuildPhase; |
|||
buildActionMask = 2147483647; |
|||
files = ( |
|||
2AC8695610EE8062000743D2 /* MGMReporter.m in Sources */, |
|||
2AC8695810EE8062000743D2 /* MGMReportWindow.m in Sources */, |
|||
2AC8695C10EE8062000743D2 /* MGMSystemInfo.m in Sources */, |
|||
2AC86B4810EE9DD7000743D2 /* MGMLog.m in Sources */, |
|||
2AC86CF110EEC54C000743D2 /* MGMSender.m in Sources */, |
|||
2A85014510EFA6A700CA1273 /* MGMFeedback.m in Sources */, |
|||
2A85014A10EFA81C00CA1273 /* MGMBugWindow.m in Sources */, |
|||
2AB2902B10F132290080C6A1 /* MGMContactWindow.m in Sources */, |
|||
); |
|||
runOnlyForDeploymentPostprocessing = 0; |
|||
}; |
|||
/* End PBXSourcesBuildPhase section */ |
|||
|
|||
/* Begin PBXTargetDependency section */ |
|||
2AC86A7710EE9049000743D2 /* PBXTargetDependency */ = { |
|||
isa = PBXTargetDependency; |
|||
target = 8DC2EF4F0486A6940098B216 /* GeckoReporter */; |
|||
targetProxy = 2AC86A7610EE9049000743D2 /* PBXContainerItemProxy */; |
|||
}; |
|||
/* End PBXTargetDependency section */ |
|||
|
|||
/* Begin PBXVariantGroup section */ |
|||
2AB2983110F54BA00080C6A1 /* GeckoReporter.strings */ = { |
|||
isa = PBXVariantGroup; |
|||
children = ( |
|||
2AB2983210F54BA00080C6A1 /* English */, |
|||
2AB2984D10F54BB40080C6A1 /* pt_PT */, |
|||
2AB2985110F54C1E0080C6A1 /* es */, |
|||
); |
|||
name = GeckoReporter.strings; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AB2983710F54BA00080C6A1 /* MGMBugWindow.xib */ = { |
|||
isa = PBXVariantGroup; |
|||
children = ( |
|||
2AB2983810F54BA00080C6A1 /* English */, |
|||
2AB2983E10F54BA00080C6A1 /* es */, |
|||
2AB2984310F54BA00080C6A1 /* pt_PT */, |
|||
); |
|||
name = MGMBugWindow.xib; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AB2983910F54BA00080C6A1 /* MGMContactWindow.xib */ = { |
|||
isa = PBXVariantGroup; |
|||
children = ( |
|||
2AB2983A10F54BA00080C6A1 /* English */, |
|||
2AB2983F10F54BA00080C6A1 /* es */, |
|||
2AB2984410F54BA00080C6A1 /* pt_PT */, |
|||
); |
|||
name = MGMContactWindow.xib; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AB2983B10F54BA00080C6A1 /* MGMReportWindow.xib */ = { |
|||
isa = PBXVariantGroup; |
|||
children = ( |
|||
2AB2983C10F54BA00080C6A1 /* English */, |
|||
2AB2984010F54BA00080C6A1 /* es */, |
|||
2AB2984510F54BA00080C6A1 /* pt_PT */, |
|||
); |
|||
name = MGMReportWindow.xib; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC869AC10EE82B3000743D2 /* InfoPlist.strings */ = { |
|||
isa = PBXVariantGroup; |
|||
children = ( |
|||
2AC869AD10EE82B3000743D2 /* English */, |
|||
); |
|||
name = InfoPlist.strings; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
2AC869B310EE839E000743D2 /* MainMenu.xib */ = { |
|||
isa = PBXVariantGroup; |
|||
children = ( |
|||
2AC869B010EE82F1000743D2 /* English */, |
|||
2AB2927710F184CC0080C6A1 /* pt_PT */, |
|||
2AB2977210F50BB80080C6A1 /* es */, |
|||
); |
|||
name = MainMenu.xib; |
|||
sourceTree = "<group>"; |
|||
}; |
|||
/* End PBXVariantGroup section */ |
|||
|
|||
/* Begin XCBuildConfiguration section */ |
|||
1DEB91AE08733DA50010E9CD /* Debug */ = { |
|||
isa = XCBuildConfiguration; |
|||
buildSettings = { |
|||
ALWAYS_SEARCH_USER_PATHS = NO; |
|||
COPY_PHASE_STRIP = NO; |
|||
DYLIB_COMPATIBILITY_VERSION = 1; |
|||
DYLIB_CURRENT_VERSION = 1; |
|||
FRAMEWORK_VERSION = A; |
|||
GCC_DYNAMIC_NO_PIC = NO; |
|||
GCC_ENABLE_FIX_AND_CONTINUE = YES; |
|||
GCC_MODEL_TUNING = G5; |
|||
GCC_OPTIMIZATION_LEVEL = 0; |
|||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|||
GCC_PREFIX_HEADER = Prefix.pch; |
|||
GCC_VERSION = 4.0; |
|||
INFOPLIST_FILE = "GeckoReporter-Info.plist"; |
|||
INSTALL_PATH = "@executable_path/../Frameworks"; |
|||
PRODUCT_NAME = GeckoReporter; |
|||
SDKROOT = macosx10.4; |
|||
"SDKROOT[arch=*]" = macosx10.5; |
|||
SKIP_INSTALL = YES; |
|||
WRAPPER_EXTENSION = framework; |
|||
}; |
|||
name = Debug; |
|||
}; |
|||
1DEB91AF08733DA50010E9CD /* Release */ = { |
|||
isa = XCBuildConfiguration; |
|||
buildSettings = { |
|||
ALWAYS_SEARCH_USER_PATHS = YES; |
|||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
|||
DYLIB_COMPATIBILITY_VERSION = 1; |
|||
DYLIB_CURRENT_VERSION = 1; |
|||
FRAMEWORK_VERSION = A; |
|||
GCC_MODEL_TUNING = G5; |
|||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|||
GCC_PREFIX_HEADER = Prefix.pch; |
|||
GCC_VERSION = 4.0; |
|||
INFOPLIST_FILE = "GeckoReporter-Info.plist"; |
|||
INSTALL_PATH = "@executable_path/../Frameworks"; |
|||
PRODUCT_NAME = GeckoReporter; |
|||
SDKROOT = macosx10.4; |
|||
"SDKROOT[arch=x86_64]" = macosx10.5; |
|||
SKIP_INSTALL = YES; |
|||
WRAPPER_EXTENSION = framework; |
|||
}; |
|||
name = Release; |
|||
}; |
|||
1DEB91B208733DA50010E9CD /* Debug */ = { |
|||
isa = XCBuildConfiguration; |
|||
buildSettings = { |
|||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; |
|||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|||
GCC_OPTIMIZATION_LEVEL = 0; |
|||
GCC_WARN_ABOUT_RETURN_TYPE = YES; |
|||
GCC_WARN_UNUSED_VARIABLE = YES; |
|||
ONLY_ACTIVE_ARCH = YES; |
|||
PREBINDING = NO; |
|||
SDKROOT = macosx10.6; |
|||
}; |
|||
name = Debug; |
|||
}; |
|||
1DEB91B308733DA50010E9CD /* Release */ = { |
|||
isa = XCBuildConfiguration; |
|||
buildSettings = { |
|||
ARCHS = "$(ARCHS_STANDARD_32_64_BIT)"; |
|||
GCC_C_LANGUAGE_STANDARD = gnu99; |
|||
GCC_WARN_ABOUT_RETURN_TYPE = YES; |
|||
GCC_WARN_UNUSED_VARIABLE = YES; |
|||
PREBINDING = NO; |
|||
SDKROOT = macosx10.6; |
|||
}; |
|||
name = Release; |
|||
}; |
|||
2AC86A0D10EE8C13000743D2 /* Debug */ = { |
|||
isa = XCBuildConfiguration; |
|||
buildSettings = { |
|||
ALWAYS_SEARCH_USER_PATHS = NO; |
|||
COPY_PHASE_STRIP = NO; |
|||
GCC_DYNAMIC_NO_PIC = NO; |
|||
GCC_ENABLE_FIX_AND_CONTINUE = YES; |
|||
GCC_MODEL_TUNING = G5; |
|||
GCC_OPTIMIZATION_LEVEL = 0; |
|||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|||
GCC_PREFIX_HEADER = Prefix.pch; |
|||
GCC_VERSION = 4.0; |
|||
INFOPLIST_FILE = "GeckoReporter Test-Info.plist"; |
|||
INSTALL_PATH = "$(HOME)/Applications"; |
|||
OTHER_LDFLAGS = ( |
|||
"-framework", |
|||
Foundation, |
|||
"-framework", |
|||
AppKit, |
|||
); |
|||
PREBINDING = NO; |
|||
PRODUCT_NAME = "GeckoReporter Test"; |
|||
SDKROOT = macosx10.4; |
|||
"SDKROOT[arch=*]" = macosx10.5; |
|||
}; |
|||
name = Debug; |
|||
}; |
|||
2AC86A0E10EE8C13000743D2 /* Release */ = { |
|||
isa = XCBuildConfiguration; |
|||
buildSettings = { |
|||
ALWAYS_SEARCH_USER_PATHS = NO; |
|||
COPY_PHASE_STRIP = YES; |
|||
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; |
|||
GCC_ENABLE_FIX_AND_CONTINUE = NO; |
|||
GCC_MODEL_TUNING = G5; |
|||
GCC_PRECOMPILE_PREFIX_HEADER = YES; |
|||
GCC_PREFIX_HEADER = Prefix.pch; |
|||
GCC_VERSION = 4.0; |
|||
INFOPLIST_FILE = "GeckoReporter Test-Info.plist"; |
|||
INSTALL_PATH = "$(HOME)/Applications"; |
|||
OTHER_LDFLAGS = ( |
|||
"-framework", |
|||
Foundation, |
|||
"-framework", |
|||
AppKit, |
|||
); |
|||
PREBINDING = NO; |
|||
PRODUCT_NAME = "GeckoReporter Test"; |
|||
SDKROOT = macosx10.4; |
|||
"SDKROOT[arch=x86_64]" = macosx10.5; |
|||
ZERO_LINK = NO; |
|||
}; |
|||
name = Release; |
|||
}; |
|||
/* End XCBuildConfiguration section */ |
|||
|
|||
/* Begin XCConfigurationList section */ |
|||
1DEB91AD08733DA50010E9CD /* Build configuration list for PBXNativeTarget "GeckoReporter" */ = { |
|||
isa = XCConfigurationList; |
|||
buildConfigurations = ( |
|||
1DEB91AE08733DA50010E9CD /* Debug */, |
|||
1DEB91AF08733DA50010E9CD /* Release */, |
|||
); |
|||
defaultConfigurationIsVisible = 0; |
|||
defaultConfigurationName = Release; |
|||
}; |
|||
1DEB91B108733DA50010E9CD /* Build configuration list for PBXProject "GeckoReporter" */ = { |
|||
isa = XCConfigurationList; |
|||
buildConfigurations = ( |
|||
1DEB91B208733DA50010E9CD /* Debug */, |
|||
1DEB91B308733DA50010E9CD /* Release */, |
|||
); |
|||
defaultConfigurationIsVisible = 0; |
|||
defaultConfigurationName = Release; |
|||
}; |
|||
2AC86A1810EE8C7C000743D2 /* Build configuration list for PBXNativeTarget "GeckoReporter Test" */ = { |
|||
isa = XCConfigurationList; |
|||
buildConfigurations = ( |
|||
2AC86A0D10EE8C13000743D2 /* Debug */, |
|||
2AC86A0E10EE8C13000743D2 /* Release */, |
|||
); |
|||
defaultConfigurationIsVisible = 0; |
|||
defaultConfigurationName = Release; |
|||
}; |
|||
/* End XCConfigurationList section */ |
|||
}; |
|||
rootObject = 0867D690FE84028FC02AAC07 /* Project object */; |
|||
} |
@ -0,0 +1,22 @@ |
|||
Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
|
|||
Permission is granted, to any person obtaining a copy of this framework, to |
|||
use, copy, modify, merge, or redistribute this framework under the following terms: |
|||
|
|||
1. This file must be included in all copies of this framework unmodified in |
|||
GeckoReporter.framework/Resource/License.txt and/or GeckoReporter.framework/Versions/A/Resources/License.txt. |
|||
|
|||
2. THIS FRAMEWORK IS PROVIDED "AS IS" BY JAMES COLEMAN, WITHOUT WARRANTY OF |
|||
ANY KIND. IF YOUR SOFTWARE/FRAMEWORK/COMPUTER CRASH OR FAILS TO WORK IN ANY |
|||
WAY SHAPE OR FORM BECAUSE OF THIS FRAMEWORK, I (JAMES COLEMAN) AM NOT IN ANYWAY |
|||
RESPONSIBLE FOR YOUR PROBLEM. BUT, I WILL MOST LIKELY BE WILLING TO HELP YOU |
|||
GET YOUR SOFTWARE/FRAMEWORK/COMPUTER WORKING AGAIN. |
|||
|
|||
3. Redistributions of source code included in this framework must retain the |
|||
copyright notice on top of this License file without modifications. |
|||
|
|||
4. If you use the crash reporter in this framework, it must retain the NSTextField |
|||
with the string "GeckoReporter by Mr. Gecko's Media" without modifications. |
|||
|
|||
5. For the users convenience, you must retain the notice about anonymous system |
|||
information being sent. |
@ -0,0 +1,13 @@ |
|||
/* |
|||
* Preifx.pch |
|||
* GeckoReporter |
|||
* |
|||
* Created by Mr. Gecko on 12/27/09. |
|||
* Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
* |
|||
*/ |
|||
|
|||
|
|||
#ifdef __OBJC__ |
|||
#import <Cocoa/Cocoa.h> |
|||
#endif |
@ -0,0 +1,15 @@ |
|||
Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
|
|||
Documentation is on my todo list. |
|||
|
|||
List of info.plist properties that can also be put into the NSUserDefaults. |
|||
MGMGRCrashEmail - The email address crash reports are sent to. |
|||
MGMGRBugsEmail - The email address bug reports are sent to. (If blank, bug reports are sent to the crash report email address.) |
|||
MGMGRContactEmail - The email address messages from contact me are sent to. (If blank, bug reports are sent to the bug report email address.) |
|||
MGMGRLogFiles - Log files of your application to be sent when a crash report is sent. |
|||
MGMGRReportFileAttached - If YES then crash reports are attached, if NO then crash reports are in the message. |
|||
MGMGRTimeFormat - The time format for crash report date. (http://developer.apple.com/mac/library/DOCUMENTATION/Cocoa/Conceptual/DataFormatting/Articles/df100103.html) |
|||
MGMGRTimeZone - The time zone you would like the crash report date to show in. |
|||
MGMGRURL - If you do not trust my server, you can host the php file copied from my server to you own and modify it. |
|||
|
|||
Please send patches to support@mrgeckosmedia.com and I'll over view it and include credit to your fixes as needed. |
1414
Resources/Framework/English.lproj/MGMBugWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1442
Resources/Framework/English.lproj/MGMContactWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2846
Resources/Framework/English.lproj/MGMReportWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,206 @@ |
|||
<?xml version="1.0" encoding="UTF-8"?> |
|||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> |
|||
<plist version="1.0"> |
|||
<dict> |
|||
<key>ADP2,1</key> |
|||
<string>Developer Transition Kit</string> |
|||
<key>iMac1,1</key> |
|||
<string>iMac G3 (Rev A-D)</string> |
|||
<key>PowerMac2,1</key> |
|||
<string>iMac G3 (Slot-loading CD-ROM)</string> |
|||
<key>PowerMac2,2</key> |
|||
<string>iMac G3 (Summer 2000)</string> |
|||
<key>PowerMac4,1</key> |
|||
<string>iMac G3 (2001)</string> |
|||
<key>PowerMac4,2</key> |
|||
<string>iMac G4 (Flat Panel)</string> |
|||
<key>PowerMac4,5</key> |
|||
<string>iMac G4 (17" Flat Panel)</string> |
|||
<key>PowerMac6,1</key> |
|||
<string>iMac G4 (USB 2.0)</string> |
|||
<key>PowerMac6,3</key> |
|||
<string>iMac G4 (20" Flat Panel)</string> |
|||
<key>PowerMac8,1</key> |
|||
<string>iMac G5</string> |
|||
<key>PowerMac8,2</key> |
|||
<string>iMac G5 (Ambient Light Sensor)</string> |
|||
<key>PowerMac12,1</key> |
|||
<string>iMac G5 (iSight)</string> |
|||
<key>iMac4,1</key> |
|||
<string>iMac (Core Duo)</string> |
|||
<key>iMac4,2</key> |
|||
<string>iMac for Education (17" Core Duo)</string> |
|||
<key>iMac5,1</key> |
|||
<string>iMac (Core 2 Duo 17"/20" SuperDrive)</string> |
|||
<key>iMac5,2</key> |
|||
<string>iMac (Core 2 Duo 17" Combo Drive)</string> |
|||
<key>iMac6,1</key> |
|||
<string>iMac (Core 2 Duo 24" SuperDrive)</string> |
|||
<key>iMac7,1</key> |
|||
<string>iMac (AI)</string> |
|||
<key>iMac8,1</key> |
|||
<string>iMac (2008)</string> |
|||
<key>iMac9,1</key> |
|||
<string>iMac (2009)</string> |
|||
<key>iMac10,1</key> |
|||
<string>iMac (2009 Magic)</string> |
|||
<key>iMac11,1</key> |
|||
<string>iMac (2009 Core I5)</string> |
|||
<key>PowerMac4,4</key> |
|||
<string>eMac</string> |
|||
<key>PowerMac6,4</key> |
|||
<string>eMac (USB 2.0 2005)</string> |
|||
<key>PowerMac10,1</key> |
|||
<string>Mac Mini G4</string> |
|||
<key>PowerMac10,2</key> |
|||
<string>Mac Mini (2005)</string> |
|||
<key>Macmini1,1</key> |
|||
<string>Mac Mini (Core Solo/Duo)</string> |
|||
<key>Macmini2,1</key> |
|||
<string>Mac Mini (Core 2 Duo)</string> |
|||
<key>Macmini3,1</key> |
|||
<string>Mac Mini (2009)</string> |
|||
<key>PowerBook2,1</key> |
|||
<string>iBook G3</string> |
|||
<key>PowerBook2,2</key> |
|||
<string>iBook G3 (FireWire)</string> |
|||
<key>PowerBook2,3</key> |
|||
<string>iBook G3</string> |
|||
<key>PowerBook2,4</key> |
|||
<string>iBook G3</string> |
|||
<key>PowerBook4,1</key> |
|||
<string>iBook G3 (Dual USB 2001)</string> |
|||
<key>PowerBook4,2</key> |
|||
<string>iBook G3 (16MB VRAM)</string> |
|||
<key>PowerBook4,3</key> |
|||
<string>iBook G3 Opaque 16MB VRAM/32MB VRAM 2003)</string> |
|||
<key>PowerBook6,3</key> |
|||
<string>iBook G4</string> |
|||
<key>PowerBook6,5</key> |
|||
<string>iBook G4 (2004)</string> |
|||
<key>PowerBook6,7</key> |
|||
<string>iBook G4 (Mid 2005)</string> |
|||
<key>PowerBook1,1</key> |
|||
<string>PowerBook G3</string> |
|||
<key>PowerBook3,1</key> |
|||
<string>PowerBook G3 (FireWire)</string> |
|||
<key>PowerBook3,2</key> |
|||
<string>PowerBook G4</string> |
|||
<key>PowerBook3,3</key> |
|||
<string>PowerBook G4 (Gigabit Ethernet)</string> |
|||
<key>PowerBook3,4</key> |
|||
<string>PowerBook G4 (DVI)</string> |
|||
<key>PowerBook3,5</key> |
|||
<string>PowerBook G4 (1GHz/867MHz)</string> |
|||
<key>PowerBook5,1</key> |
|||
<string>PowerBook G4 (17")</string> |
|||
<key>PowerBook5,2</key> |
|||
<string>PowerBook G4 (15" FW 800)</string> |
|||
<key>PowerBook5,3</key> |
|||
<string>PowerBook G4 (17" 1.33GHz)</string> |
|||
<key>PowerBook5,4</key> |
|||
<string>PowerBook G4 (15" 1.5/1.33GHz)</string> |
|||
<key>PowerBook5,5</key> |
|||
<string>PowerBook G4 (17" 1.5GHz)</string> |
|||
<key>PowerBook5,6</key> |
|||
<string>PowerBook G4 (15" 1.67GHz/1.5GHz)</string> |
|||
<key>PowerBook5,7</key> |
|||
<string>PowerBook G4 (17" 1.67GHz)</string> |
|||
<key>PowerBook5,8</key> |
|||
<string>PowerBook G4 (Double layer SD 15")</string> |
|||
<key>PowerBook5,9</key> |
|||
<string>PowerBook G4 (Double layer SD 17")</string> |
|||
<key>PowerBook6,1</key> |
|||
<string>PowerBook G4 (12")</string> |
|||
<key>PowerBook6,2</key> |
|||
<string>PowerBook G4 (12" DVI)</string> |
|||
<key>PowerBook6,4</key> |
|||
<string>PowerBook G4 (12" 1.33GHz)</string> |
|||
<key>PowerBook6,8</key> |
|||
<string>PowerBook G4 (12" 1.5GHz)</string> |
|||
<key>MacBook1,1</key> |
|||
<string>MacBook (Core Duo)</string> |
|||
<key>MacBook2,1</key> |
|||
<string>MacBook (Core 2 Duo)</string> |
|||
<key>MacBook4,1</key> |
|||
<string>MacBook (2008)</string> |
|||
<key>MacBook5,1</key> |
|||
<string>MacBook (Unibody)</string> |
|||
<key>MacBook5,2</key> |
|||
<string>MacBook (White 2009)</string> |
|||
<key>MacBook6,1</key> |
|||
<string>MacBook (White Unibody)</string> |
|||
<key>MacBookAir1,1</key> |
|||
<string>MacBook Air (2008)</string> |
|||
<key>MacBookPro1,1</key> |
|||
<string>MacBook Pro Core Duo (15")</string> |
|||
<key>MacBookPro1,2</key> |
|||
<string>MacBook Pro Core Duo (17")</string> |
|||
<key>MacBookPro2,1</key> |
|||
<string>MacBook Pro Core 2 Duo (17")</string> |
|||
<key>MacBookPro2,2</key> |
|||
<string>MacBook Pro Core 2 Duo (15")</string> |
|||
<key>MacBookPro3,1</key> |
|||
<string>MacBook Pro Core 2 Duo (15" LED Core 2 Duo)</string> |
|||
<key>MacBookPro3,2</key> |
|||
<string>MacBook Pro Core 2 Duo (17" HD Core 2 Duo)</string> |
|||
<key>MacBookPro4,1</key> |
|||
<string>MacBook Pro (Core 2 Duo 2008)</string> |
|||
<key>MacBookPro5,1</key> |
|||
<string>MacBook Pro (Unibody)</string> |
|||
<key>MacBookPro5,2</key> |
|||
<string>MacBook Pro (Unibody 17" 2009)</string> |
|||
<key>MacBookPro5,3</key> |
|||
<string>MacBook Pro (Unibody 15" 2009)</string> |
|||
<key>MacBookPro5,4</key> |
|||
<string>MacBook Pro (Unibody 15" 2009)</string> |
|||
<key>MacBookPro5,5</key> |
|||
<string>MacBook Pro (Unibody 13" 2009)</string> |
|||
<key>PowerMac1,1</key> |
|||
<string>Power Macintosh G3 (Blue & White)</string> |
|||
<key>PowerMac1,2</key> |
|||
<string>Power Macintosh G4 (PCI Graphics)</string> |
|||
<key>PowerMac11,2</key> |
|||
<string>Power Macintosh G5 (2005)</string> |
|||
<key>PowerMac3,1</key> |
|||
<string>Power Macintosh G4 (AGP Graphics)</string> |
|||
<key>PowerMac3,2</key> |
|||
<string>Power Macintosh G4 (AGP Graphics)</string> |
|||
<key>PowerMac3,3</key> |
|||
<string>Power Macintosh G4 (Gigabit Ethernet)</string> |
|||
<key>PowerMac3,4</key> |
|||
<string>Power Macintosh G4 (Digital Audio)</string> |
|||
<key>PowerMac3,5</key> |
|||
<string>Power Macintosh G4 (Quick Silver)</string> |
|||
<key>PowerMac3,6</key> |
|||
<string>Power Macintosh G4 (Mirrored Drive Door)</string> |
|||
<key>PowerMac5,1</key> |
|||
<string>Power Macintosh G4 Cube</string> |
|||
<key>PowerMac7,2</key> |
|||
<string>Power Macintosh G5</string> |
|||
<key>PowerMac7,3</key> |
|||
<string>Power Macintosh G5</string> |
|||
<key>PowerMac9,1</key> |
|||
<string>Power Macintosh G5 (2005)</string> |
|||
<key>MacPro1,1</key> |
|||
<string>Mac Pro (Four-Core)</string> |
|||
<key>MacPro2,1</key> |
|||
<string>Mac Pro (Eight-Core)</string> |
|||
<key>MacPro3,1</key> |
|||
<string>Mac Pro (2008 4/8 core "Harpertown")</string> |
|||
<key>MacPro4,1</key> |
|||
<string>Mac Pro (2009 "Nehalem")</string> |
|||
<key>RackMac1,1</key> |
|||
<string>Xserve G4</string> |
|||
<key>RackMac1,2</key> |
|||
<string>Xserve G4 (Slot-loading cluster node)</string> |
|||
<key>RackMac3,1</key> |
|||
<string>Xserve G5</string> |
|||
<key>Xserve1,1</key> |
|||
<string>Xserve (Intel Xeon)</string> |
|||
<key>Xserve2,1</key> |
|||
<string>Xserve (2008 Quad-Core)</string> |
|||
<key>Xserve3,1</key> |
|||
<string>Xserve (2009 Quad-Core)</string> |
|||
</dict> |
|||
</plist> |
1414
Resources/Framework/es.lproj/MGMBugWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1442
Resources/Framework/es.lproj/MGMContactWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2847
Resources/Framework/es.lproj/MGMReportWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1414
Resources/Framework/pt_PT.lproj/MGMBugWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1442
Resources/Framework/pt_PT.lproj/MGMContactWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2846
Resources/Framework/pt_PT.lproj/MGMReportWindow.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1 @@ |
|||
/* Localized versions of Info.plist keys */ |
4399
Resources/Test/English.lproj/MainMenu.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
4399
Resources/Test/es.lproj/MainMenu.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
4399
Resources/Test/pt_PT.lproj/MainMenu.xib
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,13 @@ |
|||
// |
|||
// main.m |
|||
// GeckoReporter |
|||
// |
|||
// Created by Mr. Gecko on 1/1/10. |
|||
// Copyright 2010 Mr. Gecko's Media. All rights reserved. |
|||
// |
|||
|
|||
#import <Cocoa/Cocoa.h> |
|||
|
|||
int main(int argc, char *argv[]) { |
|||
return NSApplicationMain(argc, (const char **) argv); |
|||
} |
@ -0,0 +1,174 @@ |
|||
<?php |
|||
/* |
|||
* sendreport.php |
|||
* GeckoReporter |
|||
* |
|||
* Created by Mr. Gecko on 12/28/09. |
|||
* Copyright 2010 by Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/ |
|||
* |
|||
*/ |
|||
|
|||
//Debug
|
|||
//print_r($_FILES);
|
|||
//print_r($_POST);
|
|||
|
|||
function buildBody($FILES, $BOUNDARY) { |
|||
$BODY = "\n\r\n"; |
|||
$KEYS = array_keys($FILES); |
|||
for ($i=0; $i<count($KEYS); $i++) { |
|||
$KEY = $KEYS[$i]; |
|||
$FILE = $_FILES[$KEY]['tmp_name']; |
|||
$FILENAME = $_FILES[$KEY]['name']; |
|||
$FILETYPE = $_FILES[$KEY]['type']; |
|||
$FILESIZE = $_FILES[$KEY]['size']; |
|||
$BODY .= "--$BOUNDARY\r\n"; |
|||
$BODY .= "Content-Disposition: attachment; filename=\"{$FILENAME}\"\r\n"; |
|||
$BODY .= "Content-Type: {$FILETYPE} name=\"{$FILENAME}\"\r\n"; |
|||
$BODY .= "Content-Transfer-Encoding: binary\r\n\r\n"; |
|||
$FILEPIPE = fopen($FILE, "r"); |
|||
$BODY .= fread($FILEPIPE, $FILESIZE); |
|||
fclose($FILEPIPE); |
|||
$BODY .= "\r\n"; |
|||
} |
|||
$BODY .= "--{$BOUNDARY}--"; |
|||
return $BODY; |
|||
} |
|||
|
|||
//Word of warning, IP is for debugging, do not include the IP of your user without the knowledge that your user may not user your application afterword.
|
|||
//$_POST['IP'] = $_SERVER['HTTP_PC_REMOTE_ADDR']!="" ? $_SERVER['HTTP_PC_REMOTE_ADDR'] : $_SERVER['REMOTE_ADDR'];
|
|||
|
|||
$_POST['User_Agent'] = urldecode($_SERVER['HTTP_USER_AGENT']); |
|||
if ($_POST['GRType']=="crash") { |
|||
unset($_POST['GRType']); |
|||
$email = $_POST['GREmail']; |
|||
unset($_POST['GREmail']); |
|||
$subject = $_POST['GRSubject']; |
|||
unset($_POST['GRSubject']); |
|||
$userReport = isset($_POST['GRUserReport']) ? trim($_POST['GRUserReport']) : ""; |
|||
unset($_POST['GRUserReport']); |
|||
$boundary = "--Boundary+".rand(0, 100000); |
|||
|
|||
if ($_POST['GRReportAttached']=="NO") { |
|||
if (isset($_FILES['reportFile'])) { |
|||
$filePipe = fopen($_FILES['reportFile']['tmp_name'], "r"); |
|||
$reportFileContents = fread($filePipe, $_FILES['reportFile']['size']); |
|||
fclose($filePipe); |
|||
unset($_FILES['reportFile']); |
|||
$_POST['Report'] = "\n\n".$reportFileContents; |
|||
} |
|||
} |
|||
unset($_POST['GRReportAttached']); |
|||
if (preg_match("/([\w\.\-]+)(\@[\w\.\-]+)(\.[a-z]{2,4})+/i", $_POST['User_Email_Address'])) { |
|||
$fromEmail = "{$_POST['User_Email_Address']}"; |
|||
} else { |
|||
$fromEmail = "\"Mr. Gecko's Media\" <webmaster@mrgeckosmedia.com>"; |
|||
} |
|||
|
|||
$headers = "From: {$fromEmail}\r\n"; |
|||
$headers .= "X-Mailer: GeckoReporter/{$_POST['GRVersion']}\r\n"; |
|||
unset($_POST['GRVersion']); |
|||
$headers .= "MIME-Version: 1.0\r\n"; |
|||
$headers .= "Content-Type: multipart/mixed; boundary={$boundary}\r\n\r\n"; |
|||
|
|||
$headers .= "--$boundary\r\n"; |
|||
$headers .= "Content-Type: text/plain; charset=utf-8\r\n"; |
|||
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; |
|||
$KEYS = array_keys($_POST); |
|||
sort($KEYS); |
|||
for ($i=0; $i<count($KEYS); $i++) { |
|||
$KEY = $KEYS[$i]; |
|||
$NAME = str_replace("_", " ", $KEY); |
|||
$headers .= "{$NAME}: {$_POST[$KEY]}\n"; |
|||
} |
|||
if ($userReport!="") |
|||
$headers .= "\nThe user was\n$userReport"; |
|||
|
|||
$headers .= buildBody($_FILES, $boundary); |
|||
|
|||
$sent = mail($email, $subject, "This is a multipart message, your email client needs to support mime 1.0 in order to read this message.", $headers); |
|||
|
|||
echo ($sent ? "Crash Report Was Sent" : "Crash Report Was Not Sent"); |
|||
} else if ($_POST['GRType']=="bug") { |
|||
unset($_POST['GRType']); |
|||
$email = $_POST['GREmail']; |
|||
unset($_POST['GREmail']); |
|||
$subject = $_POST['GRSubject']; |
|||
unset($_POST['GRSubject']); |
|||
$bug = isset($_POST['GRBug']) ? trim($_POST['GRBug']) : ""; |
|||
unset($_POST['GRBug']); |
|||
$reproduce = isset($_POST['GRReproduce']) ? trim($_POST['GRReproduce']) : ""; |
|||
unset($_POST['GRReproduce']); |
|||
$boundary = "--Boundary+".rand(0, 100000); |
|||
if (preg_match("/([\w\.\-]+)(\@[\w\.\-]+)(\.[a-z]{2,4})+/i", $_POST['User_Email_Address'])) { |
|||
$fromEmail = "{$_POST['User_Email_Address']}"; |
|||
} else { |
|||
$fromEmail = "\"Mr. Gecko's Media\" <webmaster@mrgeckosmedia.com>"; |
|||
} |
|||
|
|||
$headers = "From: {$fromEmail}\r\n"; |
|||
$headers .= "X-Mailer: GeckoReporter/{$_POST['GRVersion']}\r\n"; |
|||
unset($_POST['GRVersion']); |
|||
$headers .= "MIME-Version: 1.0\r\n"; |
|||
$headers .= "Content-Type: multipart/mixed; boundary={$boundary}\r\n\r\n"; |
|||
|
|||
$headers .= "--$boundary\r\n"; |
|||
$headers .= "Content-Type: text/plain; charset=utf-8\r\n"; |
|||
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; |
|||
$KEYS = array_keys($_POST); |
|||
sort($KEYS); |
|||
for ($i=0; $i<count($KEYS); $i++) { |
|||
$KEY = $KEYS[$i]; |
|||
$NAME = str_replace("_", " ", $KEY); |
|||
$headers .= "{$NAME}: {$_POST[$KEY]}\n"; |
|||
} |
|||
if ($bug!="") |
|||
$headers .= "\nThe Bug\n$bug\n"; |
|||
if ($reproduce!="") |
|||
$headers .= "\nHow you can reproduce it\n$reproduce\n"; |
|||
|
|||
$headers .= buildBody($_FILES, $boundary); |
|||
|
|||
$sent = mail($email, $subject, "This is a multipart message, your email client needs to support mime 1.0 in order to read this message.", $headers); |
|||
|
|||
echo ($sent ? "Bug Report Was Sent" : "Bug Report Was Not Sent"); |
|||
} else if ($_POST['GRType']=="contact") { |
|||
unset($_POST['GRType']); |
|||
$email = $_POST['GREmail']; |
|||
unset($_POST['GREmail']); |
|||
$subject = $_POST['GRSubject']; |
|||
unset($_POST['GRSubject']); |
|||
$message = isset($_POST['GRMessage']) ? trim($_POST['GRMessage']) : ""; |
|||
unset($_POST['GRMessage']); |
|||
$boundary = "--Boundary+".rand(0, 100000); |
|||
if (preg_match("/([\w\.\-]+)(\@[\w\.\-]+)(\.[a-z]{2,4})+/i", $_POST['User_Email_Address'])) { |
|||
$fromEmail = "\"{$_POST['User_Name']}\" <{$_POST['User_Email_Address']}>"; |
|||
} else { |
|||
$fromEmail = "\"Mr. Gecko's Media\" <webmaster@mrgeckosmedia.com>"; |
|||
} |
|||
|
|||
$headers = "From: {$fromEmail}\r\n"; |
|||
$headers .= "X-Mailer: GeckoReporter/{$_POST['GRVersion']}\r\n"; |
|||
unset($_POST['GRVersion']); |
|||
$headers .= "MIME-Version: 1.0\r\n"; |
|||
$headers .= "Content-Type: multipart/mixed; boundary={$boundary}\r\n\r\n"; |
|||
|
|||
$headers .= "--$boundary\r\n"; |
|||
$headers .= "Content-Type: text/plain; charset=utf-8\r\n"; |
|||
$headers .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; |
|||
$KEYS = array_keys($_POST); |
|||
sort($KEYS); |
|||
for ($i=0; $i<count($KEYS); $i++) { |
|||
$KEY = $KEYS[$i]; |
|||
$NAME = str_replace("_", " ", $KEY); |
|||
$headers .= "{$NAME}: {$_POST[$KEY]}\n"; |
|||
} |
|||
if ($message!="") |
|||
$headers .= "\nThe message\n$message\n"; |
|||
|
|||
$headers .= buildBody($_FILES, $boundary); |
|||
|
|||
$sent = mail($email, $subject, "This is a multipart message, your email client needs to support mime 1.0 in order to read this message.", $headers); |
|||
|
|||
echo ($sent ? "Message Was Sent" : "Message Was Not Sent"); |
|||
} |
|||
?>
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue