Browse Source

Chromatic Start

master
GRMrGecko 13 years ago
commit
b2a45eef97
  1. 9
      .gitignore
  2. 22
      About.rtf
  3. 5734
      Chromatic.ai
  4. BIN
      Chromatic.icns
  5. BIN
      Chromatic.png
  6. 415
      Chromatic.xcodeproj/project.pbxproj
  7. 30
      Classes/MGMAddons.h
  8. 80
      Classes/MGMAddons.m
  9. 93
      Classes/MGMController.h
  10. 565
      Classes/MGMController.m
  11. 35
      Classes/Preferences/MGMAdvancedPane.h
  12. 60
      Classes/Preferences/MGMAdvancedPane.m
  13. 36
      Classes/Preferences/MGMGeneralPane.h
  14. 60
      Classes/Preferences/MGMGeneralPane.m
  15. 7
      Classes/Prefix.pch
  16. 14
      Classes/main.m
  17. 1
      Frameworks/GeckoReporter.framework/GeckoReporter
  18. 1
      Frameworks/GeckoReporter.framework/Headers
  19. 1
      Frameworks/GeckoReporter.framework/Resources
  20. BIN
      Frameworks/GeckoReporter.framework/Versions/A/GeckoReporter
  21. 12
      Frameworks/GeckoReporter.framework/Versions/A/Headers/GeckoReporter.h
  22. 16
      Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMFeedback.h
  23. 12
      Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMLog.h
  24. 28
      Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMReporter.h
  25. 20
      Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMSender.h
  26. 15
      Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMSenderDelegate.h
  27. 46
      Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMSystemInfo.h
  28. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/GeckoReporter.strings
  29. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMBugWindow.nib
  30. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMContactWindow.nib
  31. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMReportWindow.nib
  32. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/GeckoReporter.strings
  33. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMBugWindow.nib
  34. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMContactWindow.nib
  35. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMReportWindow.nib
  36. 42
      Frameworks/GeckoReporter.framework/Versions/A/Resources/Info.plist
  37. 27
      Frameworks/GeckoReporter.framework/Versions/A/Resources/License.txt
  38. 206
      Frameworks/GeckoReporter.framework/Versions/A/Resources/ModelNames.plist
  39. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/GeckoReporter.strings
  40. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMBugWindow.nib
  41. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMContactWindow.nib
  42. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMReportWindow.nib
  43. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/GeckoReporter.strings
  44. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMBugWindow.nib
  45. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMContactWindow.nib
  46. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMReportWindow.nib
  47. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/GeckoReporter.strings
  48. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMBugWindow.nib
  49. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMContactWindow.nib
  50. BIN
      Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMReportWindow.nib
  51. 1
      Frameworks/GeckoReporter.framework/Versions/Current
  52. 1
      Frameworks/MGMUsers.framework/Headers
  53. 1
      Frameworks/MGMUsers.framework/MGMUsers
  54. 1
      Frameworks/MGMUsers.framework/Resources
  55. 19
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h
  56. 23
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMFileManager.h
  57. 58
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h
  58. 48
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMMD5.h
  59. 61
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferences.h
  60. 29
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferencesPane.h
  61. 101
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLBasicHandler.h
  62. 52
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLConnectionManager.h
  63. 25
      Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUsers.h
  64. BIN
      Frameworks/MGMUsers.framework/Versions/A/MGMUsers
  65. BIN
      Frameworks/MGMUsers.framework/Versions/A/Resources/English.lproj/InfoPlist.strings
  66. 26
      Frameworks/MGMUsers.framework/Versions/A/Resources/Info.plist
  67. BIN
      Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib
  68. 1
      Frameworks/MGMUsers.framework/Versions/Current
  69. 1
      Frameworks/Sparkle.framework/Headers
  70. 1
      Frameworks/Sparkle.framework/Resources
  71. 1
      Frameworks/Sparkle.framework/Sparkle
  72. 36
      Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h
  73. 54
      Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h
  74. 126
      Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h
  75. 27
      Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h
  76. 21
      Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h
  77. 24
      Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist
  78. 153
      Frameworks/Sparkle.framework/Versions/A/Resources/License.txt
  79. 174
      Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist
  80. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib
  81. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib
  82. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib
  83. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib
  84. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings
  85. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib
  86. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib
  87. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib
  88. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings
  89. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib
  90. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib
  91. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib
  92. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings
  93. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib
  94. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib
  95. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib
  96. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings
  97. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib
  98. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib
  99. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib
  100. BIN
      Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings

9
.gitignore

@ -0,0 +1,9 @@
build
*.zip
*.xcodeproj/*.pbxuser
*.xcodeproj/*.mode*
*.xcodeproj/*.perspective*
*.xcodeproj/xcuserdata
*.xcodeproj/project.xcworkspace/xcuserdata
*.xcworkspace/xcuserdata
Screenshots/*

22
About.rtf

@ -0,0 +1,22 @@
{\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf360
{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\margl1440\margr1440\vieww9000\viewh8400\viewkind0
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
\f0\b\fs36 \cf0 By Mr. Gecko
\b0\fs32 \
\fs34 At {\field{\*\fldinst{HYPERLINK "http://mrgeckosmedia.com/"}}{\fldrslt mrgeckosmedia.com}}
\fs32 \
Special Thanks To\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\qc\pardirnatural
\fs24 \cf0 MegaEduX ({\field{\*\fldinst{HYPERLINK "http://megaedux.com"}}{\fldrslt megaedux.com}})\
RockStar ({\field{\*\fldinst{HYPERLINK "http://rocknthesweater.com"}}{\fldrslt rocknthesweater.com}})\
Steve Bell ({\field{\*\fldinst{HYPERLINK "http://gpgtools.org/"}}{\fldrslt gpgtools.org}})\
\
\pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural
\cf0 Chromatic uses {\field{\*\fldinst{HYPERLINK "http://sparkle.andymatuschak.org"}}{\fldrslt Sparkle}} for software update, and {\field{\*\fldinst{HYPERLINK "http://opensource.mrgeckosmedia.com/GeckoReporter"}}{\fldrslt GeckoReporter}} for crash and reporting.\
\
Chromatic is an easy way to install and update Chromium, the open source project behind Google Chrome. Chromatic allows you to select a release channel (Stable, Beta, \'85), use the latest build available, or choose a specific build.}

5734
Chromatic.ai
File diff suppressed because it is too large
View File

BIN
Chromatic.icns

BIN
Chromatic.png

After

Width: 512  |  Height: 512  |  Size: 47 KiB

415
Chromatic.xcodeproj/project.pbxproj

@ -0,0 +1,415 @@
// !$*UTF8*$!
{
archiveVersion = 1;
classes = {
};
objectVersion = 45;
objects = {
/* Begin PBXBuildFile section */
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 1DDD58140DA1D0A300B32029 /* MainMenu.xib */; };
256AC3DA0F4B6AC300CF3369 /* MGMController.m in Sources */ = {isa = PBXBuildFile; fileRef = 256AC3D90F4B6AC300CF3369 /* MGMController.m */; };
2A2BA1C013AFBA2800146C20 /* ChromaticIcon.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A2BA1BF13AFBA2800146C20 /* ChromaticIcon.png */; };
2A2BA1C213AFBA2D00146C20 /* About.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 2A2BA1C113AFBA2D00146C20 /* About.rtf */; };
2A53913F13A0FEE100CA59E3 /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */; };
2A53914013A0FEE100CA59E3 /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */; };
2A53914113A0FEE100CA59E3 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913E13A0FEE100CA59E3 /* Sparkle.framework */; };
2A53916113A0FEF500CA59E3 /* GeckoReporter.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */; };
2A53916213A0FEF500CA59E3 /* MGMUsers.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */; };
2A53916313A0FEF500CA59E3 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A53913E13A0FEE100CA59E3 /* Sparkle.framework */; };
2A5F286E13A2644D000F2348 /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A5F286D13A2644D000F2348 /* WebKit.framework */; };
2A5F2A4613A2B153000F2348 /* Advanced.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4213A2B153000F2348 /* Advanced.png */; };
2A5F2A4813A2B153000F2348 /* General.png in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4413A2B153000F2348 /* General.png */; };
2A5F2A4A13A2B1A7000F2348 /* GeneralPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4913A2B1A7000F2348 /* GeneralPane.xib */; };
2A5F2A4C13A2B1B3000F2348 /* AdvancedPane.xib in Resources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4B13A2B1B3000F2348 /* AdvancedPane.xib */; };
2A5F2A5013A2B1E9000F2348 /* MGMGeneralPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F2A4F13A2B1E9000F2348 /* MGMGeneralPane.m */; };
2A5F2A5313A2B20E000F2348 /* MGMAdvancedPane.m in Sources */ = {isa = PBXBuildFile; fileRef = 2A5F2A5213A2B20E000F2348 /* MGMAdvancedPane.m */; };
2A6CFA3213A8F6FE0047D11C /* Chromatic.icns in Resources */ = {isa = PBXBuildFile; fileRef = 2A6CFA3113A8F6FE0047D11C /* Chromatic.icns */; };
2AA54D6713ABFB2000FC3A54 /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 2AA54D6613ABFB2000FC3A54 /* dsa_pub.pem */; };
2ACA2EEB13A2486D003C69E6 /* MGMAddons.m in Sources */ = {isa = PBXBuildFile; fileRef = 2ACA2EEA13A2486D003C69E6 /* MGMAddons.m */; };
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 089C165CFE840E0CC02AAC07 /* InfoPlist.strings */; };
8D11072D0486CEB800E47090 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 29B97316FDCFA39411CA2CEA /* main.m */; settings = {ATTRIBUTES = (); }; };
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */; };
/* End PBXBuildFile section */
/* Begin PBXCopyFilesBuildPhase section */
2A53916813A0FEFD00CA59E3 /* Frameworks */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 2147483647;
dstPath = "";
dstSubfolderSpec = 10;
files = (
2A53916113A0FEF500CA59E3 /* GeckoReporter.framework in Frameworks */,
2A53916213A0FEF500CA59E3 /* MGMUsers.framework in Frameworks */,
2A53916313A0FEF500CA59E3 /* Sparkle.framework in Frameworks */,
);
name = Frameworks;
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
089C165DFE840E0CC02AAC07 /* English */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = English; path = English.lproj/InfoPlist.strings; sourceTree = "<group>"; };
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = /System/Library/Frameworks/Cocoa.framework; sourceTree = "<absolute>"; };
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = /System/Library/Frameworks/CoreData.framework; sourceTree = "<absolute>"; };
1DDD58150DA1D0A300B32029 /* English */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = English; path = English.lproj/MainMenu.xib; sourceTree = "<group>"; };
256AC3D80F4B6AC300CF3369 /* MGMController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMController.h; sourceTree = "<group>"; };
256AC3D90F4B6AC300CF3369 /* MGMController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMController.m; sourceTree = "<group>"; };
256AC3F00F4B6AF500CF3369 /* Chromatic_Prefix.pch */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = Chromatic_Prefix.pch; sourceTree = "<group>"; };
29B97316FDCFA39411CA2CEA /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Classes/main.m; sourceTree = "<group>"; };
29B97324FDCFA39411CA2CEA /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = /System/Library/Frameworks/AppKit.framework; sourceTree = "<absolute>"; };
29B97325FDCFA39411CA2CEA /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = /System/Library/Frameworks/Foundation.framework; sourceTree = "<absolute>"; };
2A2BA1BF13AFBA2800146C20 /* ChromaticIcon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ChromaticIcon.png; sourceTree = "<group>"; };
2A2BA1C113AFBA2D00146C20 /* About.rtf */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; path = About.rtf; sourceTree = SOURCE_ROOT; };
2A5390FF13A0F95900CA59E3 /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = GeckoReporter.framework; path = Frameworks/GeckoReporter.framework; sourceTree = "<group>"; };
2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = MGMUsers.framework; path = Frameworks/MGMUsers.framework; sourceTree = "<group>"; };
2A53913E13A0FEE100CA59E3 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Frameworks/Sparkle.framework; sourceTree = "<group>"; };
2A5F286D13A2644D000F2348 /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; };
2A5F2A4213A2B153000F2348 /* Advanced.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Advanced.png; sourceTree = "<group>"; };
2A5F2A4413A2B153000F2348 /* General.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = General.png; sourceTree = "<group>"; };
2A5F2A4913A2B1A7000F2348 /* GeneralPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = GeneralPane.xib; sourceTree = "<group>"; };
2A5F2A4B13A2B1B3000F2348 /* AdvancedPane.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AdvancedPane.xib; sourceTree = "<group>"; };
2A5F2A4E13A2B1E9000F2348 /* MGMGeneralPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMGeneralPane.h; sourceTree = "<group>"; };
2A5F2A4F13A2B1E9000F2348 /* MGMGeneralPane.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMGeneralPane.m; sourceTree = "<group>"; };
2A5F2A5113A2B20E000F2348 /* MGMAdvancedPane.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMAdvancedPane.h; sourceTree = "<group>"; };
2A5F2A5213A2B20E000F2348 /* MGMAdvancedPane.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMAdvancedPane.m; sourceTree = "<group>"; };
2A6CFA3113A8F6FE0047D11C /* Chromatic.icns */ = {isa = PBXFileReference; lastKnownFileType = image.icns; path = Chromatic.icns; sourceTree = SOURCE_ROOT; };
2AA54D6613ABFB2000FC3A54 /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = "<group>"; };
2ACA2EE913A2486D003C69E6 /* MGMAddons.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MGMAddons.h; sourceTree = "<group>"; };
2ACA2EEA13A2486D003C69E6 /* MGMAddons.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MGMAddons.m; sourceTree = "<group>"; };
8D1107320486CEB800E47090 /* Chromatic.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Chromatic.app; sourceTree = BUILT_PRODUCTS_DIR; };
/* End PBXFileReference section */
/* Begin PBXFrameworksBuildPhase section */
8D11072E0486CEB800E47090 /* Frameworks */ = {
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072F0486CEB800E47090 /* Cocoa.framework in Frameworks */,
2A53913F13A0FEE100CA59E3 /* GeckoReporter.framework in Frameworks */,
2A53914013A0FEE100CA59E3 /* MGMUsers.framework in Frameworks */,
2A53914113A0FEE100CA59E3 /* Sparkle.framework in Frameworks */,
2A5F286E13A2644D000F2348 /* WebKit.framework in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
080E96DDFE201D6D7F000001 /* Classes */ = {
isa = PBXGroup;
children = (
256AC3D80F4B6AC300CF3369 /* MGMController.h */,
256AC3D90F4B6AC300CF3369 /* MGMController.m */,
2ACA2EE913A2486D003C69E6 /* MGMAddons.h */,
2ACA2EEA13A2486D003C69E6 /* MGMAddons.m */,
2A5F2A4D13A2B1D8000F2348 /* Preferences */,
);
path = Classes;
sourceTree = "<group>";
};
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */ = {
isa = PBXGroup;
children = (
2A53913C13A0FEE100CA59E3 /* GeckoReporter.framework */,
2A53913D13A0FEE100CA59E3 /* MGMUsers.framework */,
2A53913E13A0FEE100CA59E3 /* Sparkle.framework */,
1058C7A1FEA54F0111CA2CBB /* Cocoa.framework */,
2A5F286D13A2644D000F2348 /* WebKit.framework */,
);
name = "Linked Frameworks";
sourceTree = "<group>";
};
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */ = {
isa = PBXGroup;
children = (
29B97324FDCFA39411CA2CEA /* AppKit.framework */,
13E42FB307B3F0F600E4EEF1 /* CoreData.framework */,
29B97325FDCFA39411CA2CEA /* Foundation.framework */,
);
name = "Other Frameworks";
sourceTree = "<group>";
};
19C28FACFE9D520D11CA2CBB /* Products */ = {
isa = PBXGroup;
children = (
8D1107320486CEB800E47090 /* Chromatic.app */,
);
name = Products;
sourceTree = "<group>";
};
29B97314FDCFA39411CA2CEA /* Chromatic */ = {
isa = PBXGroup;
children = (
080E96DDFE201D6D7F000001 /* Classes */,
29B97315FDCFA39411CA2CEA /* Other Sources */,
29B97317FDCFA39411CA2CEA /* Resources */,
29B97323FDCFA39411CA2CEA /* Frameworks */,
19C28FACFE9D520D11CA2CBB /* Products */,
);
name = Chromatic;
sourceTree = "<group>";
};
29B97315FDCFA39411CA2CEA /* Other Sources */ = {
isa = PBXGroup;
children = (
256AC3F00F4B6AF500CF3369 /* Chromatic_Prefix.pch */,
29B97316FDCFA39411CA2CEA /* main.m */,
);
name = "Other Sources";
sourceTree = "<group>";
};
29B97317FDCFA39411CA2CEA /* Resources */ = {
isa = PBXGroup;
children = (
2A5390FF13A0F95900CA59E3 /* Info.plist */,
2A6CFA3113A8F6FE0047D11C /* Chromatic.icns */,
2A2BA1C113AFBA2D00146C20 /* About.rtf */,
2A2BA1BF13AFBA2800146C20 /* ChromaticIcon.png */,
2AA54D6613ABFB2000FC3A54 /* dsa_pub.pem */,
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */,
1DDD58140DA1D0A300B32029 /* MainMenu.xib */,
2A5F2A4013A2B153000F2348 /* Preferences */,
);
path = Resources;
sourceTree = "<group>";
};
29B97323FDCFA39411CA2CEA /* Frameworks */ = {
isa = PBXGroup;
children = (
1058C7A0FEA54F0111CA2CBB /* Linked Frameworks */,
1058C7A2FEA54F0111CA2CBB /* Other Frameworks */,
);
name = Frameworks;
sourceTree = "<group>";
};
2A5F2A4013A2B153000F2348 /* Preferences */ = {
isa = PBXGroup;
children = (
2A5F2A4413A2B153000F2348 /* General.png */,
2A5F2A4913A2B1A7000F2348 /* GeneralPane.xib */,
2A5F2A4213A2B153000F2348 /* Advanced.png */,
2A5F2A4B13A2B1B3000F2348 /* AdvancedPane.xib */,
);
path = Preferences;
sourceTree = "<group>";
};
2A5F2A4D13A2B1D8000F2348 /* Preferences */ = {
isa = PBXGroup;
children = (
2A5F2A4E13A2B1E9000F2348 /* MGMGeneralPane.h */,
2A5F2A4F13A2B1E9000F2348 /* MGMGeneralPane.m */,
2A5F2A5113A2B20E000F2348 /* MGMAdvancedPane.h */,
2A5F2A5213A2B20E000F2348 /* MGMAdvancedPane.m */,
);
path = Preferences;
sourceTree = "<group>";
};
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
8D1107260486CEB800E47090 /* Chromatic */ = {
isa = PBXNativeTarget;
buildConfigurationList = C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Chromatic" */;
buildPhases = (
8D1107290486CEB800E47090 /* Resources */,
8D11072C0486CEB800E47090 /* Sources */,
8D11072E0486CEB800E47090 /* Frameworks */,
2A53916813A0FEFD00CA59E3 /* Frameworks */,
);
buildRules = (
);
dependencies = (
);
name = Chromatic;
productInstallPath = "$(HOME)/Applications";
productName = Chromatic;
productReference = 8D1107320486CEB800E47090 /* Chromatic.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
/* Begin PBXProject section */
29B97313FDCFA39411CA2CEA /* Project object */ = {
isa = PBXProject;
buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Chromatic" */;
compatibilityVersion = "Xcode 3.1";
developmentRegion = English;
hasScannedForEncodings = 1;
knownRegions = (
English,
Japanese,
French,
German,
);
mainGroup = 29B97314FDCFA39411CA2CEA /* Chromatic */;
projectDirPath = "";
projectRoot = "";
targets = (
8D1107260486CEB800E47090 /* Chromatic */,
);
};
/* End PBXProject section */
/* Begin PBXResourcesBuildPhase section */
8D1107290486CEB800E47090 /* Resources */ = {
isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072B0486CEB800E47090 /* InfoPlist.strings in Resources */,
1DDD58160DA1D0A300B32029 /* MainMenu.xib in Resources */,
2A5F2A4613A2B153000F2348 /* Advanced.png in Resources */,
2A5F2A4813A2B153000F2348 /* General.png in Resources */,
2A5F2A4A13A2B1A7000F2348 /* GeneralPane.xib in Resources */,
2A5F2A4C13A2B1B3000F2348 /* AdvancedPane.xib in Resources */,
2A6CFA3213A8F6FE0047D11C /* Chromatic.icns in Resources */,
2AA54D6713ABFB2000FC3A54 /* dsa_pub.pem in Resources */,
2A2BA1C013AFBA2800146C20 /* ChromaticIcon.png in Resources */,
2A2BA1C213AFBA2D00146C20 /* About.rtf in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXResourcesBuildPhase section */
/* Begin PBXSourcesBuildPhase section */
8D11072C0486CEB800E47090 /* Sources */ = {
isa = PBXSourcesBuildPhase;
buildActionMask = 2147483647;
files = (
8D11072D0486CEB800E47090 /* main.m in Sources */,
256AC3DA0F4B6AC300CF3369 /* MGMController.m in Sources */,
2ACA2EEB13A2486D003C69E6 /* MGMAddons.m in Sources */,
2A5F2A5013A2B1E9000F2348 /* MGMGeneralPane.m in Sources */,
2A5F2A5313A2B20E000F2348 /* MGMAdvancedPane.m in Sources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
/* End PBXSourcesBuildPhase section */
/* Begin PBXVariantGroup section */
089C165CFE840E0CC02AAC07 /* InfoPlist.strings */ = {
isa = PBXVariantGroup;
children = (
089C165DFE840E0CC02AAC07 /* English */,
);
name = InfoPlist.strings;
sourceTree = "<group>";
};
1DDD58140DA1D0A300B32029 /* MainMenu.xib */ = {
isa = PBXVariantGroup;
children = (
1DDD58150DA1D0A300B32029 /* English */,
);
name = MainMenu.xib;
sourceTree = "<group>";
};
/* End PBXVariantGroup section */
/* Begin XCBuildConfiguration section */
C01FCF4B08A954540054247B /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = (
ppc,
i386,
x86_64,
);
COPY_PHASE_STRIP = NO;
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Frameworks\"",
);
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 = Classes/Prefix.pch;
INFOPLIST_FILE = Resources/Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.4;
"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5;
PRODUCT_NAME = Chromatic;
SDKROOT = macosx10.5;
};
name = Debug;
};
C01FCF4C08A954540054247B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
ALWAYS_SEARCH_USER_PATHS = NO;
ARCHS = (
ppc,
i386,
x86_64,
);
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(SRCROOT)/Frameworks\"",
);
GCC_MODEL_TUNING = G5;
GCC_PRECOMPILE_PREFIX_HEADER = YES;
GCC_PREFIX_HEADER = Classes/Prefix.pch;
INFOPLIST_FILE = Resources/Info.plist;
INSTALL_PATH = "$(HOME)/Applications";
MACOSX_DEPLOYMENT_TARGET = 10.4;
"MACOSX_DEPLOYMENT_TARGET[arch=x86_64]" = 10.5;
PRODUCT_NAME = Chromatic;
SDKROOT = macosx10.5;
};
name = Release;
};
C01FCF4F08A954540054247B /* 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;
};
C01FCF5008A954540054247B /* 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;
};
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
C01FCF4A08A954540054247B /* Build configuration list for PBXNativeTarget "Chromatic" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4B08A954540054247B /* Debug */,
C01FCF4C08A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
C01FCF4E08A954540054247B /* Build configuration list for PBXProject "Chromatic" */ = {
isa = XCConfigurationList;
buildConfigurations = (
C01FCF4F08A954540054247B /* Debug */,
C01FCF5008A954540054247B /* Release */,
);
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
/* End XCConfigurationList section */
};
rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
}

30
Classes/MGMAddons.h

@ -0,0 +1,30 @@
//
// MGMAddons.h
// Chromatic
//
// Created by Mr. Gecko on 6/10/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import <Cocoa/Cocoa.h>
@interface NSString (MGMAddons)
+ (NSString *)readableMemory:(unsigned long)theBytes;
+ (NSString *)readableTime:(unsigned long)theSeconds;
@end
@interface NSURL (MGMAddons)
- (NSURL *)appendPathComponent:(NSString *)theComponent;
@end

80
Classes/MGMAddons.m

@ -0,0 +1,80 @@
//
// MGMAddons.m
// Chromatic
//
// Created by Mr. Gecko on 6/10/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import "MGMAddons.h"
@implementation NSString (MGMAddons)
+ (NSString *)readableMemory:(unsigned long)theBytes {
double bytes = theBytes;
NSString *types[] = {@"Bytes", @"KB", @"MB", @"GB", @"TB", @"PB", @"EB", @"ZB", @"YB", @"BB"};
int type = 0;
while (bytes>1024 && type<=9) {
bytes /= 1024;
type++;
}
return [NSString stringWithFormat:@"%.02f %@", bytes, types[type]];
}
+ (NSString *)readableTime:(unsigned long)theSeconds {
unsigned long time = theSeconds;
int seconds = time%60;
time = time/60;
int minutes = time%60;
time = time/60;
int hours = time%24;
unsigned long days = time/24;
NSString *string;
if (days!=0) {
string = [NSString stringWithFormat:@"%lu day%@ %02d:%02d:%02d", days, (days==1 ? @"" : @"s"), hours, minutes, seconds];
} else if (hours!=0) {
string = [NSString stringWithFormat:@"%d:%02d:%02d", hours, minutes, seconds];
} else {
string = [NSString stringWithFormat:@"%02d:%02d", minutes, seconds];
}
return string;
}
@end
@implementation NSURL (MGMAddons)
- (NSURL *)appendPathComponent:(NSString *)theComponent {
NSMutableString *string = [NSMutableString string];
if ([self scheme]!=nil)
[string appendFormat:@"%@://", [self scheme]];
if ([self host]!=nil)
[string appendString:[self host]];
if ([self port]!=0)
[string appendFormat:@":%d", [self port]];
if ([self path]!=nil) {
if (theComponent!=nil) {
[string appendString:[[self path] stringByAppendingPathComponent:theComponent]];
if ([theComponent isEqual:@""] || [theComponent hasSuffix:@"/"])
[string appendString:@"/"];
} else {
[string appendString:[self path]];
if ([[self absoluteString] hasSuffix:@"/"])
[string appendString:@"/"];
}
} else {
[string appendString:[@"/" stringByAppendingPathComponent:theComponent]];
}
if ([self query]!=nil)
[string appendFormat:@"?%@", [self query]];
return [NSURL URLWithString:string];
}
@end

93
Classes/MGMController.h

@ -0,0 +1,93 @@
//
// MGMController.h
// Chromatic
//
// Created by Mr. Gecko on 6/9/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import <Cocoa/Cocoa.h>
@class MGMAbout, MGMPreferences, MGMURLConnectionManager, MGMURLBasicHandler, WebView;
extern NSString * const MGMCustomSnapshotURL;
extern NSString * const MGMMoveToTrash;
extern NSString * const MGMDoneSound;
extern NSString * const MGMLaunchWhenDone;
extern NSString * const MGMQuitAfterLaunch;
@interface MGMController : NSObject
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060)
<NSApplicationDelegate>
#endif
{
IBOutlet NSWindow *mainWindow;
MGMAbout *about;
MGMPreferences *preferences;
MGMURLConnectionManager *connectionManager;
BOOL startingUp;
NSMutableDictionary *channelRevisions;
NSString *chromiumPath;
IBOutlet NSPopUpButton *channelPopUp;
IBOutlet NSTextField *buildWarningField;
IBOutlet NSPopUpButton *buildPopUp;
IBOutlet NSTextField *webKitBuildField;
IBOutlet NSTextField *v8BuildField;
IBOutlet NSTextField *buildDateField;
IBOutlet NSTextField *yourBuildField;
IBOutlet NSTextField *installDateField;
IBOutlet NSTextField *pathField;
IBOutlet NSProgressIndicator *progress;
IBOutlet NSTextField *statusField;
IBOutlet NSButton *launchButton;
IBOutlet NSButton *svnLogsButton;
IBOutlet NSButton *updateButton;
IBOutlet NSWindow *svnLogsWindow;
IBOutlet WebView *svnLogsBrowser;
int startTime;
MGMURLBasicHandler *updateHandler;
NSDate *lastCheck;
unsigned long bytesReceived;
unsigned long averageBytesReceived;
unsigned long totalBytes;
NSMutableArray *bytesReceivedArray;
NSTask *unzipTask;
}
- (void)registerDefaults;
- (IBAction)about:(id)sender;
- (IBAction)preferences:(id)sender;
- (IBAction)donate:(id)sender;
- (IBAction)openSource:(id)sender;
- (IBAction)channelSelect:(id)sender;
- (IBAction)buildSelect:(id)sender;
- (IBAction)choosePath:(id)sender;
- (void)updateChromiumPath;
- (IBAction)launchChromium:(id)sender;
- (IBAction)viewSVNLogs:(id)sender;
- (IBAction)update:(id)sender;
- (void)updateDone;
@end

565
Classes/MGMController.m

@ -0,0 +1,565 @@
//
// MGMController.m
// Chromatic
//
// Created by Mr. Gecko on 6/9/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import "MGMController.h"
#import "MGMAddons.h"
#import <MGMUsers/MGMUsers.h>
#import <GeckoReporter/GeckoReporter.h>
#import <WebKit/WebKit.h>
NSString * const MGMCopyright = @"Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/";
NSString * const MGMVersion = @"MGMVersion";
NSString * const MGMLaunchCount = @"MGMLaunchCount";
NSString * const MGMChannel = @"MGMChannel";
NSString * const MGMChromiumPath = @"MGMChromiumPath";
NSString * const MGMCustomSnapshotURL = @"MGMCustomSnapshotURL";
NSString * const MGMMoveToTrash = @"MGMMoveToTrash";
NSString * const MGMDoneSound = @"MGMDoneSound";
NSString * const MGMLaunchWhenDone = @"MGMLaunchWhenDone";
NSString * const MGMQuitAfterLaunch = @"MGMQuitAfterLaunch";
NSString * const MGMCPApplications = @"/Applications";
NSString * const MGMCPUserApplications = @"~/Applications";
NSString * const MGMCPChromium = @"Chromium.app";
NSString * const MGMCPRevision = @"SVNRevision";
NSString * const MGMChromiumZip = @"chrome-mac.zip";
NSString * const MGMTMPPath = @"/tmp";
NSString * const MGMChannelsURL = @"http://omahaproxy.appspot.com/all.json?os=mac";
static NSString *MGMSnapshotURL = @"http://build.chromium.org/f/chromium/snapshots/Mac/";
NSString * const MGMSVNLogsURL = @"http://build.chromium.org/f/chromium/perf/dashboard/ui/changelog.html?url=/trunk/src&range=%@:%@&mode=html&os=mac";
NSString * const MGMCChannel = @"channel";
NSString * const MGMCRevision = @"base_trunk_revision";
NSString * const MGMCStable = @"stable";
NSString * const MGMCBeta = @"beta";
NSString * const MGMCDev = @"dev";
NSString * const MGMCCanary = @"canary";
NSString * const MGMUBUpdate = @"Update";
NSString * const MGMUBInstall = @"Install";
NSString * const MGMUBCancel = @"Cancel";
@interface NSOpenPanel (MGMIgnore)
- (void)setDirectoryURL:(NSURL *)url;
- (void)setDirectory:(NSString *)path;
@end
@implementation MGMController
- (void)awakeFromNib {
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(setup) name:MGMGRDoneNotification object:nil];
[MGMReporter sharedReporter];
}
- (void)setup {
connectionManager = [[MGMURLConnectionManager manager] retain];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:MGMVersion]==nil) {
NSString *oldPathKey = @"cPathKey";
[defaults setObject:[defaults stringForKey:oldPathKey] forKey:MGMChromiumPath];
[defaults removeObjectForKey:oldPathKey];
[defaults setObject:[[MGMSystemInfo info] applicationVersion] forKey:MGMVersion];
}
[self registerDefaults];
if ([defaults integerForKey:MGMLaunchCount]!=5) {
[defaults setInteger:[defaults integerForKey:MGMLaunchCount]+1 forKey:MGMLaunchCount];
if ([defaults integerForKey:MGMLaunchCount]==5) {
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Donations"];
[alert setInformativeText:@"Thank you for using Chromatic. Chromatic is donation supported software. If you like using it, please consider giving a donation to help with development."];
[alert addButtonWithTitle:@"Yes"];
[alert addButtonWithTitle:@"No"];
int result = [alert runModal];
if (result==1000)
[self donate:self];
}
}
if ([defaults objectForKey:MGMCustomSnapshotURL]!=nil && ![[defaults objectForKey:MGMCustomSnapshotURL] isEqual:@""])
MGMSnapshotURL = [defaults objectForKey:MGMCustomSnapshotURL];
about = [MGMAbout new];
preferences = [MGMPreferences new];
[preferences addPreferencesPaneClassName:@"MGMGeneralPane"];
[preferences addPreferencesPaneClassName:@"MGMAdvancedPane"];
startingUp = YES;
[mainWindow makeKeyAndOrderFront:self];
[progress startAnimation:self];
[updateButton setEnabled:NO];
[channelPopUp selectItemAtIndex:[defaults integerForKey:MGMChannel]];
channelRevisions = [NSMutableDictionary new];
NSString *path = [defaults objectForKey:MGMChromiumPath];
if (path==nil)
path = [[NSWorkspace sharedWorkspace] fullPathForApplication:@"Chromium"];
if (path==nil) {
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager isWritableFileAtPath:MGMCPApplications]) {
path = [MGMCPApplications stringByAppendingPathComponent:MGMCPChromium];
} else {
if ([manager fileExistsAtPath:[MGMCPUserApplications stringByExpandingTildeInPath]])
[manager createDirectoryAtPath:[MGMCPUserApplications stringByExpandingTildeInPath] withAttributes:nil];
path = [[MGMCPUserApplications stringByExpandingTildeInPath] stringByAppendingPathComponent:MGMCPChromium];
}
}
chromiumPath = [path copy];
[self updateChromiumPath];
MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:MGMChannelsURL]] delegate:self];
[handler setFailWithError:@selector(channels:didFailWithError:)];
[handler setFinish:@selector(channelsFinished:)];
[connectionManager addHandler:handler];
handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:MGMSnapshotURL]] delegate:self];
[handler setFailWithError:@selector(revisions:didFailWithError:)];
[handler setFinish:@selector(revisionsFinished:)];
[connectionManager addHandler:handler];
}
- (void)registerDefaults {
NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:[NSNumber numberWithInt:1] forKey:MGMLaunchCount];
[defaults setObject:[NSNumber numberWithInt:4] forKey:MGMChannel];
[defaults setObject:[NSNumber numberWithBool:YES] forKey:MGMMoveToTrash];
[defaults setObject:[NSNumber numberWithBool:YES] forKey:MGMDoneSound];
[defaults setObject:[NSNumber numberWithBool:NO] forKey:MGMLaunchWhenDone];
[defaults setObject:[NSNumber numberWithBool:NO] forKey:MGMQuitAfterLaunch];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaults];
}
- (IBAction)about:(id)sender {
[about show];
}
- (IBAction)preferences:(id)sender {
[preferences showPreferences];
}
- (IBAction)donate:(id)sender {
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9184741"]];
}
- (IBAction)openSource:(id)sender {
[[NSWorkspace sharedWorkspace] openURL:[NSURL URLWithString:@"http://opensource.mrgeckosmedia.com/Chromatic?application"]];
}
- (void)channels:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
NSLog(@"%@", theError);
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Error loading channel info"];
[alert setInformativeText:[theError localizedDescription]];
[alert runModal];
}
- (void)channelsFinished:(MGMURLBasicHandler *)theHandler {
NSArray *versions = [[[[theHandler data] parseJSON] objectAtIndex:0] objectForKey:@"versions"];
if (versions==nil) {
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Error loading channel info"];
[alert setInformativeText:@"The JSON was unable to be parsed."];
[alert runModal];
}
for (int i=0; i<[versions count]; i++) {
NSDictionary *versionInfo = [versions objectAtIndex:i];
[channelRevisions setObject:[[versionInfo objectForKey:MGMCRevision] stringValue] forKey:[versionInfo objectForKey:MGMCChannel]];
}
[progress setIndeterminate:NO];
[progress startAnimation:self];
[progress setDoubleValue:0.25];
}
- (void)revisions:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
NSLog(@"%@", theError);
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Error loading revisions"];
[alert setInformativeText:[theError localizedDescription]];
[alert runModal];
}
- (void)revisionsFinished:(MGMURLBasicHandler *)theHandler {
NSString *returnedString = [theHandler string];
[buildPopUp removeAllItems];
[progress setDoubleValue:0.50];
NSMenu *items = [NSMenu new];
unsigned long length = [returnedString length];
NSRange range = NSMakeRange(0, length);
while (range.location!=length) {
NSRange urlRange = [returnedString rangeOfString:@"/\">" options:0 range:range];
if (urlRange.location==NSNotFound)
break;
range.location = urlRange.location+urlRange.length;
range.length = length-range.location;
urlRange = [returnedString rangeOfString:@"</a>" options:0 range:range];
if (urlRange.location==NSNotFound)
continue;
NSRange revisionRange = NSMakeRange(range.location, urlRange.location-range.location);
range.location = urlRange.location+urlRange.length;
range.length = length-range.location;
urlRange = [returnedString rangeOfString:@"/" options:0 range:revisionRange];
if (urlRange.location==NSNotFound)
continue;
revisionRange.length -= 1;
NSMenuItem *item = [NSMenuItem new];
[item setTitle:[returnedString substringWithRange:revisionRange]];
[items addItem:item];
[item release];
}
[buildPopUp setMenu:items];
[items release];
[self channelSelect:self];
}
- (IBAction)channelSelect:(id)sender {
[[NSUserDefaults standardUserDefaults] setInteger:[channelPopUp indexOfSelectedItem] forKey:MGMChannel];
NSArray *revisions = [buildPopUp itemTitles];
NSString *revision = nil;
if ([channelPopUp indexOfSelectedItem]==0)
revision = [channelRevisions objectForKey:MGMCStable];
else if ([channelPopUp indexOfSelectedItem]==1)
revision = [channelRevisions objectForKey:MGMCBeta];
else if ([channelPopUp indexOfSelectedItem]==2)
revision = [channelRevisions objectForKey:MGMCDev];
else if ([channelPopUp indexOfSelectedItem]==3)
revision = [channelRevisions objectForKey:MGMCCanary];
if (revision==nil)
revision = [revisions lastObject];
long itemIndex = [revisions indexOfObject:revision];
if (itemIndex==NSNotFound) {
[buildWarningField setHidden:NO];
for (unsigned int i=0; i<[revisions count]; i++) {
if ([(NSString *)[revisions objectAtIndex:i] compare:revision]==NSOrderedDescending) {
itemIndex = i;
break;
}
}
if (itemIndex==NSNotFound)
itemIndex = [revisions count]-1;
} else {
[buildWarningField setHidden:YES];
}
[buildPopUp selectItemAtIndex:itemIndex];
if (startingUp)
[progress setDoubleValue:0.75];
[self buildSelect:self];
}
- (IBAction)buildSelect:(id)sender {
NSURL *buildURL = [[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:@"REVISIONS"];
MGMURLBasicHandler *handler = [MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:buildURL] delegate:self];
[handler setFailWithError:@selector(revision:didFailWithError:)];
[handler setReceiveResponse:@selector(revision:didReceiveResponse:)];
[handler setFinish:@selector(revisionDidFinish:)];
[connectionManager addHandler:handler];
if (![[yourBuildField stringValue] isEqual:@""] && [buildPopUp indexOfSelectedItem]!=-1 && ![[yourBuildField stringValue] isEqual:[buildPopUp titleOfSelectedItem]])
[svnLogsButton setEnabled:YES];
else
[svnLogsButton setEnabled:NO];
}
- (void)revision:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
NSLog(@"%@", theError);
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Error loading revision info"];
[alert setInformativeText:[theError localizedDescription]];
[alert runModal];
if (startingUp) {
[progress setDoubleValue:1.0];
[progress setIndeterminate:YES];
[progress setDoubleValue:0.0];
[progress stopAnimation:self];
[updateButton setEnabled:YES];
startingUp = NO;
}
}
- (void)revision:(MGMURLBasicHandler *)theHandler didReceiveResponse:(NSHTTPURLResponse *)theResponse {
NSString *modified = [[theResponse allHeaderFields] objectForKey:@"Last-Modified"];
NSDateFormatter *formatter = [NSDateFormatter new];
[formatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"] autorelease]];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss zzz"];
NSDate *date = [formatter dateFromString:modified];
[formatter release];
formatter = [NSDateFormatter new];
[formatter setDateFormat:@"MMMM d, yyyy hh:mm:ss a"];
NSString *dateString = [formatter stringFromDate:date];
[formatter release];
if (dateString!=nil)
[buildDateField setStringValue:dateString];
else
[buildDateField setStringValue:@"N/A"];
}
- (void)revisionDidFinish:(MGMURLBasicHandler *)theHandler {
NSDictionary *revisionInfo = [[theHandler data] parseJSON];
NSString *webkit = [[revisionInfo objectForKey:@"webkit_revision"] stringValue];
if (webkit!=nil)
[webKitBuildField setStringValue:webkit];
else
[webKitBuildField setStringValue:@"0"];
NSString *v8 = [[revisionInfo objectForKey:@"v8_revision"] stringValue];
if (v8!=nil)
[v8BuildField setStringValue:v8];
else
[v8BuildField setStringValue:@"0"];
if (startingUp) {
[progress setDoubleValue:1.0];
[progress setIndeterminate:YES];
[progress setDoubleValue:0.0];
[progress stopAnimation:self];
[updateButton setEnabled:YES];
startingUp = NO;
}
}
- (IBAction)choosePath:(id)sender {
NSOpenPanel *openPanel = [NSOpenPanel openPanel];
if ([openPanel respondsToSelector:@selector(setDirectory:)])
[openPanel setDirectory:[chromiumPath stringByDeletingLastPathComponent]];
else
[openPanel setDirectoryURL:[NSURL fileURLWithPath:[chromiumPath stringByDeletingLastPathComponent]]];
[openPanel setCanChooseFiles:NO];
[openPanel setCanChooseDirectories:YES];
[openPanel setAllowsMultipleSelection:NO];
[openPanel setTitle:@"Choose path for Chromium"];
[openPanel setPrompt:@"Choose"];
int result = [openPanel runModal];
if (result==NSOKButton) {
NSString *newPath = [[[openPanel URLs] objectAtIndex:0] path];
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager isWritableFileAtPath:newPath]) {
[chromiumPath release];
chromiumPath = [[newPath stringByAppendingPathComponent:MGMCPChromium] retain];
[[NSUserDefaults standardUserDefaults] setObject:chromiumPath forKey:MGMChromiumPath];
[self updateChromiumPath];
} else {
NSAlert *alert = [[NSAlert new] autorelease];
[alert setInformativeText:@"Not Writable"];
[alert setMessageText:@"The directory you choose is not writable. To beable to use it with Chromatic, you need to change permissions."];
[alert runModal];
}
}
}
- (void)updateChromiumPath {
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:chromiumPath]) {
NSDictionary *chromiumInfo = (NSDictionary *)CFBundleCopyInfoDictionaryInDirectory((CFURLRef)[NSURL fileURLWithPath:chromiumPath]);
[yourBuildField setStringValue:[chromiumInfo objectForKey:MGMCPRevision]];
[chromiumInfo release];
NSDictionary *chromeAttributes = [manager attributesOfItemAtPath:chromiumPath];
NSDate *date = [chromeAttributes objectForKey:NSFileModificationDate];
NSDateFormatter *formatter = [[NSDateFormatter new] autorelease];
[formatter setDateFormat:@"MMMM d, yyyy hh:mm:ss a"];
[installDateField setStringValue:[formatter stringFromDate:date]];
[launchButton setEnabled:YES];
[updateButton setTitle:MGMUBUpdate];
if (![[yourBuildField stringValue] isEqual:@""] && [buildPopUp indexOfSelectedItem]!=-1 && ![[yourBuildField stringValue] isEqual:[buildPopUp titleOfSelectedItem]])
[svnLogsButton setEnabled:YES];
else
[svnLogsButton setEnabled:NO];
} else {
[launchButton setEnabled:NO];
[svnLogsButton setEnabled:NO];
[yourBuildField setStringValue:@""];
[installDateField setStringValue:@""];
[updateButton setTitle:MGMUBInstall];
}
[pathField setStringValue:[chromiumPath stringByDeletingLastPathComponent]];
}
- (IBAction)launchChromium:(id)sender {
[[NSWorkspace sharedWorkspace] launchApplication:chromiumPath];
if ([[NSUserDefaults standardUserDefaults] boolForKey:MGMQuitAfterLaunch])
[[NSApplication sharedApplication] terminate:self];
}
- (IBAction)viewSVNLogs:(id)sender {
NSString *revision1, *revision2, *tmp;
revision1 = [yourBuildField stringValue];
revision2 = [buildPopUp titleOfSelectedItem];
if ([revision1 compare:revision2]==NSOrderedDescending) {
tmp = revision1;
revision1 = revision2;
revision2 = tmp;
}
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:MGMSVNLogsURL, revision1, revision2]];
[[svnLogsBrowser mainFrame] loadRequest:[NSURLRequest requestWithURL:url]];
[svnLogsWindow makeKeyAndOrderFront:self];
}
- (IBAction)update:(id)sender {
if ([[updateButton title] isEqual:MGMUBCancel]) {
[connectionManager cancelHandler:updateHandler];
[updateHandler release];
updateHandler = nil;
[[NSFileManager defaultManager] removeItemAtPath:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];
[self updateDone];
} else {
[progress startAnimation:self];
startTime = [[NSDate date] timeIntervalSince1970];
NSURL *url = [[[NSURL URLWithString:MGMSnapshotURL] appendPathComponent:[buildPopUp titleOfSelectedItem]] appendPathComponent:MGMChromiumZip];
[updateHandler release];
updateHandler = [[MGMURLBasicHandler handlerWithRequest:[NSURLRequest requestWithURL:url] delegate:self] retain];
[updateHandler setFile:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];
[updateHandler setFailWithError:@selector(update:didFailWithError:)];
[updateHandler setReceiveResponse:@selector(update:didReceiveResponse:)];
[updateHandler setBytesReceived:@selector(update:receivedBytes:totalBytes:expectedBytes:)];
[updateHandler setFinish:@selector(updateDidFinish:)];
[updateHandler setSynchronous:NO];
[connectionManager addHandler:updateHandler];
[channelPopUp setEnabled:NO];
[buildPopUp setEnabled:NO];
[updateButton setTitle:MGMUBCancel];
}
}
- (void)windowWillClose:(NSNotification *)notification {
[[svnLogsBrowser mainFrame] loadHTMLString:@"" baseURL:nil];
}
- (void)update:(MGMURLBasicHandler *)theHandler didFailWithError:(NSError *)theError {
NSLog(@"%@", theError);
NSAlert *alert = [[NSAlert new] autorelease];
[alert setMessageText:@"Error downloading update"];
[alert setInformativeText:[theError localizedDescription]];
[alert runModal];
}
- (void)update:(MGMURLBasicHandler *)theHandler didReceiveResponse:(NSHTTPURLResponse *)theResponse {
[progress setIndeterminate:NO];
[progress startAnimation:self];
bytesReceivedArray = [NSMutableArray new];
}
- (void)update:(MGMURLBasicHandler *)theHandler receivedBytes:(unsigned long)theBytes totalBytes:(unsigned long)theTotalBytes expectedBytes:(unsigned long)theExpectedBytes {
bytesReceived += theBytes;
if (lastCheck==nil || [lastCheck timeIntervalSinceNow]<-1.0) {
[lastCheck release];
lastCheck = [NSDate new];
while ([bytesReceivedArray count]>15) {
[bytesReceivedArray removeObjectAtIndex:0];
}
[bytesReceivedArray addObject:[NSNumber numberWithUnsignedLong:bytesReceived]];
averageBytesReceived = 0;
for (int i=0; i<[bytesReceivedArray count]; i++) {
averageBytesReceived += [[bytesReceivedArray objectAtIndex:i] unsignedLongValue];
}
averageBytesReceived /= [bytesReceivedArray count];
[statusField setStringValue:[NSString stringWithFormat:@"%@ of %@ (%@/sec) - %@", [NSString readableMemory:theTotalBytes], [NSString readableMemory:theExpectedBytes], [NSString readableMemory:bytesReceived], [NSString readableTime:(theExpectedBytes-theTotalBytes)/averageBytesReceived]]];
bytesReceived = 0;
}
[progress setDoubleValue:(double)theTotalBytes/(double)theExpectedBytes];
totalBytes = theTotalBytes;
}
- (void)updateDidFinish:(MGMURLBasicHandler *)theHandler {
[updateHandler release];
updateHandler = nil;
[bytesReceivedArray release];
bytesReceivedArray = nil;
[updateButton setEnabled:NO];
[progress setIndeterminate:YES];
[progress startAnimation:self];
[statusField setStringValue:@"Uncompressing and installing update."];
unzipTask = [NSTask new];
[unzipTask setLaunchPath:@"/usr/bin/ditto"];
[unzipTask setArguments:[NSArray arrayWithObjects:@"-v", @"-x", @"-k", @"--rsrc", [MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip], MGMTMPPath, nil]];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(updateUnzipped:) name:NSTaskDidTerminateNotification object:unzipTask];
[unzipTask launch];
}
- (void)updateUnzipped:(NSNotification *)theNotification {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSFileManager *manager = [NSFileManager defaultManager];
if ([manager fileExistsAtPath:chromiumPath]) {
if ([defaults boolForKey:MGMMoveToTrash]) {
NSString *trash = [@"~/.Trash" stringByExpandingTildeInPath];
NSInteger tag;
[[NSWorkspace sharedWorkspace] performFileOperation:NSWorkspaceRecycleOperation source:[chromiumPath stringByDeletingLastPathComponent] destination:trash files:[NSArray arrayWithObject:[chromiumPath lastPathComponent]] tag:&tag];
if (tag!=0)
NSLog(@"Error Deleting: %ld", (long)tag);
} else {
[manager removeItemAtPath:chromiumPath];
}
}
NSString *extractedPath = [[MGMTMPPath stringByAppendingPathComponent:[MGMChromiumZip stringByDeletingPathExtension]] stringByAppendingPathComponent:MGMCPChromium];
if (![manager moveItemAtPath:extractedPath toPath:chromiumPath]) {
NSBeep();
[self updateDone];
[statusField setStringValue:[NSString stringWithFormat:@"Unable to %@ due to an error. This may be a permissions issue.", [[updateButton title] lowercaseString]]];
return;
}
[manager removeItemAtPath:[extractedPath stringByDeletingLastPathComponent]];
[manager removeItemAtPath:[MGMTMPPath stringByAppendingPathComponent:MGMChromiumZip]];
[manager setAttributes:[NSDictionary dictionaryWithObject:[NSDate date] forKey:NSFileModificationDate] ofItemAtPath:chromiumPath];
[NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:1]];
[self updateDone];
int time = [[NSDate date] timeIntervalSince1970]-startTime;
[statusField setStringValue:[NSString stringWithFormat:@"%@ downloaded at %@/sec in %@", [NSString readableMemory:totalBytes], [NSString readableMemory:averageBytesReceived], [NSString readableTime:time]]];
if ([defaults boolForKey:MGMDoneSound]) {
NSSound *done = [NSSound soundNamed:@"Glass"];
[done setDelegate:self];
[done play];
}
[updateButton setEnabled:YES];
if ([defaults boolForKey:MGMLaunchWhenDone] && [defaults boolForKey:MGMDoneSound] && ![defaults boolForKey:MGMQuitAfterLaunch])
[self launchChromium:self];
}
- (void)sound:(NSSound *)sound didFinishPlaying:(BOOL)didFinish {
if (didFinish) {
[sound release];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults boolForKey:MGMLaunchWhenDone] && [defaults boolForKey:MGMQuitAfterLaunch])
[self launchChromium:self];
}
}
- (void)updateDone {
[self updateChromiumPath];
[channelPopUp setEnabled:YES];
[buildPopUp setEnabled:YES];
[progress setIndeterminate:YES];
[progress setDoubleValue:0.0];
[progress stopAnimation:self];
[statusField setStringValue:@""];
}
- (void)applicationWillTerminate:(NSNotification *)aNotification {
if (updateHandler!=nil)
[self update:self];
}
@end

35
Classes/Preferences/MGMAdvancedPane.h

@ -0,0 +1,35 @@
//
// MGMAdvancedPane.h
// Chromatic
//
// Created by Mr. Gecko on 6/10/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import <Cocoa/Cocoa.h>
#import <MGMUsers/MGMPreferencesPane.h>
@interface MGMAdvancedPane : MGMPreferencesPane {
IBOutlet NSView *mainView;
IBOutlet NSTextField *snapshotField;
IBOutlet NSButton *trashButton;
}
- (id)initWithPreferences:(MGMPreferences *)thePreferences;
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem;
+ (NSString *)title;
- (NSView *)preferencesView;
- (IBAction)save:(id)sender;
@end

60
Classes/Preferences/MGMAdvancedPane.m

@ -0,0 +1,60 @@
//
// MGMAdvancedPane.m
// Chromatic
//
// Created by Mr. Gecko on 6/10/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import "MGMAdvancedPane.h"
#import "MGMController.h"
#import <MGMUsers/MGMUsers.h>
@implementation MGMAdvancedPane
- (id)initWithPreferences:(MGMPreferences *)thePreferences {
if ((self = [super initWithPreferences:thePreferences])) {
if (![NSBundle loadNibNamed:@"AdvancedPane" owner:self]) {
NSLog(@"Unable to load Nib for Advanced Preferences");
[self release];
self = nil;
} else {
if ([preferences stringForKey:MGMCustomSnapshotURL]!=nil)
[snapshotField setStringValue:[preferences stringForKey:MGMCustomSnapshotURL]];
[trashButton setState:([preferences boolForKey:MGMMoveToTrash] ? NSOnState : NSOffState)];
}
}
return self;
}
- (void)dealloc {
[self save:self];
[mainView release];
[super dealloc];
}
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem {
[theItem setLabel:[self title]];
[theItem setPaletteLabel:[theItem label]];
[theItem setImage:[NSImage imageNamed:@"Advanced"]];
}
+ (NSString *)title {
return @"Advanced";
}
- (NSView *)preferencesView {
return mainView;
}
- (IBAction)save:(id)sender {
[preferences setObject:[snapshotField stringValue] forKey:MGMCustomSnapshotURL];
[preferences setBool:([trashButton state]==NSOnState) forKey:MGMMoveToTrash];
}
@end

36
Classes/Preferences/MGMGeneralPane.h

@ -0,0 +1,36 @@
//
// MGMGeneralPane.h
// Chromatic
//
// Created by Mr. Gecko on 6/10/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import <Cocoa/Cocoa.h>
#import <MGMUsers/MGMPreferencesPane.h>
@interface MGMGeneralPane : MGMPreferencesPane {
IBOutlet NSView *mainView;
IBOutlet NSButton *doneSoundButton;
IBOutlet NSButton *launchWhenDoneButton;
IBOutlet NSButton *quitAfterLaunchButton;
}
- (id)initWithPreferences:(MGMPreferences *)thePreferences;
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem;
+ (NSString *)title;
- (NSView *)preferencesView;
- (IBAction)save:(id)sender;
@end

60
Classes/Preferences/MGMGeneralPane.m

@ -0,0 +1,60 @@
//
// MGMGeneralPane.m
// Chromatic
//
// Created by Mr. Gecko on 6/10/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). http://mrgeckosmedia.com/
//
// Permission to use, copy, modify, and/or distribute this software for any purpose
// with or without fee is hereby granted, provided that the above copyright notice
// and this permission notice appear in all copies.
//
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT,
// OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
// DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
// ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
//
#import "MGMGeneralPane.h"
#import "MGMController.h"
#import <MGMUsers/MGMUsers.h>
@implementation MGMGeneralPane
- (id)initWithPreferences:(MGMPreferences *)thePreferences {
if ((self = [super initWithPreferences:thePreferences])) {
if (![NSBundle loadNibNamed:@"GeneralPane" owner:self]) {
NSLog(@"Unable to load Nib for General Preferences");
[self release];
self = nil;
} else {
[doneSoundButton setState:([preferences boolForKey:MGMDoneSound] ? NSOnState : NSOffState)];
[launchWhenDoneButton setState:([preferences boolForKey:MGMLaunchWhenDone] ? NSOnState : NSOffState)];
[quitAfterLaunchButton setState:([preferences boolForKey:MGMQuitAfterLaunch] ? NSOnState : NSOffState)];
}
}
return self;
}
- (void)dealloc {
[mainView release];
[super dealloc];
}
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem {
[theItem setLabel:[self title]];
[theItem setPaletteLabel:[theItem label]];
[theItem setImage:[NSImage imageNamed:@"General"]];
}
+ (NSString *)title {
return @"General";
}
- (NSView *)preferencesView {
return mainView;
}
- (IBAction)save:(id)sender {
[preferences setBool:([doneSoundButton state]==NSOnState) forKey:MGMDoneSound];
[preferences setBool:([launchWhenDoneButton state]==NSOnState) forKey:MGMLaunchWhenDone];
[preferences setBool:([quitAfterLaunchButton state]==NSOnState) forKey:MGMQuitAfterLaunch];
}
@end

7
Classes/Prefix.pch

@ -0,0 +1,7 @@
//
// Prefix header for all source files of the 'Chromatic' target in the 'Chromatic' project
//
#ifdef __OBJC__
#import <Cocoa/Cocoa.h>
#endif

14
Classes/main.m

@ -0,0 +1,14 @@
//
// main.m
// Chromatic
//
// Created by James on 6/9/11.
// Copyright 2011 Mr. Gecko's Media. All rights reserved.
//
#import <Cocoa/Cocoa.h>
int main(int argc, char *argv[])
{
return NSApplicationMain(argc, (const char **) argv);
}

1
Frameworks/GeckoReporter.framework/GeckoReporter

@ -0,0 +1 @@
Versions/Current/GeckoReporter

1
Frameworks/GeckoReporter.framework/Headers

@ -0,0 +1 @@
Versions/Current/Headers

1
Frameworks/GeckoReporter.framework/Resources

@ -0,0 +1 @@
Versions/Current/Resources

BIN
Frameworks/GeckoReporter.framework/Versions/A/GeckoReporter

12
Frameworks/GeckoReporter.framework/Versions/A/Headers/GeckoReporter.h

@ -0,0 +1,12 @@
//
// GeckoReporter.h
// GeckoReporter
//
// Created by Mr. Gecko on 12/27/09.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import "MGMReporter.h"
#import "MGMSender.h"
#import "MGMSystemInfo.h"
#import "MGMLog.h"

16
Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMFeedback.h

@ -0,0 +1,16 @@
//
// MGMFeedback.h
// GeckoReporter
//
// Created by Mr. Gecko on 1/2/10.
// Copyright (c) 2011 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

12
Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMLog.h

@ -0,0 +1,12 @@
//
// MGMLog.h
// GeckoReporter
//
// Created by Mr. Gecko on 1/1/10.
// Copyright (c) 2011 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);

28
Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMReporter.h

@ -0,0 +1,28 @@
//
// MGMReporter.h
// GeckoReporter
//
// Created by Mr. Gecko on 12/27/09.
// Copyright (c) 2011 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 MGMGRReleaseDebug 0
@class MGMSender;
@interface MGMReporter : NSObject {
BOOL foundReport;
NSDate *lastDate;
MGMSender *mailSender;
}
+ (id)sharedReporter;
@end

20
Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMSender.h

@ -0,0 +1,20 @@
//
// MGMSender.h
// GeckoReporter
//
// Created by Mr. Gecko on 12/28/09.
// Copyright (c) 2011 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

15
Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMSenderDelegate.h

@ -0,0 +1,15 @@
//
// MGMSenderDelegate.h
// GeckoReporter
//
// Created by Mr. Gecko on 1/2/10.
// Copyright (c) 2011 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

46
Frameworks/GeckoReporter.framework/Versions/A/Headers/MGMSystemInfo.h

@ -0,0 +1,46 @@
//
// MGMSystemInfo.h
// GeckoReporter
//
// Created by Mr. Gecko on 12/31/09.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Cocoa/Cocoa.h>
@interface MGMSystemInfo : NSObject {
}
+ (MGMSystemInfo *)info;
- (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;
- (BOOL)isAfterCheetah;
- (BOOL)isAfterPuma;
- (BOOL)isAfterJaguar;
- (BOOL)isAfterPanther;
- (BOOL)isAfterTiger;
- (BOOL)isAfterLeopard;
- (BOOL)isAfterSnowLeopard;
- (NSString *)language;
- (NSString *)applicationIdentifier;
- (NSString *)applicationName;
- (NSString *)applicationEXECName;
- (NSString *)applicationVersion;
- (BOOL)isUIElement;
- (NSBundle *)frameworkBundle;
- (NSString *)frameworkVersion;
- (NSString *)useragentWithApplicationNameAndVersion:(NSString *)nameAndVersion;
- (NSString *)useragent;
@end

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/GeckoReporter.strings

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMBugWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMContactWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/English.lproj/MGMReportWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/GeckoReporter.strings

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMBugWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMContactWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/French.lproj/MGMReportWindow.nib

42
Frameworks/GeckoReporter.framework/Versions/A/Resources/Info.plist

@ -0,0 +1,42 @@
<?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>BuildMachineOSBuild</key>
<string>10J567</string>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>GeckoReporter</string>
<key>CFBundleIdentifier</key>
<string>com.MrGeckosMedia.GeckoReporter</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>GeckoReporter</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>0.2</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>0.2</string>
<key>DTCompiler</key>
<string>4.2</string>
<key>DTPlatformBuild</key>
<string>4A278b</string>
<key>DTPlatformVersion</key>
<string>GM</string>
<key>DTSDKBuild</key>
<string>4A278b</string>
<key>DTSDKName</key>
<string>macosx10.6</string>
<key>DTXcode</key>
<string>0400</string>
<key>DTXcodeBuild</key>
<string>4A278b</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/</string>
</dict>
</plist>

27
Frameworks/GeckoReporter.framework/Versions/A/Resources/License.txt

@ -0,0 +1,27 @@
Copyright (c) 2010 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 MAY BE WILLING TO HELP YOU, NO PROMISES.
3. Redistributions of source code included in this framework must retain the
copyright notice above this license file without modifications.
4. Redistributions of binary must contain the copyright above this license file
without modifications.
5. If you use the crash reporter in this framework, you are allowed to remove the
NSTextField that says, "GeckoReporter by Mr. Gecko's Media".
6. For the users convenience, you must retain the notice about anonymous system
information being sent.
7. Mr. Gecko's Media (James Coleman) is allowed to modify these terms without notice to you
or your customers.

206
Frameworks/GeckoReporter.framework/Versions/A/Resources/ModelNames.plist

@ -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&quot; Flat Panel)</string>
<key>PowerMac6,1</key>
<string>iMac G4 (USB 2.0)</string>
<key>PowerMac6,3</key>
<string>iMac G4 (20&quot; 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&quot; Core Duo)</string>
<key>iMac5,1</key>
<string>iMac (Core 2 Duo 17&quot;/20&quot; SuperDrive)</string>
<key>iMac5,2</key>
<string>iMac (Core 2 Duo 17&quot; Combo Drive)</string>
<key>iMac6,1</key>
<string>iMac (Core 2 Duo 24&quot; 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&quot;)</string>
<key>PowerBook5,2</key>
<string>PowerBook G4 (15&quot; FW 800)</string>
<key>PowerBook5,3</key>
<string>PowerBook G4 (17&quot; 1.33GHz)</string>
<key>PowerBook5,4</key>
<string>PowerBook G4 (15&quot; 1.5/1.33GHz)</string>
<key>PowerBook5,5</key>
<string>PowerBook G4 (17&quot; 1.5GHz)</string>
<key>PowerBook5,6</key>
<string>PowerBook G4 (15&quot; 1.67GHz/1.5GHz)</string>
<key>PowerBook5,7</key>
<string>PowerBook G4 (17&quot; 1.67GHz)</string>
<key>PowerBook5,8</key>
<string>PowerBook G4 (Double layer SD 15&quot;)</string>
<key>PowerBook5,9</key>
<string>PowerBook G4 (Double layer SD 17&quot;)</string>
<key>PowerBook6,1</key>
<string>PowerBook G4 (12&quot;)</string>
<key>PowerBook6,2</key>
<string>PowerBook G4 (12&quot; DVI)</string>
<key>PowerBook6,4</key>
<string>PowerBook G4 (12&quot; 1.33GHz)</string>
<key>PowerBook6,8</key>
<string>PowerBook G4 (12&quot; 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&quot;)</string>
<key>MacBookPro1,2</key>
<string>MacBook Pro Core Duo (17&quot;)</string>
<key>MacBookPro2,1</key>
<string>MacBook Pro Core 2 Duo (17&quot;)</string>
<key>MacBookPro2,2</key>
<string>MacBook Pro Core 2 Duo (15&quot;)</string>
<key>MacBookPro3,1</key>
<string>MacBook Pro Core 2 Duo (15&quot; LED Core 2 Duo)</string>
<key>MacBookPro3,2</key>
<string>MacBook Pro Core 2 Duo (17&quot; 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&quot; 2009)</string>
<key>MacBookPro5,3</key>
<string>MacBook Pro (Unibody 15&quot; 2009)</string>
<key>MacBookPro5,4</key>
<string>MacBook Pro (Unibody 15&quot; 2009)</string>
<key>MacBookPro5,5</key>
<string>MacBook Pro (Unibody 13&quot; 2009)</string>
<key>PowerMac1,1</key>
<string>Power Macintosh G3 (Blue &amp; 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 &quot;Harpertown&quot;)</string>
<key>MacPro4,1</key>
<string>Mac Pro (2009 &quot;Nehalem&quot;)</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>

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/GeckoReporter.strings

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMBugWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMContactWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/es.lproj/MGMReportWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/GeckoReporter.strings

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMBugWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMContactWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/pt-PT.lproj/MGMReportWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/GeckoReporter.strings

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMBugWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMContactWindow.nib

BIN
Frameworks/GeckoReporter.framework/Versions/A/Resources/sv.lproj/MGMReportWindow.nib

1
Frameworks/GeckoReporter.framework/Versions/Current

@ -0,0 +1 @@
A

1
Frameworks/MGMUsers.framework/Headers

@ -0,0 +1 @@
Versions/Current/Headers

1
Frameworks/MGMUsers.framework/MGMUsers

@ -0,0 +1 @@
Versions/Current/MGMUsers

1
Frameworks/MGMUsers.framework/Resources

@ -0,0 +1 @@
Versions/Current/Resources

19
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMAbout.h

@ -0,0 +1,19 @@
//
// MGMAbout.h
// MGMUsers
//
// Created by Mr. Gecko on 1/29/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Cocoa/Cocoa.h>
@interface MGMAbout : NSObject {
IBOutlet NSWindow *window;
IBOutlet NSImageView *iconView;
IBOutlet NSTextField *applicationField;
IBOutlet NSTextView *aboutView;
}
- (NSWindow *)window;
- (void)show;
@end

23
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMFileManager.h

@ -0,0 +1,23 @@
//
// MGMFileManager.h
// SoundNote
//
// Created by Mr. Gecko on 1/22/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Foundation/Foundation.h>
@interface NSFileManager (MGMFileManager)
- (BOOL)moveItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination;
- (BOOL)copyItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination;
- (BOOL)removeItemAtPath:(NSString *)thePath;
- (BOOL)linkItemAtPath:(NSString *)thePath toPath:(NSString *)theDestination;
- (BOOL)createDirectoryAtPath:(NSString *)thePath withAttributes:(NSDictionary *)theAttributes;
- (BOOL)createSymbolicLinkAtPath:(NSString *)thePath withDestinationPath:(NSString *)theDestination;
- (NSString *)destinationOfSymbolicLinkAtPath:(NSString *)thePath;
- (NSArray *)contentsOfDirectoryAtPath:(NSString *)thePath;
- (NSDictionary *)attributesOfFileSystemForPath:(NSString *)thePath;
- (void)setAttributes:(NSDictionary *)theAttributes ofItemAtPath:(NSString *)thePath;
- (NSDictionary *)attributesOfItemAtPath:(NSString *)thePath;
@end

58
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMJSON.h

@ -0,0 +1,58 @@
//
// MGMJSON.h
// MGMUsers
//
// Created by Mr. Gecko on 7/31/10.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Foundation/Foundation.h>
@interface NSString (MGMJSON)
- (id)parseJSON;
- (NSString *)JSONValue;
@end
@interface NSData (MGMJSON)
- (id)parseJSON;
@end
@interface NSNumber (MGMJSON)
- (NSString *)JSONValue;
@end
@interface NSNull (MGMJSON)
- (NSString *)JSONValue;
@end
@interface NSDictionary (MGMJSON)
- (NSString *)JSONValue;
@end
@interface NSArray (MGMJSON)
- (NSString *)JSONValue;
@end
@interface MGMJSON : NSObject {
@private
NSMutableCharacterSet *escapeSet;
NSString *JSONString;
unsigned long position;
unsigned long length;
}
- (id)initWithString:(NSString *)theString;
- (id)parse;
- (void)skipWhitespace;
- (void)skipDigits;
- (id)parseForObject;
- (NSDictionary *)parseForDictionary;
- (NSArray *)parseForArray;
- (NSString *)parseForString;
- (unichar)parseForUnicodeChar;
- (NSNumber *)parseForYES;
- (id)parseForNONULL;
- (NSNumber *)parseForNumber;
- (NSString *)convert:(id)theObject;
- (NSString *)writeString:(NSString *)theString;
- (NSString *)writeNumber:(NSNumber *)theNumber;
- (NSString *)writeBool:(NSNumber *)theNumber;
- (NSString *)writeNull:(NSNull *)theNull;
- (NSString *)writeDictionary:(NSDictionary *)theDictionary;
- (NSString *)writeArray:(NSArray *)theArray;
@end

48
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMMD5.h

@ -0,0 +1,48 @@
//
// MGMMD5.h
//
// Created by Mr. Gecko <GRMrGecko@gmail.com> on 1/6/10.
// No Copyright Claimed. Public Domain.
//
#ifndef _MD_MD5
#define _MD_MD5
#ifdef __NEXT_RUNTIME__
#import <Foundation/Foundation.h>
extern NSString * const MDNMD5;
@interface NSString (MGMMD5)
- (NSString *)MD5;
- (NSString *)pathMD5;
@end
#endif
#ifdef __cplusplus
extern "C" {
#endif
char *MD5String(const char *string, int length);
char *MD5File(const char *path);
#define MD5Length 16
#define MD5BufferSize 4
struct MD5Context {
uint32_t buf[MD5BufferSize];
uint32_t bits[2];
unsigned char in[64];
};
void MD5Init(struct MD5Context *context);
void MD5Update(struct MD5Context *context, const unsigned char *buf, unsigned len);
void MD5Final(unsigned char digest[MD5Length], struct MD5Context *context);
void MD5Transform(uint32_t buf[MD5BufferSize], const unsigned char inraw[64]);
#ifdef __cplusplus
}
#endif
#endif

61
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferences.h

@ -0,0 +1,61 @@
//
// MGMPreferences.h
// MGMUsers
//
// Created by Mr. Gecko on 7/27/10.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Cocoa/Cocoa.h>
@class MGMPreferencesPane;
@interface MGMPreferences : NSObject
#if (MAC_OS_X_VERSION_MAX_ALLOWED >= 1060)
<NSWindowDelegate, NSToolbarDelegate>
#endif
{
@private
NSWindow *preferencesWindow;
NSMutableArray *preferencesPanes;
MGMPreferencesPane *currentPane;
int defaultPane;
BOOL titleIsToolbar;
}
- (NSWindow *)preferencesWindow;
- (void)addPreferencesPaneClass:(Class)theClass;
- (void)removePreferencesPaneClass:(Class)theClass;
- (void)addPreferencesPaneClassName:(NSString *)theClass;
- (void)removePreferencesPaneClassName:(NSString *)theClass;
- (NSArray *)preferencesPanes;
- (void)setSelectedPaneIndex:(int)theIndex;
- (void)setupToolbar;
- (NSArray *)arrayForKey:(NSString *)theKey;
- (BOOL)boolForKey:(NSString *)theKey;
- (NSData *)dataForKey:(NSString *)theKey;
- (NSDictionary *)dictionaryForKey:(NSString *)theKey;
- (float)floatForKey:(NSString *)theKey;
- (int)integerForKey:(NSString *)theKey;
- (id)objectForKey:(NSString *)theKey;
- (NSArray *)stringArrayForKey:(NSString *)theKey;
- (NSString *)stringForKey:(NSString *)theKey;
- (double)doubleForKey:(NSString *)theKey;
- (void)setBool:(BOOL)theValue forKey:(NSString *)theKey;
- (void)setFloat:(float)theValue forKey:(NSString *)theKey;
- (void)setInteger:(int)theValue forKey:(NSString *)theKey;
- (void)setObject:(id)theValue forKey:(NSString *)theKey;
- (void)setDouble:(double)theValue forKey:(NSString *)theKey;
- (void)removeObjectForKey:(NSString *)theKey;
- (void)setupWindowForPane:(MGMPreferencesPane *)thePane animate:(BOOL)shouldAnimate;
- (void)showPreferences;
- (void)closePreferences;
@end
@interface NSWindow (MGMToolbar)
- (NSSize)toolbarSize;
@end

29
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMPreferencesPane.h

@ -0,0 +1,29 @@
//
// MGMPreferencesPane.h
// MGMUsers
//
// Created by Mr. Gecko on 7/27/10.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Cocoa/Cocoa.h>
@class MGMPreferences;
@interface MGMPreferencesPane : NSObject {
MGMPreferences *preferences;
@private
NSTextField *textField;
}
+ (id)paneWithPreferences:(MGMPreferences *)thePreferences;
- (id)initWithPreferences:(MGMPreferences *)thePreferences;
+ (void)setUpToolbarItem:(NSToolbarItem *)theItem;
+ (NSString *)title;
- (NSView *)preferencesView;
- (void)preferencesDisplayed;
- (BOOL)isResizable;
- (NSSize)viewSize;
- (NSSize)maxSize;
- (NSSize)minSize;
- (BOOL)preferencesWindowShouldClose;
@end

101
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLBasicHandler.h

@ -0,0 +1,101 @@
//
// MGMURLBasicHandler.h
// MGMUsers
//
// Created by Mr. Gecko on 2/21/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Foundation/Foundation.h>
@class MGMURLConnectionManager;
@interface MGMURLBasicHandler : NSObject {
MGMURLConnectionManager *manager;
NSURLConnection *connection;
NSMutableURLRequest *request;
NSHTTPURLResponse *response;
NSString *file;
NSFileHandle *fileHandle;
NSMutableData *dataBuffer;
unsigned long totalExpected;
unsigned long totalDownloaded;
id delegate;
SEL receiveResponse;
SEL sendRequest;
SEL bytesUploaded;
SEL bytesReceived;
SEL failWithError;
SEL finish;
BOOL invisible;
id object;
BOOL synchronous;
}
+ (id)handler;
+ (id)handlerWithRequest:(NSURLRequest *)theRequest delegate:(id)theDelegate;
- (id)initWithRequest:(NSURLRequest *)theRequest delegate:(id)theDelegate;
- (void)setDelegate:(id)theDelegate;
- (id)delegate;
// Arguments
// MGMURLBasicHandler *theHandler
// NSHTTPURLResponse *theResponse
// Default
// handler:didReceiveResponse:
- (void)setReceiveResponse:(SEL)didReceiveResponse;
- (SEL)receiveResponse;
// Arguments
// MGMURLBasicHandler *theHandler
// NSURLRequest *theRequest
// NSHTTPURLResponse *theResponse
// Return
// NSURLRequest *newRequest (nil for continue loading).
// Default
// handler:willSendRequest:redirectResponse:
- (void)setSendRequest:(SEL)willSendRequest;
- (SEL)sendRequest;
// Arguments
// MGMURLBasicHandler *theHandler
// unsigned long theBytes
// unsigned long theTotalBytes
// unsigned long theExpectedBytes
- (void)setBytesUploaded:(SEL)theBytesUploaded;
- (SEL)bytesUploaded;
// Arguments
// MGMURLBasicHandler *theHandler
// unsigned long theBytes
// unsigned long theTotalBytes
// unsigned long theExpectedBytes
- (void)setBytesReceived:(SEL)theBytesReceived;
- (SEL)bytesReceived;
// Arguments
// MGMURLBasicHandler *theHandler
// NSError *theError
// Default
// handler:didFailWithError:
- (void)setFailWithError:(SEL)didFailWithError;
- (SEL)failWithError;
// Arguments
// MGMURLBasicHandler *theHandler
// Default
// handlerDidFinish:
- (void)setFinish:(SEL)didFinish;
- (SEL)finish;
- (void)setInvisible:(BOOL)isInvisible;
- (BOOL)invisible;
- (void)setObject:(id)theObject;
- (id)object;
- (void)setSynchronous:(BOOL)isSynchronous;
- (BOOL)synchronous;
- (void)setFile:(NSString *)theFile;
- (NSString *)file;
- (void)setRequest:(NSURLRequest *)theRequest;
- (NSMutableURLRequest *)request;
- (NSHTTPURLResponse *)response;
- (NSData *)data;
- (NSString *)string;
@end

52
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMURLConnectionManager.h

@ -0,0 +1,52 @@
//
// MGMURLConnectionManager.h
// MGMUsers
//
// Created by Mr. Gecko on 2/21/11.
// Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
//
#import <Foundation/Foundation.h>
@class MGMURLConnectionManager;
@protocol MGMURLConnectionHandler <NSObject>
- (void)setManager:(MGMURLConnectionManager *)theManager;
- (void)setConnection:(NSURLConnection *)theConnection;
- (NSURLConnection *)connection;
- (void)setRequest:(NSMutableURLRequest *)theRequest;
- (NSMutableURLRequest *)request;
- (BOOL)synchronous;
- (NSURLCredential *)credentailsForChallenge:(NSURLAuthenticationChallenge *)theChallenge;
- (void)uploaded:(unsigned long)theBytes totalBytes:(unsigned long)theTotalBytes totalBytesExpected:(unsigned long)theExpectedBytes;
- (NSURLRequest *)willSendRequest:(NSURLRequest *)theRequest redirectResponse:(NSHTTPURLResponse *)theResponse;
- (void)didReceiveResponse:(NSHTTPURLResponse *)theResponse;
- (void)didReceiveData:(NSData *)theData;
- (void)didFailWithError:(NSError *)theError;
- (void)didFinishLoading;
@end
@interface MGMURLConnectionManager : NSObject {
NSHTTPCookieStorage *cookieStorage;
NSString *userAgent;
NSURLCredential *credentials;
NSMutableArray *handlers;
BOOL runningSynchronousConnection;
}
+ (id)manager;
+ (id)managerWithCookieStorage:(id)theCookieStorage;
- (id)initWithCookieStorage:(id)theCookieStorage;
- (void)setCookieStorage:(id)theCookieStorage;
- (NSHTTPCookieStorage *)cookieStorage;
- (void)setUserAgent:(NSString *)theUserAgent;
- (NSString *)userAgent;
- (void)setCredentials:(NSURLCredential *)theCredentials;
- (void)setUser:(NSString *)theUser password:(NSString *)thePassword;
- (NSURLCredential *)credentials;
- (void)addHandler:(id)theHandler;
- (void)cancelHandler:(id)theHandler;
- (void)cancelAll;
@end

25
Frameworks/MGMUsers.framework/Versions/A/Headers/MGMUsers.h

@ -0,0 +1,25 @@
/*
* MGMUsers.h
* MGMUsers
*
* Created by Mr. Gecko on 4/14/10.
* Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/
*
*/
#if TARGET_OS_IPHONE
#import <MGMUsers/MGMURLConnectionManager.h>
#import <MGMUsers/MGMURLBasicHandler.h>
#import <MGMUsers/MGMFileManager.h>
#import <MGMUsers/MGMJSON.h>
#import <MGMUsers/MGMMD5.h>
#else
#import <MGMUsers/MGMURLConnectionManager.h>
#import <MGMUsers/MGMURLBasicHandler.h>
#import <MGMUsers/MGMFileManager.h>
#import <MGMUsers/MGMPreferences.h>
#import <MGMUsers/MGMPreferencesPane.h>
#import <MGMUsers/MGMAbout.h>
#import <MGMUsers/MGMJSON.h>
#import <MGMUsers/MGMMD5.h>
#endif

BIN
Frameworks/MGMUsers.framework/Versions/A/MGMUsers

BIN
Frameworks/MGMUsers.framework/Versions/A/Resources/English.lproj/InfoPlist.strings

26
Frameworks/MGMUsers.framework/Versions/A/Resources/Info.plist

@ -0,0 +1,26 @@
<?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>MGMUsers</string>
<key>CFBundleIdentifier</key>
<string>com.MrGeckosMedia.MGMUsers</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>MGMUsers</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.0</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>1</string>
<key>NSHumanReadableCopyright</key>
<string>Copyright (c) 2011 Mr. Gecko's Media (James Coleman). All rights reserved. http://mrgeckosmedia.com/</string>
</dict>
</plist>

BIN
Frameworks/MGMUsers.framework/Versions/A/Resources/aboutPane.nib

1
Frameworks/MGMUsers.framework/Versions/Current

@ -0,0 +1 @@
A

1
Frameworks/Sparkle.framework/Headers

@ -0,0 +1 @@
Versions/Current/Headers

1
Frameworks/Sparkle.framework/Resources

@ -0,0 +1 @@
Versions/Current/Resources

1
Frameworks/Sparkle.framework/Sparkle

@ -0,0 +1 @@
Versions/Current/Sparkle

36
Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h

@ -0,0 +1,36 @@
//
// SUAppcast.h
// Sparkle
//
// Created by Andy Matuschak on 3/12/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#ifndef SUAPPCAST_H
#define SUAPPCAST_H
@class SUAppcastItem;
@interface SUAppcast : NSObject
{
@private
NSArray *items;
NSString *userAgentString;
id delegate;
NSString *downloadFilename;
NSURLDownload *download;
}
- (void)fetchAppcastFromURL:(NSURL *)url;
- (void)setDelegate:delegate;
- (void)setUserAgentString:(NSString *)userAgentString;
- (NSArray *)items;
@end
@interface NSObject (SUAppcastDelegate)
- (void)appcastDidFinishLoading:(SUAppcast *)appcast;
- (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error;
@end
#endif

54
Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h

@ -0,0 +1,54 @@
//
// SUAppcastItem.h
// Sparkle
//
// Created by Andy Matuschak on 3/12/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#ifndef SUAPPCASTITEM_H
#define SUAPPCASTITEM_H
@interface SUAppcastItem : NSObject
{
@private
NSString *title;
NSDate *date;
NSString *itemDescription;
NSURL *releaseNotesURL;
NSString *DSASignature;
NSString *minimumSystemVersion;
NSURL *fileURL;
NSString *versionString;
NSString *displayVersionString;
NSDictionary *deltaUpdates;
NSDictionary *propertiesDictionary;
}
// Initializes with data from a dictionary provided by the RSS class.
- initWithDictionary:(NSDictionary *)dict;
- initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error;
- (NSString *)title;
- (NSString *)versionString;
- (NSString *)displayVersionString;
- (NSDate *)date;
- (NSString *)itemDescription;
- (NSURL *)releaseNotesURL;
- (NSURL *)fileURL;
- (NSString *)DSASignature;
- (NSString *)minimumSystemVersion;
- (NSDictionary *)deltaUpdates;
- (BOOL)isDeltaUpdate;
// Returns the dictionary provided in initWithDictionary; this might be useful later for extensions.
- (NSDictionary *)propertiesDictionary;
@end
#endif

126
Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h

@ -0,0 +1,126 @@
//
// SUUpdater.h
// Sparkle
//
// Created by Andy Matuschak on 1/4/06.
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#ifndef SUUPDATER_H
#define SUUPDATER_H
#import <Sparkle/SUVersionComparisonProtocol.h>
@class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast;
@interface SUUpdater : NSObject
{
@private
NSTimer *checkTimer;
SUUpdateDriver *driver;
NSString *customUserAgentString;
SUHost *host;
IBOutlet id delegate;
}
+ (SUUpdater *)sharedUpdater;
+ (SUUpdater *)updaterForBundle:(NSBundle *)bundle;
- initForBundle:(NSBundle *)bundle;
- (NSBundle *)hostBundle;
- (void)setDelegate:(id)delegate;
- delegate;
- (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks;
- (BOOL)automaticallyChecksForUpdates;
- (void)setUpdateCheckInterval:(NSTimeInterval)interval;
- (NSTimeInterval)updateCheckInterval;
- (void)setFeedURL:(NSURL *)feedURL;
- (NSURL *)feedURL;
- (void)setUserAgentString:(NSString *)userAgent;
- (NSString *)userAgentString;
- (void)setSendsSystemProfile:(BOOL)sendsSystemProfile;
- (BOOL)sendsSystemProfile;
- (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates;
- (BOOL)automaticallyDownloadsUpdates;
// This IBAction is meant for a main menu item. Hook up any menu item to this action,
// and Sparkle will check for updates and report back its findings verbosely.
- (IBAction)checkForUpdates:sender;
// This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update,
// in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an
// update is found, it will be downloaded and prepped for installation.
- (void)checkForUpdatesInBackground;
// Date of last update check. Returns null if no check has been performed.
- (NSDate*)lastUpdateCheckDate;
// This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though,
// (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI.
- (void)checkForUpdateInformation;
// Call this to appropriately schedule or cancel the update checking timer according to the preferences for time interval and automatic checks. This call does not change the date of the next check, but only the internal NSTimer.
- (void)resetUpdateCycle;
- (BOOL)updateInProgress;
@end
@interface NSObject (SUUpdaterDelegateInformalProtocol)
// This method allows you to add extra parameters to the appcast URL, potentially based on whether or not Sparkle will also be sending along the system profile. This method should return an array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user.
- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile;
// Use this to override the default behavior for Sparkle prompting the user about automatic update checks.
- (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle;
// Implement this if you want to do some special handling with the appcast once it finishes loading.
- (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast;
// If you're using special logic or extensions in your appcast, implement this to use your own logic for finding
// a valid update, if any, in the given appcast.
- (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle;
// Sent when a valid update is found by the update driver.
- (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update;
// Sent when a valid update is not found.
- (void)updaterDidNotFindUpdate:(SUUpdater *)update;
// Sent immediately before installing the specified update.
- (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update;
// Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue.
- (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation;
// Called immediately before relaunching.
- (void)updaterWillRelaunchApplication:(SUUpdater *)updater;
// This method allows you to provide a custom version comparator.
// If you don't implement this method or return nil, the standard version comparator will be used.
- (id <SUVersionComparison>)versionComparatorForUpdater:(SUUpdater *)updater;
// Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle.
- (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater;
@end
// Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds.
#ifdef DEBUG
#define SU_MIN_CHECK_INTERVAL 60
#else
#define SU_MIN_CHECK_INTERVAL 60*60
#endif
#ifdef DEBUG
#define SU_DEFAULT_CHECK_INTERVAL 60
#else
#define SU_DEFAULT_CHECK_INTERVAL 60*60*24
#endif
#endif

27
Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h

@ -0,0 +1,27 @@
//
// SUVersionComparisonProtocol.h
// Sparkle
//
// Created by Andy Matuschak on 12/21/07.
// Copyright 2007 Andy Matuschak. All rights reserved.
//
#ifndef SUVERSIONCOMPARISONPROTOCOL_H
#define SUVERSIONCOMPARISONPROTOCOL_H
/*!
@protocol
@abstract Implement this protocol to provide version comparison facilities for Sparkle.
*/
@protocol SUVersionComparison
/*!
@method
@abstract An abstract method to compare two version strings.
@discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent.
*/
- (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB;
@end
#endif

21
Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h

@ -0,0 +1,21 @@
//
// Sparkle.h
// Sparkle
//
// Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07)
// Copyright 2006 Andy Matuschak. All rights reserved.
//
#ifndef SPARKLE_H
#define SPARKLE_H
// This list should include the shared headers. It doesn't matter if some of them aren't shared (unless
// there are name-space collisions) so we can list all of them to start with:
#import <Sparkle/SUUpdater.h>
#import <Sparkle/SUAppcast.h>
#import <Sparkle/SUAppcastItem.h>
#import <Sparkle/SUVersionComparisonProtocol.h>
#endif

24
Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist

@ -0,0 +1,24 @@
<?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>en</string>
<key>CFBundleExecutable</key>
<string>Sparkle</string>
<key>CFBundleIdentifier</key>
<string>org.andymatuschak.Sparkle</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundleName</key>
<string>Sparkle</string>
<key>CFBundlePackageType</key>
<string>FMWK</string>
<key>CFBundleShortVersionString</key>
<string>1.5 Beta (git)</string>
<key>CFBundleSignature</key>
<string>????</string>
<key>CFBundleVersion</key>
<string>7baf505</string>
</dict>
</plist>

153
Frameworks/Sparkle.framework/Versions/A/Resources/License.txt

@ -0,0 +1,153 @@
Copyright (c) 2006 Andy Matuschak
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
=================
EXTERNAL LICENSES
=================
This project uses software developed by the OpenSSL Project for use in the OpenSSL
Toolkit (http://www.openssl.org). This toolkit is licensed as follows:
/* ====================================================================
* Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modiÞcation, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* ÒThis product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.openssl.org/)Ó
*
* 4. The names ÒOpenSSL ToolkitÓ and ÒOpenSSL ProjectÓ must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@openssl.org.
*
* 5. Products derived from this software may not be called ÒOpenSSLÓ
* nor may ÒOpenSSLÓ appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* ÒThis product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.openssl.org/)Ó
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS ISÕÕ AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
Original SSLeay License
/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
* by Eric Young (eay@cryptsoft.com).
* The implementation was written so as to conform with Netscapes SSL.
*
* This library is free for commercial and non-commercial use as long as
* the following conditions are aheared to. The following conditions
* apply to all code found in this distribution, be it the RC4, RSA,
* lhash, DES, etc., code; not just the SSL code. The SSL documentation
* included with this distribution is covered by the same copyright terms
* except that the holder is Tim Hudson (tjh@cryptsoft.com).
*
* Copyright remains Eric YoungÕs, and as such any Copyright notices in
* the code are not to be removed.
* If this package is used in a product, Eric Young should be given attribution
* as the author of the parts of the library used.
* This can be in the form of a textual message at program startup or
* in documentation (online or textual) provided with the package.
*
* Redistribution and use in source and binary forms, with or without
* modiÞcation, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* ÒThis product includes cryptographic software written by
* Eric Young (eay@cryptsoft.com)Ó
* The word ÔcryptographicÕ can be left out if the rouines from the library
* being used are not cryptographic related :-).
* 4. If you include any Windows speciÞc code (or a derivative thereof) from
* the apps directory (application code) you must include an acknowledgement:
* ÒThis product includes software written by Tim Hudson (tjh@cryptsoft.com)Ó
*
* THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS ISÕÕ AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
* The licence and distribution terms for any publically available version or
* derivative of this code cannot be changed. i.e. this code cannot simply be
* copied and put under another distribution licence
* [including the GNU Public Licence.]
*/
License for bspatch.c and bsdiff.c, from bsdiff 4.3 (<http://www.daemonology.net/bsdiff/>:
/*-
* Copyright 2003-2005 Colin Percival
* All rights reserved
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted providing that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
* IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/

174
Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist

@ -0,0 +1,174 @@
<?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>MacBook1,1</key>
<string>MacBook (Core Duo)</string>
<key>MacBook2,1</key>
<string>MacBook (Core 2 Duo)</string>
<key>MacBook4,1</key>
<string>MacBook (Core 2 Duo Feb 2008)</string>
<key>MacBookAir1,1</key>
<string>MacBook Air (January 2008)</string>
<key>MacBookPro1,1</key>
<string>MacBook Pro Core Duo (15-inch)</string>
<key>MacBookPro1,2</key>
<string>MacBook Pro Core Duo (17-inch)</string>
<key>MacBookPro2,1</key>
<string>MacBook Pro Core 2 Duo (17-inch)</string>
<key>MacBookPro2,2</key>
<string>MacBook Pro Core 2 Duo (15-inch)</string>
<key>MacBookPro3,1</key>
<string>MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo)</string>
<key>MacBookPro3,2</key>
<string>MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo)</string>
<key>MacBookPro4,1</key>
<string>MacBook Pro (Core 2 Duo Feb 2008)</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 (January 2008 4- or 8- core "Harpertown")</string>
<key>Macmini1,1</key>
<string>Mac Mini (Core Solo/Duo)</string>
<key>PowerBook1,1</key>
<string>PowerBook G3</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>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>PowerBook4,1</key>
<string>iBook G3 (Dual USB, Late 2001)</string>
<key>PowerBook4,2</key>
<string>iBook G3 (16MB VRAM)</string>
<key>PowerBook4,3</key>
<string>iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003)</string>
<key>PowerBook5,1</key>
<string>PowerBook G4 (17 inch)</string>
<key>PowerBook5,2</key>
<string>PowerBook G4 (15 inch FW 800)</string>
<key>PowerBook5,3</key>
<string>PowerBook G4 (17-inch 1.33GHz)</string>
<key>PowerBook5,4</key>
<string>PowerBook G4 (15 inch 1.5/1.33GHz)</string>
<key>PowerBook5,5</key>
<string>PowerBook G4 (17-inch 1.5GHz)</string>
<key>PowerBook5,6</key>
<string>PowerBook G4 (15 inch 1.67GHz/1.5GHz)</string>
<key>PowerBook5,7</key>
<string>PowerBook G4 (17-inch 1.67GHz)</string>
<key>PowerBook5,8</key>
<string>PowerBook G4 (Double layer SD, 15 inch)</string>
<key>PowerBook5,9</key>
<string>PowerBook G4 (Double layer SD, 17 inch)</string>
<key>PowerBook6,1</key>
<string>PowerBook G4 (12 inch)</string>
<key>PowerBook6,2</key>
<string>PowerBook G4 (12 inch, DVI)</string>
<key>PowerBook6,3</key>
<string>iBook G4</string>
<key>PowerBook6,4</key>
<string>PowerBook G4 (12 inch 1.33GHz)</string>
<key>PowerBook6,5</key>
<string>iBook G4 (Early-Late 2004)</string>
<key>PowerBook6,7</key>
<string>iBook G4 (Mid 2005)</string>
<key>PowerBook6,8</key>
<string>PowerBook G4 (12 inch 1.5GHz)</string>
<key>PowerMac1,1</key>
<string>Power Macintosh G3 (Blue &amp; White)</string>
<key>PowerMac1,2</key>
<string>Power Macintosh G4 (PCI Graphics)</string>
<key>PowerMac10,1</key>
<string>Mac Mini G4</string>
<key>PowerMac10,2</key>
<string>Mac Mini (Late 2005)</string>
<key>PowerMac11,2</key>
<string>Power Macintosh G5 (Late 2005)</string>
<key>PowerMac12,1</key>
<string>iMac G5 (iSight)</string>
<key>PowerMac2,1</key>
<string>iMac G3 (Slot-loading CD-ROM)</string>
<key>PowerMac2,2</key>
<string>iMac G3 (Summer 2000)</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>PowerMac4,1</key>
<string>iMac G3 (Early/Summer 2001)</string>
<key>PowerMac4,2</key>
<string>iMac G4 (Flat Panel)</string>
<key>PowerMac4,4</key>
<string>eMac</string>
<key>PowerMac4,5</key>
<string>iMac G4 (17-inch Flat Panel)</string>
<key>PowerMac5,1</key>
<string>Power Macintosh G4 Cube</string>
<key>PowerMac6,1</key>
<string>iMac G4 (USB 2.0)</string>
<key>PowerMac6,3</key>
<string>iMac G4 (20-inch Flat Panel)</string>
<key>PowerMac6,4</key>
<string>eMac (USB 2.0, 2005)</string>
<key>PowerMac7,2</key>
<string>Power Macintosh G5</string>
<key>PowerMac7,3</key>
<string>Power Macintosh G5</string>
<key>PowerMac8,1</key>
<string>iMac G5</string>
<key>PowerMac8,2</key>
<string>iMac G5 (Ambient Light Sensor)</string>
<key>PowerMac9,1</key>
<string>Power Macintosh G5 (Late 2005)</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 (January 2008 quad-core)</string>
<key>iMac1,1</key>
<string>iMac G3 (Rev A-D)</string>
<key>iMac4,1</key>
<string>iMac (Core Duo)</string>
<key>iMac4,2</key>
<string>iMac for Education (17-inch, Core Duo)</string>
<key>iMac5,1</key>
<string>iMac (Core 2 Duo, 17 or 20 inch, SuperDrive)</string>
<key>iMac5,2</key>
<string>iMac (Core 2 Duo, 17 inch, Combo Drive)</string>
<key>iMac6,1</key>
<string>iMac (Core 2 Duo, 24 inch, SuperDrive)</string>
<key>iMac8,1</key>
<string>iMac (April 2008)</string>
</dict>
</plist>

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib

BIN
Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings

Some files were not shown because too many files changed in this diff

Loading…
Cancel
Save