choctop 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +173 -0
- data/README.rdoc +130 -0
- data/Rakefile +28 -0
- data/app_generators/install_choctop/install_choctop_generator.rb +47 -0
- data/app_generators/install_choctop/templates/Rakefile.erb +17 -0
- data/assets/DefaultVolumeIcon.icns +0 -0
- data/assets/default_background.jpg +0 -0
- data/bin/install_choctop +24 -0
- data/features/development.feature +13 -0
- data/features/dmg.feature +16 -0
- data/features/fixtures/SampleApp-AlreadyBuilt/SampleApp.xcodeproj/drnic.mode1v3 +1370 -0
- data/features/fixtures/SampleApp-AlreadyBuilt/SampleApp.xcodeproj/drnic.pbxuser +134 -0
- data/features/fixtures/SampleApp/English.lproj/InfoPlist.strings +0 -0
- data/features/fixtures/SampleApp/English.lproj/MainMenu.xib +3034 -0
- data/features/fixtures/SampleApp/Info.plist +28 -0
- data/features/fixtures/SampleApp/SampleApp.xcodeproj/TemplateIcon.icns +0 -0
- data/features/fixtures/SampleApp/SampleApp.xcodeproj/drnic.mode1v3 +1370 -0
- data/features/fixtures/SampleApp/SampleApp.xcodeproj/drnic.pbxuser +134 -0
- data/features/fixtures/SampleApp/SampleApp.xcodeproj/project.pbxproj +284 -0
- data/features/fixtures/SampleApp/SampleApp_Prefix.pch +7 -0
- data/features/fixtures/SampleApp/build/Debug/SampleApp.app/Contents/Info.plist +26 -0
- data/features/fixtures/SampleApp/build/Debug/SampleApp.app/Contents/MacOS/SampleApp +0 -0
- data/features/fixtures/SampleApp/build/Debug/SampleApp.app/Contents/PkgInfo +1 -0
- data/features/fixtures/SampleApp/build/Debug/SampleApp.app/Contents/Resources/English.lproj/InfoPlist.strings +0 -0
- data/features/fixtures/SampleApp/build/Debug/SampleApp.app/Contents/Resources/English.lproj/MainMenu.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app.dSYM/Contents/Info.plist +27 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app.dSYM/Contents/Resources/DWARF/SampleApp +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Sparkle +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcast.h +33 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h +47 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Headers/SUUpdater.h +118 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h +27 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Headers/Sparkle.h +21 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist +24 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/License.txt +7 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist +174 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib +56 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib +21 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib +16 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib +16 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib +18 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib +16 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/relaunch +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib +67 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib +18 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib +39 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib +18 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Frameworks/Sparkle.framework/Versions/A/Sparkle +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Info.plist +26 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/MacOS/SampleApp +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/PkgInfo +1 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Resources/English.lproj/InfoPlist.strings +0 -0
- data/features/fixtures/SampleApp/build/Release/SampleApp.app/Contents/Resources/English.lproj/MainMenu.nib +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/Objects-normal/i386/SampleApp.LinkFileList +1 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/SampleApp-all-target-headers.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/SampleApp-generated-files.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/SampleApp-own-target-headers.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/SampleApp-project-headers.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/SampleApp.dep +8 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Debug/SampleApp.build/SampleApp.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/Objects-normal/i386/SampleApp +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/Objects-normal/i386/SampleApp.LinkFileList +1 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/Objects-normal/ppc/SampleApp +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/Objects-normal/ppc/SampleApp.LinkFileList +1 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp-all-target-headers.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp-generated-files.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp-own-target-headers.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp-project-headers.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp.dep +16 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp.hmap +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/Release/SampleApp.build/SampleApp~.dep +16 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/categories.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/cdecls.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/decls.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/files.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/imports.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/pbxindex.header +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/protocols.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/refs.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/strings.pbxstrings/control +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/strings.pbxstrings/strings +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/subclasses.pbxbtree +0 -0
- data/features/fixtures/SampleApp/build/SampleApp.build/SampleApp.pbxindex/symbols0.pbxsymbols +0 -0
- data/features/fixtures/SampleApp/main.m +14 -0
- data/features/fixtures/design/background.jpg +0 -0
- data/features/fixtures/design/ds_store +0 -0
- data/features/initial_generator.feature +26 -0
- data/features/rake_tasks.feature +44 -0
- data/features/steps/common.rb +242 -0
- data/features/steps/dmg_steps.rb +31 -0
- data/features/steps/env.rb +8 -0
- data/features/steps/generator.rb +39 -0
- data/features/steps/remote.rb +20 -0
- data/lib/choctop.rb +185 -0
- data/lib/choctop/appcast.rb +54 -0
- data/lib/choctop/dmg.rb +112 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- metadata +271 -0
@@ -0,0 +1,31 @@
|
|
1
|
+
When /^dmg '(.*)' is mounted as '(.*)'$/ do |dmg, name|
|
2
|
+
@stdout = File.expand_path(File.join(@tmp_root, "hdiutil.out"))
|
3
|
+
in_project_folder do
|
4
|
+
@mountpoint = ChocTop.new.mountpoint
|
5
|
+
FileUtils.mkdir_p @mountpoint
|
6
|
+
@volume_path = "#{@mountpoint}/#{name}"
|
7
|
+
`hdiutil attach '#{dmg}' -mountpoint '#{@volume_path}' -noautoopen > #{@stdout}`
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
def in_mounted_volume(&block)
|
12
|
+
FileUtils.chdir(@volume_path, &block)
|
13
|
+
end
|
14
|
+
|
15
|
+
Then %r{^folder '(.*)' in mounted volume (is|is not) created} do |folder, is|
|
16
|
+
in_mounted_volume do
|
17
|
+
File.exists?(folder).should(is == 'is' ? be_true : be_false)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
Then %r{^file '(.*)' in mounted volume (is|is not) created} do |file, is|
|
22
|
+
in_mounted_volume do
|
23
|
+
File.exists?(file).should(is == 'is' ? be_true : be_false)
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Then /^file '(.*)' in mounted volume (is|is not) invisible$/ do |file, is|
|
28
|
+
in_mounted_volume do
|
29
|
+
`GetFileInfo -aV '#{@volume_path}/#{file}'`.to_i.should_not == (is == 'is' ? 0 : 1)
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
Given /^a Cocoa app that does not have an existing Rakefile$/ do
|
2
|
+
Given "a safe folder"
|
3
|
+
setup_active_project_folder "sample_app"
|
4
|
+
end
|
5
|
+
|
6
|
+
Given /^a Cocoa app that does have an existing Rakefile$/ do
|
7
|
+
Given "a Cocoa app that does not have an existing Rakefile"
|
8
|
+
in_project_folder do
|
9
|
+
File.open("Rakefile", "w") do |f|
|
10
|
+
f << <<-RUBY.gsub(/^ /, '')
|
11
|
+
require "rubygems"
|
12
|
+
require "rake"
|
13
|
+
RUBY
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
Given /Rakefile wired to use development code instead of installed RubyGem/ do
|
19
|
+
in_project_folder do
|
20
|
+
prepend_to_file "Rakefile", "$:.unshift('#{@lib_path}')"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
Given /Rakefile constants rewired for local rsync/ do
|
25
|
+
end
|
26
|
+
|
27
|
+
Given /^a Cocoa app with choctop installed$/ do
|
28
|
+
Given "a safe folder"
|
29
|
+
@remote_folder = File.expand_path(File.join(@tmp_root, 'website'))
|
30
|
+
FileUtils.rm_rf @remote_folder
|
31
|
+
FileUtils.mkdir_p @remote_folder
|
32
|
+
`cp -r #{File.dirname(__FILE__) + "/../fixtures/SampleApp"} #{@tmp_root}/ 2> /dev/null`
|
33
|
+
`rm -rf #{@tmp_root}/SampleApp/build`
|
34
|
+
setup_active_project_folder "SampleApp"
|
35
|
+
Given "I run local executable 'install_choctop' with arguments '.'"
|
36
|
+
Given "Rakefile wired to use development code instead of installed RubyGem"
|
37
|
+
Given "Rakefile constants rewired for local rsync"
|
38
|
+
ENV['NO_FINDER'] = 'YES' # disable Finder during tests
|
39
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Then %r{^remote folder '(.*)' is created} do |folder|
|
2
|
+
FileUtils.chdir @remote_folder do
|
3
|
+
File.exists?(folder).should be_true
|
4
|
+
end
|
5
|
+
end
|
6
|
+
|
7
|
+
Then %r{^remote file '(.*)' (is|is not) created} do |file, is|
|
8
|
+
FileUtils.chdir @remote_folder do
|
9
|
+
File.exists?(file).should(is == 'is' ? be_true : be_false)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Given /^ChocTop config is configured for local rsync$/ do
|
14
|
+
in_project_folder do
|
15
|
+
append_to_file "Rakefile", <<-RUBY.gsub(/^ /, '')
|
16
|
+
$sparkle.host = ""
|
17
|
+
$sparkle.remote_dir = #{@remote_folder.inspect}
|
18
|
+
RUBY
|
19
|
+
end
|
20
|
+
end
|
data/lib/choctop.rb
ADDED
@@ -0,0 +1,185 @@
|
|
1
|
+
$:.unshift(File.dirname(__FILE__)) unless
|
2
|
+
$:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
|
3
|
+
|
4
|
+
require "fileutils"
|
5
|
+
require "yaml"
|
6
|
+
require "rubygems"
|
7
|
+
require "builder"
|
8
|
+
require "active_support"
|
9
|
+
require "osx/cocoa"
|
10
|
+
|
11
|
+
class ChocTop
|
12
|
+
VERSION = '0.9.0'
|
13
|
+
|
14
|
+
# The name of the Cocoa application
|
15
|
+
# Default: info_plist['CFBundleExecutable']
|
16
|
+
attr_accessor :name
|
17
|
+
|
18
|
+
# The version of the Cocoa application
|
19
|
+
# Default: info_plist['CFBundleVersion']
|
20
|
+
attr_accessor :version
|
21
|
+
|
22
|
+
# The target name of the distributed DMG file
|
23
|
+
# Default: #{name}.app
|
24
|
+
attr_accessor :target
|
25
|
+
|
26
|
+
# The host name, e.g. some-domain.com
|
27
|
+
attr_accessor :host
|
28
|
+
|
29
|
+
# The url from where the xml + dmg files will be downloaded
|
30
|
+
# Default: http://#{host}
|
31
|
+
attr_writer :base_url
|
32
|
+
def base_url
|
33
|
+
@base_url ||= "http://#{host}"
|
34
|
+
end
|
35
|
+
|
36
|
+
# The url to display the release notes for the latest release
|
37
|
+
# Default: base_url
|
38
|
+
attr_writer :release_notes_link
|
39
|
+
def release_notes_link
|
40
|
+
@release_notes_link ||= base_url
|
41
|
+
end
|
42
|
+
|
43
|
+
# The name of the local xml file containing the Sparkle item details
|
44
|
+
# Default: info_plist['SUFeedURL'] or linker_appcast.xml
|
45
|
+
attr_accessor :appcast_filename
|
46
|
+
|
47
|
+
# The remote directory where the xml + dmg files will be rsync'd
|
48
|
+
attr_accessor :remote_dir
|
49
|
+
|
50
|
+
# The argument flags passed to rsync
|
51
|
+
# Default: -aCv
|
52
|
+
attr_accessor :rsync_args
|
53
|
+
|
54
|
+
# Generated filename for a distribution, from name, version and .dmg
|
55
|
+
# e.g. MyApp-1.0.0.dmg
|
56
|
+
def pkg_name
|
57
|
+
"#{name}-#{version}.dmg"
|
58
|
+
end
|
59
|
+
|
60
|
+
# Path to generated package DMG
|
61
|
+
def pkg
|
62
|
+
"appcast/build/#{pkg_name}"
|
63
|
+
end
|
64
|
+
|
65
|
+
# Path to designed DMG and frozen assets for reuse in generated DMGs
|
66
|
+
def design_path
|
67
|
+
"appcast/design"
|
68
|
+
end
|
69
|
+
|
70
|
+
def mountpoint
|
71
|
+
# @mountpoint ||= "/tmp/build/mountpoint#{rand(10000000)}"
|
72
|
+
@mountpoint ||= "/Volumes"
|
73
|
+
end
|
74
|
+
|
75
|
+
# Path to Volume when DMG is mounted
|
76
|
+
def volume_path
|
77
|
+
"#{mountpoint}/#{name}"
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# Custom DMG properties
|
82
|
+
#
|
83
|
+
|
84
|
+
# Path to background .icns image file for custom DMG
|
85
|
+
# Value should be file path relative to root of project
|
86
|
+
# Default: a choctop supplied background image
|
87
|
+
# that matches to default app_icon_position + applications_icon_position
|
88
|
+
# To have no custom background, set value to +nil+
|
89
|
+
attr_accessor :background_file
|
90
|
+
|
91
|
+
# x, y position of this project's icon on the custom DMG
|
92
|
+
# Default: a useful position for the icon against the default background
|
93
|
+
attr_accessor :app_icon_position
|
94
|
+
|
95
|
+
# x, y position of the Applications symlink icon on the custom DMG
|
96
|
+
# Default: a useful position for the icon against the default background
|
97
|
+
attr_accessor :applications_icon_position
|
98
|
+
|
99
|
+
# Path to an .icns file for the DMG's volume icon (looks like a disk or drive)
|
100
|
+
# Default: a DMG icon provided within choctop
|
101
|
+
# To get default, boring blank DMG volume icon, set value to +nil+
|
102
|
+
attr_accessor :volume_icon
|
103
|
+
|
104
|
+
# Size of icons, in pixels, within custom DMG (between 16 and 128)
|
105
|
+
# Default: 104 - this is nice and big
|
106
|
+
attr_accessor :icon_size
|
107
|
+
|
108
|
+
# The url for the remote package, without the protocol + host
|
109
|
+
# e.g. if absolute url is http://mydomain.com/downloads/MyApp-1.0.dmg
|
110
|
+
# then pkg_relative_url is /downloads/MyApp-1.0.dmg
|
111
|
+
def pkg_relative_url
|
112
|
+
_base_url = base_url.gsub(%r{/$}, '')
|
113
|
+
"#{_base_url}/#{pkg_name}".gsub(%r{^.*#{host}}, '')
|
114
|
+
end
|
115
|
+
|
116
|
+
def info_plist
|
117
|
+
@info_plist ||= OSX::NSDictionary.dictionaryWithContentsOfFile(File.expand_path('Info.plist')) || {}
|
118
|
+
end
|
119
|
+
|
120
|
+
def initialize
|
121
|
+
$sparkle = self # define a global variable for this object
|
122
|
+
|
123
|
+
# Defaults
|
124
|
+
@name = info_plist['CFBundleExecutable']
|
125
|
+
@version = info_plist['CFBundleVersion']
|
126
|
+
@target = "#{name}.app"
|
127
|
+
@appcast_filename = info_plist['SUFeedURL'] ? File.basename(info_plist['SUFeedURL']) : 'linker_appcast.xml'
|
128
|
+
@rsync_args = '-aCv'
|
129
|
+
|
130
|
+
@background_file = File.dirname(__FILE__) + "/../assets/default_background.jpg"
|
131
|
+
@app_icon_position = [50, 90]
|
132
|
+
@applications_icon_position = [150, 90]
|
133
|
+
@volume_icon = File.dirname(__FILE__) + "/../assets/DefaultVolumeIcon.icns"
|
134
|
+
@icon_size = 104
|
135
|
+
|
136
|
+
yield self if block_given?
|
137
|
+
|
138
|
+
define_tasks
|
139
|
+
end
|
140
|
+
|
141
|
+
def define_tasks
|
142
|
+
return unless Object.const_defined?("Rake")
|
143
|
+
|
144
|
+
desc "Build Xcode Release"
|
145
|
+
task :build => "build/Release/#{target}/Contents/Info.plist"
|
146
|
+
|
147
|
+
task "build/Release/#{target}/Contents/Info.plist" do
|
148
|
+
make_build
|
149
|
+
end
|
150
|
+
|
151
|
+
desc "Create the dmg file for appcasting"
|
152
|
+
task :dmg => :build do
|
153
|
+
detach_dmg
|
154
|
+
make_dmg
|
155
|
+
detach_dmg
|
156
|
+
convert_dmg_readonly
|
157
|
+
add_eula
|
158
|
+
end
|
159
|
+
|
160
|
+
desc "Create/update the appcast file"
|
161
|
+
task :feed => :dmg do
|
162
|
+
make_appcast
|
163
|
+
make_index_redirect
|
164
|
+
end
|
165
|
+
|
166
|
+
desc "Upload the appcast file to the host"
|
167
|
+
task :upload => :feed do
|
168
|
+
upload_appcast
|
169
|
+
end
|
170
|
+
|
171
|
+
desc "Create dmg, update appcast file, and upload to host"
|
172
|
+
task :appcast => %w[force_build dmg force_feed upload]
|
173
|
+
|
174
|
+
task :detach_dmg do
|
175
|
+
detach_dmg
|
176
|
+
end
|
177
|
+
|
178
|
+
task :size do
|
179
|
+
puts configure_dmg_window
|
180
|
+
end
|
181
|
+
end
|
182
|
+
end
|
183
|
+
require "choctop/appcast"
|
184
|
+
require "choctop/dmg"
|
185
|
+
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module ChocTop::Appcast
|
2
|
+
def make_build
|
3
|
+
sh "xcodebuild -configuration Release"
|
4
|
+
end
|
5
|
+
|
6
|
+
def make_appcast
|
7
|
+
app_name = File.basename(File.expand_path('.'))
|
8
|
+
|
9
|
+
FileUtils.mkdir_p "appcast/build"
|
10
|
+
appcast = File.open("appcast/build/#{appcast_filename}", 'w')
|
11
|
+
|
12
|
+
xml = Builder::XmlMarkup.new(:target => appcast, :indent => 2)
|
13
|
+
|
14
|
+
xml.instruct!
|
15
|
+
xml.rss('xmlns:atom' => "http://www.w3.org/2005/Atom",
|
16
|
+
'xmlns:sparkle' => "http://www.andymatuschak.org/xml-namespaces/sparkle",
|
17
|
+
:version => "2.0") do
|
18
|
+
xml.channel do
|
19
|
+
xml.title(app_name)
|
20
|
+
xml.description("#{app_name} updates")
|
21
|
+
xml.link(base_url)
|
22
|
+
xml.language('en')
|
23
|
+
xml.pubDate Time.now.to_s(:rfc822)
|
24
|
+
# xml.lastBuildDate(Time.now.rfc822)
|
25
|
+
xml.atom(:link, :href => "#{base_url}/#{appcast_filename}",
|
26
|
+
:rel => "self", :type => "application/rss+xml")
|
27
|
+
|
28
|
+
xml.item do
|
29
|
+
xml.title("#{name} #{version}")
|
30
|
+
xml.tag! "sparkle:releaseNotesLink", release_notes_link
|
31
|
+
xml.pubDate Time.now.to_s(:rfc822) #(File.mtime(pkg))
|
32
|
+
xml.guid("#{name}-#{version}", :isPermaLink => "false")
|
33
|
+
xml.enclosure(:url => "#{base_url}/#{pkg_name}",
|
34
|
+
:length => "#{File.size(pkg)}",
|
35
|
+
:type => "application/dmg",
|
36
|
+
:"sparkle:version" => version)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def make_index_redirect
|
43
|
+
File.open("appcast/build/index.php", 'w') do |f|
|
44
|
+
f << %Q{<?php header("Location: #{pkg_relative_url}"); ?>}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def upload_appcast
|
49
|
+
_host = host.blank? ? "" : "#{host}:"
|
50
|
+
sh %{rsync -aCv appcast/build/ #{_host}#{remote_dir}}
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
ChocTop.send(:include, ChocTop::Appcast)
|
data/lib/choctop/dmg.rb
ADDED
@@ -0,0 +1,112 @@
|
|
1
|
+
module ChocTop::Dmg
|
2
|
+
def make_dmg
|
3
|
+
FileUtils.rm_rf pkg
|
4
|
+
FileUtils.mkdir_p(File.dirname(pkg))
|
5
|
+
FileUtils.mkdir_p(mountpoint)
|
6
|
+
sh "hdiutil create -format UDRW -quiet -volname '#{name}' -srcfolder 'build/Release/#{target}' '#{pkg}'"
|
7
|
+
sh "hdiutil attach '#{pkg}' -mountpoint '#{volume_path}' -noautoopen -quiet"
|
8
|
+
sh "bless --folder #{volume_path} --openfolder #{volume_path}"
|
9
|
+
sh "ln -s /Applications '#{volume_path}/Applications'"
|
10
|
+
sh "sleep 1"
|
11
|
+
if volume_icon
|
12
|
+
FileUtils.cp(volume_icon, "#{volume_path}/.VolumeIcon.icns")
|
13
|
+
sh "SetFile -a C #{volume_path}"
|
14
|
+
end
|
15
|
+
target_background = "#{volume_path}/#{volume_background}"
|
16
|
+
FileUtils.cp(background_file, target_background) if background_file
|
17
|
+
configure_dmg_window
|
18
|
+
sh "SetFile -a V #{target_background}" if background_file
|
19
|
+
end
|
20
|
+
|
21
|
+
def volume_background
|
22
|
+
"background#{File.extname(background_file)}"
|
23
|
+
end
|
24
|
+
|
25
|
+
def window_position
|
26
|
+
[50, 100]
|
27
|
+
end
|
28
|
+
|
29
|
+
def window_bounds
|
30
|
+
window_position +
|
31
|
+
window_position.zip(background_bounds).map { |w, b| w + b }
|
32
|
+
end
|
33
|
+
|
34
|
+
def background_bounds
|
35
|
+
return [400, 300] unless background_file
|
36
|
+
background = OSX::NSImage.alloc.initByReferencingFile(background_file).size.to_a
|
37
|
+
[background.first, background.last + statusbar_height]
|
38
|
+
end
|
39
|
+
|
40
|
+
def statusbar_height
|
41
|
+
20
|
42
|
+
end
|
43
|
+
|
44
|
+
def configure_dmg_window
|
45
|
+
applescript = <<-SCRIPT
|
46
|
+
tell application "Finder"
|
47
|
+
set mountpoint to POSIX file ("#{volume_path}" as string) as alias
|
48
|
+
tell folder mountpoint
|
49
|
+
open
|
50
|
+
tell container window
|
51
|
+
set toolbar visible to false
|
52
|
+
set statusbar visible to false -- doesn't do anything at DMG open time
|
53
|
+
set current view to icon view
|
54
|
+
delay 1 -- Sync
|
55
|
+
set the bounds to {#{window_bounds.join(", ")}}
|
56
|
+
end tell
|
57
|
+
delay 1 -- Sync
|
58
|
+
set icon size of the icon view options of container window to #{icon_size}
|
59
|
+
set arrangement of the icon view options of container window to not arranged
|
60
|
+
set position of item "#{target}" to {#{app_icon_position.join(", ")}}
|
61
|
+
set position of item "Applications" to {#{applications_icon_position.join(", ")}}
|
62
|
+
set the bounds of the container window to {#{window_bounds.join(", ")}}
|
63
|
+
set background picture of the icon view options of container window to file "#{File.basename volume_background}"
|
64
|
+
update without registering applications
|
65
|
+
delay 5 -- Sync
|
66
|
+
close
|
67
|
+
end tell
|
68
|
+
-- Sync
|
69
|
+
delay 5
|
70
|
+
end tell
|
71
|
+
SCRIPT
|
72
|
+
File.open(scriptfile = "/tmp/choctop-script", "w") do |f|
|
73
|
+
f << applescript
|
74
|
+
end
|
75
|
+
sh("osascript #{scriptfile}") do |ok, res|
|
76
|
+
if ! ok
|
77
|
+
p res
|
78
|
+
puts volume_path
|
79
|
+
exit 1
|
80
|
+
end
|
81
|
+
end
|
82
|
+
applescript
|
83
|
+
end
|
84
|
+
|
85
|
+
def detach_dmg
|
86
|
+
mounted_paths = `hdiutil info | grep '#{volume_path}' | grep "Apple_HFS"`.split("\n").map { |e| e.split(" ").first }
|
87
|
+
mounted_paths.each do |path|
|
88
|
+
begin
|
89
|
+
sh "hdiutil detach '#{path}' -quiet -force"
|
90
|
+
rescue StandardError => e
|
91
|
+
p e
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
|
96
|
+
def convert_dmg_readonly
|
97
|
+
tmp_path = "/tmp/rw.dmg"
|
98
|
+
FileUtils.mv(pkg, tmp_path)
|
99
|
+
sh "hdiutil convert '#{tmp_path}' -format UDZO -imagekey zlib-level=9 -o '#{pkg}'"
|
100
|
+
end
|
101
|
+
|
102
|
+
def add_eula
|
103
|
+
# TODO support EULA
|
104
|
+
# hdiutil unflatten $@
|
105
|
+
# /Developer/Tools/DeRez -useDF SLAResources.rsrc > build/temp/sla.r
|
106
|
+
# /Developer/Tools/Rez -a build/temp/sla.r -o $@
|
107
|
+
# hdiutil flatten $@
|
108
|
+
|
109
|
+
end
|
110
|
+
end
|
111
|
+
ChocTop.send(:include, ChocTop::Dmg)
|
112
|
+
|