motion-sparkle 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (300) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +19 -0
  3. data/Gemfile +6 -0
  4. data/LICENSE +21 -0
  5. data/README.md +206 -0
  6. data/Rakefile +20 -0
  7. data/lib/motion-sparkle.rb +11 -0
  8. data/lib/motion/project/appcast.rb +106 -0
  9. data/lib/motion/project/appcast/release_notes.content.html +22 -0
  10. data/lib/motion/project/appcast/release_notes.template.erb +19 -0
  11. data/lib/motion/project/package.rb +44 -0
  12. data/lib/motion/project/project.rb +47 -0
  13. data/lib/motion/project/rake_tasks.rb +72 -0
  14. data/lib/motion/project/setup.rb +79 -0
  15. data/lib/motion/project/sparkle.rb +166 -0
  16. data/lib/motion/project/templates.rb +40 -0
  17. data/lib/motion/project/version.rb +5 -0
  18. data/motion-sparkle.gemspec +22 -0
  19. data/spec/sparkle_spec.rb +74 -0
  20. data/spec/spec_helper.rb +35 -0
  21. data/vendor/Sparkle.framework/Headers/SUAppcast.h +33 -0
  22. data/vendor/Sparkle.framework/Headers/SUAppcastItem.h +47 -0
  23. data/vendor/Sparkle.framework/Headers/SUUpdater.h +118 -0
  24. data/vendor/Sparkle.framework/Headers/SUVersionComparisonProtocol.h +27 -0
  25. data/vendor/Sparkle.framework/Headers/Sparkle.h +21 -0
  26. data/vendor/Sparkle.framework/Resources/Info.plist +24 -0
  27. data/vendor/Sparkle.framework/Resources/License.txt +7 -0
  28. data/vendor/Sparkle.framework/Resources/SUModelTranslation.plist +174 -0
  29. data/vendor/Sparkle.framework/Resources/SUStatus.nib/classes.nib +56 -0
  30. data/vendor/Sparkle.framework/Resources/SUStatus.nib/info.nib +20 -0
  31. data/vendor/Sparkle.framework/Resources/SUStatus.nib/keyedobjects.nib +0 -0
  32. data/vendor/Sparkle.framework/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  33. data/vendor/Sparkle.framework/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  34. data/vendor/Sparkle.framework/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  35. data/vendor/Sparkle.framework/Resources/de.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  36. data/vendor/Sparkle.framework/Resources/de.lproj/SUUpdateAlert.nib/info.nib +20 -0
  37. data/vendor/Sparkle.framework/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  38. data/vendor/Sparkle.framework/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  39. data/vendor/Sparkle.framework/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  40. data/vendor/Sparkle.framework/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  41. data/vendor/Sparkle.framework/Resources/de.lproj/Sparkle.strings +0 -0
  42. data/vendor/Sparkle.framework/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  43. data/vendor/Sparkle.framework/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  44. data/vendor/Sparkle.framework/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  45. data/vendor/Sparkle.framework/Resources/en.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  46. data/vendor/Sparkle.framework/Resources/en.lproj/SUUpdateAlert.nib/info.nib +20 -0
  47. data/vendor/Sparkle.framework/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  48. data/vendor/Sparkle.framework/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  49. data/vendor/Sparkle.framework/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib +21 -0
  50. data/vendor/Sparkle.framework/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  51. data/vendor/Sparkle.framework/Resources/en.lproj/Sparkle.strings +0 -0
  52. data/vendor/Sparkle.framework/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  53. data/vendor/Sparkle.framework/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  54. data/vendor/Sparkle.framework/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  55. data/vendor/Sparkle.framework/Resources/es.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  56. data/vendor/Sparkle.framework/Resources/es.lproj/SUUpdateAlert.nib/info.nib +20 -0
  57. data/vendor/Sparkle.framework/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  58. data/vendor/Sparkle.framework/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  59. data/vendor/Sparkle.framework/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  60. data/vendor/Sparkle.framework/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  61. data/vendor/Sparkle.framework/Resources/es.lproj/Sparkle.strings +0 -0
  62. data/vendor/Sparkle.framework/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  63. data/vendor/Sparkle.framework/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib +16 -0
  64. data/vendor/Sparkle.framework/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  65. data/vendor/Sparkle.framework/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  66. data/vendor/Sparkle.framework/Resources/fr.lproj/SUUpdateAlert.nib/info.nib +16 -0
  67. data/vendor/Sparkle.framework/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  68. data/vendor/Sparkle.framework/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  69. data/vendor/Sparkle.framework/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
  70. data/vendor/Sparkle.framework/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  71. data/vendor/Sparkle.framework/Resources/fr.lproj/Sparkle.strings +0 -0
  72. data/vendor/Sparkle.framework/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  73. data/vendor/Sparkle.framework/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  74. data/vendor/Sparkle.framework/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  75. data/vendor/Sparkle.framework/Resources/it.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  76. data/vendor/Sparkle.framework/Resources/it.lproj/SUUpdateAlert.nib/info.nib +20 -0
  77. data/vendor/Sparkle.framework/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  78. data/vendor/Sparkle.framework/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  79. data/vendor/Sparkle.framework/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  80. data/vendor/Sparkle.framework/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  81. data/vendor/Sparkle.framework/Resources/it.lproj/Sparkle.strings +0 -0
  82. data/vendor/Sparkle.framework/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  83. data/vendor/Sparkle.framework/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib +18 -0
  84. data/vendor/Sparkle.framework/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  85. data/vendor/Sparkle.framework/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  86. data/vendor/Sparkle.framework/Resources/nl.lproj/SUUpdateAlert.nib/info.nib +16 -0
  87. data/vendor/Sparkle.framework/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  88. data/vendor/Sparkle.framework/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  89. data/vendor/Sparkle.framework/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
  90. data/vendor/Sparkle.framework/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  91. data/vendor/Sparkle.framework/Resources/nl.lproj/Sparkle.strings +0 -0
  92. data/vendor/Sparkle.framework/Resources/relaunch +0 -0
  93. data/vendor/Sparkle.framework/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  94. data/vendor/Sparkle.framework/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  95. data/vendor/Sparkle.framework/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  96. data/vendor/Sparkle.framework/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  97. data/vendor/Sparkle.framework/Resources/ru.lproj/SUUpdateAlert.nib/info.nib +20 -0
  98. data/vendor/Sparkle.framework/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  99. data/vendor/Sparkle.framework/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  100. data/vendor/Sparkle.framework/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib +18 -0
  101. data/vendor/Sparkle.framework/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  102. data/vendor/Sparkle.framework/Resources/ru.lproj/Sparkle.strings +0 -0
  103. data/vendor/Sparkle.framework/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  104. data/vendor/Sparkle.framework/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  105. data/vendor/Sparkle.framework/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  106. data/vendor/Sparkle.framework/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib +39 -0
  107. data/vendor/Sparkle.framework/Resources/sv.lproj/SUUpdateAlert.nib/info.nib +18 -0
  108. data/vendor/Sparkle.framework/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  109. data/vendor/Sparkle.framework/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  110. data/vendor/Sparkle.framework/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  111. data/vendor/Sparkle.framework/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  112. data/vendor/Sparkle.framework/Resources/sv.lproj/Sparkle.strings +0 -0
  113. data/vendor/Sparkle.framework/Sparkle +0 -0
  114. data/vendor/Sparkle.framework/Versions/A/Headers/SUAppcast.h +33 -0
  115. data/vendor/Sparkle.framework/Versions/A/Headers/SUAppcastItem.h +47 -0
  116. data/vendor/Sparkle.framework/Versions/A/Headers/SUUpdater.h +118 -0
  117. data/vendor/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h +27 -0
  118. data/vendor/Sparkle.framework/Versions/A/Headers/Sparkle.h +21 -0
  119. data/vendor/Sparkle.framework/Versions/A/Resources/Info.plist +24 -0
  120. data/vendor/Sparkle.framework/Versions/A/Resources/License.txt +7 -0
  121. data/vendor/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist +174 -0
  122. data/vendor/Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib +56 -0
  123. data/vendor/Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib +20 -0
  124. data/vendor/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib +0 -0
  125. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  126. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  127. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  128. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  129. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib +20 -0
  130. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  131. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  132. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  133. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  134. data/vendor/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings +0 -0
  135. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  136. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  137. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  138. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  139. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib +20 -0
  140. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  141. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  142. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib +21 -0
  143. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  144. data/vendor/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings +0 -0
  145. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  146. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  147. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  148. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  149. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib +20 -0
  150. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  151. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  152. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  153. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  154. data/vendor/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings +0 -0
  155. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  156. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib +16 -0
  157. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  158. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  159. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib +16 -0
  160. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  161. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  162. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
  163. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  164. data/vendor/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings +0 -0
  165. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  166. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  167. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  168. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  169. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib +20 -0
  170. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  171. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  172. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  173. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  174. data/vendor/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings +0 -0
  175. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  176. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib +18 -0
  177. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  178. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  179. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib +16 -0
  180. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  181. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  182. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
  183. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  184. data/vendor/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings +0 -0
  185. data/vendor/Sparkle.framework/Versions/A/Resources/relaunch +0 -0
  186. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  187. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  188. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  189. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  190. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib +20 -0
  191. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  192. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  193. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib +18 -0
  194. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  195. data/vendor/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings +0 -0
  196. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  197. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  198. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  199. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib +39 -0
  200. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib +18 -0
  201. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  202. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  203. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  204. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  205. data/vendor/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings +0 -0
  206. data/vendor/Sparkle.framework/Versions/A/Sparkle +0 -0
  207. data/vendor/Sparkle.framework/Versions/Current/Headers/SUAppcast.h +33 -0
  208. data/vendor/Sparkle.framework/Versions/Current/Headers/SUAppcastItem.h +47 -0
  209. data/vendor/Sparkle.framework/Versions/Current/Headers/SUUpdater.h +118 -0
  210. data/vendor/Sparkle.framework/Versions/Current/Headers/SUVersionComparisonProtocol.h +27 -0
  211. data/vendor/Sparkle.framework/Versions/Current/Headers/Sparkle.h +21 -0
  212. data/vendor/Sparkle.framework/Versions/Current/Resources/Info.plist +24 -0
  213. data/vendor/Sparkle.framework/Versions/Current/Resources/License.txt +7 -0
  214. data/vendor/Sparkle.framework/Versions/Current/Resources/SUModelTranslation.plist +174 -0
  215. data/vendor/Sparkle.framework/Versions/Current/Resources/SUStatus.nib/classes.nib +56 -0
  216. data/vendor/Sparkle.framework/Versions/Current/Resources/SUStatus.nib/info.nib +20 -0
  217. data/vendor/Sparkle.framework/Versions/Current/Resources/SUStatus.nib/keyedobjects.nib +0 -0
  218. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  219. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  220. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  221. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  222. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdateAlert.nib/info.nib +20 -0
  223. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  224. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  225. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  226. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  227. data/vendor/Sparkle.framework/Versions/Current/Resources/de.lproj/Sparkle.strings +0 -0
  228. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  229. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  230. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  231. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  232. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdateAlert.nib/info.nib +20 -0
  233. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  234. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  235. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib +21 -0
  236. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  237. data/vendor/Sparkle.framework/Versions/Current/Resources/en.lproj/Sparkle.strings +0 -0
  238. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  239. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  240. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  241. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  242. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdateAlert.nib/info.nib +20 -0
  243. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  244. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  245. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  246. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  247. data/vendor/Sparkle.framework/Versions/Current/Resources/es.lproj/Sparkle.strings +0 -0
  248. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  249. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib +16 -0
  250. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  251. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  252. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdateAlert.nib/info.nib +16 -0
  253. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  254. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  255. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
  256. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  257. data/vendor/Sparkle.framework/Versions/Current/Resources/fr.lproj/Sparkle.strings +0 -0
  258. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  259. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  260. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  261. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  262. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdateAlert.nib/info.nib +20 -0
  263. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  264. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  265. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  266. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  267. data/vendor/Sparkle.framework/Versions/Current/Resources/it.lproj/Sparkle.strings +0 -0
  268. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  269. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib +18 -0
  270. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  271. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  272. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdateAlert.nib/info.nib +16 -0
  273. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  274. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  275. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib +16 -0
  276. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  277. data/vendor/Sparkle.framework/Versions/Current/Resources/nl.lproj/Sparkle.strings +0 -0
  278. data/vendor/Sparkle.framework/Versions/Current/Resources/relaunch +0 -0
  279. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  280. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  281. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  282. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib +67 -0
  283. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdateAlert.nib/info.nib +20 -0
  284. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  285. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  286. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib +18 -0
  287. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  288. data/vendor/Sparkle.framework/Versions/Current/Resources/ru.lproj/Sparkle.strings +0 -0
  289. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib +50 -0
  290. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib +20 -0
  291. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib +0 -0
  292. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib +39 -0
  293. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdateAlert.nib/info.nib +18 -0
  294. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib +0 -0
  295. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib +59 -0
  296. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib +20 -0
  297. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib +0 -0
  298. data/vendor/Sparkle.framework/Versions/Current/Resources/sv.lproj/Sparkle.strings +0 -0
  299. data/vendor/Sparkle.framework/Versions/Current/Sparkle +0 -0
  300. metadata +1009 -0
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ NmE2ODFmNmQxYjdmMTgwZjQ5M2JhNzI5NTFlNTE5MGU0MGRkNDI2Yw==
5
+ data.tar.gz: !binary |-
6
+ NDNiMzA3MWVlNTEzMDJlMTA3NTg1MWIwZjNmYjcxMjYwNTAxNWFlZg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ OGQ5YjMyZDBhMDUwN2I3NjIxZjZmNGI3NzVhZTllNGIzZmIyMGZlMjgxNGYx
10
+ NDE2ZmFjYTA3OGQxMTI0NmU4YzRhOTVhM2FlYzJkMzgxNmIxZWZkNTIzMTlm
11
+ NjA3NGZlMDlhOGRjOTgxMGIxMjRhOTY4OGZjNGZlYWUyYjdhODY=
12
+ data.tar.gz: !binary |-
13
+ YTgxZWI5MjQ5NGQzOWM0YjEyZDg5ZTQyNTQzYmY4MTQxMTdmNGVlODk0ZGUz
14
+ MzEyNTZmZWE3MjdjNmZhYzhlYzJiMzI1NTE4N2UzZGE1YTkyZjYyNTE4YzYw
15
+ OGQ4ZmVlMjNjNWJmMjhiNzA1NDkwYTdjYmQ1ZmM2ZTM3ODk4ZGU=
data/.gitignore ADDED
@@ -0,0 +1,19 @@
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/
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
4
+
5
+ gem 'bacon'
6
+ gem 'rake'
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2013 Alexandre L. Solleiro <alex@webcracy.org>
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.
data/README.md ADDED
@@ -0,0 +1,206 @@
1
+ # Using motion-sparkle to add Sparkle to your Rubymotion project
2
+
3
+ *NB: Sparkle only works for OS X projects*
4
+
5
+ ## Overview
6
+
7
+ [Sparkle](http://sparkle.andymatuschak.org/) is a free auto-updater library for Cocoa apps. It powers countless Mac application's "Check for updates" feature, as it takes care of all the process automatically, is very easy to integrate and is secure.
8
+
9
+ In a nutshell, when users click "Check for updates..." in an app, Sparkle checks for 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.
10
+
11
+ While it's easy to use Sparkle with RubyMotion without motion-sparkle, using it makes it even easier. The gem takes care of the Sparkle framework integration, simplifies its configuration and then automates the preparation of a release, creating the ZIP file, XML and release notes for you.
12
+
13
+ After building your app for release and running `rake sparkle:package`, all you need to do is upload 3 files to an URL you specified in the Rakefile and your users will be able to get the new release.
14
+
15
+ ## Installation
16
+
17
+ In your project's Gemfile, add:
18
+
19
+ `gem motion-sparkle`
20
+
21
+ and then run `$ bundle install`
22
+
23
+ ## Settings configuration
24
+
25
+ Configure Sparkle in your `Rakefile` using motion-sparkle's DSL:
26
+
27
+ # Rakefile
28
+
29
+ app.sparkle do
30
+ # Required setting
31
+ release :base_url, 'http://example.com/releases/current' # `current` is a folder, don't use a trailing slash
32
+
33
+ # Recommended setting
34
+ # This will set both your `app.version` and `app.short_version` to the same value
35
+ # It's fine not to use it, just remember to set both as Sparkle needs them
36
+ release :version, '1.0'
37
+
38
+ # Optional settings and their default values
39
+ release :feed_filename, 'releases.xml'
40
+ release :notes_filename, 'release_notes.html'
41
+ release :package_filename, "#{app.name}.zip"
42
+ release :public_key, 'dsa_pub.pem'
43
+
44
+ end
45
+
46
+ To complete the configuration, run
47
+
48
+ $ rake sparkle:setup
49
+
50
+
51
+ If everything is OK, you should be informed that it's time to generate or configure your certificates.
52
+
53
+ ## Certificate configuration
54
+
55
+ For security, Sparkle allows you to sign your releases with a private certificate before distribution. In a few words: 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.
56
+
57
+ motion-sparkle makes it very easy to handle this. In fact, after the first setup, it becomes completely transparent to you and is all handled when you run `rake sparkle:package`.
58
+
59
+ You have two options: have Sparkle generate the certificates for you, or follow the instructions.
60
+
61
+ ### Generate new certificates
62
+
63
+ $ rake sparkle:setup_certificates
64
+
65
+
66
+ ### Use your existing certificates
67
+
68
+ By default, your certificates need to be placed in the following directories:
69
+
70
+
71
+ ./resources/dsa_pub.pem # public certificate
72
+ ./sparkle/config/dsa_priv.pem # private certificate
73
+
74
+
75
+ ### Notes about the public certificate
76
+
77
+ 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'`.
78
+
79
+ ### Notes about the private certificate
80
+
81
+ 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
82
+
83
+ ### Warning regarding your private certificate
84
+
85
+ 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.
86
+
87
+ Tips:
88
+ * add it go your .gitignore or equivalent
89
+ * make a backup of it
90
+
91
+ ### Run `rake:setup` at any moment to make sure your config is OK
92
+
93
+ When all is good, move forward. If you need help, you can always open an issue on Github.
94
+
95
+ ## Adding "Check for updates..." to the menu
96
+
97
+ Sparkle makes it incredibly easy to add a "Check for updates" feature to your app.
98
+
99
+ The `SUUpdater` class has a shared updater instance that you can use as a `target` for the different actions Sparkle provides. To launch the typical Sparkle flow, you need only to call the `checkForUpdates:` action.
100
+
101
+ So, running `SUUpdater.new.checkForUpdates` will launch the "Check for updates" flow.
102
+
103
+ Here's an example based on the Rubymotion default OS X app example, "Hello".
104
+
105
+ 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.
106
+
107
+ In `menu.rb`, right below the line that adds the "Preferences" item:
108
+
109
+ sparkle = addItemWithTitle("Check for updates...", action: nil, keyEquivalent: '')
110
+ sparkle.setTarget SUUpdater.new
111
+ sparkle.setAction 'checkForUpdates:'
112
+
113
+ Once you build your application, you should be able to see a "Check for updates..." item in the Application menu. It should work but would still produce an error at this point. Keep going to make it all work.
114
+
115
+ Check out Sparkle's documentation for more details and further ways to customize the experience.
116
+
117
+ ## First publication
118
+
119
+ Before you build, make sure you've set your `:base_url` to a destination where you can upload/download your files. 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`.
120
+
121
+ Run the setup command
122
+
123
+ $ rake sparkle:setup
124
+
125
+ If you're ready to go, you should probably add
126
+
127
+ $ rake sparkle:package
128
+
129
+ 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.
130
+
131
+ 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.
132
+
133
+ ## Releasing updates
134
+
135
+ Once users are running a Sparkle-powered version, all you have to do is put updated versions of those files at the same location.
136
+
137
+ To do so, follow the same steps every time:
138
+
139
+ ### 1. Bump the version
140
+
141
+ # In your Rakefile
142
+
143
+ sparkle.app do
144
+ release :version, '1.1' # bump the versions
145
+ end
146
+
147
+ ### 2. Build your app for release
148
+
149
+ `$ rake build:release`
150
+
151
+ ### 3. Update your Release Notes
152
+
153
+ 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.
154
+
155
+ 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.
156
+
157
+ ### 4. Package the release
158
+
159
+ Run the `sparkle:package` task and you'll be one step away from distribution.
160
+
161
+ $ rake sparkle:package
162
+
163
+ ### 5. Upload
164
+
165
+ 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.
166
+
167
+ Sparkle for the win.
168
+
169
+ ## Help, Limitations, Troubleshooting and Testing
170
+
171
+ If you need further help, please open an Issue on Github.
172
+
173
+ Limitations:
174
+
175
+ * Only tested with Ruby 1.9.3-p448
176
+ * Only works with ZIP files
177
+ * Only works with :release build target
178
+ * The Sparkle framework is horrendously copied multiple times
179
+
180
+ To further troubleshoot your case, you clone/fork the repo and go through the tests and the code.
181
+
182
+ 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.
183
+
184
+ Test coverage currently only extends to configuration and certificate generation checking.
185
+
186
+ ## Contributing
187
+
188
+ Wanted features:
189
+
190
+ - [ ] Copy the Sparkle.framework in a more sensible way, ideally through Cocoapods (it's currently copied multiple times because rubygems won't handle symlinks)
191
+ - [ ] Configurable build targets (only :release supported currently)
192
+ - [ ] Have more than ZIP as a packaging option, with DMG a priority (see choctop gem)
193
+ - [ ] Automatic upload to S3 and via rsync/scp/sftp/ftp (see choctop gem)
194
+ - [ ] Textile / Markdown for release note templates
195
+ - [ ] Ruby 1.8.7, Ruby 1.9.2, Ruby 2.0 compatibility
196
+ - [ ] Better test coverage
197
+
198
+ ## Credits
199
+
200
+ Author: Alexandre L. Solleiro
201
+
202
+ * Follow me on Twitter - http://twitter.com/als,
203
+ * Fork my code on Github - http://github.com/webcracy,
204
+ * More info on my website - http://webcracy.org
205
+
206
+ Thanks: Authors and contributors of HipByte/motion-cocoapods, drnic/choctop gems and of course andymatuschak/Sparkle. Their code has made this easier.
data/Rakefile ADDED
@@ -0,0 +1,20 @@
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
@@ -0,0 +1,11 @@
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'
@@ -0,0 +1,106 @@
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 << "<?xml version=\"1.0\" encoding=\"utf-8\"?>\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
+ base_url = appcast.base_url
34
+ rss = REXML::Element.new 'rss'
35
+ rss.attributes['xmlns:atom'] = "http://www.w3.org/2005/Atom"
36
+ rss.attributes['xmlns:sparkle'] = "http://www.andymatuschak.org/xml-namespaces/sparkle"
37
+ rss.attributes['xmlns:version'] = "2.0"
38
+ rss.attributes['xmlns:dc'] = "http://purl.org/dc/elements/1.1/"
39
+ channel = rss.add_element 'channel'
40
+ channel.add_element('title').text = @config.name
41
+ channel.add_element('description').text = "#{@config.name} updates"
42
+ channel.add_element('link').text = @config.info_plist["SUFeedURL"]
43
+ channel.add_element('language').text = 'en'
44
+ channel.add_element('pubDate').text = Time.now.strftime("%a, %d %b %Y %H:%M:%S %z")
45
+ atom_link = channel.add_element('atom:link')
46
+ atom_link.attributes['href'] = @config.info_plist["SUFeedURL"]
47
+ atom_link.attributes['rel'] = 'self'
48
+ atom_link.attributes['type'] = "application/rss+xml"
49
+ item = channel.add_element 'item'
50
+ item.add_element('title').text = "#{@config.name} #{@config.version}"
51
+ item.add_element('pubDate').text = Time.now.strftime("%a, %d %b %Y %H:%M:%S %z")
52
+ guid = item.add_element('guid')
53
+ guid.text = "#{@config.name}-#{@config.version}"
54
+ guid.attributes['isPermaLink'] = false
55
+ item.add_element('sparkle:releaseNotesLink').text = "#{base_url}/#{appcast.notes_filename}"
56
+ enclosure = item.add_element('enclosure')
57
+ enclosure.attributes['url'] = "#{base_url}/#{@package_file}"
58
+ enclosure.attributes['length'] = "#{@package_size}"
59
+ enclosure.attributes['type'] = "application/octet-stream"
60
+ enclosure.attributes['sparkle:version'] = @config.version
61
+ enclosure.attributes['sparkle:dsaSignature'] = @package_signature
62
+ rss
63
+ end
64
+
65
+ def release_notes_template_path
66
+ sparkle_config_path + "release_notes.template.erb"
67
+ end
68
+
69
+ def release_notes_content_path
70
+ sparkle_config_path + "release_notes.content.html"
71
+ end
72
+
73
+ def release_notes_path
74
+ sparkle_release_path + appcast.notes_filename.to_s
75
+ end
76
+
77
+ def release_notes_content
78
+ if File.exist?(release_notes_content_path)
79
+ File.read(release_notes_content_path)
80
+ else
81
+ App.fail "Missing #{release_notes_content_path}"
82
+ end
83
+ end
84
+
85
+ def release_notes_html
86
+ release_notes_content
87
+ end
88
+
89
+
90
+ class Appcast
91
+ attr_accessor :base_url, :feed_filename, :notes_filename, :package_filename
92
+
93
+ def initialize
94
+ @feed_filename = 'releases.xml'
95
+ @notes_filename = 'release_notes.html'
96
+ @package_filename = nil
97
+ @base_url = nil
98
+ end
99
+
100
+ def full_feed_url
101
+ "#{base_url}/#{feed_filename}"
102
+ end
103
+ end
104
+
105
+ end
106
+ end
@@ -0,0 +1,22 @@
1
+ <h1>Your app - version x.yz</h1>
2
+
3
+ <h2>The greatest update ever</h2>
4
+
5
+ <dl>
6
+ <dt>An interface to drool for</dt>
7
+ <dd>I won't say too much (wouldn't want to spoil the surprise)</dd>
8
+ <dt>Record-breaking performance</dt>
9
+ <dd>
10
+ <p>
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
+ </p>
13
+ <p>
14
+ <strong>What for?</strong>
15
+ <br>
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
+ </p>
18
+ <p>
19
+ Just do the same for your app now :)
20
+ </p>
21
+ </dd>
22
+ </dl>
@@ -0,0 +1,19 @@
1
+ <html>
2
+ <head>
3
+ <title>Release Notes for <%= @config.name %></title>
4
+ <style>
5
+ * { font-family: "Helvetica Neue", "Helvetica", "Arial", "Sans";}
6
+ h1 { background-color: #ABABFF; padding: 10px;}
7
+ h1 span { font-size: 75%; font-weight: normal; float: right;}
8
+ dt { font-size: 105%; font-weight: bold; margin: 5px 0;}
9
+ dd { margin: 0; padding: 5px 0 0 5px; }
10
+ dd p {margin: 2px 0; padding: 0;}
11
+ </style>
12
+ </head>
13
+
14
+ <body>
15
+
16
+ <%= release_notes_html %>
17
+
18
+ </body>
19
+ </html>