choctop 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|