├── vendor └── Sparkle.framework │ ├── Versions │ ├── Current │ └── A │ │ ├── Resources │ │ ├── fr_CA.lproj │ │ ├── pt.lproj │ │ ├── finish_installation.app │ │ │ └── Contents │ │ │ │ ├── PkgInfo │ │ │ │ ├── Resources │ │ │ │ ├── SUStatus.nib │ │ │ │ ├── Sparkle.icns │ │ │ │ ├── ar.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── cs.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── da.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── de.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── en.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── es.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── fr.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── is.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── it.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ja.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── nl.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pl.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ro.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ru.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sl.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sv.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── th.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── tr.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── uk.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pt_BR.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pt_PT.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── zh_CN.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ └── zh_TW.lproj │ │ │ │ │ └── Sparkle.strings │ │ │ │ ├── MacOS │ │ │ │ └── finish_installation │ │ │ │ ├── Info.plist │ │ │ │ └── _CodeSignature │ │ │ │ └── CodeResources │ │ ├── SUStatus.nib │ │ ├── ar.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUPasswordPrompt.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── cs.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── da.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── de.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── en.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUPasswordPrompt.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── es.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── fr.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── is.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── it.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── ja.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── nl.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── pl.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── ro.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── ru.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── sl.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── sv.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── th.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUPasswordPrompt.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── tr.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── uk.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── ko.lproj │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── pt_BR.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUPasswordPrompt.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── pt_PT.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── sk.lproj │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── zh_CN.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── zh_TW.lproj │ │ │ ├── Sparkle.strings │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ └── SUUpdatePermissionPrompt.nib │ │ ├── Info.plist │ │ ├── License.txt │ │ └── SUModelTranslation.plist │ │ ├── Sparkle │ │ ├── Headers │ │ ├── SUUpdaterQueue.h │ │ ├── Sparkle.h │ │ ├── SUVersionDisplayProtocol.h │ │ ├── SUVersionComparisonProtocol.h │ │ ├── SUAppcast.h │ │ ├── SUAppcastItem.h │ │ └── SUUpdater.h │ │ └── _CodeSignature │ │ └── CodeResources │ ├── Headers │ ├── Sparkle │ └── Resources ├── Gemfile ├── lib ├── motion │ └── project │ │ ├── version.rb │ │ ├── appcast │ │ ├── release_notes.template.erb │ │ └── release_notes.content.html │ │ ├── templates.rb │ │ ├── project.rb │ │ ├── package.rb │ │ ├── rake_tasks.rb │ │ ├── setup.rb │ │ ├── appcast.rb │ │ └── sparkle.rb └── motion-sparkle.rb ├── .gitignore ├── Rakefile ├── motion-sparkle.gemspec ├── spec ├── spec_helper.rb └── sparkle_spec.rb ├── LICENSE └── README.md /vendor/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | fr.lproj -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt.lproj: -------------------------------------------------------------------------------- 1 | pt_BR.lproj -------------------------------------------------------------------------------- /Gemfile: -------------------------------------------------------------------------------- 1 | source 'https://rubygems.org' 2 | 3 | gemspec 4 | 5 | gem 'bacon' 6 | gem 'rake' 7 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /lib/motion/project/version.rb: -------------------------------------------------------------------------------- 1 | module Motion::Project 2 | class Sparkle 3 | VERSION = '0.0.5' 4 | end 5 | end 6 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUPasswordPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUPasswordPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUPasswordPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUPasswordPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUPasswordPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUPasswordPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUPasswordPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUPasswordPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/Sparkle.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/Sparkle.icns -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/MacOS/finish_installation -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.gem 2 | *.rbc 3 | .bundle 4 | .config 5 | coverage 6 | InstalledFiles 7 | lib/bundler/man 8 | pkg 9 | rdoc 10 | spec/reports 11 | test/tmp 12 | test/version_tmp 13 | tmp 14 | Gemfile.lock 15 | 16 | # YARD artifacts 17 | .yardoc 18 | _yardoc 19 | doc/ 20 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/did/motion-sparkle/master/vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /lib/motion-sparkle.rb: -------------------------------------------------------------------------------- 1 | unless defined?(Motion::Project::Config) 2 | raise "This file must be required within a RubyMotion project Rakefile." 3 | end 4 | require 'motion/project/sparkle' 5 | require 'motion/project/setup' 6 | require 'motion/project/package' 7 | require 'motion/project/templates' 8 | require 'motion/project/appcast' 9 | require 'motion/project/project' 10 | require 'motion/project/rake_tasks' 11 | require 'motion/project/version' 12 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/SUUpdaterQueue.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdaterQueue.h 3 | // Sparkle 4 | // 5 | // Created by Dmytro Tretiakov on 7/31/14. 6 | // 7 | // 8 | 9 | #import 10 | 11 | @class SUUpdater; 12 | 13 | @interface SUUpdaterQueue : NSObject 14 | 15 | - (void)addUpdater:(SUUpdater *)updater; 16 | - (void)removeUpdater:(SUUpdater *)updater; 17 | 18 | - (void)checkForUpdates; 19 | - (void)checkForUpdatesInBackground; 20 | 21 | @end 22 | -------------------------------------------------------------------------------- /Rakefile: -------------------------------------------------------------------------------- 1 | desc "Build the gem" 2 | task :gem do 3 | sh "bundle exec gem build motion-sparkle.gemspec" 4 | sh "mkdir -p pkg" 5 | sh "mv *.gem pkg/" 6 | end 7 | task :build => :gem 8 | 9 | desc "Clear gem builds" 10 | task :clean do 11 | FileUtils.rm_rf 'pkg' 12 | FileUtils.rm_rf 'tmp' 13 | end 14 | task :clear => :clean 15 | 16 | desc "Run all the specs" 17 | task :spec do 18 | sh "bundle exec bacon -q #{FileList['spec/*_spec.rb'].join(' ')}" 19 | end 20 | task :default => :spec 21 | -------------------------------------------------------------------------------- /lib/motion/project/appcast/release_notes.template.erb: -------------------------------------------------------------------------------- 1 | 2 | 3 | Release Notes for <%= @config.name %> 4 | 12 | 13 | 14 | 15 | 16 | <%= release_notes_html %> 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/Sparkle.h: -------------------------------------------------------------------------------- 1 | // 2 | // Sparkle.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. (Modified by CDHW on 23/12/07) 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SPARKLE_H 10 | #define SPARKLE_H 11 | 12 | // This list should include the shared headers. It doesn't matter if some of them aren't shared 13 | // (unless there are any name-space collisions) so we can list all of them to start with: 14 | 15 | #import 16 | #import 17 | 18 | #import 19 | #import 20 | #import 21 | 22 | #endif 23 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionDisplayProtocol.h 3 | // EyeTV 4 | // 5 | // Created by Uli Kusterer on 08.12.09. 6 | // Copyright 2009 Elgato Systems GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | 12 | /*! 13 | @protocol 14 | @abstract Implement this protocol to apply special formatting to the two 15 | version numbers. 16 | */ 17 | @protocol SUVersionDisplay 18 | 19 | /*! 20 | @method 21 | @abstract An abstract method to format two version strings. 22 | @discussion You get both so you can display important distinguishing 23 | information, but leave out unnecessary/confusing parts. 24 | */ 25 | -(void) formatVersion: (NSString**)inOutVersionA andVersion: (NSString**)inOutVersionB; 26 | 27 | @end 28 | -------------------------------------------------------------------------------- /lib/motion/project/appcast/release_notes.content.html: -------------------------------------------------------------------------------- 1 |

Your app - version x.yz

2 | 3 |

The greatest update ever

4 | 5 |
6 |
An interface to drool for
7 |
I won't say too much (wouldn't want to spoil the surprise)
8 |
Record-breaking performance
9 |
10 |

11 | We keep doing it every time and you start to be less impressed, but we're still very proud of ourselves! We could write about our performance for hours, and make you read it for days! 12 |

13 |

14 | What for? 15 |
16 | This does serve a purpose, however, and it is to show you how a longer text would look like. It'll help you figure out your style. 17 |

18 |

19 | Just do the same for your app now :) 20 |

21 |
22 |
23 | -------------------------------------------------------------------------------- /motion-sparkle.gemspec: -------------------------------------------------------------------------------- 1 | # This is just so that the source file can be loaded. 2 | module ::Motion; module Project; class Config 3 | def self.variable(*); end 4 | end; end; end 5 | 6 | require 'date' 7 | $:.unshift File.expand_path('../lib', __FILE__) 8 | require 'motion/project/version' 9 | 10 | Gem::Specification.new do |spec| 11 | spec.name = 'motion-sparkle' 12 | spec.version = Motion::Project::Sparkle::VERSION 13 | spec.date = Date.today 14 | spec.summary = 'Sparkle integration for Rubymotion projects' 15 | spec.description = "motion-sparkle makes it easy to use Sparkle with your RubyMotion projects" 16 | spec.author = 'Alexandre L. Solleiro' 17 | spec.email = 'alex@webcracy.org' 18 | spec.homepage = 'https://github.com/webcracy/motion-sparkle' 19 | spec.license = 'MIT' 20 | spec.files = `git ls-files`.split("\n") 21 | spec.require_paths = ['lib'] 22 | end 23 | -------------------------------------------------------------------------------- /spec/spec_helper.rb: -------------------------------------------------------------------------------- 1 | require 'pathname' 2 | require 'fileutils' 3 | require 'rake' 4 | require 'rubygems' 5 | require 'bundler/setup' 6 | require 'bacon' 7 | 8 | ROOT = Pathname.new(File.expand_path('../../', __FILE__)) 9 | $:.unshift(ENV['RUBYMOTION_CHECKOUT'] || "/Library/RubyMotion/lib") 10 | $:.unshift((ROOT + 'lib').to_s) 11 | require 'motion/project/template/osx' 12 | require 'motion-sparkle' 13 | 14 | Bacon.summary_at_exit 15 | 16 | module SpecHelper 17 | def self.temporary_directory 18 | TemporaryDirectory.temporary_directory 19 | end 20 | 21 | module TemporaryDirectory 22 | def temporary_directory 23 | ROOT + 'tmp' 24 | end 25 | module_function :temporary_directory 26 | 27 | def setup_temporary_directory 28 | temporary_directory.mkpath 29 | end 30 | 31 | def teardown_temporary_directory 32 | temporary_directory.rmtree if temporary_directory.exist? 33 | end 34 | end 35 | end 36 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonProtocol.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUVERSIONCOMPARISONPROTOCOL_H 10 | #define SUVERSIONCOMPARISONPROTOCOL_H 11 | 12 | #import 13 | 14 | /*! 15 | @protocol 16 | @abstract Implement this protocol to provide version comparison facilities for Sparkle. 17 | */ 18 | @protocol SUVersionComparison 19 | 20 | /*! 21 | @method 22 | @abstract An abstract method to compare two version strings. 23 | @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. 24 | */ 25 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! 26 | 27 | @end 28 | 29 | #endif 30 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/SUAppcast.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcast.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCAST_H 10 | #define SUAPPCAST_H 11 | 12 | @class SUAppcastItem; 13 | @interface SUAppcast : NSObject 14 | { 15 | @private 16 | NSArray *items; 17 | NSMutableDictionary *appcastValues; 18 | id delegate; 19 | NSString *downloadFilename; 20 | NSURLDownload *download; 21 | } 22 | 23 | - (void)fetchAppcastFromURL:(NSURL *)url; 24 | - (void)setDelegate:(id)delegate; 25 | - (void)setUserAgentString:(NSString *)userAgentString; 26 | - (void)setAppcastValue:(NSString *)value forKey:(NSString *)key; 27 | - (void)setAllAppcastValues:(NSDictionary *)inAppcastValues; 28 | 29 | - (NSArray *)items; 30 | 31 | @end 32 | 33 | @interface NSObject (SUAppcastDelegate) 34 | - (void)appcast:(SUAppcast *)appcast willFetchURLRequest:(NSMutableURLRequest *)request; 35 | - (void)appcastDidFinishLoading:(SUAppcast *)appcast; 36 | - (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; 37 | @end 38 | 39 | #endif 40 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2013 Alexandre L. Solleiro 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. -------------------------------------------------------------------------------- /lib/motion/project/templates.rb: -------------------------------------------------------------------------------- 1 | require 'erb' 2 | require 'rexml/document' 3 | 4 | module Motion; module Project 5 | 6 | class Sparkle 7 | # for ERB 8 | # attr_reader :name 9 | 10 | TemplatePaths = [ 11 | File.expand_path(File.join(__FILE__, '../appcast')) 12 | ] 13 | 14 | Templates = TemplatePaths.map { |path| Dir.glob(path + '/*') }.flatten.map { |x| File.basename(x) } 15 | 16 | def all_templates 17 | @all_templates ||= begin 18 | templates = {} 19 | TemplatePaths.map { |path| Dir.glob(path + '/*') }.flatten.each do |template_path| 20 | templates[File.basename(template_path)] = template_path 21 | end 22 | templates 23 | end 24 | end 25 | 26 | def copy_templates(force=false) 27 | all_templates.each_pair do |tmpl, path| 28 | result = "#{sparkle_config_path}/#{tmpl}" 29 | if File.exist?(result) and !force 30 | App.info 'Exists', result 31 | else 32 | FileUtils.cp(path, "#{sparkle_config_path}/") 33 | App.info 'Create', "./#{sparkle_config_path}/#{tmpl.to_s}" 34 | end 35 | end 36 | end 37 | 38 | end 39 | 40 | end; end 41 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 13D65 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Sparkle 11 | CFBundleIdentifier 12 | org.andymatuschak.Sparkle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Sparkle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 2.1 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 26818ca 25 | DTCompiler 26 | com.apple.compilers.llvm.clang.1_0 27 | DTPlatformBuild 28 | 5B130a 29 | DTPlatformVersion 30 | GM 31 | DTSDKBuild 32 | 13C64 33 | DTSDKName 34 | macosx10.9 35 | DTXcode 36 | 0510 37 | DTXcodeBuild 38 | 5B130a 39 | 40 | 41 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUAppcastItem.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/12/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUAPPCASTITEM_H 10 | #define SUAPPCASTITEM_H 11 | 12 | @interface SUAppcastItem : NSObject 13 | { 14 | @private 15 | NSString *title; 16 | NSDate *date; 17 | NSString *itemDescription; 18 | 19 | NSURL *releaseNotesURL; 20 | 21 | NSString *DSASignature; 22 | NSString *minimumSystemVersion; 23 | NSString *maximumSystemVersion; 24 | 25 | NSURL *fileURL; 26 | NSString *versionString; 27 | NSString *displayVersionString; 28 | 29 | NSDictionary *deltaUpdates; 30 | 31 | NSDictionary *propertiesDictionary; 32 | 33 | NSURL *infoURL; // UK 2007-08-31 34 | } 35 | 36 | // Initializes with data from a dictionary provided by the RSS class. 37 | - initWithDictionary:(NSDictionary *)dict; 38 | - initWithDictionary:(NSDictionary *)dict failureReason:(NSString**)error; 39 | 40 | - (NSString *)title; 41 | - (NSString *)versionString; 42 | - (NSString *)displayVersionString; 43 | - (NSDate *)date; 44 | - (NSString *)itemDescription; 45 | - (NSURL *)releaseNotesURL; 46 | - (NSURL *)fileURL; 47 | - (NSString *)DSASignature; 48 | - (NSString *)minimumSystemVersion; 49 | - (NSString *)maximumSystemVersion; 50 | - (NSDictionary *)deltaUpdates; 51 | - (BOOL)isDeltaUpdate; 52 | 53 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 54 | - (NSDictionary *)propertiesDictionary; 55 | 56 | - (NSURL *)infoURL; // UK 2007-08-31 57 | 58 | @end 59 | 60 | #endif 61 | -------------------------------------------------------------------------------- /lib/motion/project/project.rb: -------------------------------------------------------------------------------- 1 | module Motion::Project 2 | 3 | class Config 4 | variable :sparkle 5 | 6 | def sparkle(&block) 7 | @sparkle ||= Motion::Project::Sparkle.new(self) 8 | if block 9 | @sparkle.instance_eval &block 10 | end 11 | @sparkle 12 | end 13 | end 14 | 15 | class App 16 | class << self 17 | def build_with_sparkle(platform, opts = {}) 18 | if App.config.sparkle.setup_ok? 19 | App.info "Sparkle", "Setup OK" 20 | else 21 | exit 1 22 | end 23 | build_without_sparkle(platform, opts) 24 | end 25 | 26 | alias_method "build_without_sparkle", "build" 27 | alias_method "build", "build_with_sparkle" 28 | end 29 | end 30 | 31 | # In 10.9, `codesign` no longer uses the `--deep` flag by default 32 | # To make sure `Sparkle.framework` is signed, we need to override 33 | # this part of the RubyMotion build process to pass it 34 | # FIXME: this will probably be taken care of upstream 35 | # class Builder 36 | # def codesign(config, platform) 37 | # app_bundle = config.app_bundle_raw('MacOSX') 38 | # entitlements = File.join(config.versionized_build_dir(platform), "Entitlements.plist") 39 | # if File.mtime(config.project_file) > File.mtime(app_bundle) \ 40 | # or !system("/usr/bin/codesign --verify \"#{app_bundle}\" >& /dev/null") 41 | # App.info 'Codesign', app_bundle 42 | # File.open(entitlements, 'w') { |io| io.write(config.entitlements_data) } 43 | # sh "/usr/bin/codesign --deep --force --sign \"#{config.codesign_certificate}\" --entitlements \"#{entitlements}\" \"#{app_bundle}\"" 44 | # end 45 | # end 46 | # end 47 | end 48 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 13D65 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | finish_installation 11 | CFBundleIconFile 12 | Sparkle 13 | CFBundleIdentifier 14 | org.andymatuschak.sparkle.finish-installation 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.1 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1.1 25 | DTCompiler 26 | com.apple.compilers.llvm.clang.1_0 27 | DTPlatformBuild 28 | 5B130a 29 | DTPlatformVersion 30 | GM 31 | DTSDKBuild 32 | 13C64 33 | DTSDKName 34 | macosx10.9 35 | DTXcode 36 | 0510 37 | DTXcodeBuild 38 | 5B130a 39 | LSBackgroundOnly 40 | 1 41 | LSMinimumSystemVersion 42 | 10.6 43 | LSUIElement 44 | 1 45 | NSMainNibFile 46 | MainMenu 47 | NSPrincipalClass 48 | NSApplication 49 | 50 | 51 | -------------------------------------------------------------------------------- /lib/motion/project/package.rb: -------------------------------------------------------------------------------- 1 | module Motion::Project 2 | class Sparkle 3 | 4 | def package 5 | return unless setup_ok? 6 | create_release_folder 7 | @config.build_mode = :release 8 | return unless create_zip_file 9 | App.info "Release", version_string 10 | App.info "Version", @config.version 11 | App.info "Build", @config.short_version || 'unspecified in Rakefile' 12 | App.info "Size", @package_size.to_s 13 | sign_package 14 | create_appcast 15 | create_release_notes 16 | `open #{sparkle_release_path}` 17 | end 18 | 19 | def create_zip_file 20 | unless File.exist?(app_bundle_path) 21 | App.fail "You need to build your app with the Release target to use Sparkle" 22 | end 23 | if File.exist?("#{sparkle_release_path}/#{zip_file}") 24 | App.fail "Release already exists at ./#{sparkle_release_path}/#{zip_file} (remove it manually with `rake sparkle:clean`)" 25 | end 26 | FileUtils.cd(app_release_path) do 27 | `zip -r --symlinks "#{zip_file}" "#{app_file}"` 28 | end 29 | FileUtils.mv "#{app_release_path}/#{zip_file}", "./#{sparkle_release_path}/" 30 | App.info "Create", "./#{sparkle_release_path}/#{zip_file}" 31 | @package_file = zip_file 32 | @package_size = File.size "./#{sparkle_release_path}/#{zip_file}" 33 | end 34 | 35 | def sign_package 36 | package = "./#{sparkle_release_path}/#{zip_file}" 37 | @package_signature = `#{openssl} dgst -sha1 -binary < "#{package}" | #{openssl} dgst -dss1 -sign "#{private_key_path}" | #{openssl} enc -base64` 38 | @package_signature = @package_signature.strip 39 | App.info "Signature", "\"#{@package_signature}\"" 40 | end 41 | 42 | 43 | end 44 | end 45 | -------------------------------------------------------------------------------- /lib/motion/project/rake_tasks.rb: -------------------------------------------------------------------------------- 1 | # Rake tasks 2 | namespace :sparkle do 3 | 4 | desc "Setup Sparkle configuration" 5 | task :setup do 6 | sparkle = App.config.sparkle 7 | sparkle.setup 8 | end 9 | 10 | desc "Create a ZIP file with you application .app release build" 11 | task :package do 12 | sparkle = App.config.sparkle 13 | sparkle.package 14 | end 15 | 16 | task :setup_certificates do 17 | sparkle = App.config.sparkle 18 | sparkle.generate_keys 19 | end 20 | 21 | desc "Sign the ZIP file with appropriate certificates" 22 | task :sign do 23 | sparkle = App.config.sparkle 24 | sparkle.sign_package 25 | end 26 | 27 | task :recreate_public_key do 28 | sparkle = App.config.sparkle 29 | sparkle.generate_public_key 30 | end 31 | 32 | task :copy_release_notes_templates do 33 | sparkle = App.config.sparkle 34 | sparkle.copy_templates(force = true) 35 | end 36 | 37 | desc "Generate the appcast xml feed" 38 | task :feed do 39 | sparkle = App.config.sparkle 40 | sparkle.create_appcast 41 | end 42 | 43 | desc "Update the release notes of this build" 44 | task :release_notes do 45 | sparkle = App.config.sparkle 46 | sparkle.create_release_notes 47 | end 48 | 49 | desc "Upload to configured location" 50 | task :upload do 51 | end 52 | 53 | desc "Clean the Sparkle release folder" 54 | task :clean do 55 | dir = Motion::Project::Sparkle::RELEASE_PATH 56 | if File.exist?("./#{dir}") 57 | App.info 'Delete', "./#{dir}" 58 | rm_rf dir 59 | end 60 | end 61 | end 62 | 63 | namespace :clean do 64 | # Delete Sparkle release folder when cleaning all 65 | task :all do 66 | dir = Motion::Project::Sparkle::RELEASE_PATH 67 | if File.exist?("./#{dir}") 68 | App.info 'Delete', "./#{dir}" 69 | rm_rf dir 70 | end 71 | end 72 | end 73 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/License.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2006 Andy Matuschak 2 | 3 | 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: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | 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. 8 | 9 | ================= 10 | EXTERNAL LICENSES 11 | ================= 12 | 13 | License for bspatch.c and bsdiff.c, from bsdiff 4.3 (: 14 | /*- 15 | * Copyright 2003-2005 Colin Percival 16 | * All rights reserved 17 | * 18 | * Redistribution and use in source and binary forms, with or without 19 | * modification, are permitted providing that the following conditions 20 | * are met: 21 | * 1. Redistributions of source code must retain the above copyright 22 | * notice, this list of conditions and the following disclaimer. 23 | * 2. Redistributions in binary form must reproduce the above copyright 24 | * notice, this list of conditions and the following disclaimer in the 25 | * documentation and/or other materials provided with the distribution. 26 | * 27 | * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 28 | * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 29 | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 30 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY 31 | * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 32 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 33 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 34 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 35 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING 36 | * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 37 | * POSSIBILITY OF SUCH DAMAGE. 38 | */ 39 | -------------------------------------------------------------------------------- /lib/motion/project/setup.rb: -------------------------------------------------------------------------------- 1 | module Motion::Project 2 | class Sparkle 3 | 4 | def setup_ok? 5 | config_ok? 6 | certificates_ok? 7 | end 8 | 9 | def config_ok? 10 | base_url_check = appcast.base_url.to_s 11 | if base_url_check.nil? or base_url_check.empty? 12 | App.fail "Sparkle :base_url missing. Use `release :base_url, 'http://example.com/your_app_folder'` in your Rakefile's `app.sparkle` block" 13 | end 14 | feed_url_check = @config.info_plist['SUFeedURL'] 15 | feed_filename_check = appcast.feed_filename 16 | if feed_url_check.nil? or feed_url_check.empty? or feed_filename_check.nil? or feed_filename_check.empty? 17 | App.fail "Sparkle :feed_filename is nil or blank. Please check your Rakefile." 18 | end 19 | public_key_check = @config.info_plist['SUPublicDSAKeyFile'].to_s 20 | if public_key_check.nil? or public_key_check.empty? 21 | App.fail "Sparkle :public_key is nil or blank. Please check your Rakefile." 22 | end 23 | true 24 | end 25 | 26 | def certificates_ok?(silence=false) 27 | unless File.exist?("./#{Sparkle::CONFIG_PATH}") 28 | if silence 29 | return false 30 | else 31 | App.fail "Missing `#{Sparkle::CONFIG_PATH}`. Run `rake sparkle:setup` to get started" 32 | end 33 | end 34 | unless File.exist?(private_key_path) 35 | if silence 36 | return false 37 | else 38 | App.fail "Missing `#{private_key_path}`. Please run `rake sparkle:setup_certificates` or check the docs to know where to put them." 39 | end 40 | end 41 | unless File.exist?(public_key_path) 42 | if silence 43 | return false 44 | else 45 | App.fail "Missing `#{public_key_path}`. Did you configure `release :public_key` correctly in the Rakefile? Advanced: recreate your public key with `rake sparkle:recreate_public_key`" 46 | end 47 | end 48 | true 49 | end 50 | 51 | def setup 52 | create_sparkle_folder 53 | add_to_gitignore 54 | copy_templates 55 | if config_ok? 56 | App.info "Sparkle", "Config found" 57 | else 58 | return false 59 | end 60 | 61 | silence = true 62 | if certificates_ok?(silence) 63 | App.info "Sparkle", "Certificates found" 64 | else 65 | App.info "Sparkle", "Certificates not found 66 | Please generate your private and public keys with 67 | `rake sparkle:setup_certificates` 68 | If you already have your certificates and only need to include them in the project, follow these steps: 69 | 1. Rename your private key to `./#{private_key_path}` 70 | 2. Place your public key in `./#{public_key_path}` 71 | 3. If you wish to use a different name or location for your public key within the resources dir, 72 | make sure you add `publish :public_key, 'folder/new_name.pem'` to the sparkle config in your Rakefile 73 | " 74 | return false 75 | end 76 | App.info "Sparkle", "Setup OK. After `rake build:release`, you can now run `rake sparkle:package`." 77 | end 78 | 79 | end 80 | end -------------------------------------------------------------------------------- /spec/sparkle_spec.rb: -------------------------------------------------------------------------------- 1 | require File.expand_path('../spec_helper', __FILE__) 2 | 3 | module Motion; module Project; 4 | class Config 5 | attr_writer :project_dir 6 | end 7 | end; end 8 | 9 | describe "motion-sparkle" do 10 | extend SpecHelper::TemporaryDirectory 11 | 12 | before do 13 | unless @completed_setup 14 | teardown_temporary_directory 15 | setup_temporary_directory 16 | 17 | FileUtils.mkdir_p(temporary_directory + 'resources') 18 | FileUtils.touch(temporary_directory + '.gitignore') 19 | 20 | @config = App.config 21 | @config.project_dir = temporary_directory.to_s 22 | @config.instance_eval do 23 | sparkle do 24 | release :base_url, 'http://example.com' 25 | release :public_key, 'public_key.pem' 26 | release :version, '1.0' 27 | # Optional config options 28 | release :feed_base_url, 'http://rss.example.com' 29 | release :feed_filename, 'example.xml' 30 | release :notes_base_url, 'http://www.example.com' 31 | release :notes_filename, 'example.html' 32 | release :package_base_url, 'http://download.example.com' 33 | release :package_filename, 'example.zip' 34 | end 35 | end 36 | end 37 | end 38 | 39 | it "Sparkle's release base url should be set correctly" do 40 | @config.sparkle.appcast.base_url.should.equal 'http://example.com' 41 | end 42 | 43 | it "Sparkle's feed url should be set correctly" do 44 | @config.info_plist['SUFeedURL'].should.equal 'http://rss.example.com/example.xml' 45 | end 46 | 47 | it "Sparkle's release notes url should be set correctly" do 48 | @config.sparkle.appcast.notes_url.should.equal 'http://www.example.com/example.html' 49 | end 50 | 51 | it "Sparkle's appcast package url should be set correctly" do 52 | @config.sparkle.appcast.package_url.should.equal 'http://download.example.com/example.zip' 53 | end 54 | 55 | it "Sparkle's public key should have custom name" do 56 | @config.info_plist['SUPublicDSAKeyFile'].should.equal 'public_key.pem' 57 | end 58 | 59 | it "Version and short version should be set correctly" do 60 | @config.version.should.equal '1.0' 61 | @config.short_version.should.equal '1.0' 62 | end 63 | 64 | it "Version should be same for short_version and version" do 65 | @config.version.should.equal @config.short_version 66 | end 67 | 68 | it "Sparkle framework should be embedded" do 69 | sparkle_framework_path = ROOT + "vendor/Sparkle.framework" 70 | @config.embedded_frameworks.include?(sparkle_framework_path.to_s).should.equal true 71 | end 72 | 73 | before do 74 | unless @completed_setup 75 | Rake::Task['sparkle:setup'].invoke 76 | Rake::Task['sparkle:setup_certificates'].invoke 77 | @completed_setup = true 78 | end 79 | end 80 | 81 | it "should create private certificate" do 82 | puts @config.sparkle.private_key_path.to_s 83 | File.exist?(@config.sparkle.private_key_path.to_s).should.equal true 84 | end 85 | 86 | it "should create public certificate" do 87 | puts @config.sparkle.public_key_path.to_s 88 | File.exist?(@config.sparkle.public_key_path.to_s).should.equal true 89 | end 90 | 91 | it "should add files to gitignore" do 92 | a = `cat .gitignore` 93 | a.strip.should.not.equal '' 94 | end 95 | 96 | end 97 | -------------------------------------------------------------------------------- /lib/motion/project/appcast.rb: -------------------------------------------------------------------------------- 1 | module Motion::Project 2 | class Sparkle 3 | 4 | def create_release_notes 5 | if File.exist?(release_notes_template_path) 6 | File.open("#{release_notes_path}", "w") do |f| 7 | template = File.read(release_notes_template_path) 8 | f << ERB.new(template).result(binding) 9 | end 10 | App.info 'Create', "./#{release_notes_path}" 11 | else 12 | App.fail "Release notes template not found as expected at ./#{release_notes_template_path}" 13 | end 14 | end 15 | 16 | def create_appcast 17 | appcast_file = File.open("#{sparkle_release_path}/#{appcast.feed_filename}", 'w') do |f| 18 | xml_string = '' 19 | doc = REXML::Formatters::Pretty.new 20 | doc.write(appcast_xml, xml_string) 21 | f << "\n" 22 | f << xml_string 23 | f << "\n" 24 | end 25 | if appcast_file 26 | App.info "Create", "./#{sparkle_release_path}/#{appcast.feed_filename}" 27 | else 28 | App.info "Fail", "./#{sparkle_release_path}/#{appcast.feed_filename} not created" 29 | end 30 | end 31 | 32 | def appcast_xml 33 | rss = REXML::Element.new 'rss' 34 | rss.attributes['xmlns:atom'] = "http://www.w3.org/2005/Atom" 35 | rss.attributes['xmlns:sparkle'] = "http://www.andymatuschak.org/xml-namespaces/sparkle" 36 | rss.attributes['xmlns:version'] = "2.0" 37 | rss.attributes['xmlns:dc'] = "http://purl.org/dc/elements/1.1/" 38 | channel = rss.add_element 'channel' 39 | channel.add_element('title').text = @config.name 40 | channel.add_element('description').text = "#{@config.name} updates" 41 | channel.add_element('link').text = @config.info_plist["SUFeedURL"] 42 | channel.add_element('language').text = 'en' 43 | channel.add_element('pubDate').text = Time.now.strftime("%a, %d %b %Y %H:%M:%S %z") 44 | atom_link = channel.add_element('atom:link') 45 | atom_link.attributes['href'] = @config.info_plist["SUFeedURL"] 46 | atom_link.attributes['rel'] = 'self' 47 | atom_link.attributes['type'] = "application/rss+xml" 48 | item = channel.add_element 'item' 49 | item.add_element('title').text = "#{@config.name} #{@config.version}" 50 | item.add_element('pubDate').text = Time.now.strftime("%a, %d %b %Y %H:%M:%S %z") 51 | guid = item.add_element('guid') 52 | guid.text = "#{@config.name}-#{@config.version}" 53 | guid.attributes['isPermaLink'] = false 54 | item.add_element('sparkle:releaseNotesLink').text = "#{appcast.notes_url}" 55 | enclosure = item.add_element('enclosure') 56 | enclosure.attributes['url'] = "#{appcast.package_url}" 57 | enclosure.attributes['length'] = "#{@package_size}" 58 | enclosure.attributes['type'] = "application/octet-stream" 59 | enclosure.attributes['sparkle:version'] = @config.version 60 | enclosure.attributes['sparkle:dsaSignature'] = @package_signature 61 | rss 62 | end 63 | 64 | def release_notes_template_path 65 | sparkle_config_path + "release_notes.template.erb" 66 | end 67 | 68 | def release_notes_content_path 69 | sparkle_config_path + "release_notes.content.html" 70 | end 71 | 72 | def release_notes_path 73 | sparkle_release_path + appcast.notes_filename.to_s 74 | end 75 | 76 | def release_notes_content 77 | if File.exist?(release_notes_content_path) 78 | File.read(release_notes_content_path) 79 | else 80 | App.fail "Missing #{release_notes_content_path}" 81 | end 82 | end 83 | 84 | def release_notes_html 85 | release_notes_content 86 | end 87 | 88 | 89 | class Appcast 90 | attr_accessor :base_url, 91 | :feed_base_url, 92 | :feed_filename, 93 | :notes_base_url, 94 | :notes_filename, 95 | :package_base_url, 96 | :package_filename 97 | 98 | def initialize 99 | @feed_base_url = nil 100 | @feed_filename = 'releases.xml' 101 | @notes_base_url = nil 102 | @notes_filename = 'release_notes.html' 103 | @package_base_url = nil 104 | @package_filename = nil 105 | @base_url = nil 106 | end 107 | 108 | def feed_url 109 | "#{feed_base_url || base_url}/#{feed_filename}" 110 | end 111 | 112 | def notes_url 113 | "#{notes_base_url || base_url}/#{notes_filename}" 114 | end 115 | 116 | def package_url 117 | "#{package_base_url || base_url}/#{package_filename}" 118 | end 119 | 120 | end 121 | 122 | end 123 | end 124 | -------------------------------------------------------------------------------- /lib/motion/project/sparkle.rb: -------------------------------------------------------------------------------- 1 | module Motion::Project 2 | 3 | class Sparkle 4 | 5 | SPARKLE_ROOT = "sparkle" 6 | CONFIG_PATH = "#{SPARKLE_ROOT}/config" 7 | RELEASE_PATH = "#{SPARKLE_ROOT}/release" 8 | 9 | def initialize(config) 10 | @config = config 11 | publish :public_key, 'dsa_pub.pem' 12 | embed_framework 13 | end 14 | 15 | def appcast 16 | @appcast ||= Appcast.new 17 | end 18 | 19 | def publish(key, value) 20 | case key 21 | when :public_key 22 | public_key value 23 | when :base_url 24 | appcast.base_url = value 25 | feed_url appcast.feed_url 26 | when :feed_base_url 27 | appcast.send(key.to_s + '=', value) 28 | feed_url appcast.feed_url 29 | when :feed_filename 30 | appcast.feed_filename = value 31 | feed_url appcast.feed_url 32 | when :version 33 | version value 34 | when :notes_base_url, :package_base_url, :notes_filename, :package_filename 35 | appcast.send(key.to_s + '=', value) 36 | else 37 | raise "Unknown Sparkle config option #{key}" 38 | end 39 | end 40 | alias_method :release, :publish 41 | 42 | def embed_framework 43 | framework_path = Pathname.new File.dirname(__FILE__) 44 | framework_path = (framework_path.parent.parent.parent + 'vendor/Sparkle.framework').to_s 45 | @config.embedded_frameworks << framework_path 46 | end 47 | 48 | def version(vstring) 49 | @config.version = vstring.to_s 50 | @config.short_version = vstring.to_s 51 | end 52 | 53 | def version_string 54 | "#{@config.version} (#{@config.short_version})" 55 | end 56 | 57 | def feed_url(url) 58 | @config.info_plist['SUFeedURL'] = url 59 | end 60 | 61 | def public_key(path_in_resources_folder) 62 | @config.info_plist['SUPublicDSAKeyFile'] = path_in_resources_folder 63 | end 64 | 65 | # File manipulation and certificates 66 | 67 | def add_to_gitignore 68 | @ignorable = ['sparkle/release','sparkle/release/*','sparkle/config/dsa_priv.pem'] 69 | return unless File.exist?(gitignore_path) 70 | File.open(gitignore_path, 'r') do |f| 71 | f.each_line do |line| 72 | @ignorable.delete(line) if @ignorable.include?(line) 73 | end 74 | end 75 | File.open(gitignore_path, 'a') do |f| 76 | @ignorable.each do |i| 77 | f << "#{i}\n" 78 | end 79 | end if @ignorable.any? 80 | `cat #{gitignore_path}` 81 | end 82 | 83 | def create_sparkle_folder 84 | create_config_folder 85 | create_release_folder 86 | end 87 | 88 | def create_config_folder 89 | FileUtils.mkdir_p(sparkle_config_path) unless File.exist?(sparkle_config_path) 90 | end 91 | 92 | def create_release_folder 93 | FileUtils.mkdir_p(sparkle_release_path) unless File.exist?(sparkle_release_path) 94 | end 95 | 96 | def generate_keys 97 | return false unless config_ok? 98 | unless File.exist?(sparkle_config_path) 99 | FileUtils.mkdir_p sparkle_config_path 100 | end 101 | [dsa_param_path, private_key_path, public_key_path].each do |file| 102 | if File.exist? file 103 | App.info "Sparkle", "Error: file exists. 104 | There's already a '#{file}'. Be careful not to override or lose your certificates. \n 105 | Delete this file if you're sure. \n 106 | Aborting (no action performed) 107 | " 108 | return 109 | end 110 | end 111 | `#{openssl} dsaparam 1024 < /dev/urandom > #{dsa_param_path}` 112 | `#{openssl} gendsa #{dsa_param_path} -out #{private_key_path}` 113 | generate_public_key 114 | `rm #{dsa_param_path}` 115 | App.info "Sparkle", "Generated private and public certificates. 116 | Details: 117 | * Private certificate: ./#{private_key_path} 118 | * Public certificate: ./#{public_key_path} 119 | Warning: 120 | ADD YOUR PRIVATE CERTIFICATE TO YOUR `.gitignore` OR EQUIVALENT AND BACK IT UP! 121 | KEEP IT PRIVATE AND SAFE! 122 | If you lose it, your users will be unable to upgrade. 123 | " 124 | end 125 | 126 | def generate_public_key 127 | `#{openssl} dsa -in #{private_key_path} -pubout -out #{public_key_path}` 128 | end 129 | 130 | # A few helpers 131 | 132 | def openssl 133 | "/usr/bin/openssl" 134 | end 135 | 136 | def project_path 137 | @project_path ||= Pathname.new(@config.project_dir) 138 | end 139 | 140 | def gitignore_path 141 | project_path + ".gitignore" 142 | end 143 | 144 | def sparkle_release_path 145 | project_path + RELEASE_PATH 146 | end 147 | 148 | def sparkle_config_path 149 | project_path + CONFIG_PATH 150 | end 151 | 152 | def dsa_param_path 153 | sparkle_config_path + "dsaparam.pem" 154 | end 155 | 156 | def private_key_path 157 | sparkle_config_path + "dsa_priv.pem" 158 | end 159 | 160 | def public_key_path 161 | pub_key_file = @config.info_plist['SUPublicDSAKeyFile'] 162 | project_path + "resources/#{pub_key_file}" 163 | end 164 | 165 | def app_bundle_path 166 | Pathname.new @config.app_bundle_raw('MacOSX') 167 | end 168 | 169 | def app_release_path 170 | app_bundle_path.parent.to_s 171 | end 172 | 173 | def app_name 174 | File.basename(app_bundle_path, '.app') 175 | end 176 | 177 | def zip_file 178 | appcast.package_filename || "#{app_name}.zip" 179 | end 180 | 181 | def app_file 182 | "#{app_name}.app" 183 | end 184 | 185 | end 186 | 187 | end 188 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ADP2,1 6 | Developer Transition Kit 7 | iMac1,1 8 | iMac G3 (Rev A-D) 9 | iMac4,1 10 | iMac (Core Duo) 11 | iMac4,2 12 | iMac for Education (17-inch, Core Duo) 13 | iMac5,1 14 | iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) 15 | iMac5,2 16 | iMac (Core 2 Duo, 17 inch, Combo Drive) 17 | iMac6,1 18 | iMac (Core 2 Duo, 24 inch, SuperDrive) 19 | iMac8,1 20 | iMac (April 2008) 21 | MacBook1,1 22 | MacBook (Core Duo) 23 | MacBook2,1 24 | MacBook (Core 2 Duo) 25 | MacBook4,1 26 | MacBook (Core 2 Duo Feb 2008) 27 | MacBookAir1,1 28 | MacBook Air (January 2008) 29 | MacBookAir2,1 30 | MacBook Air (June 2009) 31 | MacBookAir3,1 32 | MacBook Air (October 2010) 33 | MacBookPro1,1 34 | MacBook Pro Core Duo (15-inch) 35 | MacBookPro1,2 36 | MacBook Pro Core Duo (17-inch) 37 | MacBookPro2,1 38 | MacBook Pro Core 2 Duo (17-inch) 39 | MacBookPro2,2 40 | MacBook Pro Core 2 Duo (15-inch) 41 | MacBookPro3,1 42 | MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) 43 | MacBookPro3,2 44 | MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) 45 | MacBookPro4,1 46 | MacBook Pro (Core 2 Duo Feb 2008) 47 | Macmini1,1 48 | Mac Mini (Core Solo/Duo) 49 | MacPro1,1 50 | Mac Pro (four-core) 51 | MacPro2,1 52 | Mac Pro (eight-core) 53 | MacPro3,1 54 | Mac Pro (January 2008 4- or 8- core "Harpertown") 55 | MacPro4,1 56 | Mac Pro (March 2009) 57 | MacPro5,1 58 | Mac Pro (August 2010) 59 | PowerBook1,1 60 | PowerBook G3 61 | PowerBook2,1 62 | iBook G3 63 | PowerBook2,2 64 | iBook G3 (FireWire) 65 | PowerBook2,3 66 | iBook G3 67 | PowerBook2,4 68 | iBook G3 69 | PowerBook3,1 70 | PowerBook G3 (FireWire) 71 | PowerBook3,2 72 | PowerBook G4 73 | PowerBook3,3 74 | PowerBook G4 (Gigabit Ethernet) 75 | PowerBook3,4 76 | PowerBook G4 (DVI) 77 | PowerBook3,5 78 | PowerBook G4 (1GHz / 867MHz) 79 | PowerBook4,1 80 | iBook G3 (Dual USB, Late 2001) 81 | PowerBook4,2 82 | iBook G3 (16MB VRAM) 83 | PowerBook4,3 84 | iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) 85 | PowerBook5,1 86 | PowerBook G4 (17 inch) 87 | PowerBook5,2 88 | PowerBook G4 (15 inch FW 800) 89 | PowerBook5,3 90 | PowerBook G4 (17-inch 1.33GHz) 91 | PowerBook5,4 92 | PowerBook G4 (15 inch 1.5/1.33GHz) 93 | PowerBook5,5 94 | PowerBook G4 (17-inch 1.5GHz) 95 | PowerBook5,6 96 | PowerBook G4 (15 inch 1.67GHz/1.5GHz) 97 | PowerBook5,7 98 | PowerBook G4 (17-inch 1.67GHz) 99 | PowerBook5,8 100 | PowerBook G4 (Double layer SD, 15 inch) 101 | PowerBook5,9 102 | PowerBook G4 (Double layer SD, 17 inch) 103 | PowerBook6,1 104 | PowerBook G4 (12 inch) 105 | PowerBook6,2 106 | PowerBook G4 (12 inch, DVI) 107 | PowerBook6,3 108 | iBook G4 109 | PowerBook6,4 110 | PowerBook G4 (12 inch 1.33GHz) 111 | PowerBook6,5 112 | iBook G4 (Early-Late 2004) 113 | PowerBook6,7 114 | iBook G4 (Mid 2005) 115 | PowerBook6,8 116 | PowerBook G4 (12 inch 1.5GHz) 117 | PowerMac1,1 118 | Power Macintosh G3 (Blue & White) 119 | PowerMac1,2 120 | Power Macintosh G4 (PCI Graphics) 121 | PowerMac10,1 122 | Mac Mini G4 123 | PowerMac10,2 124 | Mac Mini (Late 2005) 125 | PowerMac11,2 126 | Power Macintosh G5 (Late 2005) 127 | PowerMac12,1 128 | iMac G5 (iSight) 129 | PowerMac2,1 130 | iMac G3 (Slot-loading CD-ROM) 131 | PowerMac2,2 132 | iMac G3 (Summer 2000) 133 | PowerMac3,1 134 | Power Macintosh G4 (AGP Graphics) 135 | PowerMac3,2 136 | Power Macintosh G4 (AGP Graphics) 137 | PowerMac3,3 138 | Power Macintosh G4 (Gigabit Ethernet) 139 | PowerMac3,4 140 | Power Macintosh G4 (Digital Audio) 141 | PowerMac3,5 142 | Power Macintosh G4 (Quick Silver) 143 | PowerMac3,6 144 | Power Macintosh G4 (Mirrored Drive Door) 145 | PowerMac4,1 146 | iMac G3 (Early/Summer 2001) 147 | PowerMac4,2 148 | iMac G4 (Flat Panel) 149 | PowerMac4,4 150 | eMac 151 | PowerMac4,5 152 | iMac G4 (17-inch Flat Panel) 153 | PowerMac5,1 154 | Power Macintosh G4 Cube 155 | PowerMac6,1 156 | iMac G4 (USB 2.0) 157 | PowerMac6,3 158 | iMac G4 (20-inch Flat Panel) 159 | PowerMac6,4 160 | eMac (USB 2.0, 2005) 161 | PowerMac7,2 162 | Power Macintosh G5 163 | PowerMac7,3 164 | Power Macintosh G5 165 | PowerMac8,1 166 | iMac G5 167 | PowerMac8,2 168 | iMac G5 (Ambient Light Sensor) 169 | PowerMac9,1 170 | Power Macintosh G5 (Late 2005) 171 | RackMac1,1 172 | Xserve G4 173 | RackMac1,2 174 | Xserve G4 (slot-loading, cluster node) 175 | RackMac3,1 176 | Xserve G5 177 | Xserve1,1 178 | Xserve (Intel Xeon) 179 | Xserve2,1 180 | Xserve (January 2008 quad-core) 181 | 182 | 183 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Headers/SUUpdater.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUpdater.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 1/4/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUPDATER_H 10 | #define SUUPDATER_H 11 | 12 | #import "SUVersionComparisonProtocol.h" 13 | #import "SUVersionDisplayProtocol.h" 14 | 15 | @class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; 16 | 17 | @interface SUUpdater : NSObject 18 | { 19 | @private 20 | NSTimer *checkTimer; 21 | SUUpdateDriver *driver; 22 | 23 | NSString *customUserAgentString; 24 | SUHost *host; 25 | IBOutlet id delegate; 26 | } 27 | 28 | + (SUUpdater *)sharedUpdater; 29 | + (SUUpdater *)updaterForBundle:(NSBundle *)bundle; 30 | - (id)initForBundle:(NSBundle *)bundle; 31 | 32 | - (NSBundle *)hostBundle; 33 | 34 | - (void)setDelegate:(id)delegate; 35 | - (id)delegate; 36 | 37 | - (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; 38 | - (BOOL)automaticallyChecksForUpdates; 39 | 40 | - (void)setUpdateCheckInterval:(NSTimeInterval)interval; 41 | - (NSTimeInterval)updateCheckInterval; 42 | 43 | - (void)setFeedURL:(NSURL *)feedURL; 44 | - (NSURL *)feedURL; // *** MUST BE CALLED ON MAIN THREAD *** 45 | 46 | - (void)setUserAgentString:(NSString *)userAgent; 47 | - (NSString *)userAgentString; 48 | 49 | - (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; 50 | - (BOOL)sendsSystemProfile; 51 | 52 | - (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; 53 | - (BOOL)automaticallyDownloadsUpdates; 54 | 55 | // This IBAction is meant for a main menu item. Hook up any menu item to this action, 56 | // and Sparkle will check for updates and report back its findings verbosely. 57 | - (IBAction)checkForUpdates:(id)sender; 58 | 59 | // This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, 60 | // in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an 61 | // update is found, it will be downloaded and prepped for installation. 62 | - (void)checkForUpdatesInBackground; 63 | 64 | // Date of last update check. Returns nil if no check has been performed. 65 | - (NSDate*)lastUpdateCheckDate; 66 | 67 | // This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, 68 | // (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. 69 | - (void)checkForUpdateInformation; 70 | 71 | // 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. 72 | - (void)resetUpdateCycle; 73 | 74 | - (BOOL)updateInProgress; 75 | 76 | - (BOOL)installationInProgress; 77 | 78 | @end 79 | 80 | 81 | // ----------------------------------------------------------------------------- 82 | // SUUpdater Delegate: 83 | // ----------------------------------------------------------------------------- 84 | 85 | @interface NSObject (SUUpdaterDelegateInformalProtocol) 86 | 87 | // Use this to keep Sparkle from popping up e.g. while your setup assistant is showing: 88 | - (BOOL)updaterMayCheckForUpdates:(SUUpdater *)updater; 89 | 90 | // 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. 91 | - (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; 92 | 93 | // Override this to dynamically specify the entire URL. 94 | - (NSString*)feedURLStringForUpdater:(SUUpdater*)updater; 95 | 96 | // Use this to override the default behavior for Sparkle prompting the user about automatic update checks. 97 | - (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; 98 | 99 | // Implement this if you want to do some special handling with the appcast once it finishes loading. 100 | - (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; 101 | 102 | // If you're using special logic or extensions in your appcast, implement this to use your own logic for finding 103 | // a valid update, if any, in the given appcast. 104 | - (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; 105 | 106 | // Sent when a valid update is found by the update driver. 107 | - (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; 108 | 109 | // Sent when a valid update is not found. 110 | - (void)updaterDidNotFindUpdate:(SUUpdater *)update; 111 | 112 | // For cases when updater automatically downloads updates 113 | - (BOOL)updater:(SUUpdater *)updater canAutomaticallyInstallUpdate:(SUAppcastItem *)update; 114 | 115 | // Sent immediately before installing the specified update. 116 | - (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; 117 | 118 | // Sent immediately after installing the specified update in case when relaunch was forbidden. 119 | - (void)updater:(SUUpdater *)updater didInstallUpdate:(SUAppcastItem *)update; 120 | 121 | // Override to handle update manually 122 | - (BOOL)updater:(SUUpdater *)updater overrideInstallUpdate:(SUAppcastItem *)update downloadPath:(NSString *)downloadPath shouldRelaunch:(BOOL *)outShouldRelaunch; 123 | 124 | // Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. 125 | // This is not called if the user didn't relaunch on the previous update, in that case it will immediately 126 | // restart. 127 | - (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; 128 | 129 | // Some apps *can not* be relaunched in certain circumstances. They can use this method 130 | // to prevent a relaunch "hard": 131 | - (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; 132 | 133 | // Called immediately before relaunching. 134 | - (void)updaterWillRelaunchApplication:(SUUpdater *)updater; 135 | 136 | // This method allows you to provide a custom version comparator. 137 | // If you don't implement this method or return nil, the standard version comparator will be used. 138 | - (id )versionComparatorForUpdater:(SUUpdater *)updater; 139 | 140 | // This method allows you to provide a custom version comparator. 141 | // If you don't implement this method or return nil, the standard version displayer will be used. 142 | - (id )versionDisplayerForUpdater:(SUUpdater *)updater; 143 | 144 | // Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. 145 | - (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; 146 | 147 | // Called before and after, respectively, an updater shows a modal alert window, to give the host 148 | // the opportunity to hide attached windows etc. that may get in the way: 149 | - (BOOL)updater:(SUUpdater *)updater mayShowModalAlert:(NSAlert *)alertToShow; 150 | - (void)updaterWillShowModalAlert:(SUUpdater *)updater; 151 | - (void)updaterDidShowModalAlert:(SUUpdater *)updater; 152 | 153 | @end 154 | 155 | // ----------------------------------------------------------------------------- 156 | // SUUpdater Delegate: DevMate Interaction 157 | // ----------------------------------------------------------------------------- 158 | 159 | // NOTE!!! Implemented delegate methods have higher priority than values saved in user preferences 160 | 161 | #define SUUpdaterChecksForBetaUpdatesPrefKey @"SUUpdaterChecksForBetaUpdates" // bool value 162 | #define SUUpdaterIsInTestModePrefKey @"SUUpdaterIsInTestMode" // bool value 163 | 164 | @interface NSObject (SUUpdaterDelegate_DevMateInteraction) 165 | 166 | - (BOOL)updaterShouldCheckForBetaUpdates:(SUUpdater *)updater; 167 | - (BOOL)isUpdaterInTestMode:(SUUpdater *)updater; 168 | 169 | @end 170 | 171 | // ----------------------------------------------------------------------------- 172 | // Constants: 173 | // ----------------------------------------------------------------------------- 174 | 175 | // Define some minimum intervals (in seconds) to avoid DoS-like checking attacks. 176 | #if defined(DEBUG) && DEBUG && 0 177 | #define SU_MIN_CHECK_INTERVAL 60 178 | #else 179 | #define SU_MIN_CHECK_INTERVAL 60*60 180 | #endif 181 | 182 | #if defined(DEBUG) && DEBUG && 0 183 | #define SU_DEFAULT_CHECK_INTERVAL 60 184 | #else 185 | #define SU_DEFAULT_CHECK_INTERVAL 60*60*24 186 | #endif 187 | 188 | #endif 189 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # motion-sparkle 2 | 3 | Easily package and release updates of your RubyMotion app with Sparkle. 4 | 5 | *NB: Sparkle only works for OS X projects* 6 | 7 | **Table of Contents** 8 | 9 | - [Overview](#overview) 10 | - [Installation](#installation) 11 | - [Settings configuration](#settings-configuration) 12 | - [Certificate configuration](#certificate-configuration) 13 | - [Generate new certificates](#generate-new-certificates) 14 | - [Use your existing certificates](#use-your-existing-certificates) 15 | - [Notes about the public certificate](#notes-about-the-public-certificate) 16 | - [Notes about the private certificate](#notes-about-the-private-certificate) 17 | - [Warning regarding your private certificate](#warning-regarding-your-private-certificate) 18 | - [Run rake sparkle:setup at any moment to make sure your config is OK](#run-rake-sparklesetup-at-any-moment-to-make-sure-your-config-is-ok) 19 | - [Adding "Check for updates..." to the menu](#adding-check-for-updates-to-the-menu) 20 | - [First publication](#first-publication) 21 | - [Releasing updates](#releasing-updates) 22 | - [1. Bump the version](#1-bump-the-version) 23 | - [2. Build your app for release](#2-build-your-app-for-release) 24 | - [3. Update your Release Notes](#3-update-your-release-notes) 25 | - [4. Package the release](#4-package-the-release) 26 | - [5. Upload](#5-upload) 27 | - [Help, Limitations, Troubleshooting and Testing](#help-limitations-troubleshooting-and-testing) 28 | - [Contributing](#contributing) 29 | - [Credits](#credits) 30 | 31 | ## Overview 32 | 33 | [Sparkle](http://sparkle.andymatuschak.org/) powers the "Check for updates" feature of countless Mac applications. 34 | 35 | In a nutshell, when users click "Check for updates..." in an app, Sparkle checks for available updates against an XML file that you post somewhere on the web. That XML file contains information about your new release, such as the version number, the URL of the package and its digital signature. If there's a newer version available than the one that is currently running, it'll ask for permission to retrieve the package and replace the current app with the new release. 36 | 37 | While it's easy to use Sparkle with RubyMotion without `motion-sparkle`, it's even easier if you use it. The gem takes care of the Sparkle framework integration, simplifies its configuration and then automates the preparation of a release, creating the ZIP, XML and release notes HTML file for you. 38 | 39 | After building your app for release and running `rake sparkle:package`, all you need to do is upload 3 files to the URL you specify in the `Rakefile` and your users will be able to get the new release. 40 | 41 | ## Installation 42 | 43 | In your project's Gemfile, add: 44 | ```ruby 45 | # Gemfile 46 | 47 | gem 'motion-sparkle' 48 | ``` 49 | and then run 50 | 51 | $ bundle install 52 | 53 | ## Settings configuration 54 | 55 | Configure Sparkle in your `Rakefile` using `motion-sparkle`'s DSL: 56 | ```ruby 57 | # Rakefile 58 | 59 | app.sparkle do 60 | # Required setting 61 | release :base_url, 'http://example.com/releases/current' # `current` is a folder, don't use a trailing slash 62 | 63 | # Recommended setting 64 | # This will set both your `app.version` and `app.short_version` to the same value 65 | # It's fine not to use it, just remember to set both as Sparkle needs them 66 | release :version, '1.0' 67 | 68 | ## Optional settings and their default values and/or examples 69 | 70 | ## Please note that `base_url` must always be set (at the moment), 71 | ## even you override it completely with the options below 72 | 73 | # Public Key 74 | release :public_key, 'dsa_pub.pem' # default 75 | 76 | # Appcast Feed 77 | release :feed_base_url, 'http://downloads.example.com/releases' # defaults to base_url 78 | release :feed_filename, 'releases.xml' # default 79 | 80 | # Release Notes 81 | release :notes_base_url, 'http://downloads.example.com/releases' # defaults to base_url 82 | release :notes_filename, 'release_notes.html' # default 83 | 84 | # App Package 85 | release :package_base_url, 'http://downloads.example.com/releases' # defaults to base_url 86 | release :package_filename, "#{app.name}.zip" # default 87 | end 88 | ``` 89 | 90 | To complete the configuration, run 91 | 92 | $ rake sparkle:setup 93 | 94 | 95 | If everything is OK, you should be informed that it's time to generate or configure your certificates. 96 | 97 | ## Certificate configuration 98 | 99 | For security, Sparkle allows you to sign your releases with a private certificate before distribution: when the user tries to install an update, Sparkle will check the package using the signature provided in the XML file and the public certificate contained in the running application. 100 | 101 | motion-sparkle makes it very easy to handle this. In fact, after the first setup, it becomes completely transparent to you as all is handled when you run `rake sparkle:package`. 102 | 103 | You have two options: have Sparkle generate the certificates for you, or follow the instructions to use your existing ones. 104 | 105 | ### Generate new certificates 106 | 107 | $ rake sparkle:setup_certificates 108 | 109 | 110 | ### Use your existing certificates 111 | 112 | By default, your certificates need to be placed in the following directories: 113 | 114 | 115 | ./resources/dsa_pub.pem # public certificate 116 | ./sparkle/config/dsa_priv.pem # private certificate 117 | 118 | 119 | ### Notes about the public certificate 120 | 121 | The public certificate is placed at the root of the default `resources/` folder by default, as it needs to bundled with your app. If you chose to rename it, remember to set its correct value in the `Rakefile`, using `release :public_key, 'new_name.pem'`. 122 | 123 | ### Notes about the private certificate 124 | 125 | The private certificate cannot be renamed nor placed elsewhere. If you have an existing certificate, please name it `dsa_priv.pem` and place inside the `sparkle/config/` folder 126 | 127 | ### Warning regarding your private certificate 128 | 129 | Be careful when handling the private certificate: you should never lose it nor share it. If you do, you'd lose the ability to sign your packages and users wouldn't be able to update your app. If someone takes it, they could sign the packages in your name and have your users install who knows what. 130 | 131 | Tips: 132 | * add it go your `.gitignore` or equivalent 133 | * make a backup of it 134 | 135 | ### Run `rake sparkle:setup` at any moment to make sure your config is OK 136 | 137 | When all is good, move forward. If you need help, you can always open an issue on Github. 138 | 139 | ## Adding "Check for updates..." to the menu 140 | 141 | Sparkle makes it incredibly easy to add a "Check for updates" feature to your app. 142 | 143 | Sparkle's `SUUpdater` class has a shared updater instance that can serve as a `target` for Sparkle actions. To launch the typical Sparkle flow, call the `checkForUpdates:` action. 144 | 145 | So, to launch the "Check for updates" flow, you can call `SUUpdater.new.checkForUpdates`. 146 | 147 | Here's an example based on the RubyMotion default OS X app example, "Hello". You can check out Sparkle's documentation for more details and further ways to customize the experience. 148 | 149 | This will add the classic "Check for updates..." entry on the menu; when the user clicks it, the nice default of experience of Sparkle will begin. 150 | 151 | In `menu.rb`, right below the line that adds the "Preferences" item: 152 | ```ruby 153 | sparkle = addItemWithTitle("Check for updates...", action: nil, keyEquivalent: '') 154 | sparkle.setTarget SUUpdater.new 155 | sparkle.setAction 'checkForUpdates:' 156 | ``` 157 | 158 | Once you build your application, you should be able to see a "Check for updates..." item in the Application menu. Using it will work but will quickly produce an error. Keep going to make it work. 159 | 160 | ## First publication 161 | 162 | Before you build, make sure you've set your `:base_url` to a destination where you can upload/download your files. 163 | 164 | Note that packaging with motion-sparkle only works with the `:release` target at the moment, so make sure your build with be compatible with `rake build:release`. 165 | 166 | Run the setup command again to make sure it's all good: 167 | 168 | $ rake sparkle:setup 169 | 170 | If you're ready to go, run the `sparkle:package` task: 171 | 172 | $ rake sparkle:package 173 | 174 | This should create 3 files inside the `sparkle/release/` folder: a ZIP file of your app, an XML file and an HTML file with the release notes. 175 | 176 | If you've set your `:base_url` correctly, go ahead and upload thoses files to the location you've specified. Run your app and click "Check for updates..." in the menu -- this time, it should say that it's running the latest version available. 177 | 178 | ## Releasing updates 179 | 180 | Once users are running a Sparkle-powered version, all you have to do is put updated versions of those files at the same location. 181 | 182 | To do so, follow the same steps every time: 183 | 184 | ### 1. Bump the version 185 | 186 | ```ruby 187 | # In your Rakefile 188 | 189 | sparkle.app do 190 | release :version, '1.1' # bump the versions 191 | end 192 | ``` 193 | 194 | ### 2. Build your app for release 195 | 196 | $ rake build:release 197 | 198 | ### 3. Update your Release Notes 199 | 200 | Release notes are generated using an HTML file for content and an ERB file for layout. Sparkle uses Webkit to show them to your users at the time of update. 201 | 202 | You can either change these files inside the `sparkle/config/` folder, or simply edit the resulting html file in `sparkle/release/` after you've packaged the release. 203 | 204 | ### 4. Package the release 205 | 206 | Run the `sparkle:package` task and you'll be one step away from distribution. 207 | 208 | $ rake sparkle:package 209 | 210 | ### 5. Upload 211 | 212 | Upload the 3 files and your new version is up. When users click "Check for updates...", the app should now display your release notes and ask the user to update. And when they do, the app will update and relaunch itself cleanly. 213 | 214 | Sparkle for the win. 215 | 216 | ## Help, Limitations, Troubleshooting and Testing 217 | 218 | If you need further help, please open an [Issue on Github](https://github.com/webcracy/motion-sparkle/issues/). 219 | 220 | Limitations: 221 | 222 | * Only tested with Ruby 1.9.3-p448 223 | * Only works with ZIP files 224 | * Only works with :release build target 225 | * The Sparkle framework is horrendously copied multiple times 226 | 227 | To further troubleshoot your case, you clone/fork the repo and go through the tests and the code. 228 | 229 | To test, you can just run `$ bundle install` at the source of the repo to install the development dependencies and the run `$ rake` to execute the tests. 230 | 231 | Test coverage currently only extends to configuration and certificate generation checking. 232 | 233 | ## Contributing 234 | 235 | Please do help with comments, issues and pull requests! The gem's repository is at [github.com/webcracy/motion-sparkle](https://github.com/webcracy/motion-sparkle/). 236 | 237 | I've made a list of features that I look forward to having. You can attack those or suprise me :) 238 | 239 | Wanted features: 240 | 241 | - [ ] [Issue #1](https://github.com/webcracy/motion-sparkle/issues/1) - Copy the Sparkle.framework in a more sensible way, ideally through Cocoapods (it's currently copied multiple times because rubygems won't handle symlinks) 242 | - [ ] [Issue #2](https://github.com/webcracy/motion-sparkle/issues/2) - Configurable build targets (only :release supported currently) 243 | - [ ] [Issue #3](https://github.com/webcracy/motion-sparkle/issues/3) - Have more than ZIP as a packaging option, with DMG a priority (see choctop gem) 244 | - [ ] [Issue #4](https://github.com/webcracy/motion-sparkle/issues/4) - Automatic upload to S3 and via rsync/scp/sftp/ftp (see choctop gem) 245 | - [ ] Textile / Markdown for release note templates if possible 246 | - [ ] Ruby 1.8.7, Ruby 1.9.2, Ruby 2.0 compatibility 247 | - [ ] Better test coverage 248 | 249 | Thanks! 250 | 251 | ## Credits 252 | 253 | Contributors: [View all on Github](https://github.com/webcracy/motion-sparkle/graphs/contributors) 254 | 255 | Author: Alexandre L. Solleiro 256 | 257 | * Github - http://github.com/webcracy 258 | * Twitter - http://twitter.com/als 259 | * Website - http://webcracy.org 260 | 261 | Thanks to the authors and contributors of [HipByte/motion-cocoapods](https://github.com/HipByte/motion-cocoapods) and [drnic/choctop](https://github.com/drnic/choctop) gems, as I have looked for inspiration in their code. 262 | 263 | And a low bow to [andymatuschak/Sparkle](https://github.com/andymatuschak/Sparkle)! 264 | 265 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/Resources/finish_installation.app/Contents/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Resources/SUStatus.nib 8 | 9 | AY4YXjlQrzqM9SfsrxpSB1B1u+k= 10 | 11 | Resources/Sparkle.icns 12 | 13 | JwSB2ADJA4f/Z/Whu0KeLCzTq2w= 14 | 15 | Resources/ar.lproj/Sparkle.strings 16 | 17 | hash 18 | 19 | 1r4nLYbh4nZ+8L2BKHfO2CIzb0U= 20 | 21 | optional 22 | 23 | 24 | Resources/cs.lproj/Sparkle.strings 25 | 26 | hash 27 | 28 | 5VgDVMGiDIDmHgPo/8+xjD5koUM= 29 | 30 | optional 31 | 32 | 33 | Resources/da.lproj/Sparkle.strings 34 | 35 | hash 36 | 37 | 7sms2i9dxY6e2nMlG17Glh1qUa4= 38 | 39 | optional 40 | 41 | 42 | Resources/de.lproj/Sparkle.strings 43 | 44 | hash 45 | 46 | VQ6cCIGwVhg1Nbk/d1ktS0MKfrs= 47 | 48 | optional 49 | 50 | 51 | Resources/en.lproj/Sparkle.strings 52 | 53 | hash 54 | 55 | jhndQbmp0y5Pqir0IEvzHHyw56Q= 56 | 57 | optional 58 | 59 | 60 | Resources/es.lproj/Sparkle.strings 61 | 62 | hash 63 | 64 | VeGulLXhFyUqBWpp124ycDSygzI= 65 | 66 | optional 67 | 68 | 69 | Resources/fr.lproj/Sparkle.strings 70 | 71 | hash 72 | 73 | wnNXmPUBaN4YrlxsOxcrb+18/T4= 74 | 75 | optional 76 | 77 | 78 | Resources/is.lproj/Sparkle.strings 79 | 80 | hash 81 | 82 | 6bV9kOUaSqQZw4AFOhB/dZjvfko= 83 | 84 | optional 85 | 86 | 87 | Resources/it.lproj/Sparkle.strings 88 | 89 | hash 90 | 91 | UnaweCH6Yovy2JCdq9BKqBf+zpw= 92 | 93 | optional 94 | 95 | 96 | Resources/ja.lproj/Sparkle.strings 97 | 98 | hash 99 | 100 | ULqpUT0UoUc3dJ6XIzEa4DMwThM= 101 | 102 | optional 103 | 104 | 105 | Resources/nl.lproj/Sparkle.strings 106 | 107 | hash 108 | 109 | F9Glew0gS9l83OeLpAKWK1jZylc= 110 | 111 | optional 112 | 113 | 114 | Resources/pl.lproj/Sparkle.strings 115 | 116 | hash 117 | 118 | amtSw7dyug39MOEeoqy9cBqxwKQ= 119 | 120 | optional 121 | 122 | 123 | Resources/pt_BR.lproj/Sparkle.strings 124 | 125 | hash 126 | 127 | m1csq4xFLPFqreCbVAvCEF4cipQ= 128 | 129 | optional 130 | 131 | 132 | Resources/pt_PT.lproj/Sparkle.strings 133 | 134 | hash 135 | 136 | L5ZLQhFSppjMAOwb+p3BICemCBw= 137 | 138 | optional 139 | 140 | 141 | Resources/ro.lproj/Sparkle.strings 142 | 143 | hash 144 | 145 | TWmvE02aSeSXIn4ryZu7oK5DryU= 146 | 147 | optional 148 | 149 | 150 | Resources/ru.lproj/Sparkle.strings 151 | 152 | hash 153 | 154 | 1u4/QMl6l9bF6GyrP0sunHa8Gq4= 155 | 156 | optional 157 | 158 | 159 | Resources/sl.lproj/Sparkle.strings 160 | 161 | hash 162 | 163 | TFjxsRj+bWhqvSJYQXRxARurAXk= 164 | 165 | optional 166 | 167 | 168 | Resources/sv.lproj/Sparkle.strings 169 | 170 | hash 171 | 172 | dOqE8P20bvoQ31FJTcgY2scAf0c= 173 | 174 | optional 175 | 176 | 177 | Resources/th.lproj/Sparkle.strings 178 | 179 | hash 180 | 181 | 8ltk5beazcpWXe7C41BD8KH37u4= 182 | 183 | optional 184 | 185 | 186 | Resources/tr.lproj/Sparkle.strings 187 | 188 | hash 189 | 190 | lz3MId9pXRfLQmJFHFJRmbpJeJ8= 191 | 192 | optional 193 | 194 | 195 | Resources/uk.lproj/Sparkle.strings 196 | 197 | hash 198 | 199 | 7gi7Qnp58uEuShWPZ5XT2zfn0EE= 200 | 201 | optional 202 | 203 | 204 | Resources/zh_CN.lproj/Sparkle.strings 205 | 206 | hash 207 | 208 | vvTtNDU+zUY07WexvxBPSMotYBk= 209 | 210 | optional 211 | 212 | 213 | Resources/zh_TW.lproj/Sparkle.strings 214 | 215 | hash 216 | 217 | IXk9cSLkHL/6omrddGy9mcf5wKk= 218 | 219 | optional 220 | 221 | 222 | 223 | files2 224 | 225 | Resources/SUStatus.nib 226 | 227 | AY4YXjlQrzqM9SfsrxpSB1B1u+k= 228 | 229 | Resources/Sparkle.icns 230 | 231 | JwSB2ADJA4f/Z/Whu0KeLCzTq2w= 232 | 233 | Resources/ar.lproj/Sparkle.strings 234 | 235 | hash 236 | 237 | 1r4nLYbh4nZ+8L2BKHfO2CIzb0U= 238 | 239 | optional 240 | 241 | 242 | Resources/cs.lproj/Sparkle.strings 243 | 244 | hash 245 | 246 | 5VgDVMGiDIDmHgPo/8+xjD5koUM= 247 | 248 | optional 249 | 250 | 251 | Resources/da.lproj/Sparkle.strings 252 | 253 | hash 254 | 255 | 7sms2i9dxY6e2nMlG17Glh1qUa4= 256 | 257 | optional 258 | 259 | 260 | Resources/de.lproj/Sparkle.strings 261 | 262 | hash 263 | 264 | VQ6cCIGwVhg1Nbk/d1ktS0MKfrs= 265 | 266 | optional 267 | 268 | 269 | Resources/en.lproj/Sparkle.strings 270 | 271 | hash 272 | 273 | jhndQbmp0y5Pqir0IEvzHHyw56Q= 274 | 275 | optional 276 | 277 | 278 | Resources/es.lproj/Sparkle.strings 279 | 280 | hash 281 | 282 | VeGulLXhFyUqBWpp124ycDSygzI= 283 | 284 | optional 285 | 286 | 287 | Resources/fr.lproj/Sparkle.strings 288 | 289 | hash 290 | 291 | wnNXmPUBaN4YrlxsOxcrb+18/T4= 292 | 293 | optional 294 | 295 | 296 | Resources/is.lproj/Sparkle.strings 297 | 298 | hash 299 | 300 | 6bV9kOUaSqQZw4AFOhB/dZjvfko= 301 | 302 | optional 303 | 304 | 305 | Resources/it.lproj/Sparkle.strings 306 | 307 | hash 308 | 309 | UnaweCH6Yovy2JCdq9BKqBf+zpw= 310 | 311 | optional 312 | 313 | 314 | Resources/ja.lproj/Sparkle.strings 315 | 316 | hash 317 | 318 | ULqpUT0UoUc3dJ6XIzEa4DMwThM= 319 | 320 | optional 321 | 322 | 323 | Resources/nl.lproj/Sparkle.strings 324 | 325 | hash 326 | 327 | F9Glew0gS9l83OeLpAKWK1jZylc= 328 | 329 | optional 330 | 331 | 332 | Resources/pl.lproj/Sparkle.strings 333 | 334 | hash 335 | 336 | amtSw7dyug39MOEeoqy9cBqxwKQ= 337 | 338 | optional 339 | 340 | 341 | Resources/pt_BR.lproj/Sparkle.strings 342 | 343 | hash 344 | 345 | m1csq4xFLPFqreCbVAvCEF4cipQ= 346 | 347 | optional 348 | 349 | 350 | Resources/pt_PT.lproj/Sparkle.strings 351 | 352 | hash 353 | 354 | L5ZLQhFSppjMAOwb+p3BICemCBw= 355 | 356 | optional 357 | 358 | 359 | Resources/ro.lproj/Sparkle.strings 360 | 361 | hash 362 | 363 | TWmvE02aSeSXIn4ryZu7oK5DryU= 364 | 365 | optional 366 | 367 | 368 | Resources/ru.lproj/Sparkle.strings 369 | 370 | hash 371 | 372 | 1u4/QMl6l9bF6GyrP0sunHa8Gq4= 373 | 374 | optional 375 | 376 | 377 | Resources/sl.lproj/Sparkle.strings 378 | 379 | hash 380 | 381 | TFjxsRj+bWhqvSJYQXRxARurAXk= 382 | 383 | optional 384 | 385 | 386 | Resources/sv.lproj/Sparkle.strings 387 | 388 | hash 389 | 390 | dOqE8P20bvoQ31FJTcgY2scAf0c= 391 | 392 | optional 393 | 394 | 395 | Resources/th.lproj/Sparkle.strings 396 | 397 | hash 398 | 399 | 8ltk5beazcpWXe7C41BD8KH37u4= 400 | 401 | optional 402 | 403 | 404 | Resources/tr.lproj/Sparkle.strings 405 | 406 | hash 407 | 408 | lz3MId9pXRfLQmJFHFJRmbpJeJ8= 409 | 410 | optional 411 | 412 | 413 | Resources/uk.lproj/Sparkle.strings 414 | 415 | hash 416 | 417 | 7gi7Qnp58uEuShWPZ5XT2zfn0EE= 418 | 419 | optional 420 | 421 | 422 | Resources/zh_CN.lproj/Sparkle.strings 423 | 424 | hash 425 | 426 | vvTtNDU+zUY07WexvxBPSMotYBk= 427 | 428 | optional 429 | 430 | 431 | Resources/zh_TW.lproj/Sparkle.strings 432 | 433 | hash 434 | 435 | IXk9cSLkHL/6omrddGy9mcf5wKk= 436 | 437 | optional 438 | 439 | 440 | 441 | rules 442 | 443 | ^Resources/ 444 | 445 | ^Resources/.*\.lproj/ 446 | 447 | optional 448 | 449 | weight 450 | 1000 451 | 452 | ^Resources/.*\.lproj/locversion.plist$ 453 | 454 | omit 455 | 456 | weight 457 | 1100 458 | 459 | ^version.plist$ 460 | 461 | 462 | rules2 463 | 464 | .*\.dSYM($|/) 465 | 466 | weight 467 | 11 468 | 469 | ^(.*/)?\.DS_Store$ 470 | 471 | omit 472 | 473 | weight 474 | 2000 475 | 476 | ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ 477 | 478 | nested 479 | 480 | weight 481 | 10 482 | 483 | ^.* 484 | 485 | ^Info\.plist$ 486 | 487 | omit 488 | 489 | weight 490 | 20 491 | 492 | ^PkgInfo$ 493 | 494 | omit 495 | 496 | weight 497 | 20 498 | 499 | ^Resources/ 500 | 501 | weight 502 | 20 503 | 504 | ^Resources/.*\.lproj/ 505 | 506 | optional 507 | 508 | weight 509 | 1000 510 | 511 | ^Resources/.*\.lproj/locversion.plist$ 512 | 513 | omit 514 | 515 | weight 516 | 1100 517 | 518 | ^[^/]+$ 519 | 520 | nested 521 | 522 | weight 523 | 10 524 | 525 | ^embedded\.provisionprofile$ 526 | 527 | weight 528 | 20 529 | 530 | ^version\.plist$ 531 | 532 | weight 533 | 20 534 | 535 | 536 | 537 | 538 | -------------------------------------------------------------------------------- /vendor/Sparkle.framework/Versions/A/_CodeSignature/CodeResources: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | files 6 | 7 | Resources/Info.plist 8 | 9 | L42sLbfy3ErhWV9jKpgwlXpWhH8= 10 | 11 | Resources/License.txt 12 | 13 | n88eWVMZFaALu0CYnrGxTNop+E8= 14 | 15 | Resources/SUModelTranslation.plist 16 | 17 | voZlITm6VH1XC7ambPyN+AVvMVQ= 18 | 19 | Resources/SUStatus.nib 20 | 21 | AY4YXjlQrzqM9SfsrxpSB1B1u+k= 22 | 23 | Resources/ar.lproj/SUAutomaticUpdateAlert.nib 24 | 25 | hash 26 | 27 | E03x3qb3mjzo+kfPwThRW+nLpzM= 28 | 29 | optional 30 | 31 | 32 | Resources/ar.lproj/SUPasswordPrompt.nib 33 | 34 | hash 35 | 36 | +oqL1Ts09bG3leBDS9YXK197e+g= 37 | 38 | optional 39 | 40 | 41 | Resources/ar.lproj/SUUpdateAlert.nib 42 | 43 | hash 44 | 45 | 4BM80hkCddf6qQIIkzmUYTT2Gkg= 46 | 47 | optional 48 | 49 | 50 | Resources/ar.lproj/SUUpdatePermissionPrompt.nib 51 | 52 | hash 53 | 54 | u/PPFk5yAcnKaRYcuM4gpPWixtY= 55 | 56 | optional 57 | 58 | 59 | Resources/ar.lproj/Sparkle.strings 60 | 61 | hash 62 | 63 | 1r4nLYbh4nZ+8L2BKHfO2CIzb0U= 64 | 65 | optional 66 | 67 | 68 | Resources/cs.lproj/SUAutomaticUpdateAlert.nib 69 | 70 | hash 71 | 72 | MT2psSZlMJpWMiJI5PZs7U67QEQ= 73 | 74 | optional 75 | 76 | 77 | Resources/cs.lproj/SUUpdateAlert.nib 78 | 79 | hash 80 | 81 | vA0zL5A1RS48AqbbIF3+mNqjse4= 82 | 83 | optional 84 | 85 | 86 | Resources/cs.lproj/SUUpdatePermissionPrompt.nib 87 | 88 | hash 89 | 90 | tfj8bjupV+Ew7tRKoe612UVuhUA= 91 | 92 | optional 93 | 94 | 95 | Resources/cs.lproj/Sparkle.strings 96 | 97 | hash 98 | 99 | 5VgDVMGiDIDmHgPo/8+xjD5koUM= 100 | 101 | optional 102 | 103 | 104 | Resources/da.lproj/SUAutomaticUpdateAlert.nib 105 | 106 | hash 107 | 108 | vGuMaxqbOPEAvvEVXuLRibVH6H0= 109 | 110 | optional 111 | 112 | 113 | Resources/da.lproj/SUUpdateAlert.nib 114 | 115 | hash 116 | 117 | nyuUjGAgFmv6xllxOgSSjCrd97Q= 118 | 119 | optional 120 | 121 | 122 | Resources/da.lproj/SUUpdatePermissionPrompt.nib 123 | 124 | hash 125 | 126 | +yQHd634Ubn0FsfpZpvKe6wgm2I= 127 | 128 | optional 129 | 130 | 131 | Resources/da.lproj/Sparkle.strings 132 | 133 | hash 134 | 135 | 7sms2i9dxY6e2nMlG17Glh1qUa4= 136 | 137 | optional 138 | 139 | 140 | Resources/de.lproj/SUAutomaticUpdateAlert.nib 141 | 142 | hash 143 | 144 | OQM87WdvKApKJB/Fz/GA4Def0ws= 145 | 146 | optional 147 | 148 | 149 | Resources/de.lproj/SUUpdateAlert.nib 150 | 151 | hash 152 | 153 | doMZQDxn5P2Pf8z0R1c1RtO0w2c= 154 | 155 | optional 156 | 157 | 158 | Resources/de.lproj/SUUpdatePermissionPrompt.nib 159 | 160 | hash 161 | 162 | 5YnUzRt0fQCJ0STayZyAeeod1EI= 163 | 164 | optional 165 | 166 | 167 | Resources/de.lproj/Sparkle.strings 168 | 169 | hash 170 | 171 | VQ6cCIGwVhg1Nbk/d1ktS0MKfrs= 172 | 173 | optional 174 | 175 | 176 | Resources/en.lproj/SUAutomaticUpdateAlert.nib 177 | 178 | hash 179 | 180 | SvbwYv4v9SDPh/Tz8MEkJHJgCPQ= 181 | 182 | optional 183 | 184 | 185 | Resources/en.lproj/SUPasswordPrompt.nib 186 | 187 | hash 188 | 189 | hU53+VhC71sVdNiuC7rmgKuw+CU= 190 | 191 | optional 192 | 193 | 194 | Resources/en.lproj/SUUpdateAlert.nib 195 | 196 | hash 197 | 198 | IUP4lmNYZcl6UI+qLBxjzxhpw7s= 199 | 200 | optional 201 | 202 | 203 | Resources/en.lproj/SUUpdatePermissionPrompt.nib 204 | 205 | hash 206 | 207 | NA5W919gtlfieqLYAGv3cI4myDc= 208 | 209 | optional 210 | 211 | 212 | Resources/en.lproj/Sparkle.strings 213 | 214 | hash 215 | 216 | jhndQbmp0y5Pqir0IEvzHHyw56Q= 217 | 218 | optional 219 | 220 | 221 | Resources/es.lproj/SUAutomaticUpdateAlert.nib 222 | 223 | hash 224 | 225 | POWHYbeCM125qXK9QaqqWSizqYA= 226 | 227 | optional 228 | 229 | 230 | Resources/es.lproj/SUUpdateAlert.nib 231 | 232 | hash 233 | 234 | y/jrgfcQJ7mMR2kWMpumWUX2VYI= 235 | 236 | optional 237 | 238 | 239 | Resources/es.lproj/SUUpdatePermissionPrompt.nib 240 | 241 | hash 242 | 243 | Yjs8mVpre4QQYv5X6BXrOEdRGHY= 244 | 245 | optional 246 | 247 | 248 | Resources/es.lproj/Sparkle.strings 249 | 250 | hash 251 | 252 | VeGulLXhFyUqBWpp124ycDSygzI= 253 | 254 | optional 255 | 256 | 257 | Resources/finish_installation.app/Contents/Info.plist 258 | 259 | FOrezqKe0hZ/JLET6Ufwm7afLFI= 260 | 261 | Resources/finish_installation.app/Contents/MacOS/finish_installation 262 | 263 | 90mkwoMAKnhv+bs0EbTZp7kgfzc= 264 | 265 | Resources/finish_installation.app/Contents/PkgInfo 266 | 267 | n57qDP4tZfLD1rCS43W0B4LQjzE= 268 | 269 | Resources/finish_installation.app/Contents/Resources/SUStatus.nib 270 | 271 | AY4YXjlQrzqM9SfsrxpSB1B1u+k= 272 | 273 | Resources/finish_installation.app/Contents/Resources/Sparkle.icns 274 | 275 | JwSB2ADJA4f/Z/Whu0KeLCzTq2w= 276 | 277 | Resources/finish_installation.app/Contents/Resources/ar.lproj/Sparkle.strings 278 | 279 | hash 280 | 281 | 1r4nLYbh4nZ+8L2BKHfO2CIzb0U= 282 | 283 | optional 284 | 285 | 286 | Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings 287 | 288 | hash 289 | 290 | 5VgDVMGiDIDmHgPo/8+xjD5koUM= 291 | 292 | optional 293 | 294 | 295 | Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings 296 | 297 | hash 298 | 299 | 7sms2i9dxY6e2nMlG17Glh1qUa4= 300 | 301 | optional 302 | 303 | 304 | Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings 305 | 306 | hash 307 | 308 | VQ6cCIGwVhg1Nbk/d1ktS0MKfrs= 309 | 310 | optional 311 | 312 | 313 | Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings 314 | 315 | hash 316 | 317 | jhndQbmp0y5Pqir0IEvzHHyw56Q= 318 | 319 | optional 320 | 321 | 322 | Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings 323 | 324 | hash 325 | 326 | VeGulLXhFyUqBWpp124ycDSygzI= 327 | 328 | optional 329 | 330 | 331 | Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings 332 | 333 | hash 334 | 335 | wnNXmPUBaN4YrlxsOxcrb+18/T4= 336 | 337 | optional 338 | 339 | 340 | Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings 341 | 342 | hash 343 | 344 | 6bV9kOUaSqQZw4AFOhB/dZjvfko= 345 | 346 | optional 347 | 348 | 349 | Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings 350 | 351 | hash 352 | 353 | UnaweCH6Yovy2JCdq9BKqBf+zpw= 354 | 355 | optional 356 | 357 | 358 | Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings 359 | 360 | hash 361 | 362 | ULqpUT0UoUc3dJ6XIzEa4DMwThM= 363 | 364 | optional 365 | 366 | 367 | Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings 368 | 369 | hash 370 | 371 | F9Glew0gS9l83OeLpAKWK1jZylc= 372 | 373 | optional 374 | 375 | 376 | Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings 377 | 378 | hash 379 | 380 | amtSw7dyug39MOEeoqy9cBqxwKQ= 381 | 382 | optional 383 | 384 | 385 | Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings 386 | 387 | hash 388 | 389 | m1csq4xFLPFqreCbVAvCEF4cipQ= 390 | 391 | optional 392 | 393 | 394 | Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings 395 | 396 | hash 397 | 398 | L5ZLQhFSppjMAOwb+p3BICemCBw= 399 | 400 | optional 401 | 402 | 403 | Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings 404 | 405 | hash 406 | 407 | TWmvE02aSeSXIn4ryZu7oK5DryU= 408 | 409 | optional 410 | 411 | 412 | Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings 413 | 414 | hash 415 | 416 | 1u4/QMl6l9bF6GyrP0sunHa8Gq4= 417 | 418 | optional 419 | 420 | 421 | Resources/finish_installation.app/Contents/Resources/sl.lproj/Sparkle.strings 422 | 423 | hash 424 | 425 | TFjxsRj+bWhqvSJYQXRxARurAXk= 426 | 427 | optional 428 | 429 | 430 | Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings 431 | 432 | hash 433 | 434 | dOqE8P20bvoQ31FJTcgY2scAf0c= 435 | 436 | optional 437 | 438 | 439 | Resources/finish_installation.app/Contents/Resources/th.lproj/Sparkle.strings 440 | 441 | hash 442 | 443 | 8ltk5beazcpWXe7C41BD8KH37u4= 444 | 445 | optional 446 | 447 | 448 | Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings 449 | 450 | hash 451 | 452 | lz3MId9pXRfLQmJFHFJRmbpJeJ8= 453 | 454 | optional 455 | 456 | 457 | Resources/finish_installation.app/Contents/Resources/uk.lproj/Sparkle.strings 458 | 459 | hash 460 | 461 | 7gi7Qnp58uEuShWPZ5XT2zfn0EE= 462 | 463 | optional 464 | 465 | 466 | Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings 467 | 468 | hash 469 | 470 | vvTtNDU+zUY07WexvxBPSMotYBk= 471 | 472 | optional 473 | 474 | 475 | Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings 476 | 477 | hash 478 | 479 | IXk9cSLkHL/6omrddGy9mcf5wKk= 480 | 481 | optional 482 | 483 | 484 | Resources/finish_installation.app/Contents/_CodeSignature/CodeResources 485 | 486 | R6urvto4DI8GZeyVl6Aucf54Z5w= 487 | 488 | Resources/fr.lproj/SUAutomaticUpdateAlert.nib 489 | 490 | hash 491 | 492 | NOr+1f5ndbJsxzRv192b4j0q1hw= 493 | 494 | optional 495 | 496 | 497 | Resources/fr.lproj/SUUpdateAlert.nib 498 | 499 | hash 500 | 501 | msFvBt74UJzC2rWXBA+g+5v9JZc= 502 | 503 | optional 504 | 505 | 506 | Resources/fr.lproj/SUUpdatePermissionPrompt.nib 507 | 508 | hash 509 | 510 | B2b8UHcA4ITRSFEYrpAHNshu9SU= 511 | 512 | optional 513 | 514 | 515 | Resources/fr.lproj/Sparkle.strings 516 | 517 | hash 518 | 519 | wnNXmPUBaN4YrlxsOxcrb+18/T4= 520 | 521 | optional 522 | 523 | 524 | Resources/is.lproj/SUAutomaticUpdateAlert.nib 525 | 526 | hash 527 | 528 | KlURwebDaXR070iFXmHIrxAB2QQ= 529 | 530 | optional 531 | 532 | 533 | Resources/is.lproj/SUUpdateAlert.nib 534 | 535 | hash 536 | 537 | pJmVQsBpiDaaRgUdXG7dEDVqovE= 538 | 539 | optional 540 | 541 | 542 | Resources/is.lproj/SUUpdatePermissionPrompt.nib 543 | 544 | hash 545 | 546 | /Q3/WiueiiCPoAdqa/nMrih3YJI= 547 | 548 | optional 549 | 550 | 551 | Resources/is.lproj/Sparkle.strings 552 | 553 | hash 554 | 555 | 6bV9kOUaSqQZw4AFOhB/dZjvfko= 556 | 557 | optional 558 | 559 | 560 | Resources/it.lproj/SUAutomaticUpdateAlert.nib 561 | 562 | hash 563 | 564 | OIKooYKpb68iBgSV0p8LQnu4zKg= 565 | 566 | optional 567 | 568 | 569 | Resources/it.lproj/SUUpdateAlert.nib 570 | 571 | hash 572 | 573 | ZfQFw26CxfdWK8YmTPPenSjnLQk= 574 | 575 | optional 576 | 577 | 578 | Resources/it.lproj/SUUpdatePermissionPrompt.nib 579 | 580 | hash 581 | 582 | TG+jaxLEdMFtaPHUO0tQm80z5cc= 583 | 584 | optional 585 | 586 | 587 | Resources/it.lproj/Sparkle.strings 588 | 589 | hash 590 | 591 | UnaweCH6Yovy2JCdq9BKqBf+zpw= 592 | 593 | optional 594 | 595 | 596 | Resources/ja.lproj/SUAutomaticUpdateAlert.nib 597 | 598 | hash 599 | 600 | I7czYhueUR8NhndzlnKPq4fxf7M= 601 | 602 | optional 603 | 604 | 605 | Resources/ja.lproj/SUUpdateAlert.nib 606 | 607 | hash 608 | 609 | X4hWfRiHNJBrjUCY83SZuM/VuiU= 610 | 611 | optional 612 | 613 | 614 | Resources/ja.lproj/SUUpdatePermissionPrompt.nib 615 | 616 | hash 617 | 618 | x9KXYumWk4W6RtPwCnGc49O6xQ4= 619 | 620 | optional 621 | 622 | 623 | Resources/ja.lproj/Sparkle.strings 624 | 625 | hash 626 | 627 | ULqpUT0UoUc3dJ6XIzEa4DMwThM= 628 | 629 | optional 630 | 631 | 632 | Resources/ko.lproj/SUAutomaticUpdateAlert.nib 633 | 634 | hash 635 | 636 | S0ypA7MXGIoVJ84TXpw59J78kqA= 637 | 638 | optional 639 | 640 | 641 | Resources/ko.lproj/SUUpdateAlert.nib 642 | 643 | hash 644 | 645 | oaZETeU/J7DMMadl7HwA2h5w5vA= 646 | 647 | optional 648 | 649 | 650 | Resources/ko.lproj/SUUpdatePermissionPrompt.nib 651 | 652 | hash 653 | 654 | uskWcmpOnvKEZirOKvVZ77mZJaU= 655 | 656 | optional 657 | 658 | 659 | Resources/nl.lproj/SUAutomaticUpdateAlert.nib 660 | 661 | hash 662 | 663 | 2R5RqTstoCWcZOMYT8KcQJeUgaI= 664 | 665 | optional 666 | 667 | 668 | Resources/nl.lproj/SUUpdateAlert.nib 669 | 670 | hash 671 | 672 | uR3vj53P6eQBwp6sg5cnLLQ7jg4= 673 | 674 | optional 675 | 676 | 677 | Resources/nl.lproj/SUUpdatePermissionPrompt.nib 678 | 679 | hash 680 | 681 | H+54kPQi+56E3cJtvF5HUs4dmvA= 682 | 683 | optional 684 | 685 | 686 | Resources/nl.lproj/Sparkle.strings 687 | 688 | hash 689 | 690 | F9Glew0gS9l83OeLpAKWK1jZylc= 691 | 692 | optional 693 | 694 | 695 | Resources/pl.lproj/SUAutomaticUpdateAlert.nib 696 | 697 | hash 698 | 699 | dqgmtf9wqOfTw5i9qXR8JD9rq+c= 700 | 701 | optional 702 | 703 | 704 | Resources/pl.lproj/SUUpdateAlert.nib 705 | 706 | hash 707 | 708 | zX2CfIxV7ViHEbPFAVsmPD/USx4= 709 | 710 | optional 711 | 712 | 713 | Resources/pl.lproj/SUUpdatePermissionPrompt.nib 714 | 715 | hash 716 | 717 | KrzSojhSdUeCZgD3TfumO45FjWo= 718 | 719 | optional 720 | 721 | 722 | Resources/pl.lproj/Sparkle.strings 723 | 724 | hash 725 | 726 | amtSw7dyug39MOEeoqy9cBqxwKQ= 727 | 728 | optional 729 | 730 | 731 | Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib 732 | 733 | hash 734 | 735 | BXklrmwYqj5brz/Ax0Bw8a7mIyw= 736 | 737 | optional 738 | 739 | 740 | Resources/pt_BR.lproj/SUPasswordPrompt.nib 741 | 742 | hash 743 | 744 | RwQm6bf0y3c15U7ZZssmu+LgITc= 745 | 746 | optional 747 | 748 | 749 | Resources/pt_BR.lproj/SUUpdateAlert.nib 750 | 751 | hash 752 | 753 | e4mw8RGaDiHdeo7T2ceE8Ogi+f4= 754 | 755 | optional 756 | 757 | 758 | Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib 759 | 760 | hash 761 | 762 | Jbd7noRt6oWKpn9Zcj+RrWe8Z+c= 763 | 764 | optional 765 | 766 | 767 | Resources/pt_BR.lproj/Sparkle.strings 768 | 769 | hash 770 | 771 | m1csq4xFLPFqreCbVAvCEF4cipQ= 772 | 773 | optional 774 | 775 | 776 | Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib 777 | 778 | hash 779 | 780 | OBtVIcwv7TvzH7VqDp82MkZp1vc= 781 | 782 | optional 783 | 784 | 785 | Resources/pt_PT.lproj/SUUpdateAlert.nib 786 | 787 | hash 788 | 789 | fxA8x66iN67KJrS2pgVocOxWJEI= 790 | 791 | optional 792 | 793 | 794 | Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib 795 | 796 | hash 797 | 798 | ZvHATb95uy8b/zyLdkHev2J6/5s= 799 | 800 | optional 801 | 802 | 803 | Resources/pt_PT.lproj/Sparkle.strings 804 | 805 | hash 806 | 807 | L5ZLQhFSppjMAOwb+p3BICemCBw= 808 | 809 | optional 810 | 811 | 812 | Resources/ro.lproj/SUAutomaticUpdateAlert.nib 813 | 814 | hash 815 | 816 | 228DxaPZftc9Or0A68v4cXzZExo= 817 | 818 | optional 819 | 820 | 821 | Resources/ro.lproj/SUUpdateAlert.nib 822 | 823 | hash 824 | 825 | HYRTLOGFx6BbjQguCjL+xqZX6Rs= 826 | 827 | optional 828 | 829 | 830 | Resources/ro.lproj/SUUpdatePermissionPrompt.nib 831 | 832 | hash 833 | 834 | ZutSgExpgvJrsVL/q0H+DsgIhC8= 835 | 836 | optional 837 | 838 | 839 | Resources/ro.lproj/Sparkle.strings 840 | 841 | hash 842 | 843 | TWmvE02aSeSXIn4ryZu7oK5DryU= 844 | 845 | optional 846 | 847 | 848 | Resources/ru.lproj/SUAutomaticUpdateAlert.nib 849 | 850 | hash 851 | 852 | Mb0qbl04MHVnyk+PocIHTgMgJEE= 853 | 854 | optional 855 | 856 | 857 | Resources/ru.lproj/SUUpdateAlert.nib 858 | 859 | hash 860 | 861 | qBxpnz5W7NOa4pQneetB6T4EIz8= 862 | 863 | optional 864 | 865 | 866 | Resources/ru.lproj/SUUpdatePermissionPrompt.nib 867 | 868 | hash 869 | 870 | IL6llMkn7JAOsmS3lrAa+aVpi98= 871 | 872 | optional 873 | 874 | 875 | Resources/ru.lproj/Sparkle.strings 876 | 877 | hash 878 | 879 | 1u4/QMl6l9bF6GyrP0sunHa8Gq4= 880 | 881 | optional 882 | 883 | 884 | Resources/sk.lproj/SUAutomaticUpdateAlert.nib 885 | 886 | hash 887 | 888 | tDhFBfnqh3CdXaPyspzFJNwYuEM= 889 | 890 | optional 891 | 892 | 893 | Resources/sk.lproj/SUUpdateAlert.nib 894 | 895 | hash 896 | 897 | 3mA98mxY74uhDcAoGS2ob/p0Gvg= 898 | 899 | optional 900 | 901 | 902 | Resources/sk.lproj/SUUpdatePermissionPrompt.nib 903 | 904 | hash 905 | 906 | DANJQRttUicnk5UeKUOeR746aJc= 907 | 908 | optional 909 | 910 | 911 | Resources/sl.lproj/SUAutomaticUpdateAlert.nib 912 | 913 | hash 914 | 915 | +2oOtmJybvohn2OooNENZ2x5ce0= 916 | 917 | optional 918 | 919 | 920 | Resources/sl.lproj/SUUpdateAlert.nib 921 | 922 | hash 923 | 924 | yAxJPM6wl9qlaBKfyT81kmAyWh8= 925 | 926 | optional 927 | 928 | 929 | Resources/sl.lproj/SUUpdatePermissionPrompt.nib 930 | 931 | hash 932 | 933 | GHJPAigDC3aBjjgwHMzhbKYQWv4= 934 | 935 | optional 936 | 937 | 938 | Resources/sl.lproj/Sparkle.strings 939 | 940 | hash 941 | 942 | TFjxsRj+bWhqvSJYQXRxARurAXk= 943 | 944 | optional 945 | 946 | 947 | Resources/sv.lproj/SUAutomaticUpdateAlert.nib 948 | 949 | hash 950 | 951 | /En8BnaprXd+WBL6lJ082f/52Pc= 952 | 953 | optional 954 | 955 | 956 | Resources/sv.lproj/SUUpdateAlert.nib 957 | 958 | hash 959 | 960 | Rz43ozvYAnrwS1WEX7uLDiMU6i8= 961 | 962 | optional 963 | 964 | 965 | Resources/sv.lproj/SUUpdatePermissionPrompt.nib 966 | 967 | hash 968 | 969 | iEgry+8m9qGzT59yHx8ykCUaBN0= 970 | 971 | optional 972 | 973 | 974 | Resources/sv.lproj/Sparkle.strings 975 | 976 | hash 977 | 978 | dOqE8P20bvoQ31FJTcgY2scAf0c= 979 | 980 | optional 981 | 982 | 983 | Resources/th.lproj/SUAutomaticUpdateAlert.nib 984 | 985 | hash 986 | 987 | JPHSh3pV4QjgUbS+dFHBdzfjDEk= 988 | 989 | optional 990 | 991 | 992 | Resources/th.lproj/SUPasswordPrompt.nib 993 | 994 | hash 995 | 996 | CaVo25JUe5trRr/1fEf9bwRNY44= 997 | 998 | optional 999 | 1000 | 1001 | Resources/th.lproj/SUUpdateAlert.nib 1002 | 1003 | hash 1004 | 1005 | PjFypumYXB0lQWo5Pcc8GZ9UKi4= 1006 | 1007 | optional 1008 | 1009 | 1010 | Resources/th.lproj/SUUpdatePermissionPrompt.nib 1011 | 1012 | hash 1013 | 1014 | c0VmNf2bhfZpfqHitztUmhdWiaw= 1015 | 1016 | optional 1017 | 1018 | 1019 | Resources/th.lproj/Sparkle.strings 1020 | 1021 | hash 1022 | 1023 | 8ltk5beazcpWXe7C41BD8KH37u4= 1024 | 1025 | optional 1026 | 1027 | 1028 | Resources/tr.lproj/SUAutomaticUpdateAlert.nib 1029 | 1030 | hash 1031 | 1032 | VLOpwDCXYadmD1lHeSneF8Gk2u0= 1033 | 1034 | optional 1035 | 1036 | 1037 | Resources/tr.lproj/SUUpdateAlert.nib 1038 | 1039 | hash 1040 | 1041 | ZXNwBR/Jsbgxv8PP70tzNLUqsXc= 1042 | 1043 | optional 1044 | 1045 | 1046 | Resources/tr.lproj/SUUpdatePermissionPrompt.nib 1047 | 1048 | hash 1049 | 1050 | FoeFJ0bN2XzxjGmHjqnOcEGIaRU= 1051 | 1052 | optional 1053 | 1054 | 1055 | Resources/tr.lproj/Sparkle.strings 1056 | 1057 | hash 1058 | 1059 | lz3MId9pXRfLQmJFHFJRmbpJeJ8= 1060 | 1061 | optional 1062 | 1063 | 1064 | Resources/uk.lproj/SUAutomaticUpdateAlert.nib 1065 | 1066 | hash 1067 | 1068 | Obt1Zu2ICZzYWHCiyhGD2Fwelyo= 1069 | 1070 | optional 1071 | 1072 | 1073 | Resources/uk.lproj/SUUpdateAlert.nib 1074 | 1075 | hash 1076 | 1077 | 2HOB7VMPQQLvAefYVf8PBTTqEVY= 1078 | 1079 | optional 1080 | 1081 | 1082 | Resources/uk.lproj/SUUpdatePermissionPrompt.nib 1083 | 1084 | hash 1085 | 1086 | hFZQ8A2Jz+uaw43RHKs7ipxvF+8= 1087 | 1088 | optional 1089 | 1090 | 1091 | Resources/uk.lproj/Sparkle.strings 1092 | 1093 | hash 1094 | 1095 | 7gi7Qnp58uEuShWPZ5XT2zfn0EE= 1096 | 1097 | optional 1098 | 1099 | 1100 | Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib 1101 | 1102 | hash 1103 | 1104 | EaxQeTmmhYhqGY1hNDr/IRqbaLA= 1105 | 1106 | optional 1107 | 1108 | 1109 | Resources/zh_CN.lproj/SUUpdateAlert.nib 1110 | 1111 | hash 1112 | 1113 | Ge6Xp8XV5eaEdB2X7atsKjb4MlA= 1114 | 1115 | optional 1116 | 1117 | 1118 | Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib 1119 | 1120 | hash 1121 | 1122 | joM0MCQf053NJty7p8Yx+DenUDU= 1123 | 1124 | optional 1125 | 1126 | 1127 | Resources/zh_CN.lproj/Sparkle.strings 1128 | 1129 | hash 1130 | 1131 | vvTtNDU+zUY07WexvxBPSMotYBk= 1132 | 1133 | optional 1134 | 1135 | 1136 | Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib 1137 | 1138 | hash 1139 | 1140 | uvQ8eHNMz/ZRt1DAh3UALp/EtQ8= 1141 | 1142 | optional 1143 | 1144 | 1145 | Resources/zh_TW.lproj/SUUpdateAlert.nib 1146 | 1147 | hash 1148 | 1149 | zJmQwPWBopsK0/3tEgNgnNXuse8= 1150 | 1151 | optional 1152 | 1153 | 1154 | Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib 1155 | 1156 | hash 1157 | 1158 | 43lK6x47e9F6o64kc8EUMjhk/SY= 1159 | 1160 | optional 1161 | 1162 | 1163 | Resources/zh_TW.lproj/Sparkle.strings 1164 | 1165 | hash 1166 | 1167 | IXk9cSLkHL/6omrddGy9mcf5wKk= 1168 | 1169 | optional 1170 | 1171 | 1172 | 1173 | files2 1174 | 1175 | Headers/SUAppcast.h 1176 | 1177 | 4VEdPYtLWwPgnEnOaJgPl4Z03QE= 1178 | 1179 | Headers/SUAppcastItem.h 1180 | 1181 | DXl7qt0YH2elcZKvneNDzj2+y9M= 1182 | 1183 | Headers/SUUpdater.h 1184 | 1185 | RBvQVFtvMpboKEC5rxE1PrKstbk= 1186 | 1187 | Headers/SUUpdaterQueue.h 1188 | 1189 | 07aqyFkNZsRWgeTTbUCE8Vcmz9Y= 1190 | 1191 | Headers/SUVersionComparisonProtocol.h 1192 | 1193 | ibIs4xUSPkTZijk9uhcCGj2tyCQ= 1194 | 1195 | Headers/SUVersionDisplayProtocol.h 1196 | 1197 | XPxYtG/bKwj/zgR+yrt0JH+NWuM= 1198 | 1199 | Headers/Sparkle.h 1200 | 1201 | 6yD4+ocSNRxG3wX9j1KUzMIAPRw= 1202 | 1203 | Resources/Info.plist 1204 | 1205 | L42sLbfy3ErhWV9jKpgwlXpWhH8= 1206 | 1207 | Resources/License.txt 1208 | 1209 | n88eWVMZFaALu0CYnrGxTNop+E8= 1210 | 1211 | Resources/SUModelTranslation.plist 1212 | 1213 | voZlITm6VH1XC7ambPyN+AVvMVQ= 1214 | 1215 | Resources/SUStatus.nib 1216 | 1217 | AY4YXjlQrzqM9SfsrxpSB1B1u+k= 1218 | 1219 | Resources/ar.lproj/SUAutomaticUpdateAlert.nib 1220 | 1221 | hash 1222 | 1223 | E03x3qb3mjzo+kfPwThRW+nLpzM= 1224 | 1225 | optional 1226 | 1227 | 1228 | Resources/ar.lproj/SUPasswordPrompt.nib 1229 | 1230 | hash 1231 | 1232 | +oqL1Ts09bG3leBDS9YXK197e+g= 1233 | 1234 | optional 1235 | 1236 | 1237 | Resources/ar.lproj/SUUpdateAlert.nib 1238 | 1239 | hash 1240 | 1241 | 4BM80hkCddf6qQIIkzmUYTT2Gkg= 1242 | 1243 | optional 1244 | 1245 | 1246 | Resources/ar.lproj/SUUpdatePermissionPrompt.nib 1247 | 1248 | hash 1249 | 1250 | u/PPFk5yAcnKaRYcuM4gpPWixtY= 1251 | 1252 | optional 1253 | 1254 | 1255 | Resources/ar.lproj/Sparkle.strings 1256 | 1257 | hash 1258 | 1259 | 1r4nLYbh4nZ+8L2BKHfO2CIzb0U= 1260 | 1261 | optional 1262 | 1263 | 1264 | Resources/cs.lproj/SUAutomaticUpdateAlert.nib 1265 | 1266 | hash 1267 | 1268 | MT2psSZlMJpWMiJI5PZs7U67QEQ= 1269 | 1270 | optional 1271 | 1272 | 1273 | Resources/cs.lproj/SUUpdateAlert.nib 1274 | 1275 | hash 1276 | 1277 | vA0zL5A1RS48AqbbIF3+mNqjse4= 1278 | 1279 | optional 1280 | 1281 | 1282 | Resources/cs.lproj/SUUpdatePermissionPrompt.nib 1283 | 1284 | hash 1285 | 1286 | tfj8bjupV+Ew7tRKoe612UVuhUA= 1287 | 1288 | optional 1289 | 1290 | 1291 | Resources/cs.lproj/Sparkle.strings 1292 | 1293 | hash 1294 | 1295 | 5VgDVMGiDIDmHgPo/8+xjD5koUM= 1296 | 1297 | optional 1298 | 1299 | 1300 | Resources/da.lproj/SUAutomaticUpdateAlert.nib 1301 | 1302 | hash 1303 | 1304 | vGuMaxqbOPEAvvEVXuLRibVH6H0= 1305 | 1306 | optional 1307 | 1308 | 1309 | Resources/da.lproj/SUUpdateAlert.nib 1310 | 1311 | hash 1312 | 1313 | nyuUjGAgFmv6xllxOgSSjCrd97Q= 1314 | 1315 | optional 1316 | 1317 | 1318 | Resources/da.lproj/SUUpdatePermissionPrompt.nib 1319 | 1320 | hash 1321 | 1322 | +yQHd634Ubn0FsfpZpvKe6wgm2I= 1323 | 1324 | optional 1325 | 1326 | 1327 | Resources/da.lproj/Sparkle.strings 1328 | 1329 | hash 1330 | 1331 | 7sms2i9dxY6e2nMlG17Glh1qUa4= 1332 | 1333 | optional 1334 | 1335 | 1336 | Resources/de.lproj/SUAutomaticUpdateAlert.nib 1337 | 1338 | hash 1339 | 1340 | OQM87WdvKApKJB/Fz/GA4Def0ws= 1341 | 1342 | optional 1343 | 1344 | 1345 | Resources/de.lproj/SUUpdateAlert.nib 1346 | 1347 | hash 1348 | 1349 | doMZQDxn5P2Pf8z0R1c1RtO0w2c= 1350 | 1351 | optional 1352 | 1353 | 1354 | Resources/de.lproj/SUUpdatePermissionPrompt.nib 1355 | 1356 | hash 1357 | 1358 | 5YnUzRt0fQCJ0STayZyAeeod1EI= 1359 | 1360 | optional 1361 | 1362 | 1363 | Resources/de.lproj/Sparkle.strings 1364 | 1365 | hash 1366 | 1367 | VQ6cCIGwVhg1Nbk/d1ktS0MKfrs= 1368 | 1369 | optional 1370 | 1371 | 1372 | Resources/en.lproj/SUAutomaticUpdateAlert.nib 1373 | 1374 | hash 1375 | 1376 | SvbwYv4v9SDPh/Tz8MEkJHJgCPQ= 1377 | 1378 | optional 1379 | 1380 | 1381 | Resources/en.lproj/SUPasswordPrompt.nib 1382 | 1383 | hash 1384 | 1385 | hU53+VhC71sVdNiuC7rmgKuw+CU= 1386 | 1387 | optional 1388 | 1389 | 1390 | Resources/en.lproj/SUUpdateAlert.nib 1391 | 1392 | hash 1393 | 1394 | IUP4lmNYZcl6UI+qLBxjzxhpw7s= 1395 | 1396 | optional 1397 | 1398 | 1399 | Resources/en.lproj/SUUpdatePermissionPrompt.nib 1400 | 1401 | hash 1402 | 1403 | NA5W919gtlfieqLYAGv3cI4myDc= 1404 | 1405 | optional 1406 | 1407 | 1408 | Resources/en.lproj/Sparkle.strings 1409 | 1410 | hash 1411 | 1412 | jhndQbmp0y5Pqir0IEvzHHyw56Q= 1413 | 1414 | optional 1415 | 1416 | 1417 | Resources/es.lproj/SUAutomaticUpdateAlert.nib 1418 | 1419 | hash 1420 | 1421 | POWHYbeCM125qXK9QaqqWSizqYA= 1422 | 1423 | optional 1424 | 1425 | 1426 | Resources/es.lproj/SUUpdateAlert.nib 1427 | 1428 | hash 1429 | 1430 | y/jrgfcQJ7mMR2kWMpumWUX2VYI= 1431 | 1432 | optional 1433 | 1434 | 1435 | Resources/es.lproj/SUUpdatePermissionPrompt.nib 1436 | 1437 | hash 1438 | 1439 | Yjs8mVpre4QQYv5X6BXrOEdRGHY= 1440 | 1441 | optional 1442 | 1443 | 1444 | Resources/es.lproj/Sparkle.strings 1445 | 1446 | hash 1447 | 1448 | VeGulLXhFyUqBWpp124ycDSygzI= 1449 | 1450 | optional 1451 | 1452 | 1453 | Resources/finish_installation.app/Contents/Info.plist 1454 | 1455 | FOrezqKe0hZ/JLET6Ufwm7afLFI= 1456 | 1457 | Resources/finish_installation.app/Contents/MacOS/finish_installation 1458 | 1459 | 90mkwoMAKnhv+bs0EbTZp7kgfzc= 1460 | 1461 | Resources/finish_installation.app/Contents/PkgInfo 1462 | 1463 | n57qDP4tZfLD1rCS43W0B4LQjzE= 1464 | 1465 | Resources/finish_installation.app/Contents/Resources/SUStatus.nib 1466 | 1467 | AY4YXjlQrzqM9SfsrxpSB1B1u+k= 1468 | 1469 | Resources/finish_installation.app/Contents/Resources/Sparkle.icns 1470 | 1471 | JwSB2ADJA4f/Z/Whu0KeLCzTq2w= 1472 | 1473 | Resources/finish_installation.app/Contents/Resources/ar.lproj/Sparkle.strings 1474 | 1475 | hash 1476 | 1477 | 1r4nLYbh4nZ+8L2BKHfO2CIzb0U= 1478 | 1479 | optional 1480 | 1481 | 1482 | Resources/finish_installation.app/Contents/Resources/cs.lproj/Sparkle.strings 1483 | 1484 | hash 1485 | 1486 | 5VgDVMGiDIDmHgPo/8+xjD5koUM= 1487 | 1488 | optional 1489 | 1490 | 1491 | Resources/finish_installation.app/Contents/Resources/da.lproj/Sparkle.strings 1492 | 1493 | hash 1494 | 1495 | 7sms2i9dxY6e2nMlG17Glh1qUa4= 1496 | 1497 | optional 1498 | 1499 | 1500 | Resources/finish_installation.app/Contents/Resources/de.lproj/Sparkle.strings 1501 | 1502 | hash 1503 | 1504 | VQ6cCIGwVhg1Nbk/d1ktS0MKfrs= 1505 | 1506 | optional 1507 | 1508 | 1509 | Resources/finish_installation.app/Contents/Resources/en.lproj/Sparkle.strings 1510 | 1511 | hash 1512 | 1513 | jhndQbmp0y5Pqir0IEvzHHyw56Q= 1514 | 1515 | optional 1516 | 1517 | 1518 | Resources/finish_installation.app/Contents/Resources/es.lproj/Sparkle.strings 1519 | 1520 | hash 1521 | 1522 | VeGulLXhFyUqBWpp124ycDSygzI= 1523 | 1524 | optional 1525 | 1526 | 1527 | Resources/finish_installation.app/Contents/Resources/fr.lproj/Sparkle.strings 1528 | 1529 | hash 1530 | 1531 | wnNXmPUBaN4YrlxsOxcrb+18/T4= 1532 | 1533 | optional 1534 | 1535 | 1536 | Resources/finish_installation.app/Contents/Resources/is.lproj/Sparkle.strings 1537 | 1538 | hash 1539 | 1540 | 6bV9kOUaSqQZw4AFOhB/dZjvfko= 1541 | 1542 | optional 1543 | 1544 | 1545 | Resources/finish_installation.app/Contents/Resources/it.lproj/Sparkle.strings 1546 | 1547 | hash 1548 | 1549 | UnaweCH6Yovy2JCdq9BKqBf+zpw= 1550 | 1551 | optional 1552 | 1553 | 1554 | Resources/finish_installation.app/Contents/Resources/ja.lproj/Sparkle.strings 1555 | 1556 | hash 1557 | 1558 | ULqpUT0UoUc3dJ6XIzEa4DMwThM= 1559 | 1560 | optional 1561 | 1562 | 1563 | Resources/finish_installation.app/Contents/Resources/nl.lproj/Sparkle.strings 1564 | 1565 | hash 1566 | 1567 | F9Glew0gS9l83OeLpAKWK1jZylc= 1568 | 1569 | optional 1570 | 1571 | 1572 | Resources/finish_installation.app/Contents/Resources/pl.lproj/Sparkle.strings 1573 | 1574 | hash 1575 | 1576 | amtSw7dyug39MOEeoqy9cBqxwKQ= 1577 | 1578 | optional 1579 | 1580 | 1581 | Resources/finish_installation.app/Contents/Resources/pt_BR.lproj/Sparkle.strings 1582 | 1583 | hash 1584 | 1585 | m1csq4xFLPFqreCbVAvCEF4cipQ= 1586 | 1587 | optional 1588 | 1589 | 1590 | Resources/finish_installation.app/Contents/Resources/pt_PT.lproj/Sparkle.strings 1591 | 1592 | hash 1593 | 1594 | L5ZLQhFSppjMAOwb+p3BICemCBw= 1595 | 1596 | optional 1597 | 1598 | 1599 | Resources/finish_installation.app/Contents/Resources/ro.lproj/Sparkle.strings 1600 | 1601 | hash 1602 | 1603 | TWmvE02aSeSXIn4ryZu7oK5DryU= 1604 | 1605 | optional 1606 | 1607 | 1608 | Resources/finish_installation.app/Contents/Resources/ru.lproj/Sparkle.strings 1609 | 1610 | hash 1611 | 1612 | 1u4/QMl6l9bF6GyrP0sunHa8Gq4= 1613 | 1614 | optional 1615 | 1616 | 1617 | Resources/finish_installation.app/Contents/Resources/sl.lproj/Sparkle.strings 1618 | 1619 | hash 1620 | 1621 | TFjxsRj+bWhqvSJYQXRxARurAXk= 1622 | 1623 | optional 1624 | 1625 | 1626 | Resources/finish_installation.app/Contents/Resources/sv.lproj/Sparkle.strings 1627 | 1628 | hash 1629 | 1630 | dOqE8P20bvoQ31FJTcgY2scAf0c= 1631 | 1632 | optional 1633 | 1634 | 1635 | Resources/finish_installation.app/Contents/Resources/th.lproj/Sparkle.strings 1636 | 1637 | hash 1638 | 1639 | 8ltk5beazcpWXe7C41BD8KH37u4= 1640 | 1641 | optional 1642 | 1643 | 1644 | Resources/finish_installation.app/Contents/Resources/tr.lproj/Sparkle.strings 1645 | 1646 | hash 1647 | 1648 | lz3MId9pXRfLQmJFHFJRmbpJeJ8= 1649 | 1650 | optional 1651 | 1652 | 1653 | Resources/finish_installation.app/Contents/Resources/uk.lproj/Sparkle.strings 1654 | 1655 | hash 1656 | 1657 | 7gi7Qnp58uEuShWPZ5XT2zfn0EE= 1658 | 1659 | optional 1660 | 1661 | 1662 | Resources/finish_installation.app/Contents/Resources/zh_CN.lproj/Sparkle.strings 1663 | 1664 | hash 1665 | 1666 | vvTtNDU+zUY07WexvxBPSMotYBk= 1667 | 1668 | optional 1669 | 1670 | 1671 | Resources/finish_installation.app/Contents/Resources/zh_TW.lproj/Sparkle.strings 1672 | 1673 | hash 1674 | 1675 | IXk9cSLkHL/6omrddGy9mcf5wKk= 1676 | 1677 | optional 1678 | 1679 | 1680 | Resources/finish_installation.app/Contents/_CodeSignature/CodeResources 1681 | 1682 | R6urvto4DI8GZeyVl6Aucf54Z5w= 1683 | 1684 | Resources/fr.lproj/SUAutomaticUpdateAlert.nib 1685 | 1686 | hash 1687 | 1688 | NOr+1f5ndbJsxzRv192b4j0q1hw= 1689 | 1690 | optional 1691 | 1692 | 1693 | Resources/fr.lproj/SUUpdateAlert.nib 1694 | 1695 | hash 1696 | 1697 | msFvBt74UJzC2rWXBA+g+5v9JZc= 1698 | 1699 | optional 1700 | 1701 | 1702 | Resources/fr.lproj/SUUpdatePermissionPrompt.nib 1703 | 1704 | hash 1705 | 1706 | B2b8UHcA4ITRSFEYrpAHNshu9SU= 1707 | 1708 | optional 1709 | 1710 | 1711 | Resources/fr.lproj/Sparkle.strings 1712 | 1713 | hash 1714 | 1715 | wnNXmPUBaN4YrlxsOxcrb+18/T4= 1716 | 1717 | optional 1718 | 1719 | 1720 | Resources/fr_CA.lproj 1721 | 1722 | symlink 1723 | fr.lproj 1724 | 1725 | Resources/is.lproj/SUAutomaticUpdateAlert.nib 1726 | 1727 | hash 1728 | 1729 | KlURwebDaXR070iFXmHIrxAB2QQ= 1730 | 1731 | optional 1732 | 1733 | 1734 | Resources/is.lproj/SUUpdateAlert.nib 1735 | 1736 | hash 1737 | 1738 | pJmVQsBpiDaaRgUdXG7dEDVqovE= 1739 | 1740 | optional 1741 | 1742 | 1743 | Resources/is.lproj/SUUpdatePermissionPrompt.nib 1744 | 1745 | hash 1746 | 1747 | /Q3/WiueiiCPoAdqa/nMrih3YJI= 1748 | 1749 | optional 1750 | 1751 | 1752 | Resources/is.lproj/Sparkle.strings 1753 | 1754 | hash 1755 | 1756 | 6bV9kOUaSqQZw4AFOhB/dZjvfko= 1757 | 1758 | optional 1759 | 1760 | 1761 | Resources/it.lproj/SUAutomaticUpdateAlert.nib 1762 | 1763 | hash 1764 | 1765 | OIKooYKpb68iBgSV0p8LQnu4zKg= 1766 | 1767 | optional 1768 | 1769 | 1770 | Resources/it.lproj/SUUpdateAlert.nib 1771 | 1772 | hash 1773 | 1774 | ZfQFw26CxfdWK8YmTPPenSjnLQk= 1775 | 1776 | optional 1777 | 1778 | 1779 | Resources/it.lproj/SUUpdatePermissionPrompt.nib 1780 | 1781 | hash 1782 | 1783 | TG+jaxLEdMFtaPHUO0tQm80z5cc= 1784 | 1785 | optional 1786 | 1787 | 1788 | Resources/it.lproj/Sparkle.strings 1789 | 1790 | hash 1791 | 1792 | UnaweCH6Yovy2JCdq9BKqBf+zpw= 1793 | 1794 | optional 1795 | 1796 | 1797 | Resources/ja.lproj/SUAutomaticUpdateAlert.nib 1798 | 1799 | hash 1800 | 1801 | I7czYhueUR8NhndzlnKPq4fxf7M= 1802 | 1803 | optional 1804 | 1805 | 1806 | Resources/ja.lproj/SUUpdateAlert.nib 1807 | 1808 | hash 1809 | 1810 | X4hWfRiHNJBrjUCY83SZuM/VuiU= 1811 | 1812 | optional 1813 | 1814 | 1815 | Resources/ja.lproj/SUUpdatePermissionPrompt.nib 1816 | 1817 | hash 1818 | 1819 | x9KXYumWk4W6RtPwCnGc49O6xQ4= 1820 | 1821 | optional 1822 | 1823 | 1824 | Resources/ja.lproj/Sparkle.strings 1825 | 1826 | hash 1827 | 1828 | ULqpUT0UoUc3dJ6XIzEa4DMwThM= 1829 | 1830 | optional 1831 | 1832 | 1833 | Resources/ko.lproj/SUAutomaticUpdateAlert.nib 1834 | 1835 | hash 1836 | 1837 | S0ypA7MXGIoVJ84TXpw59J78kqA= 1838 | 1839 | optional 1840 | 1841 | 1842 | Resources/ko.lproj/SUUpdateAlert.nib 1843 | 1844 | hash 1845 | 1846 | oaZETeU/J7DMMadl7HwA2h5w5vA= 1847 | 1848 | optional 1849 | 1850 | 1851 | Resources/ko.lproj/SUUpdatePermissionPrompt.nib 1852 | 1853 | hash 1854 | 1855 | uskWcmpOnvKEZirOKvVZ77mZJaU= 1856 | 1857 | optional 1858 | 1859 | 1860 | Resources/nl.lproj/SUAutomaticUpdateAlert.nib 1861 | 1862 | hash 1863 | 1864 | 2R5RqTstoCWcZOMYT8KcQJeUgaI= 1865 | 1866 | optional 1867 | 1868 | 1869 | Resources/nl.lproj/SUUpdateAlert.nib 1870 | 1871 | hash 1872 | 1873 | uR3vj53P6eQBwp6sg5cnLLQ7jg4= 1874 | 1875 | optional 1876 | 1877 | 1878 | Resources/nl.lproj/SUUpdatePermissionPrompt.nib 1879 | 1880 | hash 1881 | 1882 | H+54kPQi+56E3cJtvF5HUs4dmvA= 1883 | 1884 | optional 1885 | 1886 | 1887 | Resources/nl.lproj/Sparkle.strings 1888 | 1889 | hash 1890 | 1891 | F9Glew0gS9l83OeLpAKWK1jZylc= 1892 | 1893 | optional 1894 | 1895 | 1896 | Resources/pl.lproj/SUAutomaticUpdateAlert.nib 1897 | 1898 | hash 1899 | 1900 | dqgmtf9wqOfTw5i9qXR8JD9rq+c= 1901 | 1902 | optional 1903 | 1904 | 1905 | Resources/pl.lproj/SUUpdateAlert.nib 1906 | 1907 | hash 1908 | 1909 | zX2CfIxV7ViHEbPFAVsmPD/USx4= 1910 | 1911 | optional 1912 | 1913 | 1914 | Resources/pl.lproj/SUUpdatePermissionPrompt.nib 1915 | 1916 | hash 1917 | 1918 | KrzSojhSdUeCZgD3TfumO45FjWo= 1919 | 1920 | optional 1921 | 1922 | 1923 | Resources/pl.lproj/Sparkle.strings 1924 | 1925 | hash 1926 | 1927 | amtSw7dyug39MOEeoqy9cBqxwKQ= 1928 | 1929 | optional 1930 | 1931 | 1932 | Resources/pt.lproj 1933 | 1934 | symlink 1935 | pt_BR.lproj 1936 | 1937 | Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib 1938 | 1939 | hash 1940 | 1941 | BXklrmwYqj5brz/Ax0Bw8a7mIyw= 1942 | 1943 | optional 1944 | 1945 | 1946 | Resources/pt_BR.lproj/SUPasswordPrompt.nib 1947 | 1948 | hash 1949 | 1950 | RwQm6bf0y3c15U7ZZssmu+LgITc= 1951 | 1952 | optional 1953 | 1954 | 1955 | Resources/pt_BR.lproj/SUUpdateAlert.nib 1956 | 1957 | hash 1958 | 1959 | e4mw8RGaDiHdeo7T2ceE8Ogi+f4= 1960 | 1961 | optional 1962 | 1963 | 1964 | Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib 1965 | 1966 | hash 1967 | 1968 | Jbd7noRt6oWKpn9Zcj+RrWe8Z+c= 1969 | 1970 | optional 1971 | 1972 | 1973 | Resources/pt_BR.lproj/Sparkle.strings 1974 | 1975 | hash 1976 | 1977 | m1csq4xFLPFqreCbVAvCEF4cipQ= 1978 | 1979 | optional 1980 | 1981 | 1982 | Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib 1983 | 1984 | hash 1985 | 1986 | OBtVIcwv7TvzH7VqDp82MkZp1vc= 1987 | 1988 | optional 1989 | 1990 | 1991 | Resources/pt_PT.lproj/SUUpdateAlert.nib 1992 | 1993 | hash 1994 | 1995 | fxA8x66iN67KJrS2pgVocOxWJEI= 1996 | 1997 | optional 1998 | 1999 | 2000 | Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib 2001 | 2002 | hash 2003 | 2004 | ZvHATb95uy8b/zyLdkHev2J6/5s= 2005 | 2006 | optional 2007 | 2008 | 2009 | Resources/pt_PT.lproj/Sparkle.strings 2010 | 2011 | hash 2012 | 2013 | L5ZLQhFSppjMAOwb+p3BICemCBw= 2014 | 2015 | optional 2016 | 2017 | 2018 | Resources/ro.lproj/SUAutomaticUpdateAlert.nib 2019 | 2020 | hash 2021 | 2022 | 228DxaPZftc9Or0A68v4cXzZExo= 2023 | 2024 | optional 2025 | 2026 | 2027 | Resources/ro.lproj/SUUpdateAlert.nib 2028 | 2029 | hash 2030 | 2031 | HYRTLOGFx6BbjQguCjL+xqZX6Rs= 2032 | 2033 | optional 2034 | 2035 | 2036 | Resources/ro.lproj/SUUpdatePermissionPrompt.nib 2037 | 2038 | hash 2039 | 2040 | ZutSgExpgvJrsVL/q0H+DsgIhC8= 2041 | 2042 | optional 2043 | 2044 | 2045 | Resources/ro.lproj/Sparkle.strings 2046 | 2047 | hash 2048 | 2049 | TWmvE02aSeSXIn4ryZu7oK5DryU= 2050 | 2051 | optional 2052 | 2053 | 2054 | Resources/ru.lproj/SUAutomaticUpdateAlert.nib 2055 | 2056 | hash 2057 | 2058 | Mb0qbl04MHVnyk+PocIHTgMgJEE= 2059 | 2060 | optional 2061 | 2062 | 2063 | Resources/ru.lproj/SUUpdateAlert.nib 2064 | 2065 | hash 2066 | 2067 | qBxpnz5W7NOa4pQneetB6T4EIz8= 2068 | 2069 | optional 2070 | 2071 | 2072 | Resources/ru.lproj/SUUpdatePermissionPrompt.nib 2073 | 2074 | hash 2075 | 2076 | IL6llMkn7JAOsmS3lrAa+aVpi98= 2077 | 2078 | optional 2079 | 2080 | 2081 | Resources/ru.lproj/Sparkle.strings 2082 | 2083 | hash 2084 | 2085 | 1u4/QMl6l9bF6GyrP0sunHa8Gq4= 2086 | 2087 | optional 2088 | 2089 | 2090 | Resources/sk.lproj/SUAutomaticUpdateAlert.nib 2091 | 2092 | hash 2093 | 2094 | tDhFBfnqh3CdXaPyspzFJNwYuEM= 2095 | 2096 | optional 2097 | 2098 | 2099 | Resources/sk.lproj/SUUpdateAlert.nib 2100 | 2101 | hash 2102 | 2103 | 3mA98mxY74uhDcAoGS2ob/p0Gvg= 2104 | 2105 | optional 2106 | 2107 | 2108 | Resources/sk.lproj/SUUpdatePermissionPrompt.nib 2109 | 2110 | hash 2111 | 2112 | DANJQRttUicnk5UeKUOeR746aJc= 2113 | 2114 | optional 2115 | 2116 | 2117 | Resources/sl.lproj/SUAutomaticUpdateAlert.nib 2118 | 2119 | hash 2120 | 2121 | +2oOtmJybvohn2OooNENZ2x5ce0= 2122 | 2123 | optional 2124 | 2125 | 2126 | Resources/sl.lproj/SUUpdateAlert.nib 2127 | 2128 | hash 2129 | 2130 | yAxJPM6wl9qlaBKfyT81kmAyWh8= 2131 | 2132 | optional 2133 | 2134 | 2135 | Resources/sl.lproj/SUUpdatePermissionPrompt.nib 2136 | 2137 | hash 2138 | 2139 | GHJPAigDC3aBjjgwHMzhbKYQWv4= 2140 | 2141 | optional 2142 | 2143 | 2144 | Resources/sl.lproj/Sparkle.strings 2145 | 2146 | hash 2147 | 2148 | TFjxsRj+bWhqvSJYQXRxARurAXk= 2149 | 2150 | optional 2151 | 2152 | 2153 | Resources/sv.lproj/SUAutomaticUpdateAlert.nib 2154 | 2155 | hash 2156 | 2157 | /En8BnaprXd+WBL6lJ082f/52Pc= 2158 | 2159 | optional 2160 | 2161 | 2162 | Resources/sv.lproj/SUUpdateAlert.nib 2163 | 2164 | hash 2165 | 2166 | Rz43ozvYAnrwS1WEX7uLDiMU6i8= 2167 | 2168 | optional 2169 | 2170 | 2171 | Resources/sv.lproj/SUUpdatePermissionPrompt.nib 2172 | 2173 | hash 2174 | 2175 | iEgry+8m9qGzT59yHx8ykCUaBN0= 2176 | 2177 | optional 2178 | 2179 | 2180 | Resources/sv.lproj/Sparkle.strings 2181 | 2182 | hash 2183 | 2184 | dOqE8P20bvoQ31FJTcgY2scAf0c= 2185 | 2186 | optional 2187 | 2188 | 2189 | Resources/th.lproj/SUAutomaticUpdateAlert.nib 2190 | 2191 | hash 2192 | 2193 | JPHSh3pV4QjgUbS+dFHBdzfjDEk= 2194 | 2195 | optional 2196 | 2197 | 2198 | Resources/th.lproj/SUPasswordPrompt.nib 2199 | 2200 | hash 2201 | 2202 | CaVo25JUe5trRr/1fEf9bwRNY44= 2203 | 2204 | optional 2205 | 2206 | 2207 | Resources/th.lproj/SUUpdateAlert.nib 2208 | 2209 | hash 2210 | 2211 | PjFypumYXB0lQWo5Pcc8GZ9UKi4= 2212 | 2213 | optional 2214 | 2215 | 2216 | Resources/th.lproj/SUUpdatePermissionPrompt.nib 2217 | 2218 | hash 2219 | 2220 | c0VmNf2bhfZpfqHitztUmhdWiaw= 2221 | 2222 | optional 2223 | 2224 | 2225 | Resources/th.lproj/Sparkle.strings 2226 | 2227 | hash 2228 | 2229 | 8ltk5beazcpWXe7C41BD8KH37u4= 2230 | 2231 | optional 2232 | 2233 | 2234 | Resources/tr.lproj/SUAutomaticUpdateAlert.nib 2235 | 2236 | hash 2237 | 2238 | VLOpwDCXYadmD1lHeSneF8Gk2u0= 2239 | 2240 | optional 2241 | 2242 | 2243 | Resources/tr.lproj/SUUpdateAlert.nib 2244 | 2245 | hash 2246 | 2247 | ZXNwBR/Jsbgxv8PP70tzNLUqsXc= 2248 | 2249 | optional 2250 | 2251 | 2252 | Resources/tr.lproj/SUUpdatePermissionPrompt.nib 2253 | 2254 | hash 2255 | 2256 | FoeFJ0bN2XzxjGmHjqnOcEGIaRU= 2257 | 2258 | optional 2259 | 2260 | 2261 | Resources/tr.lproj/Sparkle.strings 2262 | 2263 | hash 2264 | 2265 | lz3MId9pXRfLQmJFHFJRmbpJeJ8= 2266 | 2267 | optional 2268 | 2269 | 2270 | Resources/uk.lproj/SUAutomaticUpdateAlert.nib 2271 | 2272 | hash 2273 | 2274 | Obt1Zu2ICZzYWHCiyhGD2Fwelyo= 2275 | 2276 | optional 2277 | 2278 | 2279 | Resources/uk.lproj/SUUpdateAlert.nib 2280 | 2281 | hash 2282 | 2283 | 2HOB7VMPQQLvAefYVf8PBTTqEVY= 2284 | 2285 | optional 2286 | 2287 | 2288 | Resources/uk.lproj/SUUpdatePermissionPrompt.nib 2289 | 2290 | hash 2291 | 2292 | hFZQ8A2Jz+uaw43RHKs7ipxvF+8= 2293 | 2294 | optional 2295 | 2296 | 2297 | Resources/uk.lproj/Sparkle.strings 2298 | 2299 | hash 2300 | 2301 | 7gi7Qnp58uEuShWPZ5XT2zfn0EE= 2302 | 2303 | optional 2304 | 2305 | 2306 | Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib 2307 | 2308 | hash 2309 | 2310 | EaxQeTmmhYhqGY1hNDr/IRqbaLA= 2311 | 2312 | optional 2313 | 2314 | 2315 | Resources/zh_CN.lproj/SUUpdateAlert.nib 2316 | 2317 | hash 2318 | 2319 | Ge6Xp8XV5eaEdB2X7atsKjb4MlA= 2320 | 2321 | optional 2322 | 2323 | 2324 | Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib 2325 | 2326 | hash 2327 | 2328 | joM0MCQf053NJty7p8Yx+DenUDU= 2329 | 2330 | optional 2331 | 2332 | 2333 | Resources/zh_CN.lproj/Sparkle.strings 2334 | 2335 | hash 2336 | 2337 | vvTtNDU+zUY07WexvxBPSMotYBk= 2338 | 2339 | optional 2340 | 2341 | 2342 | Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib 2343 | 2344 | hash 2345 | 2346 | uvQ8eHNMz/ZRt1DAh3UALp/EtQ8= 2347 | 2348 | optional 2349 | 2350 | 2351 | Resources/zh_TW.lproj/SUUpdateAlert.nib 2352 | 2353 | hash 2354 | 2355 | zJmQwPWBopsK0/3tEgNgnNXuse8= 2356 | 2357 | optional 2358 | 2359 | 2360 | Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib 2361 | 2362 | hash 2363 | 2364 | 43lK6x47e9F6o64kc8EUMjhk/SY= 2365 | 2366 | optional 2367 | 2368 | 2369 | Resources/zh_TW.lproj/Sparkle.strings 2370 | 2371 | hash 2372 | 2373 | IXk9cSLkHL/6omrddGy9mcf5wKk= 2374 | 2375 | optional 2376 | 2377 | 2378 | 2379 | rules 2380 | 2381 | ^Resources/ 2382 | 2383 | ^Resources/.*\.lproj/ 2384 | 2385 | optional 2386 | 2387 | weight 2388 | 1000 2389 | 2390 | ^Resources/.*\.lproj/locversion.plist$ 2391 | 2392 | omit 2393 | 2394 | weight 2395 | 1100 2396 | 2397 | ^version.plist$ 2398 | 2399 | 2400 | rules2 2401 | 2402 | .*\.dSYM($|/) 2403 | 2404 | weight 2405 | 11 2406 | 2407 | ^(.*/)?\.DS_Store$ 2408 | 2409 | omit 2410 | 2411 | weight 2412 | 2000 2413 | 2414 | ^(Frameworks|SharedFrameworks|PlugIns|Plug-ins|XPCServices|Helpers|MacOS|Library/(Automator|Spotlight|LoginItems))/ 2415 | 2416 | nested 2417 | 2418 | weight 2419 | 10 2420 | 2421 | ^.* 2422 | 2423 | ^Info\.plist$ 2424 | 2425 | omit 2426 | 2427 | weight 2428 | 20 2429 | 2430 | ^PkgInfo$ 2431 | 2432 | omit 2433 | 2434 | weight 2435 | 20 2436 | 2437 | ^Resources/ 2438 | 2439 | weight 2440 | 20 2441 | 2442 | ^Resources/.*\.lproj/ 2443 | 2444 | optional 2445 | 2446 | weight 2447 | 1000 2448 | 2449 | ^Resources/.*\.lproj/locversion.plist$ 2450 | 2451 | omit 2452 | 2453 | weight 2454 | 1100 2455 | 2456 | ^[^/]+$ 2457 | 2458 | nested 2459 | 2460 | weight 2461 | 10 2462 | 2463 | ^embedded\.provisionprofile$ 2464 | 2465 | weight 2466 | 20 2467 | 2468 | ^version\.plist$ 2469 | 2470 | weight 2471 | 20 2472 | 2473 | 2474 | 2475 | 2476 | --------------------------------------------------------------------------------