├── Growl.framework ├── Growl ├── Headers ├── Resources └── Versions │ ├── A │ ├── Growl │ ├── Headers │ │ ├── Growl.h │ │ ├── GrowlApplicationBridge-Carbon.h │ │ ├── GrowlApplicationBridge.h │ │ └── GrowlDefines.h │ └── Resources │ │ └── Info.plist │ └── Current ├── README.md ├── Sparkle.framework ├── Headers ├── Resources ├── Sparkle └── Versions │ ├── A │ ├── Headers │ │ ├── SUAppcast.h │ │ ├── SUAppcastItem.h │ │ ├── SUUpdater.h │ │ ├── SUVersionComparisonProtocol.h │ │ └── Sparkle.h │ ├── Resources │ │ ├── Info.plist │ │ ├── License.txt │ │ ├── SUModelTranslation.plist │ │ ├── SUStatus.nib │ │ │ ├── classes.nib │ │ │ ├── info.nib │ │ │ └── keyedobjects.nib │ │ ├── de.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ │ ├── en.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ │ ├── es.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ │ ├── fr.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── Sparkle.strings │ │ │ └── fr.lproj │ │ ├── fr_CA.lproj │ │ ├── it.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ │ ├── nl.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ │ ├── relaunch │ │ ├── ru.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ │ ├── classes.nib │ │ │ │ ├── info.nib │ │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ │ └── sv.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── classes.nib │ │ │ ├── info.nib │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── classes.nib │ │ │ ├── info.nib │ │ │ └── keyedobjects.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ ├── classes.nib │ │ │ ├── info.nib │ │ │ └── keyedobjects.nib │ │ │ └── Sparkle.strings │ └── Sparkle │ └── Current ├── pushmenu-appcast.xml ├── pushmenu.icns ├── pushmenu.png ├── pushmenu.xcodeproj └── project.pbxproj ├── pushmenu ├── 3rd-party-licenses.txt ├── DDHotKey │ ├── DDHotKeyCenter.h │ └── DDHotKeyCenter.m ├── EMKeychain │ ├── EMKeychainItem.h │ ├── EMKeychainItem.m │ └── ReadMe.rtf ├── Growl Registration Ticket.growlRegDict ├── JSONKit │ ├── CHANGELOG.md │ ├── JSONKit.h │ ├── JSONKit.m │ └── README.md ├── SendtoiPhone.workflow │ └── Contents │ │ ├── Info.plist │ │ ├── QuickLook │ │ └── Thumbnail.png │ │ └── document.wflow ├── credits-tmpl.html ├── credits.html ├── dsa_pub.pem ├── en.lproj │ ├── Credits.rtf │ ├── InfoPlist.strings │ └── MainMenu.xib ├── license.txt ├── main.m ├── pushmenu-Info.plist ├── pushmenu-Prefix.pch ├── pushmenu.sdef ├── pushmenuAppDelegate.h ├── pushmenuAppDelegate.m ├── pushmenu_menu.png └── screenshot.png ├── pushmenuTests ├── en.lproj │ └── InfoPlist.strings ├── pushmenuTests-Info.plist ├── pushmenuTests.h └── pushmenuTests.m └── pushmenu_large.png /Growl.framework/Growl: -------------------------------------------------------------------------------- 1 | Versions/Current/Growl -------------------------------------------------------------------------------- /Growl.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Growl.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Growl.framework/Versions/A/Growl: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Growl.framework/Versions/A/Growl -------------------------------------------------------------------------------- /Growl.framework/Versions/A/Headers/Growl.h: -------------------------------------------------------------------------------- 1 | #include "GrowlDefines.h" 2 | 3 | #ifdef __OBJC__ 4 | # include "GrowlApplicationBridge.h" 5 | #endif 6 | #include "GrowlApplicationBridge-Carbon.h" 7 | -------------------------------------------------------------------------------- /Growl.framework/Versions/A/Headers/GrowlDefines.h: -------------------------------------------------------------------------------- 1 | // 2 | // GrowlDefines.h 3 | // 4 | 5 | #ifndef _GROWLDEFINES_H 6 | #define _GROWLDEFINES_H 7 | 8 | #ifdef __OBJC__ 9 | #define XSTR(x) (@x) 10 | #define STRING_TYPE NSString * 11 | #else 12 | #define XSTR CFSTR 13 | #define STRING_TYPE CFStringRef 14 | #endif 15 | 16 | /*! @header GrowlDefines.h 17 | * @abstract Defines all the notification keys. 18 | * @discussion Defines all the keys used for registration with Growl and for 19 | * Growl notifications. 20 | * 21 | * Most applications should use the functions or methods of Growl.framework 22 | * instead of posting notifications such as those described here. 23 | * @updated 2004-01-25 24 | */ 25 | 26 | // UserInfo Keys for Registration 27 | #pragma mark UserInfo Keys for Registration 28 | 29 | /*! @group Registration userInfo keys */ 30 | /* @abstract Keys for the userInfo dictionary of a GROWL_APP_REGISTRATION distributed notification. 31 | * @discussion The values of these keys describe the application and the 32 | * notifications it may post. 33 | * 34 | * Your application must register with Growl before it can post Growl 35 | * notifications (and have them not be ignored). However, as of Growl 0.6, 36 | * posting GROWL_APP_REGISTRATION notifications directly is no longer the 37 | * preferred way to register your application. Your application should instead 38 | * use Growl.framework's delegate system. 39 | * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for 40 | * more information. 41 | */ 42 | 43 | /*! @defined GROWL_APP_NAME 44 | * @abstract The name of your application. 45 | * @discussion The name of your application. This should remain stable between 46 | * different versions and incarnations of your application. 47 | * For example, "SurfWriter" is a good app name, whereas "SurfWriter 2.0" and 48 | * "SurfWriter Lite" are not. 49 | */ 50 | #define GROWL_APP_NAME XSTR("ApplicationName") 51 | /*! @defined GROWL_APP_ID 52 | * @abstract The bundle identifier of your application. 53 | * @discussion The bundle identifier of your application. This key should 54 | * be unique for your application while there may be several applications 55 | * with the same GROWL_APP_NAME. 56 | * This key is optional. 57 | */ 58 | #define GROWL_APP_ID XSTR("ApplicationId") 59 | /*! @defined GROWL_APP_ICON 60 | * @abstract The image data for your application's icon. 61 | * @discussion Image data representing your application's icon. This may be 62 | * superimposed on a notification icon as a badge, used as the notification 63 | * icon when a notification-specific icon is not supplied, or ignored 64 | * altogether, depending on the display. Must be in a format supported by 65 | * NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. 66 | * 67 | * Optional. Not supported by all display plugins. 68 | */ 69 | #define GROWL_APP_ICON XSTR("ApplicationIcon") 70 | /*! @defined GROWL_NOTIFICATIONS_DEFAULT 71 | * @abstract The array of notifications to turn on by default. 72 | * @discussion These are the names of the notifications that should be enabled 73 | * by default when your application registers for the first time. If your 74 | * application reregisters, Growl will look here for any new notification 75 | * names found in GROWL_NOTIFICATIONS_ALL, but ignore any others. 76 | */ 77 | #define GROWL_NOTIFICATIONS_DEFAULT XSTR("DefaultNotifications") 78 | /*! @defined GROWL_NOTIFICATIONS_ALL 79 | * @abstract The array of all notifications your application can send. 80 | * @discussion These are the names of all of the notifications that your 81 | * application may post. See GROWL_NOTIFICATION_NAME for a discussion of good 82 | * notification names. 83 | */ 84 | #define GROWL_NOTIFICATIONS_ALL XSTR("AllNotifications") 85 | /*! @defined GROWL_NOTIFICATIONS_HUMAN_READABLE_DESCRIPTIONS 86 | * @abstract A dictionary of human-readable names for your notifications. 87 | * @discussion By default, the Growl UI will display notifications by the names given in GROWL_NOTIFICATIONS_ALL 88 | * which correspond to the GROWL_NOTIFICATION_NAME. This dictionary specifies the human-readable name to display. 89 | * The keys of the dictionary are GROWL_NOTIFICATION_NAME strings; the objects are the human-readable versions. 90 | * For any GROWL_NOTIFICATION_NAME not specific in this dictionary, the GROWL_NOTIFICATION_NAME will be displayed. 91 | * 92 | * This key is optional. 93 | */ 94 | #define GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES XSTR("HumanReadableNames") 95 | /*! @defined GROWL_NOTIFICATIONS_DESCRIPTIONS 96 | * @abstract A dictionary of descriptions of _when_ each notification occurs 97 | * @discussion This is an NSDictionary whose keys are GROWL_NOTIFICATION_NAME strings and whose objects are 98 | * descriptions of _when_ each notification occurs, such as "You received a new mail message" or 99 | * "A file finished downloading". 100 | * 101 | * This key is optional. 102 | */ 103 | #define GROWL_NOTIFICATIONS_DESCRIPTIONS XSTR("NotificationDescriptions") 104 | 105 | /*! @defined GROWL_TICKET_VERSION 106 | * @abstract The version of your registration ticket. 107 | * @discussion Include this key in a ticket plist file that you put in your 108 | * application bundle for auto-discovery. The current ticket version is 1. 109 | */ 110 | #define GROWL_TICKET_VERSION XSTR("TicketVersion") 111 | // UserInfo Keys for Notifications 112 | #pragma mark UserInfo Keys for Notifications 113 | 114 | /*! @group Notification userInfo keys */ 115 | /* @abstract Keys for the userInfo dictionary of a GROWL_NOTIFICATION distributed notification. 116 | * @discussion The values of these keys describe the content of a Growl 117 | * notification. 118 | * 119 | * Not all of these keys are supported by all displays. Only the name, title, 120 | * and description of a notification are universal. Most of the built-in 121 | * displays do support all of these keys, and most other visual displays 122 | * probably will also. But, as of 0.6, the Log, MailMe, and Speech displays 123 | * support only textual data. 124 | */ 125 | 126 | /*! @defined GROWL_NOTIFICATION_NAME 127 | * @abstract The name of the notification. 128 | * @discussion The name of the notification. Note that if you do not define 129 | * GROWL_NOTIFICATIONS_HUMAN_READABLE_NAMES when registering your ticket originally this name 130 | * will the one displayed within the Growl preference pane and should be human-readable. 131 | */ 132 | #define GROWL_NOTIFICATION_NAME XSTR("NotificationName") 133 | /*! @defined GROWL_NOTIFICATION_TITLE 134 | * @abstract The title to display in the notification. 135 | * @discussion The title of the notification. Should be very brief. 136 | * The title usually says what happened, e.g. "Download complete". 137 | */ 138 | #define GROWL_NOTIFICATION_TITLE XSTR("NotificationTitle") 139 | /*! @defined GROWL_NOTIFICATION_DESCRIPTION 140 | * @abstract The description to display in the notification. 141 | * @discussion The description should be longer and more verbose than the title. 142 | * The description usually tells the subject of the action, 143 | * e.g. "Growl-0.6.dmg downloaded in 5.02 minutes". 144 | */ 145 | #define GROWL_NOTIFICATION_DESCRIPTION XSTR("NotificationDescription") 146 | /*! @defined GROWL_NOTIFICATION_ICON 147 | * @discussion Image data for the notification icon. Must be in a format 148 | * supported by NSImage, such as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. 149 | * 150 | * Optional. Not supported by all display plugins. 151 | */ 152 | #define GROWL_NOTIFICATION_ICON XSTR("NotificationIcon") 153 | /*! @defined GROWL_NOTIFICATION_APP_ICON 154 | * @discussion Image data for the application icon, in case GROWL_APP_ICON does 155 | * not apply for some reason. Must be in a format supported by NSImage, such 156 | * as TIFF, PNG, GIF, JPEG, BMP, PICT, or PDF. 157 | * 158 | * Optional. Not supported by all display plugins. 159 | */ 160 | #define GROWL_NOTIFICATION_APP_ICON XSTR("NotificationAppIcon") 161 | /*! @defined GROWL_NOTIFICATION_PRIORITY 162 | * @discussion The priority of the notification as an integer number from 163 | * -2 to +2 (+2 being highest). 164 | * 165 | * Optional. Not supported by all display plugins. 166 | */ 167 | #define GROWL_NOTIFICATION_PRIORITY XSTR("NotificationPriority") 168 | /*! @defined GROWL_NOTIFICATION_STICKY 169 | * @discussion A Boolean number controlling whether the notification is sticky. 170 | * 171 | * Optional. Not supported by all display plugins. 172 | */ 173 | #define GROWL_NOTIFICATION_STICKY XSTR("NotificationSticky") 174 | /*! @defined GROWL_NOTIFICATION_CLICK_CONTEXT 175 | * @abstract Identifies which notification was clicked. 176 | * @discussion An identifier for the notification for clicking purposes. 177 | * 178 | * This will be passed back to the application when the notification is 179 | * clicked. It must be plist-encodable (a data, dictionary, array, number, or 180 | * string object), and it should be unique for each notification you post. 181 | * A good click context would be a UUID string returned by NSProcessInfo or 182 | * CFUUID. 183 | * 184 | * Optional. Not supported by all display plugins. 185 | */ 186 | #define GROWL_NOTIFICATION_CLICK_CONTEXT XSTR("NotificationClickContext") 187 | 188 | /*! @defined GROWL_DISPLAY_PLUGIN 189 | * @discussion The name of a display plugin which should be used for this notification. 190 | * Optional. If this key is not set or the specified display plugin does not 191 | * exist, the display plugin stored in the application ticket is used. This key 192 | * allows applications to use different default display plugins for their 193 | * notifications. The user can still override those settings in the preference 194 | * pane. 195 | */ 196 | #define GROWL_DISPLAY_PLUGIN XSTR("NotificationDisplayPlugin") 197 | 198 | /*! @defined GROWL_NOTIFICATION_IDENTIFIER 199 | * @abstract An identifier for the notification for coalescing purposes. 200 | * Notifications with the same identifier fall into the same class; only 201 | * the last notification of a class is displayed on the screen. If a 202 | * notification of the same class is currently being displayed, it is 203 | * replaced by this notification. 204 | * 205 | * Optional. Not supported by all display plugins. 206 | */ 207 | #define GROWL_NOTIFICATION_IDENTIFIER XSTR("GrowlNotificationIdentifier") 208 | 209 | /*! @defined GROWL_APP_PID 210 | * @abstract The process identifier of the process which sends this 211 | * notification. If this field is set, the application will only receive 212 | * clicked and timed out notifications which originate from this process. 213 | * 214 | * Optional. 215 | */ 216 | #define GROWL_APP_PID XSTR("ApplicationPID") 217 | 218 | /*! @defined GROWL_NOTIFICATION_PROGRESS 219 | * @abstract If this key is set, it should contain a double value wrapped 220 | * in a NSNumber which describes some sort of progress (from 0.0 to 100.0). 221 | * If this is key is not set, no progress bar is shown. 222 | * 223 | * Optional. Not supported by all display plugins. 224 | */ 225 | #define GROWL_NOTIFICATION_PROGRESS XSTR("NotificationProgress") 226 | 227 | // Notifications 228 | #pragma mark Notifications 229 | 230 | /*! @group Notification names */ 231 | /* @abstract Names of distributed notifications used by Growl. 232 | * @discussion These are notifications used by applications (directly or 233 | * indirectly) to interact with Growl, and by Growl for interaction between 234 | * its components. 235 | * 236 | * Most of these should no longer be used in Growl 0.6 and later, in favor of 237 | * Growl.framework's GrowlApplicationBridge APIs. 238 | */ 239 | 240 | /*! @defined GROWL_APP_REGISTRATION 241 | * @abstract The distributed notification for registering your application. 242 | * @discussion This is the name of the distributed notification that can be 243 | * used to register applications with Growl. 244 | * 245 | * The userInfo dictionary for this notification can contain these keys: 246 | * 252 | * 253 | * No longer recommended as of Growl 0.6. An alternate method of registering 254 | * is to use Growl.framework's delegate system. 255 | * See +[GrowlApplicationBridge setGrowlDelegate:] or Growl_SetDelegate for 256 | * more information. 257 | */ 258 | #define GROWL_APP_REGISTRATION XSTR("GrowlApplicationRegistrationNotification") 259 | /*! @defined GROWL_APP_REGISTRATION_CONF 260 | * @abstract The distributed notification for confirming registration. 261 | * @discussion The name of the distributed notification sent to confirm the 262 | * registration. Used by the Growl preference pane. Your application probably 263 | * does not need to use this notification. 264 | */ 265 | #define GROWL_APP_REGISTRATION_CONF XSTR("GrowlApplicationRegistrationConfirmationNotification") 266 | /*! @defined GROWL_NOTIFICATION 267 | * @abstract The distributed notification for Growl notifications. 268 | * @discussion This is what it all comes down to. This is the name of the 269 | * distributed notification that your application posts to actually send a 270 | * Growl notification. 271 | * 272 | * The userInfo dictionary for this notification can contain these keys: 273 | * 284 | * 285 | * No longer recommended as of Growl 0.6. Three alternate methods of posting 286 | * notifications are +[GrowlApplicationBridge notifyWithTitle:description:notificationName:iconData:priority:isSticky:clickContext:], 287 | * Growl_NotifyWithTitleDescriptionNameIconPriorityStickyClickContext, and 288 | * Growl_PostNotification. 289 | */ 290 | #define GROWL_NOTIFICATION XSTR("GrowlNotification") 291 | /*! @defined GROWL_SHUTDOWN 292 | * @abstract The distributed notification name that tells Growl to shutdown. 293 | * @discussion The Growl preference pane posts this notification when the 294 | * "Stop Growl" button is clicked. 295 | */ 296 | #define GROWL_SHUTDOWN XSTR("GrowlShutdown") 297 | /*! @defined GROWL_PING 298 | * @abstract A distributed notification to check whether Growl is running. 299 | * @discussion This is used by the Growl preference pane. If it receives a 300 | * GROWL_PONG, the preference pane takes this to mean that Growl is running. 301 | */ 302 | #define GROWL_PING XSTR("Honey, Mind Taking Out The Trash") 303 | /*! @defined GROWL_PONG 304 | * @abstract The distributed notification sent in reply to GROWL_PING. 305 | * @discussion GrowlHelperApp posts this in reply to GROWL_PING. 306 | */ 307 | #define GROWL_PONG XSTR("What Do You Want From Me, Woman") 308 | /*! @defined GROWL_IS_READY 309 | * @abstract The distributed notification sent when Growl starts up. 310 | * @discussion GrowlHelperApp posts this when it has begin listening on all of 311 | * its sources for new notifications. GrowlApplicationBridge (in 312 | * Growl.framework), upon receiving this notification, reregisters using the 313 | * registration dictionary supplied by its delegate. 314 | */ 315 | #define GROWL_IS_READY XSTR("Lend Me Some Sugar; I Am Your Neighbor!") 316 | /*! @defined GROWL_NOTIFICATION_CLICKED 317 | * @abstract The distributed notification sent when a supported notification is clicked. 318 | * @discussion When a Growl notification with a click context is clicked on by 319 | * the user, Growl posts this distributed notification. 320 | * The GrowlApplicationBridge responds to this notification by calling a 321 | * callback in its delegate. 322 | */ 323 | #define GROWL_NOTIFICATION_CLICKED XSTR("GrowlClicked!") 324 | #define GROWL_NOTIFICATION_TIMED_OUT XSTR("GrowlTimedOut!") 325 | 326 | /*! @group Other symbols */ 327 | /* Symbols which don't fit into any of the other categories. */ 328 | 329 | /*! @defined GROWL_KEY_CLICKED_CONTEXT 330 | * @abstract Used internally as the key for the clickedContext passed over DNC. 331 | * @discussion This key is used in GROWL_NOTIFICATION_CLICKED, and contains the 332 | * click context that was supplied in the original notification. 333 | */ 334 | #define GROWL_KEY_CLICKED_CONTEXT XSTR("ClickedContext") 335 | /*! @defined GROWL_REG_DICT_EXTENSION 336 | * @abstract The filename extension for registration dictionaries. 337 | * @discussion The GrowlApplicationBridge in Growl.framework registers with 338 | * Growl by creating a file with the extension of .(GROWL_REG_DICT_EXTENSION) 339 | * and opening it in the GrowlHelperApp. This happens whether or not Growl is 340 | * running; if it was stopped, it quits immediately without listening for 341 | * notifications. 342 | */ 343 | #define GROWL_REG_DICT_EXTENSION XSTR("growlRegDict") 344 | 345 | 346 | #define GROWL_POSITION_PREFERENCE_KEY @"GrowlSelectedPosition" 347 | 348 | #endif //ndef _GROWLDEFINES_H 349 | -------------------------------------------------------------------------------- /Growl.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 10J869 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | Growl 11 | CFBundleIdentifier 12 | com.growl.growlframework 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.2.2 19 | CFBundleSignature 20 | GRRR 21 | CFBundleVersion 22 | 1.2.2 23 | DTCompiler 24 | 4.0 25 | DTPlatformBuild 26 | 10M2518 27 | DTPlatformVersion 28 | PG 29 | DTSDKBuild 30 | 9L31a 31 | DTSDKName 32 | macosx10.5 33 | DTXcode 34 | 0400 35 | DTXcodeBuild 36 | 10M2518 37 | NSPrincipalClass 38 | GrowlApplicationBridge 39 | 40 | 41 | -------------------------------------------------------------------------------- /Growl.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | pushmenu 2 | ============= 3 | 4 | Push notifications from your Mac to your iOS device via Prowl or Boxcar2. 5 | 6 | pushmenu is a small menu bar application that sends the content of you clipboard as 7 | push notification to your iOS device. You need to have at least one of the above push message 8 | services installed on your device. 9 | 10 | Features: 11 | 12 | * Pushes clipboard content 13 | * Provides system service to push any selected text without copying to the clipboard first 14 | * Keyboard shortcut 15 | * AppleScript support (e.g. for Automator, Terminal) 16 | * Credentials are stored in system keychain 17 | * Automatic updates via Sparkle 18 | * Growl support 19 | 20 | 21 | ![pushmenu](https://github.com/kalcher/pushmenu/raw/master/pushmenu/screenshot.png) 22 | 23 | 24 | AppleScript 25 | ------------ 26 | The AppleScript interface to pushmenu currently consists of one command with one parameter: 27 | 28 | *sendmessage text : a text parameter passed to pushmenu* 29 | 30 | The message is pushed out to all active services. 31 | 32 | #### Example (push.scpt): 33 | 34 | on run {input} 35 | tell application "pushmenu" 36 | sendmessage input 37 | end tell 38 | end run 39 | 40 | Terminal 41 | ----------- 42 | The AppleScript interface can also be used to provide terminal access to pushmenu. You need to have the above script (push.scpt) compiled and saved. 43 | 44 | #### Example: 45 | Run in Terminal: 46 | 47 | osascript /path/to/push.scpt "Hello World" 48 | 49 | The script can be compiled with the AppleScript-Editor or also from Terminal 50 | 51 | osacompile -e"on run {input}" -e"tell application \"pushmenu\"" -e"sendmessage input" -e"end tell" -e"end run" -o push.scpt 52 | 53 | License 54 | ----------- 55 | 56 | Copyright (c) 2011-2014, Sebastian Kalcher. All rights reserved. 57 | 58 | Redistribution and use in source and binary forms, with or without 59 | modification, are permitted provided that the following conditions are met: 60 | 61 | * Redistributions of source code must retain the above copyright 62 | notice, this list of conditions and the following disclaimer. 63 | * Redistributions in binary form must reproduce the above copyright 64 | notice, this list of conditions and the following disclaimer in the 65 | documentation and/or other materials provided with the distribution. 66 | * Neither the name of Sebastian Kalcher nor the names of the contributors 67 | may be used to endorse or promote products derived from this software 68 | without specific prior written permission. 69 | 70 | THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS ''AS IS'' AND ANY 71 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 72 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 73 | DISCLAIMED. IN NO EVENT SHALL SEBASTIAN KALCHER BE LIABLE FOR ANY 74 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 75 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 76 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 77 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 78 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 79 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 80 | -------------------------------------------------------------------------------- /Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /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 | NSArray *items; 15 | NSString *userAgentString; 16 | id delegate; 17 | NSMutableData *incrementalData; 18 | } 19 | 20 | - (void)fetchAppcastFromURL:(NSURL *)url; 21 | - (void)setDelegate:delegate; 22 | - (void)setUserAgentString:(NSString *)userAgentString; 23 | 24 | - (NSArray *)items; 25 | 26 | @end 27 | 28 | @interface NSObject (SUAppcastDelegate) 29 | - (void)appcastDidFinishLoading:(SUAppcast *)appcast; 30 | - (void)appcast:(SUAppcast *)appcast failedToLoadWithError:(NSError *)error; 31 | @end 32 | 33 | #endif 34 | -------------------------------------------------------------------------------- /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 | NSString *title; 14 | NSDate *date; 15 | NSString *itemDescription; 16 | 17 | NSURL *releaseNotesURL; 18 | 19 | NSString *DSASignature; 20 | NSString *minimumSystemVersion; 21 | 22 | NSURL *fileURL; 23 | NSString *versionString; 24 | NSString *displayVersionString; 25 | 26 | NSDictionary *propertiesDictionary; 27 | } 28 | 29 | // Initializes with data from a dictionary provided by the RSS class. 30 | - initWithDictionary:(NSDictionary *)dict; 31 | 32 | - (NSString *)title; 33 | - (NSString *)versionString; 34 | - (NSString *)displayVersionString; 35 | - (NSDate *)date; 36 | - (NSString *)itemDescription; 37 | - (NSURL *)releaseNotesURL; 38 | - (NSURL *)fileURL; 39 | - (NSString *)DSASignature; 40 | - (NSString *)minimumSystemVersion; 41 | 42 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 43 | - (NSDictionary *)propertiesDictionary; 44 | 45 | @end 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /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 13 | 14 | @class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; 15 | @interface SUUpdater : NSObject { 16 | NSTimer *checkTimer; 17 | SUUpdateDriver *driver; 18 | 19 | SUHost *host; 20 | IBOutlet id delegate; 21 | } 22 | 23 | + (SUUpdater *)sharedUpdater; 24 | + (SUUpdater *)updaterForBundle:(NSBundle *)bundle; 25 | - (NSBundle *)hostBundle; 26 | 27 | - (void)setDelegate:(id)delegate; 28 | - delegate; 29 | 30 | - (void)setAutomaticallyChecksForUpdates:(BOOL)automaticallyChecks; 31 | - (BOOL)automaticallyChecksForUpdates; 32 | 33 | - (void)setUpdateCheckInterval:(NSTimeInterval)interval; 34 | - (NSTimeInterval)updateCheckInterval; 35 | 36 | - (void)setFeedURL:(NSURL *)feedURL; 37 | - (NSURL *)feedURL; 38 | 39 | - (void)setSendsSystemProfile:(BOOL)sendsSystemProfile; 40 | - (BOOL)sendsSystemProfile; 41 | 42 | - (void)setAutomaticallyDownloadsUpdates:(BOOL)automaticallyDownloadsUpdates; 43 | - (BOOL)automaticallyDownloadsUpdates; 44 | 45 | // This IBAction is meant for a main menu item. Hook up any menu item to this action, 46 | // and Sparkle will check for updates and report back its findings verbosely. 47 | - (IBAction)checkForUpdates:sender; 48 | 49 | // This kicks off an update meant to be programmatically initiated. That is, it will display no UI unless it actually finds an update, 50 | // in which case it proceeds as usual. If the fully automated updating is turned on, however, this will invoke that behavior, and if an 51 | // update is found, it will be downloaded and prepped for installation. 52 | - (void)checkForUpdatesInBackground; 53 | 54 | // Date of last update check. Returns null if no check has been performed. 55 | - (NSDate*)lastUpdateCheckDate; 56 | 57 | // This begins a "probing" check for updates which will not actually offer to update to that version. The delegate methods, though, 58 | // (up to updater:didFindValidUpdate: and updaterDidNotFindUpdate:), are called, so you can use that information in your UI. 59 | - (void)checkForUpdateInformation; 60 | 61 | // 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. 62 | - (void)resetUpdateCycle; 63 | 64 | - (BOOL)updateInProgress; 65 | @end 66 | 67 | @interface NSObject (SUUpdaterDelegateInformalProtocol) 68 | // 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. 69 | - (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; 70 | 71 | // Use this to override the default behavior for Sparkle prompting the user about automatic update checks. 72 | - (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)bundle; 73 | 74 | // Implement this if you want to do some special handling with the appcast once it finishes loading. 75 | - (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; 76 | 77 | // If you're using special logic or extensions in your appcast, implement this to use your own logic for finding 78 | // a valid update, if any, in the given appcast. 79 | - (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)bundle; 80 | 81 | // Sent when a valid update is found by the update driver. 82 | - (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)update; 83 | 84 | // Sent when a valid update is not found. 85 | - (void)updaterDidNotFindUpdate:(SUUpdater *)update; 86 | 87 | // Sent immediately before installing the specified update. 88 | - (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)update; 89 | 90 | // Return YES to delay the relaunch until you do some processing; invoke the given NSInvocation to continue. 91 | - (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)update untilInvoking:(NSInvocation *)invocation; 92 | 93 | // Called immediately before relaunching. 94 | - (void)updaterWillRelaunchApplication:(SUUpdater *)updater; 95 | 96 | // This method allows you to provide a custom version comparator. 97 | // If you don't implement this method or return nil, the standard version comparator will be used. 98 | - (id )versionComparatorForUpdater:(SUUpdater *)updater; 99 | 100 | // Returns the path which is used to relaunch the client after the update is installed. By default, the path of the host bundle. 101 | - (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; 102 | 103 | @end 104 | 105 | // Define some minimum intervals to avoid DOS-like checking attacks. These are in seconds. 106 | #ifdef DEBUG 107 | #define SU_MIN_CHECK_INTERVAL 60 108 | #else 109 | #define SU_MIN_CHECK_INTERVAL 60*60 110 | #endif 111 | 112 | #ifdef DEBUG 113 | #define SU_DEFAULT_CHECK_INTERVAL 60 114 | #else 115 | #define SU_DEFAULT_CHECK_INTERVAL 60*60*24 116 | #endif 117 | 118 | #endif 119 | -------------------------------------------------------------------------------- /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 | /*! 13 | @protocol 14 | @abstract Implement this protocol to provide version comparison facilities for Sparkle. 15 | */ 16 | @protocol SUVersionComparison 17 | 18 | /*! 19 | @method 20 | @abstract An abstract method to compare two version strings. 21 | @discussion Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, and NSOrderedSame if they are equivalent. 22 | */ 23 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 24 | 25 | @end 26 | 27 | #endif 28 | -------------------------------------------------------------------------------- /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 (unless 13 | // there are name-space collisions) so we can list all of them to start with: 14 | 15 | #import 16 | 17 | #import 18 | #import 19 | #import 20 | 21 | #endif 22 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | Sparkle 9 | CFBundleIdentifier 10 | org.andymatuschak.Sparkle 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | Sparkle 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.5 Beta 6 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 313 23 | 24 | 25 | -------------------------------------------------------------------------------- /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. -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ADP2,1 6 | Developer Transition Kit 7 | MacBook1,1 8 | MacBook (Core Duo) 9 | MacBook2,1 10 | MacBook (Core 2 Duo) 11 | MacBook4,1 12 | MacBook (Core 2 Duo Feb 2008) 13 | MacBookAir1,1 14 | MacBook Air (January 2008) 15 | MacBookPro1,1 16 | MacBook Pro Core Duo (15-inch) 17 | MacBookPro1,2 18 | MacBook Pro Core Duo (17-inch) 19 | MacBookPro2,1 20 | MacBook Pro Core 2 Duo (17-inch) 21 | MacBookPro2,2 22 | MacBook Pro Core 2 Duo (15-inch) 23 | MacBookPro3,1 24 | MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) 25 | MacBookPro3,2 26 | MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) 27 | MacBookPro4,1 28 | MacBook Pro (Core 2 Duo Feb 2008) 29 | MacPro1,1 30 | Mac Pro (four-core) 31 | MacPro2,1 32 | Mac Pro (eight-core) 33 | MacPro3,1 34 | Mac Pro (January 2008 4- or 8- core "Harpertown") 35 | Macmini1,1 36 | Mac Mini (Core Solo/Duo) 37 | PowerBook1,1 38 | PowerBook G3 39 | PowerBook2,1 40 | iBook G3 41 | PowerBook2,2 42 | iBook G3 (FireWire) 43 | PowerBook2,3 44 | iBook G3 45 | PowerBook2,4 46 | iBook G3 47 | PowerBook3,1 48 | PowerBook G3 (FireWire) 49 | PowerBook3,2 50 | PowerBook G4 51 | PowerBook3,3 52 | PowerBook G4 (Gigabit Ethernet) 53 | PowerBook3,4 54 | PowerBook G4 (DVI) 55 | PowerBook3,5 56 | PowerBook G4 (1GHz / 867MHz) 57 | PowerBook4,1 58 | iBook G3 (Dual USB, Late 2001) 59 | PowerBook4,2 60 | iBook G3 (16MB VRAM) 61 | PowerBook4,3 62 | iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) 63 | PowerBook5,1 64 | PowerBook G4 (17 inch) 65 | PowerBook5,2 66 | PowerBook G4 (15 inch FW 800) 67 | PowerBook5,3 68 | PowerBook G4 (17-inch 1.33GHz) 69 | PowerBook5,4 70 | PowerBook G4 (15 inch 1.5/1.33GHz) 71 | PowerBook5,5 72 | PowerBook G4 (17-inch 1.5GHz) 73 | PowerBook5,6 74 | PowerBook G4 (15 inch 1.67GHz/1.5GHz) 75 | PowerBook5,7 76 | PowerBook G4 (17-inch 1.67GHz) 77 | PowerBook5,8 78 | PowerBook G4 (Double layer SD, 15 inch) 79 | PowerBook5,9 80 | PowerBook G4 (Double layer SD, 17 inch) 81 | PowerBook6,1 82 | PowerBook G4 (12 inch) 83 | PowerBook6,2 84 | PowerBook G4 (12 inch, DVI) 85 | PowerBook6,3 86 | iBook G4 87 | PowerBook6,4 88 | PowerBook G4 (12 inch 1.33GHz) 89 | PowerBook6,5 90 | iBook G4 (Early-Late 2004) 91 | PowerBook6,7 92 | iBook G4 (Mid 2005) 93 | PowerBook6,8 94 | PowerBook G4 (12 inch 1.5GHz) 95 | PowerMac1,1 96 | Power Macintosh G3 (Blue & White) 97 | PowerMac1,2 98 | Power Macintosh G4 (PCI Graphics) 99 | PowerMac10,1 100 | Mac Mini G4 101 | PowerMac10,2 102 | Mac Mini (Late 2005) 103 | PowerMac11,2 104 | Power Macintosh G5 (Late 2005) 105 | PowerMac12,1 106 | iMac G5 (iSight) 107 | PowerMac2,1 108 | iMac G3 (Slot-loading CD-ROM) 109 | PowerMac2,2 110 | iMac G3 (Summer 2000) 111 | PowerMac3,1 112 | Power Macintosh G4 (AGP Graphics) 113 | PowerMac3,2 114 | Power Macintosh G4 (AGP Graphics) 115 | PowerMac3,3 116 | Power Macintosh G4 (Gigabit Ethernet) 117 | PowerMac3,4 118 | Power Macintosh G4 (Digital Audio) 119 | PowerMac3,5 120 | Power Macintosh G4 (Quick Silver) 121 | PowerMac3,6 122 | Power Macintosh G4 (Mirrored Drive Door) 123 | PowerMac4,1 124 | iMac G3 (Early/Summer 2001) 125 | PowerMac4,2 126 | iMac G4 (Flat Panel) 127 | PowerMac4,4 128 | eMac 129 | PowerMac4,5 130 | iMac G4 (17-inch Flat Panel) 131 | PowerMac5,1 132 | Power Macintosh G4 Cube 133 | PowerMac6,1 134 | iMac G4 (USB 2.0) 135 | PowerMac6,3 136 | iMac G4 (20-inch Flat Panel) 137 | PowerMac6,4 138 | eMac (USB 2.0, 2005) 139 | PowerMac7,2 140 | Power Macintosh G5 141 | PowerMac7,3 142 | Power Macintosh G5 143 | PowerMac8,1 144 | iMac G5 145 | PowerMac8,2 146 | iMac G5 (Ambient Light Sensor) 147 | PowerMac9,1 148 | Power Macintosh G5 (Late 2005) 149 | RackMac1,1 150 | Xserve G4 151 | RackMac1,2 152 | Xserve G4 (slot-loading, cluster node) 153 | RackMac3,1 154 | Xserve G5 155 | Xserve1,1 156 | Xserve (Intel Xeon) 157 | Xserve2,1 158 | Xserve (January 2008 quad-core) 159 | iMac1,1 160 | iMac G3 (Rev A-D) 161 | iMac4,1 162 | iMac (Core Duo) 163 | iMac4,2 164 | iMac for Education (17-inch, Core Duo) 165 | iMac5,1 166 | iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) 167 | iMac5,2 168 | iMac (Core 2 Duo, 17 inch, Combo Drive) 169 | iMac6,1 170 | iMac (Core 2 Duo, 24 inch, SuperDrive) 171 | iMac8,1 172 | iMac (April 2008) 173 | 174 | 175 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/SUStatus.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | CLASS 25 | FirstResponder 26 | LANGUAGE 27 | ObjC 28 | SUPERCLASS 29 | NSObject 30 | 31 | 32 | CLASS 33 | NSObject 34 | LANGUAGE 35 | ObjC 36 | 37 | 38 | CLASS 39 | SUStatusController 40 | LANGUAGE 41 | ObjC 42 | OUTLETS 43 | 44 | actionButton 45 | NSButton 46 | progressBar 47 | NSProgressIndicator 48 | 49 | SUPERCLASS 50 | SUWindowController 51 | 52 | 53 | IBVersion 54 | 1 55 | 56 | 57 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/SUStatus.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/SUStatus.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 658 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9C7010 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 18 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 41 15 | 16 | IBSystem Version 17 | 10A96 18 | targetFramework 19 | IBCocoaFramework 20 | 21 | 22 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9D34 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr.lproj/fr.lproj: -------------------------------------------------------------------------------- 1 | /Users/andym/Development/Build Products/Release/Sparkle.framework/Resources/fr.lproj -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | /Users/andym/Development/Build Products/Release/Sparkle.framework/Resources/fr.lproj -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 667 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 5 14 | 15 | IBSystem Version 16 | 9D34 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | 6 12 | 13 | IBSystem Version 14 | 9D34 15 | targetFramework 16 | IBCocoaFramework 17 | 18 | 19 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 629 7 | IBOldestOS 8 | 5 9 | IBOpenObjects 10 | 11 | IBSystem Version 12 | 9E17 13 | targetFramework 14 | IBCocoaFramework 15 | 16 | 17 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/relaunch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/relaunch -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9E17 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | CLASS 17 | NSApplication 18 | LANGUAGE 19 | ObjC 20 | SUPERCLASS 21 | NSResponder 22 | 23 | 24 | ACTIONS 25 | 26 | installUpdate 27 | id 28 | remindMeLater 29 | id 30 | skipThisVersion 31 | id 32 | 33 | CLASS 34 | SUUpdateAlert 35 | LANGUAGE 36 | ObjC 37 | OUTLETS 38 | 39 | delegate 40 | id 41 | description 42 | NSTextField 43 | releaseNotesView 44 | WebView 45 | 46 | SUPERCLASS 47 | SUWindowController 48 | 49 | 50 | CLASS 51 | FirstResponder 52 | LANGUAGE 53 | ObjC 54 | SUPERCLASS 55 | NSObject 56 | 57 | 58 | CLASS 59 | NSObject 60 | LANGUAGE 61 | ObjC 62 | 63 | 64 | IBVersion 65 | 1 66 | 67 | 68 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 9E17 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | NSObject 10 | LANGUAGE 11 | ObjC 12 | 13 | 14 | CLASS 15 | SUWindowController 16 | LANGUAGE 17 | ObjC 18 | SUPERCLASS 19 | NSWindowController 20 | 21 | 22 | ACTIONS 23 | 24 | finishPrompt 25 | id 26 | toggleMoreInfo 27 | id 28 | 29 | CLASS 30 | SUUpdatePermissionPrompt 31 | LANGUAGE 32 | ObjC 33 | OUTLETS 34 | 35 | delegate 36 | id 37 | descriptionTextField 38 | NSTextField 39 | moreInfoButton 40 | NSButton 41 | moreInfoView 42 | NSView 43 | 44 | SUPERCLASS 45 | SUWindowController 46 | 47 | 48 | CLASS 49 | FirstResponder 50 | LANGUAGE 51 | ObjC 52 | SUPERCLASS 53 | NSObject 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | IBSystem Version 14 | 9E17 15 | targetFramework 16 | IBCocoaFramework 17 | 18 | 19 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | doNotInstall 19 | id 20 | installLater 21 | id 22 | installNow 23 | id 24 | 25 | CLASS 26 | SUAutomaticUpdateAlert 27 | LANGUAGE 28 | ObjC 29 | SUPERCLASS 30 | SUWindowController 31 | 32 | 33 | CLASS 34 | FirstResponder 35 | LANGUAGE 36 | ObjC 37 | SUPERCLASS 38 | NSObject 39 | 40 | 41 | CLASS 42 | NSObject 43 | LANGUAGE 44 | ObjC 45 | 46 | 47 | IBVersion 48 | 1 49 | 50 | 51 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/classes.nib: -------------------------------------------------------------------------------- 1 | { 2 | IBClasses = ( 3 | { 4 | CLASS = FirstResponder; 5 | LANGUAGE = ObjC; 6 | SUPERCLASS = NSObject; 7 | }, 8 | { 9 | CLASS = NSApplication; 10 | LANGUAGE = ObjC; 11 | SUPERCLASS = NSResponder; 12 | }, 13 | { 14 | CLASS = NSObject; 15 | LANGUAGE = ObjC; 16 | }, 17 | { 18 | ACTIONS = { 19 | installUpdate = id; 20 | remindMeLater = id; 21 | skipThisVersion = id; 22 | }; 23 | CLASS = SUUpdateAlert; 24 | LANGUAGE = ObjC; 25 | OUTLETS = { 26 | delegate = id; 27 | description = NSTextField; 28 | releaseNotesView = WebView; 29 | }; 30 | SUPERCLASS = SUWindowController; 31 | }, 32 | { 33 | CLASS = SUWindowController; 34 | LANGUAGE = ObjC; 35 | SUPERCLASS = NSWindowController; 36 | } 37 | ); 38 | IBVersion = 1; 39 | } -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBDocumentLocation 6 | 69 14 356 240 0 0 1280 778 7 | IBFramework Version 8 | 489.0 9 | IBLastKnownRelativeProjectPath 10 | ../Sparkle.xcodeproj 11 | IBOldestOS 12 | 5 13 | IBSystem Version 14 | 9D34 15 | targetFramework 16 | IBCocoaFramework 17 | 18 | 19 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/classes.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBClasses 6 | 7 | 8 | CLASS 9 | SUWindowController 10 | LANGUAGE 11 | ObjC 12 | SUPERCLASS 13 | NSWindowController 14 | 15 | 16 | ACTIONS 17 | 18 | finishPrompt 19 | id 20 | toggleMoreInfo 21 | id 22 | 23 | CLASS 24 | SUUpdatePermissionPrompt 25 | LANGUAGE 26 | ObjC 27 | OUTLETS 28 | 29 | delegate 30 | id 31 | descriptionTextField 32 | NSTextField 33 | moreInfoButton 34 | NSButton 35 | moreInfoView 36 | NSView 37 | 38 | SUPERCLASS 39 | SUWindowController 40 | 41 | 42 | CLASS 43 | FirstResponder 44 | LANGUAGE 45 | ObjC 46 | SUPERCLASS 47 | NSObject 48 | 49 | 50 | CLASS 51 | NSObject 52 | LANGUAGE 53 | ObjC 54 | 55 | 56 | IBVersion 57 | 1 58 | 59 | 60 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/info.nib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | IBFramework Version 6 | 670 7 | IBLastKnownRelativeProjectPath 8 | ../Sparkle.xcodeproj 9 | IBOldestOS 10 | 5 11 | IBOpenObjects 12 | 13 | 6 14 | 15 | IBSystem Version 16 | 10A96 17 | targetFramework 18 | IBCocoaFramework 19 | 20 | 21 | -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib/keyedobjects.nib -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /pushmenu-appcast.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | pushmenu Changelog 6 | https://raw.github.com/kalcher/pushmenu/master/pushmenu-appcast.xml 7 | pushmenu 8 | en 9 | 10 | Version 0.1 (initial release) 11 | 13 | 14 | 15 |

Initial release (0.1)

16 | 17 | 18 | 19 | 20 |

Push messages from the menu bar to your iPhone. Currently supports the 21 | following services: 22 |

27 |

28 | 29 | 30 | 31 | ]]>
32 | 33 | Mo 1 Aug 2011 23:01:05 CEST 34 | 37 |
38 |
39 |
-------------------------------------------------------------------------------- /pushmenu.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/pushmenu.icns -------------------------------------------------------------------------------- /pushmenu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/pushmenu.png -------------------------------------------------------------------------------- /pushmenu/3rd-party-licenses.txt: -------------------------------------------------------------------------------- 1 | JSONKit: 2 | 3 | // 4 | // JSONKit.m 5 | // http://github.com/johnezang/JSONKit 6 | // Dual licensed under either the terms of the BSD License, or alternatively 7 | // under the terms of the Apache License, Version 2.0, as specified below. 8 | // 9 | 10 | /* 11 | Copyright (c) 2011, John Engelhart 12 | 13 | All rights reserved. 14 | 15 | Redistribution and use in source and binary forms, with or without 16 | modification, are permitted provided that the following conditions are met: 17 | 18 | * Redistributions of source code must retain the above copyright 19 | notice, this list of conditions and the following disclaimer. 20 | 21 | * Redistributions in binary form must reproduce the above copyright 22 | notice, this list of conditions and the following disclaimer in the 23 | documentation and/or other materials provided with the distribution. 24 | 25 | * Neither the name of the Zang Industries nor the names of its 26 | contributors may be used to endorse or promote products derived from 27 | this software without specific prior written permission. 28 | 29 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 30 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 31 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 32 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 33 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 34 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 35 | TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 36 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 37 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 38 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 39 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 40 | */ 41 | 42 | /* 43 | Copyright 2011 John Engelhart 44 | 45 | Licensed under the Apache License, Version 2.0 (the "License"); 46 | you may not use this file except in compliance with the License. 47 | You may obtain a copy of the License at 48 | 49 | http://www.apache.org/licenses/LICENSE-2.0 50 | 51 | Unless required by applicable law or agreed to in writing, software 52 | distributed under the License is distributed on an "AS IS" BASIS, 53 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 54 | See the License for the specific language governing permissions and 55 | limitations under the License. 56 | */ 57 | 58 | *********************************************************************************** 59 | EMKeychain: 60 | 61 | /*Copyright (c) 2009 Extendmac, LLC. 62 | 63 | Permission is hereby granted, free of charge, to any person 64 | obtaining a copy of this software and associated documentation 65 | files (the "Software"), to deal in the Software without 66 | restriction, including without limitation the rights to use, 67 | copy, modify, merge, publish, distribute, sublicense, and/or sell 68 | copies of the Software, and to permit persons to whom the 69 | Software is furnished to do so, subject to the following 70 | conditions: 71 | 72 | The above copyright notice and this permission notice shall be 73 | included in all copies or substantial portions of the Software. 74 | 75 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 76 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 77 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 78 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 79 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 80 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 81 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 82 | OTHER DEALINGS IN THE SOFTWARE. 83 | */ 84 | 85 | *********************************************************************************** 86 | 87 | Sparkle: 88 | 89 | 90 | Copyright (c) 2006 Andy Matuschak 91 | 92 | 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: 93 | 94 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 95 | 96 | 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. 97 | 98 | ================= 99 | EXTERNAL LICENSES 100 | ================= 101 | 102 | Thanks to Brent Simmons, whose RSS reader class was modified and used for appcast 103 | support. His class is licensed as follows: 104 | Copyright (c) 2002, Brent Simmons 105 | All rights reserved. 106 | Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following 107 | conditions are met: 108 | * 109 | 110 | Redistributions of source code must retain the above copyright notice, this list of conditions and the following 111 | disclaimer. 112 | * 113 | 114 | Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the 115 | following disclaimer in the documentation and/or other materials provided with the distribution. 116 | * 117 | 118 | Neither the name of ranchero.com or Brent Simmons nor the names of its contributors may be used to endorse 119 | or promote products derived from this software without specific prior written permission. 120 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS “AS IS” AND ANY 121 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 122 | OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT 123 | SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, 124 | INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 125 | LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 126 | OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 127 | IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 128 | ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH 129 | DAMAGE. 130 | 131 | This project uses software developed by the OpenSSL Project for use in the OpenSSL 132 | Toolkit (http://www.openssl.org). This toolkit is licensed as follows: 133 | /* ==================================================================== 134 | * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved. 135 | * 136 | * Redistribution and use in source and binary forms, with or without 137 | * modification, are permitted provided that the following conditions 138 | * are met: 139 | * 140 | * 1. Redistributions of source code must retain the above copyright 141 | * notice, this list of conditions and the following disclaimer. 142 | * 143 | * 2. Redistributions in binary form must reproduce the above copyright 144 | * notice, this list of conditions and the following disclaimer in 145 | * the documentation and/or other materials provided with the 146 | * distribution. 147 | * 148 | * 3. All advertising materials mentioning features or use of this 149 | * software must display the following acknowledgment: 150 | * “This product includes software developed by the OpenSSL Project 151 | * for use in the OpenSSL Toolkit. (http://www.openssl.org/)” 152 | * 153 | * 4. The names “OpenSSL Toolkit” and “OpenSSL Project” must not be used to 154 | * endorse or promote products derived from this software without 155 | * prior written permission. For written permission, please contact 156 | * openssl-core@openssl.org. 157 | * 158 | * 5. Products derived from this software may not be called “OpenSSL” 159 | * nor may “OpenSSL” appear in their names without prior written 160 | * permission of the OpenSSL Project. 161 | * 162 | * 6. Redistributions of any form whatsoever must retain the following 163 | 164 | * acknowledgment: 165 | * “This product includes software developed by the OpenSSL Project 166 | * for use in the OpenSSL Toolkit (http://www.openssl.org/)” 167 | * 168 | * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS’’ AND ANY 169 | * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 170 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 171 | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 172 | * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 173 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 174 | * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 175 | * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 176 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 177 | * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 178 | * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 179 | * OF THE POSSIBILITY OF SUCH DAMAGE. 180 | * ==================================================================== 181 | * 182 | * This product includes cryptographic software written by Eric Young 183 | * (eay@cryptsoft.com). This product includes software written by Tim 184 | * Hudson (tjh@cryptsoft.com). 185 | * 186 | */ 187 | 188 | Original SSLeay License 189 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 190 | * All rights reserved. 191 | * 192 | * This package is an SSL implementation written 193 | * by Eric Young (eay@cryptsoft.com). 194 | * The implementation was written so as to conform with Netscapes SSL. 195 | * 196 | * This library is free for commercial and non-commercial use as long as 197 | * the following conditions are aheared to. The following conditions 198 | * apply to all code found in this distribution, be it the RC4, RSA, 199 | * lhash, DES, etc., code; not just the SSL code. The SSL documentation 200 | * included with this distribution is covered by the same copyright terms 201 | * except that the holder is Tim Hudson (tjh@cryptsoft.com). 202 | * 203 | * Copyright remains Eric Young’s, and as such any Copyright notices in 204 | * the code are not to be removed. 205 | * If this package is used in a product, Eric Young should be given attribution 206 | * as the author of the parts of the library used. 207 | * This can be in the form of a textual message at program startup or 208 | * in documentation (online or textual) provided with the package. 209 | * 210 | * Redistribution and use in source and binary forms, with or without 211 | * modification, are permitted provided that the following conditions 212 | * are met: 213 | * 1. Redistributions of source code must retain the copyright 214 | * notice, this list of conditions and the following disclaimer. 215 | * 2. Redistributions in binary form must reproduce the above copyright 216 | * notice, this list of conditions and the following disclaimer in the 217 | * documentation and/or other materials provided with the distribution. 218 | * 3. All advertising materials mentioning features or use of this software 219 | * must display the following acknowledgement: 220 | * “This product includes cryptographic software written by 221 | * Eric Young (eay@cryptsoft.com)” 222 | * The word ‘cryptographic’ can be left out if the rouines from the library 223 | * being used are not cryptographic related :-). 224 | * 4. If you include any Windows specific code (or a derivative thereof) from 225 | * the apps directory (application code) you must include an acknowledgement: 226 | * “This product includes software written by Tim Hudson (tjh@cryptsoft.com)” 227 | * 228 | * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS’’ AND 229 | * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 230 | * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 231 | * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 232 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 233 | * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 234 | * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 235 | * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 236 | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 237 | * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 238 | * SUCH DAMAGE. 239 | * 240 | * The licence and distribution terms for any publically available version or 241 | * derivative of this code cannot be changed. i.e. this code cannot simply be 242 | * copied and put under another distribution licence 243 | * [including the GNU Public Licence.] 244 | */ 245 | 246 | *********************************************************************************** 247 | 248 | /* 249 | DDHotKey -- DDHotKeyCenter.m 250 | 251 | Copyright (c) 2010, Dave DeLong 252 | 253 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 254 | 255 | The software is provided "as is", without warranty of any kind, including all implied warranties of merchantability and fitness. In no event shall the author(s) or copyright holder(s) 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. 256 | */ 257 | 258 | *********************************************************************************** 259 | 260 | Copyright (c) The Growl Project, 2004 261 | All rights reserved. 262 | 263 | 264 | Redistribution and use in source and binary forms, with or without modification, 265 | are permitted provided that the following conditions are met: 266 | 267 | 268 | 1. Redistributions of source code must retain the above copyright 269 | notice, this list of conditions and the following disclaimer. 270 | 2. Redistributions in binary form must reproduce the above copyright 271 | notice, this list of conditions and the following disclaimer in the 272 | documentation and/or other materials provided with the distribution. 273 | 3. Neither the name of Growl nor the names of its contributors 274 | may be used to endorse or promote products derived from this software 275 | without specific prior written permission. 276 | 277 | 278 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND 279 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 280 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 281 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR 282 | ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 283 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 284 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 285 | ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 286 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 287 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 288 | -------------------------------------------------------------------------------- /pushmenu/DDHotKey/DDHotKeyCenter.h: -------------------------------------------------------------------------------- 1 | /* 2 | DDHotKey -- DDHotKeyCenter.h 3 | 4 | Copyright (c) 2010, Dave DeLong 5 | 6 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 7 | 8 | The software is provided "as is", without warranty of any kind, including all implied warranties of merchantability and fitness. In no event shall the author(s) or copyright holder(s) 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. 9 | */ 10 | 11 | #import 12 | 13 | #if NS_BLOCKS_AVAILABLE 14 | //a convenient typedef for the required signature of a hotkey block callback 15 | typedef void (^DDHotKeyTask)(NSEvent*); 16 | #endif 17 | 18 | @interface DDHotKey : NSObject 19 | 20 | @property (nonatomic, readonly, retain) id target; 21 | @property (nonatomic, readonly) SEL action; 22 | @property (nonatomic, readonly, retain) id object; 23 | #if NS_BLOCKS_AVAILABLE 24 | @property (nonatomic, readonly, copy) DDHotKeyTask task; 25 | #endif 26 | 27 | @property (nonatomic, readonly) unsigned short keyCode; 28 | @property (nonatomic, readonly) NSUInteger modifierFlags; 29 | 30 | @end 31 | 32 | #pragma mark - 33 | 34 | @interface DDHotKeyCenter : NSObject { 35 | 36 | } 37 | 38 | /** 39 | Register a target/action hotkey. 40 | The modifierFlags must be a bitwise OR of NSCommandKeyMask, NSAlternateKeyMask, NSControlKeyMask, or NSShiftKeyMask; 41 | Returns YES if the hotkey was registered; NO otherwise. 42 | */ 43 | - (BOOL) registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags target:(id)target action:(SEL)action object:(id)object; 44 | 45 | #if NS_BLOCKS_AVAILABLE 46 | /** 47 | Register a block callback hotkey. 48 | The modifierFlags must be a bitwise OR of NSCommandKeyMask, NSAlternateKeyMask, NSControlKeyMask, or NSShiftKeyMask; 49 | Returns YES if the hotkey was registered; NO otherwise. 50 | */ 51 | - (BOOL) registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags task:(DDHotKeyTask)task; 52 | #endif 53 | 54 | /** 55 | See if a hotkey exists with the specified keycode and modifier flags. 56 | NOTE: this will only check among hotkeys you have explicitly registered with DDHotKeyCenter. This does not check all globally registered hotkeys. 57 | */ 58 | - (BOOL) hasRegisteredHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags; 59 | 60 | /** 61 | Unregister a specific hotkey 62 | */ 63 | - (void) unregisterHotKey:(DDHotKey *)hotKey; 64 | 65 | /** 66 | Unregister all hotkeys with a specific target 67 | */ 68 | - (void) unregisterHotKeysWithTarget:(id)target; 69 | 70 | /** 71 | Unregister all hotkeys with a specific target and action 72 | */ 73 | - (void) unregisterHotKeysWithTarget:(id)target action:(SEL)action; 74 | 75 | /** 76 | Unregister a hotkey with a specific keycode and modifier flags 77 | */ 78 | - (void) unregisterHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags; 79 | 80 | /** 81 | Returns a set of currently registered hotkeys 82 | **/ 83 | - (NSSet *) registeredHotKeys; 84 | 85 | @end 86 | 87 | -------------------------------------------------------------------------------- /pushmenu/DDHotKey/DDHotKeyCenter.m: -------------------------------------------------------------------------------- 1 | /* 2 | DDHotKey -- DDHotKeyCenter.m 3 | 4 | Copyright (c) 2010, Dave DeLong 5 | 6 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 7 | 8 | The software is provided "as is", without warranty of any kind, including all implied warranties of merchantability and fitness. In no event shall the author(s) or copyright holder(s) 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. 9 | */ 10 | 11 | #import "DDHotKeyCenter.h" 12 | #import 13 | #import 14 | 15 | #pragma mark Private Global Declarations 16 | 17 | static NSMutableSet * _registeredHotKeys = nil; 18 | static UInt32 _nextHotKeyID = 1; 19 | OSStatus dd_hotKeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void * userData); 20 | UInt32 dd_translateModifierFlags(NSUInteger flags); 21 | NSString* dd_stringifyModifierFlags(NSUInteger flags); 22 | 23 | #pragma mark DDHotKey 24 | 25 | @implementation DDHotKey 26 | 27 | - (id) target { return nil; } 28 | - (SEL) action { return nil; } 29 | - (id) object { return nil; } 30 | - (unsigned short) keyCode { return 0; } 31 | - (NSUInteger) modifierFlags { return 0; } 32 | 33 | #if NS_BLOCKS_AVAILABLE 34 | - (DDHotKeyTask) task { return nil; } 35 | #endif 36 | 37 | - (NSUInteger) hash { 38 | return [self keyCode] + [self modifierFlags]; 39 | } 40 | 41 | - (BOOL) isEqual:(id)object { 42 | BOOL equal = NO; 43 | if ([object isKindOfClass:[DDHotKey class]]) { 44 | equal = ([object keyCode] == [self keyCode]); 45 | equal &= ([object modifierFlags] == [self modifierFlags]); 46 | } 47 | return equal; 48 | } 49 | 50 | - (NSString *) description { 51 | NSString * flags = dd_stringifyModifierFlags([self modifierFlags]); 52 | NSString * invokes = @"(block)"; 53 | if ([self target] != nil && [self action] != nil) { 54 | invokes = [NSString stringWithFormat:@"[%@ %@]", [self target], NSStringFromSelector([self action])]; 55 | } 56 | return [NSString stringWithFormat:@"%@\n\t(key: %hu\n\tflags: %@\n\tinvokes: %@)", [super description], [self keyCode], flags, invokes]; 57 | } 58 | 59 | @end 60 | 61 | @interface _DDHotKey : DDHotKey { 62 | @private 63 | id target; 64 | SEL action; 65 | id object; 66 | 67 | #if NS_BLOCKS_AVAILABLE 68 | DDHotKeyTask task; 69 | #endif 70 | 71 | unsigned short keyCode; 72 | NSUInteger modifierFlags; 73 | UInt32 hotKeyID; 74 | NSValue * hotKeyRef; 75 | } 76 | 77 | @property (nonatomic, retain) id target; 78 | @property (nonatomic) SEL action; 79 | @property (nonatomic, retain) id object; 80 | @property (nonatomic) unsigned short keyCode; 81 | @property (nonatomic) NSUInteger modifierFlags; 82 | @property (nonatomic) UInt32 hotKeyID; 83 | @property (nonatomic, retain) NSValue * hotKeyRef; 84 | 85 | #if NS_BLOCKS_AVAILABLE 86 | @property (nonatomic, copy) DDHotKeyTask task; 87 | #endif 88 | 89 | - (void) invokeWithEvent:(NSEvent *)event; 90 | - (BOOL) registerHotKey; 91 | - (void) unregisterHotKey; 92 | 93 | @end 94 | 95 | @implementation _DDHotKey 96 | 97 | @synthesize target, action, object, keyCode, modifierFlags, hotKeyID, hotKeyRef; 98 | #if NS_BLOCKS_AVAILABLE 99 | @synthesize task; 100 | #endif 101 | 102 | - (Class) class { return [DDHotKey class]; } 103 | 104 | - (void) invokeWithEvent:(NSEvent *)event { 105 | if (target != nil && action != nil && [target respondsToSelector:action]) { 106 | [target performSelector:action withObject:event withObject:object]; 107 | } 108 | #if NS_BLOCKS_AVAILABLE 109 | else if (task != nil) { 110 | task(event); 111 | } 112 | #endif 113 | } 114 | 115 | - (NSString *) actionString { 116 | return NSStringFromSelector(action); 117 | } 118 | 119 | - (BOOL) registerHotKey { 120 | EventHotKeyID keyID; 121 | keyID.signature = 'htk1'; 122 | keyID.id = _nextHotKeyID; 123 | 124 | EventHotKeyRef carbonHotKey; 125 | UInt32 flags = dd_translateModifierFlags(modifierFlags); 126 | OSStatus err = RegisterEventHotKey(keyCode, flags, keyID, GetEventDispatcherTarget(), 0, &carbonHotKey); 127 | 128 | //error registering hot key 129 | if (err != 0) { return NO; } 130 | 131 | NSValue * refValue = [NSValue valueWithPointer:carbonHotKey]; 132 | [self setHotKeyRef:refValue]; 133 | [self setHotKeyID:_nextHotKeyID]; 134 | 135 | _nextHotKeyID++; 136 | 137 | return YES; 138 | } 139 | 140 | - (void) unregisterHotKey { 141 | EventHotKeyRef carbonHotKey = (EventHotKeyRef)[hotKeyRef pointerValue]; 142 | UnregisterEventHotKey(carbonHotKey); 143 | [self setHotKeyRef:nil]; 144 | } 145 | 146 | - (void) dealloc { 147 | [target release], target = nil; 148 | [object release], object = nil; 149 | if (hotKeyRef != nil) { 150 | [self unregisterHotKey]; 151 | [hotKeyRef release], hotKeyRef = nil; 152 | } 153 | [super dealloc]; 154 | } 155 | 156 | @end 157 | 158 | #pragma mark DDHotKeyCenter 159 | 160 | @implementation DDHotKeyCenter 161 | 162 | + (void) initialize { 163 | if (self == [DDHotKeyCenter class] && _registeredHotKeys == nil) { 164 | _registeredHotKeys = [[NSMutableSet alloc] init]; 165 | _nextHotKeyID = 1; 166 | EventTypeSpec eventSpec; 167 | eventSpec.eventClass = kEventClassKeyboard; 168 | eventSpec.eventKind = kEventHotKeyReleased; 169 | InstallApplicationEventHandler(&dd_hotKeyHandler, 1, &eventSpec, NULL, NULL); 170 | } 171 | } 172 | 173 | - (NSSet *) hotKeysMatchingPredicate:(NSPredicate *)predicate { 174 | return [_registeredHotKeys filteredSetUsingPredicate:predicate]; 175 | } 176 | 177 | - (BOOL) hasRegisteredHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags { 178 | NSPredicate * predicate = [NSPredicate predicateWithFormat:@"keyCode = %hu AND modifierFlags = %lu", keyCode, flags]; 179 | return ([[self hotKeysMatchingPredicate:predicate] count] > 0); 180 | } 181 | 182 | #if NS_BLOCKS_AVAILABLE 183 | - (BOOL) registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags task:(DDHotKeyTask)task { 184 | //we can't add a new hotkey if something already has this combo 185 | if ([self hasRegisteredHotKeyWithKeyCode:keyCode modifierFlags:flags]) { return NO; } 186 | 187 | _DDHotKey * newHotKey = [[_DDHotKey alloc] init]; 188 | [newHotKey setTask:task]; 189 | [newHotKey setKeyCode:keyCode]; 190 | [newHotKey setModifierFlags:flags]; 191 | 192 | BOOL success = [newHotKey registerHotKey]; 193 | if (success) { 194 | [_registeredHotKeys addObject:newHotKey]; 195 | } 196 | 197 | [newHotKey release]; 198 | return success; 199 | } 200 | #endif 201 | 202 | - (BOOL) registerHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags target:(id)target action:(SEL)action object:(id)object { 203 | //we can't add a new hotkey if something already has this combo 204 | if ([self hasRegisteredHotKeyWithKeyCode:keyCode modifierFlags:flags]) { return NO; } 205 | 206 | //build the hotkey object: 207 | _DDHotKey * newHotKey = [[_DDHotKey alloc] init]; 208 | [newHotKey setTarget:target]; 209 | [newHotKey setAction:action]; 210 | [newHotKey setObject:object]; 211 | [newHotKey setKeyCode:keyCode]; 212 | [newHotKey setModifierFlags:flags]; 213 | 214 | BOOL success = [newHotKey registerHotKey]; 215 | if (success) { 216 | [_registeredHotKeys addObject:newHotKey]; 217 | } 218 | 219 | [newHotKey release]; 220 | return success; 221 | } 222 | 223 | - (void) unregisterHotKeysMatchingPredicate:(NSPredicate *)predicate { 224 | //explicitly unregister the hotkey, since relying on the unregistration in -dealloc can be problematic 225 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 226 | NSSet * matches = [self hotKeysMatchingPredicate:predicate]; 227 | [_registeredHotKeys minusSet:matches]; 228 | [matches makeObjectsPerformSelector:@selector(unregisterHotKey)]; 229 | [pool release]; 230 | } 231 | 232 | - (void) unregisterHotKey:(DDHotKey *)hotKey { 233 | if (object_getClass(hotKey) == [_DDHotKey class]) { 234 | _DDHotKey * key = (_DDHotKey *)hotKey; 235 | [_registeredHotKeys removeObject:key]; 236 | [key unregisterHotKey]; 237 | } else { 238 | [NSException raise:NSInvalidArgumentException format:@"Invalid hotkey"]; 239 | } 240 | } 241 | 242 | - (void) unregisterHotKeysWithTarget:(id)target { 243 | NSPredicate * predicate = [NSPredicate predicateWithFormat:@"target = %@", target]; 244 | [self unregisterHotKeysMatchingPredicate:predicate]; 245 | } 246 | 247 | - (void) unregisterHotKeysWithTarget:(id)target action:(SEL)action { 248 | NSPredicate * predicate = [NSPredicate predicateWithFormat:@"target = %@ AND actionString = %@", target, NSStringFromSelector(action)]; 249 | [self unregisterHotKeysMatchingPredicate:predicate]; 250 | } 251 | 252 | - (void) unregisterHotKeyWithKeyCode:(unsigned short)keyCode modifierFlags:(NSUInteger)flags { 253 | NSPredicate * predicate = [NSPredicate predicateWithFormat:@"keyCode = %hu AND modifierFlags = %lu", keyCode, flags]; 254 | [self unregisterHotKeysMatchingPredicate:predicate]; 255 | } 256 | 257 | - (NSSet *) registeredHotKeys { 258 | return [self hotKeysMatchingPredicate:[NSPredicate predicateWithFormat:@"hotKeyRef != NULL"]]; 259 | } 260 | 261 | @end 262 | 263 | OSStatus dd_hotKeyHandler(EventHandlerCallRef nextHandler, EventRef theEvent, void * userData) { 264 | NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; 265 | 266 | EventHotKeyID hotKeyID; 267 | GetEventParameter(theEvent, kEventParamDirectObject, typeEventHotKeyID, NULL, sizeof(hotKeyID),NULL,&hotKeyID); 268 | 269 | UInt32 keyID = hotKeyID.id; 270 | 271 | NSSet * matchingHotKeys = [_registeredHotKeys filteredSetUsingPredicate:[NSPredicate predicateWithFormat:@"hotKeyID = %u", keyID]]; 272 | if ([matchingHotKeys count] > 1) { NSLog(@"ERROR!"); } 273 | _DDHotKey * matchingHotKey = [matchingHotKeys anyObject]; 274 | 275 | NSEvent * event = [NSEvent eventWithEventRef:theEvent]; 276 | NSEvent * keyEvent = [NSEvent keyEventWithType:NSKeyUp 277 | location:[event locationInWindow] 278 | modifierFlags:[event modifierFlags] 279 | timestamp:[event timestamp] 280 | windowNumber:-1 281 | context:nil 282 | characters:@"" 283 | charactersIgnoringModifiers:@"" 284 | isARepeat:NO 285 | keyCode:[matchingHotKey keyCode]]; 286 | 287 | [matchingHotKey invokeWithEvent:keyEvent]; 288 | 289 | [pool release]; 290 | 291 | return noErr; 292 | } 293 | 294 | UInt32 dd_translateModifierFlags(NSUInteger flags) { 295 | UInt32 newFlags = 0; 296 | if ((flags & NSControlKeyMask) > 0) { newFlags |= controlKey; } 297 | if ((flags & NSCommandKeyMask) > 0) { newFlags |= cmdKey; } 298 | if ((flags & NSShiftKeyMask) > 0) { newFlags |= shiftKey; } 299 | if ((flags & NSAlternateKeyMask) > 0) { newFlags |= optionKey; } 300 | return newFlags; 301 | } 302 | 303 | NSString* dd_stringifyModifierFlags(NSUInteger flags) { 304 | NSMutableArray * bits = [NSMutableArray array]; 305 | if ((flags & NSControlKeyMask) > 0) { [bits addObject:@"NSControlKeyMask"]; } 306 | if ((flags & NSCommandKeyMask) > 0) { [bits addObject:@"NSCommandKeyMask"]; } 307 | if ((flags & NSShiftKeyMask) > 0) { [bits addObject:@"NSShiftKeyMask"]; } 308 | if ((flags & NSAlternateKeyMask) > 0) { [bits addObject:@"NSAlternateKeyMask"]; } 309 | if ([bits count] > 0) { 310 | return [NSString stringWithFormat:@"(%@)", [bits componentsJoinedByString:@" | "]]; 311 | } 312 | return @"ERROR: No valid flags"; 313 | } 314 | -------------------------------------------------------------------------------- /pushmenu/EMKeychain/EMKeychainItem.h: -------------------------------------------------------------------------------- 1 | /*Copyright (c) 2009 Extendmac, LLC. 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | */ 24 | 25 | //Last Updated February 8th, 2011. 26 | 27 | 28 | #import 29 | #import 30 | #import 31 | 32 | /*! 33 | @abstract EMKeychainItem is a self-contained wrapper class for two-way communication with the keychain. You can add, retrieve, and remove both generic and internet keychain items. 34 | @dicussion All keychain items have a username, password, and optionally a label. 35 | */ 36 | @interface EMKeychainItem : NSObject 37 | { 38 | @private 39 | NSString *mUsername; 40 | NSString *mPassword; 41 | NSString *mLabel; 42 | 43 | @protected 44 | SecKeychainItemRef mCoreKeychainItem; 45 | } 46 | 47 | /*! 48 | @abstract Returns whether or not errors are logged. 49 | @discussion Errors occur whenever a keychain item fails to appropriately update a property, or when a given keychain item cannot be found. 50 | */ 51 | + (BOOL)logsErrors; 52 | 53 | //! @abstracts Sets whether or not errors are logged. 54 | + (void)setLogsErrors:(BOOL)logsErrors; 55 | 56 | //! @abstracts Locks the keychain. 57 | + (void)lockKeychain; 58 | 59 | //! @abstract Unlocks the keychain. 60 | + (void)unlockKeychain; 61 | 62 | //! @abstract The keychain item's username. 63 | @property (readwrite, copy) NSString *username; 64 | 65 | //! @abstract The keychain item's password. 66 | @property (readwrite, copy) NSString *password; 67 | 68 | //! @abstract The keychain item's label. 69 | @property (readwrite, copy) NSString *label; 70 | 71 | /*! 72 | @abstract Removes the receiver from the keychain. 73 | @discussion After calling this method, you should generally discard of the receiver. The receiver cannot be "re-added" to the keychain; invoke either addGenericKeychainItemForService:... or addInternetKeychainItemForServer:... instead. 74 | */ 75 | - (void)removeFromKeychain; 76 | 77 | @end 78 | 79 | #pragma mark - 80 | 81 | /*! 82 | @abstract An EMGenericKeychainItem wraps the functionality and data-members associated with a generic keychain item. 83 | @discussion Generic keychain items have a service name in addition to the standard keychain item properties. 84 | */ 85 | @interface EMGenericKeychainItem : EMKeychainItem 86 | { 87 | @private 88 | NSString *mServiceName; 89 | } 90 | 91 | //! @abstract The keychain item's service name. 92 | @property (readwrite, copy) NSString *serviceName; 93 | 94 | /*! 95 | @abstract Returns, if possible, a generic keychain item that corresponds to the given service. 96 | @param serviceName The service name. Cannot be nil. 97 | @param username The username. Cannot be nil. 98 | @result An EMGenericKeychainItem if the keychain item can be discovered. Otherwise, nil. 99 | */ 100 | + (EMGenericKeychainItem *)genericKeychainItemForService:(NSString *)serviceName 101 | withUsername:(NSString *)username; 102 | 103 | /*! 104 | @abstract Adds a keychain item for the given service. 105 | @param serviceName The service name. Cannot be nil. 106 | @param username The username. Cannot be nil. 107 | @param password The password to associate with the username and service. Cannot be nil. 108 | @result An EMGenericKeychainItem if the service can be added to the keychain. Otherwise, nil. 109 | */ 110 | + (EMGenericKeychainItem *)addGenericKeychainItemForService:(NSString *)serviceName 111 | withUsername:(NSString *)username 112 | password:(NSString *)password; 113 | @end 114 | 115 | #pragma mark - 116 | 117 | /*! 118 | @abstract An EMInternetKeychainItem wraps the functionality and data-members associated with an internet keychain item. 119 | @discussion Internet keychain items can optionally have a server, path, port, and protocol in addition to the standard keychain item properties. 120 | */ 121 | @interface EMInternetKeychainItem : EMKeychainItem 122 | { 123 | @private 124 | NSString *mServer; 125 | NSString *mPath; 126 | NSInteger mPort; 127 | SecProtocolType mProtocol; 128 | } 129 | 130 | 131 | /*! 132 | @abstract Returns, if possible, an internet keychain item that corresponds to the given server. 133 | @param server The server. Cannot be nil. 134 | @param username The username. Cannot be nil. 135 | @param path The path. 136 | @param port The port. 137 | @param protocol The protocol. 138 | @result An EMInternetKeychainItem if the keychain item can be discovered. Otherwise, nil. 139 | */ 140 | + (EMInternetKeychainItem *)internetKeychainItemForServer:(NSString *)server 141 | withUsername:(NSString *)username 142 | path:(NSString *)path 143 | port:(NSInteger)port 144 | protocol:(SecProtocolType)protocol; 145 | 146 | /*! 147 | @abstract Adds a keychain item for the given server. 148 | @param server The server. Cannot be nil. 149 | @param username The username. Cannot be nil. 150 | @param password The password to associate with the server, username, path, port, and protocol. Cannot be nil. 151 | @param path The path. 152 | @param port The port. 153 | @param protocol The protocol. 154 | @result An EMInternetKeychainItem if the item can be added to the keychain. Otherwise, nil. 155 | */ 156 | + (EMInternetKeychainItem *)addInternetKeychainItemForServer:(NSString *)server 157 | withUsername:(NSString *)username 158 | password:(NSString *)password 159 | path:(NSString *)path 160 | port:(NSInteger)port 161 | protocol:(SecProtocolType)protocol; 162 | 163 | //! @abstract The keychain item's server. 164 | @property (readwrite, copy) NSString *server; 165 | 166 | //! @abstract The keychain item's path. 167 | @property (readwrite, copy) NSString *path; 168 | 169 | //! @abstract The keychain item's port. 170 | @property (readwrite, assign) NSInteger port; 171 | 172 | //! @abstract The keychain item's protocol. 173 | @property (readwrite, assign) SecProtocolType protocol; 174 | 175 | @end -------------------------------------------------------------------------------- /pushmenu/EMKeychain/EMKeychainItem.m: -------------------------------------------------------------------------------- 1 | /*Copyright (c) 2009 Extendmac, LLC. 2 | 3 | Permission is hereby granted, free of charge, to any person 4 | obtaining a copy of this software and associated documentation 5 | files (the "Software"), to deal in the Software without 6 | restriction, including without limitation the rights to use, 7 | copy, modify, merge, publish, distribute, sublicense, and/or sell 8 | copies of the Software, and to permit persons to whom the 9 | Software is furnished to do so, subject to the following 10 | conditions: 11 | 12 | The above copyright notice and this permission notice shall be 13 | included in all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES 17 | OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 18 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT 19 | HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 20 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 21 | FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | */ 24 | 25 | #import "EMKeychainItem.h" 26 | 27 | @interface EMKeychainItem (Private) 28 | 29 | /*! 30 | @abstract Modifies the given attribute to be newValue. 31 | @param attributeTag The attribute's tag. 32 | @param newValue A pointer to the new value. 33 | @param newLength The length of the new value. 34 | */ 35 | - (void)_modifyAttributeWithTag:(SecItemAttr)attributeTag toBeValue:(void *)newValue ofLength:(UInt32)newLength; 36 | 37 | @end 38 | 39 | @implementation EMKeychainItem 40 | 41 | static BOOL _logsErrors; 42 | 43 | + (void)lockKeychain 44 | { 45 | SecKeychainLock(NULL); 46 | } 47 | 48 | + (void)unlockKeychain 49 | { 50 | SecKeychainUnlock(NULL, 0, NULL, NO); 51 | } 52 | 53 | + (BOOL)logsErrors 54 | { 55 | @synchronized (self) 56 | { 57 | return _logsErrors; 58 | } 59 | return NO; 60 | } 61 | 62 | + (void)setLogsErrors:(BOOL)logsErrors 63 | { 64 | @synchronized (self) 65 | { 66 | if (_logsErrors == logsErrors) 67 | return; 68 | 69 | _logsErrors = logsErrors; 70 | } 71 | } 72 | 73 | #pragma mark - 74 | 75 | - (id)_initWithCoreKeychainItem:(SecKeychainItemRef)item 76 | username:(NSString *)username 77 | password:(NSString *)password 78 | { 79 | if ((self = [super init])) 80 | { 81 | mCoreKeychainItem = item; 82 | mUsername = [username copy]; 83 | mPassword = [password copy]; 84 | 85 | return self; 86 | } 87 | return nil; 88 | } 89 | 90 | - (void)_modifyAttributeWithTag:(SecItemAttr)attributeTag toBeValue:(void *)newValue ofLength:(UInt32)newLength 91 | { 92 | NSAssert(mCoreKeychainItem, @"Core keychain item is nil. You cannot modify a keychain item that is not in the keychain."); 93 | 94 | SecKeychainAttribute attributes[1]; 95 | attributes[0].tag = attributeTag; 96 | attributes[0].length = newLength; 97 | attributes[0].data = newValue; 98 | 99 | SecKeychainAttributeList attributeList; 100 | attributeList.count = 1; 101 | attributeList.attr = attributes; 102 | 103 | SecKeychainItemModifyAttributesAndData(mCoreKeychainItem, &attributeList, 0, NULL); 104 | } 105 | 106 | - (void)dealloc 107 | { 108 | [mUsername release]; 109 | [mPassword release]; 110 | [mLabel release]; 111 | 112 | if (mCoreKeychainItem) 113 | CFRelease(mCoreKeychainItem); 114 | 115 | [super dealloc]; 116 | } 117 | 118 | #pragma mark - 119 | #pragma mark General Properties 120 | @dynamic password; 121 | - (NSString *)password 122 | { 123 | @synchronized (self) 124 | { 125 | return [[mPassword copy] autorelease]; 126 | } 127 | } 128 | 129 | - (void)setPassword:(NSString *)newPassword 130 | { 131 | @synchronized (self) 132 | { 133 | if (mPassword == newPassword) 134 | return; 135 | 136 | [mPassword release]; 137 | mPassword = [newPassword copy]; 138 | 139 | const char *newPasswordCString = [newPassword UTF8String]; 140 | SecKeychainItemModifyAttributesAndData(mCoreKeychainItem, NULL, (UInt32)strlen(newPasswordCString), (void *)newPasswordCString); 141 | } 142 | } 143 | 144 | #pragma mark - 145 | @dynamic username; 146 | - (NSString *)username 147 | { 148 | @synchronized (self) 149 | { 150 | return [[mUsername copy] autorelease]; 151 | } 152 | } 153 | 154 | - (void)setUsername:(NSString *)newUsername 155 | { 156 | @synchronized (self) 157 | { 158 | if (mUsername == newUsername) 159 | return; 160 | 161 | [mUsername release]; 162 | mUsername = [newUsername copy]; 163 | 164 | const char *newUsernameCString = [newUsername UTF8String]; 165 | [self _modifyAttributeWithTag:kSecAccountItemAttr toBeValue:(void *)newUsernameCString ofLength:(UInt32)strlen(newUsernameCString)]; 166 | } 167 | } 168 | 169 | #pragma mark - 170 | @dynamic label; 171 | - (NSString *)label 172 | { 173 | @synchronized (self) 174 | { 175 | return [[mLabel copy] autorelease]; 176 | } 177 | } 178 | 179 | - (void)setLabel:(NSString *)newLabel 180 | { 181 | @synchronized (self) 182 | { 183 | if (mLabel == newLabel) 184 | return; 185 | 186 | [mLabel release]; 187 | mLabel = [newLabel copy]; 188 | 189 | const char *newLabelCString = [newLabel UTF8String]; 190 | [self _modifyAttributeWithTag:kSecLabelItemAttr toBeValue:(void *)newLabelCString ofLength:(UInt32)strlen(newLabelCString)]; 191 | } 192 | } 193 | 194 | #pragma mark - 195 | #pragma mark Actions 196 | - (void)removeFromKeychain 197 | { 198 | NSAssert(mCoreKeychainItem, @"Core keychain item is nil. You cannot remove a keychain item that is not in the keychain already."); 199 | 200 | if (mCoreKeychainItem) 201 | { 202 | OSStatus resultStatus = SecKeychainItemDelete(mCoreKeychainItem); 203 | if (resultStatus == noErr) 204 | { 205 | CFRelease(mCoreKeychainItem); 206 | mCoreKeychainItem = nil; 207 | } 208 | } 209 | } 210 | 211 | @end 212 | 213 | #pragma mark - 214 | @implementation EMGenericKeychainItem 215 | 216 | - (id)_initWithCoreKeychainItem:(SecKeychainItemRef)item 217 | serviceName:(NSString *)serviceName 218 | username:(NSString *)username 219 | password:(NSString *)password 220 | { 221 | if ((self = [super _initWithCoreKeychainItem:item username:username password:password])) 222 | { 223 | mServiceName = [serviceName copy]; 224 | return self; 225 | } 226 | return nil; 227 | } 228 | 229 | + (id)_genericKeychainItemWithCoreKeychainItem:(SecKeychainItemRef)coreKeychainItem 230 | forServiceName:(NSString *)serviceName 231 | username:(NSString *)username 232 | password:(NSString *)password 233 | { 234 | return [[[EMGenericKeychainItem alloc] _initWithCoreKeychainItem:coreKeychainItem 235 | serviceName:serviceName 236 | username:username 237 | password:password] autorelease]; 238 | } 239 | 240 | - (void)dealloc 241 | { 242 | [mServiceName release]; 243 | 244 | [super dealloc]; 245 | } 246 | 247 | #pragma mark - 248 | + (EMGenericKeychainItem *)genericKeychainItemForService:(NSString *)serviceName 249 | withUsername:(NSString *)username 250 | { 251 | if (!serviceName || !username) 252 | return nil; 253 | 254 | const char *serviceNameCString = [serviceName UTF8String]; 255 | const char *usernameCString = [username UTF8String]; 256 | 257 | UInt32 passwordLength = 0; 258 | char *password = nil; 259 | 260 | SecKeychainItemRef item = nil; 261 | OSStatus returnStatus = SecKeychainFindGenericPassword(NULL, (UInt32)strlen(serviceNameCString), serviceNameCString, (UInt32)strlen(usernameCString), usernameCString, &passwordLength, (void **)&password, &item); 262 | if (returnStatus != noErr || !item) 263 | { 264 | if (_logsErrors) 265 | NSLog(@"Error (%@) - %@", NSStringFromSelector(_cmd), [[NSError errorWithDomain:NSOSStatusErrorDomain code:returnStatus userInfo:nil] description] ); 266 | return nil; 267 | } 268 | NSString *passwordString = [[[NSString alloc] initWithData:[NSData dataWithBytes:password length:passwordLength] encoding:NSUTF8StringEncoding] autorelease]; 269 | SecKeychainItemFreeContent(NULL, password); 270 | 271 | return [EMGenericKeychainItem _genericKeychainItemWithCoreKeychainItem:item forServiceName:serviceName username:username password:passwordString]; 272 | } 273 | 274 | + (EMGenericKeychainItem *)addGenericKeychainItemForService:(NSString *)serviceName 275 | withUsername:(NSString *)username 276 | password:(NSString *)password 277 | { 278 | if (!serviceName || !username || !password) 279 | return nil; 280 | 281 | const char *serviceNameCString = [serviceName UTF8String]; 282 | const char *usernameCString = [username UTF8String]; 283 | const char *passwordCString = [password UTF8String]; 284 | 285 | SecKeychainItemRef item = nil; 286 | OSStatus returnStatus = SecKeychainAddGenericPassword(NULL, (UInt32)strlen(serviceNameCString), serviceNameCString, (UInt32)strlen(usernameCString), usernameCString, (UInt32)strlen(passwordCString), (void *)passwordCString, &item); 287 | 288 | if (returnStatus != noErr || !item) 289 | { 290 | if (_logsErrors) 291 | NSLog(@"Error (%@) - %@", NSStringFromSelector(_cmd), [[NSError errorWithDomain:NSOSStatusErrorDomain code:returnStatus userInfo:nil] description] ); 292 | return nil; 293 | } 294 | return [EMGenericKeychainItem _genericKeychainItemWithCoreKeychainItem:item forServiceName:serviceName username:username password:password]; 295 | } 296 | 297 | #pragma mark - 298 | #pragma mark Generic Properties 299 | @dynamic serviceName; 300 | - (NSString *)serviceName 301 | { 302 | @synchronized (self) 303 | { 304 | return [[mServiceName copy] autorelease]; 305 | } 306 | } 307 | 308 | - (void)setServiceName:(NSString *)newServiceName 309 | { 310 | @synchronized (self) 311 | { 312 | if (mServiceName == newServiceName) 313 | return; 314 | 315 | [mServiceName release]; 316 | mServiceName = [newServiceName copy]; 317 | 318 | const char *newServiceNameCString = [newServiceName UTF8String]; 319 | [self _modifyAttributeWithTag:kSecServiceItemAttr toBeValue:(void *)newServiceNameCString ofLength:(UInt32)strlen(newServiceNameCString)]; 320 | } 321 | } 322 | 323 | @end 324 | 325 | #pragma mark - 326 | @implementation EMInternetKeychainItem 327 | 328 | - (id)_initWithCoreKeychainItem:(SecKeychainItemRef)item 329 | server:(NSString *)server 330 | username:(NSString *)username 331 | password:(NSString *)password 332 | path:(NSString *)path 333 | port:(NSInteger)port 334 | protocol:(SecProtocolType)protocol 335 | { 336 | if ((self = [super _initWithCoreKeychainItem:item username:username password:password])) 337 | { 338 | mServer = [server copy]; 339 | mPath = [path copy]; 340 | mPort = port; 341 | mProtocol = protocol; 342 | 343 | return self; 344 | } 345 | return nil; 346 | } 347 | 348 | - (void)dealloc 349 | { 350 | [mServer release]; 351 | [mPath release]; 352 | 353 | [super dealloc]; 354 | } 355 | 356 | + (id)_internetKeychainItemWithCoreKeychainItem:(SecKeychainItemRef)coreKeychainItem 357 | forServer:(NSString *)server 358 | username:(NSString *)username 359 | password:(NSString *)password 360 | path:(NSString *)path 361 | port:(NSInteger)port 362 | protocol:(SecProtocolType)protocol 363 | { 364 | return [[[EMInternetKeychainItem alloc] _initWithCoreKeychainItem:coreKeychainItem 365 | server:server 366 | username:username 367 | password:password 368 | path:path 369 | port:port 370 | protocol:protocol] autorelease]; 371 | } 372 | 373 | #pragma mark - 374 | + (EMInternetKeychainItem *)internetKeychainItemForServer:(NSString *)server 375 | withUsername:(NSString *)username 376 | path:(NSString *)path 377 | port:(NSInteger)port 378 | protocol:(SecProtocolType)protocol 379 | { 380 | if (!server || !username) 381 | return nil; 382 | 383 | const char *serverCString = [server UTF8String]; 384 | const char *usernameCString = [username UTF8String]; 385 | const char *pathCString = [path UTF8String]; 386 | 387 | if (!path || [path length] == 0) 388 | pathCString = ""; 389 | 390 | UInt32 passwordLength = 0; 391 | char *password = nil; 392 | 393 | SecKeychainItemRef item = nil; 394 | //0 is kSecAuthenticationTypeAny 395 | OSStatus returnStatus = SecKeychainFindInternetPassword(NULL, (UInt32)strlen(serverCString), serverCString, 0, NULL, (UInt32)strlen(usernameCString), usernameCString, (UInt32)strlen(pathCString), pathCString, port, protocol, 0, &passwordLength, (void **)&password, &item); 396 | 397 | if (returnStatus != noErr && protocol == kSecProtocolTypeFTP) 398 | { 399 | //Some clients (like Transmit) still save passwords with kSecProtocolTypeFTPAccount, which was deprecated. Let's check for that. 400 | protocol = kSecProtocolTypeFTPAccount; 401 | returnStatus = SecKeychainFindInternetPassword(NULL, (UInt32)strlen(serverCString), serverCString, 0, NULL, (UInt32)strlen(usernameCString), usernameCString, (UInt32)strlen(pathCString), pathCString, port, protocol, 0, &passwordLength, (void **)&password, &item); 402 | } 403 | 404 | if (returnStatus != noErr || !item) 405 | { 406 | if (_logsErrors) 407 | NSLog(@"Error (%@) - %@", NSStringFromSelector(_cmd), [[NSError errorWithDomain:NSOSStatusErrorDomain code:returnStatus userInfo:nil] description] ); 408 | return nil; 409 | } 410 | NSString *passwordString = [[[NSString alloc] initWithData:[NSData dataWithBytes:password length:passwordLength] encoding:NSUTF8StringEncoding] autorelease]; 411 | SecKeychainItemFreeContent(NULL, password); 412 | 413 | return [EMInternetKeychainItem _internetKeychainItemWithCoreKeychainItem:item forServer:server username:username password:passwordString path:path port:port protocol:protocol]; 414 | } 415 | 416 | + (EMInternetKeychainItem *)addInternetKeychainItemForServer:(NSString *)server 417 | withUsername:(NSString *)username 418 | password:(NSString *)password 419 | path:(NSString *)path 420 | port:(NSInteger)port 421 | protocol:(SecProtocolType)protocol 422 | { 423 | if (!username || !server || !password) 424 | return nil; 425 | 426 | const char *serverCString = [server UTF8String]; 427 | const char *usernameCString = [username UTF8String]; 428 | const char *passwordCString = [password UTF8String]; 429 | const char *pathCString = [path UTF8String]; 430 | 431 | if (!path || [path length] == 0) 432 | pathCString = ""; 433 | 434 | SecKeychainItemRef item = nil; 435 | OSStatus returnStatus = SecKeychainAddInternetPassword(NULL, (UInt32)strlen(serverCString), serverCString, 0, NULL, (UInt32)strlen(usernameCString), usernameCString, (UInt32)strlen(pathCString), pathCString, port, protocol, kSecAuthenticationTypeDefault, (UInt32)strlen(passwordCString), (void *)passwordCString, &item); 436 | 437 | if (returnStatus != noErr || !item) 438 | { 439 | if (_logsErrors) 440 | NSLog(@"Error (%@) - %@", NSStringFromSelector(_cmd),[[NSError errorWithDomain:NSOSStatusErrorDomain code:returnStatus userInfo:nil] description] ); 441 | return nil; 442 | } 443 | return [EMInternetKeychainItem _internetKeychainItemWithCoreKeychainItem:item forServer:server username:username password:password path:path port:port protocol:protocol]; 444 | } 445 | 446 | #pragma mark - 447 | #pragma mark Internet Properties 448 | @dynamic server; 449 | - (NSString *)server 450 | { 451 | @synchronized (self) 452 | { 453 | return [[mServer copy] autorelease]; 454 | } 455 | } 456 | 457 | - (void)setServer:(NSString *)newServer 458 | { 459 | @synchronized (self) 460 | { 461 | if (mServer == newServer) 462 | return; 463 | 464 | [mServer release]; 465 | mServer = [newServer copy]; 466 | 467 | const char *newServerCString = [newServer UTF8String]; 468 | [self _modifyAttributeWithTag:kSecServerItemAttr toBeValue:(void *)newServerCString ofLength:(UInt32)strlen(newServerCString)]; 469 | } 470 | } 471 | 472 | #pragma mark - 473 | @dynamic path; 474 | - (NSString *)path 475 | { 476 | @synchronized (self) 477 | { 478 | return [[mPath copy] autorelease]; 479 | } 480 | } 481 | 482 | - (void)setPath:(NSString *)newPath 483 | { 484 | if (mPath == newPath) 485 | return; 486 | 487 | [mPath release]; 488 | mPath = [newPath copy]; 489 | 490 | const char *newPathCString = [newPath UTF8String]; 491 | [self _modifyAttributeWithTag:kSecPathItemAttr toBeValue:(void *)newPathCString ofLength:(UInt32)strlen(newPathCString)]; 492 | } 493 | 494 | #pragma mark - 495 | @dynamic port; 496 | - (NSInteger)port 497 | { 498 | @synchronized (self) 499 | { 500 | return mPort; 501 | } 502 | } 503 | 504 | - (void)setPort:(NSInteger)newPort 505 | { 506 | @synchronized (self) 507 | { 508 | if (mPort == newPort) 509 | return; 510 | 511 | mPort = newPort; 512 | 513 | UInt32 newPortValue = (UInt32)newPort; 514 | [self _modifyAttributeWithTag:kSecPortItemAttr toBeValue:&newPortValue ofLength:sizeof(newPortValue)]; 515 | } 516 | } 517 | 518 | #pragma mark - 519 | @dynamic protocol; 520 | - (SecProtocolType)protocol 521 | { 522 | @synchronized (self) 523 | { 524 | return mProtocol; 525 | } 526 | } 527 | 528 | - (void)setProtocol:(SecProtocolType)newProtocol 529 | { 530 | @synchronized (self) 531 | { 532 | if (mProtocol == newProtocol) 533 | return; 534 | 535 | mProtocol = newProtocol; 536 | 537 | [self _modifyAttributeWithTag:kSecProtocolItemAttr toBeValue:&newProtocol ofLength:sizeof(newProtocol)]; 538 | } 539 | } 540 | @end -------------------------------------------------------------------------------- /pushmenu/EMKeychain/ReadMe.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1038\cocoasubrtf350 2 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;\f1\fnil\fcharset0 Monaco;\f2\fnil\fcharset0 LucidaGrande; 3 | \f3\fnil\fcharset0 Menlo-Regular;} 4 | {\colortbl;\red255\green255\blue255;\red134\green134\blue134;\red40\green40\blue40;\red63\green110\blue116; 5 | \red38\green71\blue75;\red196\green26\blue22;\red28\green0\blue207;\red46\green13\blue110;\red0\green116\blue0; 6 | \red92\green38\blue153;} 7 | {\*\listtable{\list\listtemplateid1\listhybrid{\listlevel\levelnfc23\levelnfcn23\leveljc0\leveljcn0\levelfollow0\levelstartat1\levelspace360\levelindent0{\*\levelmarker \{square\}}{\leveltext\leveltemplateid1\'01\uc0\u9642 ;}{\levelnumbers;}\fi-360\li720\lin720 }{\listname ;}\listid1}} 8 | {\*\listoverridetable{\listoverride\listid1\listoverridecount0\ls1}} 9 | \vieww14720\viewh14980\viewkind0 10 | \pard\tx720\tx1440\tx2160\tx2880\tx3600\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 11 | 12 | \f0\fs40 \cf0 EMKeychain : A Cocoa Keychain Wrapper\ 13 | 14 | \fs26 \cf2 by Brian Amerige of Extendmac, LLC., 02/08/2011\ 15 | http://extendmac.com/EMKeychain/\ 16 | \'a9 Copyright 2011 Extendmac, LLC. All Rights Reserved.\ 17 | \ 18 | 19 | \b \cf3 Purpose 20 | \b0 : To create a cocoa wrapper class (not a bloated framework) to proxy between your application and the unfortunately-carbon based keychain.\ 21 | \ 22 | 23 | \b Current State 24 | \b0 : Usable in what I expect to be most simple application scenarios. See the class overview information below to verify that EMKeychain is the best fit for your project.\ 25 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 26 | 27 | \f1\fs22 \cf0 \CocoaLigature0 \ 28 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 29 | 30 | \f0\b\fs26 \cf3 \CocoaLigature1 Requirements:\ 31 | \pard\tx220\tx720\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\li720\fi-720\ql\qnatural\pardirnatural 32 | \ls1\ilvl0 33 | \f1\b0\fs22 \cf0 {\listtext 34 | \f2 \uc0\u9642 35 | \f1 } 36 | \f0\fs26 \cf3 Link your application against the Carbon and Security frameworks in /System/Library. 37 | \f1\fs22 \cf0 \CocoaLigature0 \ 38 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 39 | 40 | \f0\fs26 \cf3 \CocoaLigature1 \ 41 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 42 | 43 | \b \cf3 Example Usage 44 | \b0 : \ 45 | \ 46 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 47 | \cf3 \ul \ulc3 Adding a generic keychain item\ 48 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\fi800\ql\qnatural\pardirnatural 49 | \cf3 \ulnone \ 50 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 51 | 52 | \f3\fs22 \cf0 \CocoaLigature0 [\cf4 EMGenericKeychainItem\cf0 \cf5 addGenericKeychainItemForService\cf0 :\cf6 @"SomeAppService"\cf0 \cf5 withUsername\cf0 :\cf6 @"Joe"\cf0 \cf5 password\cf0 :\cf6 @"supersecure!"\cf0 ];\ 53 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 54 | 55 | \f0\fs26 \cf3 \ul \CocoaLigature1 \ 56 | Adding an internet keychain item\ulnone \ 57 | \ 58 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 59 | 60 | \f3\fs22 \cf0 \CocoaLigature0 [\cf4 EMInternetKeychainItem\cf0 \cf5 addInternetKeychainItemForServer\cf0 :\cf6 @"apple.com"\cf0 \cf5 withUsername\cf0 :\cf6 @"sjobs"\cf0 \cf5 password\cf0 :\cf6 @"magic"\cf0 \cf5 path\cf0 :\cf6 @"/httpdocs"\cf0 \cf5 port\cf0 :\cf7 21\cf0 \cf5 protocol\cf0 :\cf8 kSecProtocolTypeFTP\cf0 ];\ 61 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 62 | 63 | \f1 \cf0 \ 64 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 65 | 66 | \f0\i\fs26 \cf3 \CocoaLigature1 Note that the "protocol" asks for a SecProtocolType. \ 67 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 68 | 69 | \f1\i0\fs22 \cf0 \CocoaLigature0 \ 70 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx4320\tx5040\tx5760\tx6480\tx7200\tx7920\tx8640\ql\qnatural\pardirnatural 71 | 72 | \f0\fs26 \cf3 \ul \CocoaLigature1 Working with a keychain item 73 | \f1\fs22 \cf0 \ulnone \CocoaLigature0 \ 74 | \ 75 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 76 | 77 | \f3 \cf9 //Grab the keychain item.\cf0 \ 78 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 79 | \cf4 EMInternetKeychainItem\cf0 *keychainItem = [\cf4 EMInternetKeychainItem\cf0 \cf5 internetKeychainItemForServer\cf0 :\cf6 @"apple.com"\cf0 \cf5 withUsername\cf0 :\cf6 @"sjobs"\cf0 \cf5 path\cf0 :\cf6 @"/httpdocs"\cf0 \cf5 port\cf0 :\cf7 21\cf0 \cf5 protocol\cf0 :\cf8 kSecProtocolTypeFTP\cf0 ];\ 80 | \ 81 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 82 | \cf9 //Grab the password.\cf0 \ 83 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 84 | \cf10 NSString\cf0 *password = keychainItem.\cf4 password\cf0 ;\ 85 | \ 86 | \pard\tx560\pardeftab560\ql\qnatural\pardirnatural 87 | \cf9 //Change the username and password. (This automatically saves to keychain, etc.)\cf0 \ 88 | keychainItem.\cf4 username\cf0 = \cf6 @"phil"\cf0 ;\ 89 | keychainItem.\cf4 password\cf0 = \cf6 @"philsnewpassword"\cf0 ;\ 90 | } -------------------------------------------------------------------------------- /pushmenu/Growl Registration Ticket.growlRegDict: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | TicketVersion 6 | 1 7 | AllNotifications 8 | 9 | pushmenuSent 10 | pushmenuError 11 | 12 | DefaultNotifications 13 | 14 | pushmenuSent 15 | pushmenuError 16 | 17 | 18 | -------------------------------------------------------------------------------- /pushmenu/JSONKit/JSONKit.h: -------------------------------------------------------------------------------- 1 | // 2 | // JSONKit.h 3 | // http://github.com/johnezang/JSONKit 4 | // Dual licensed under either the terms of the BSD License, or alternatively 5 | // under the terms of the Apache License, Version 2.0, as specified below. 6 | // 7 | 8 | /* 9 | Copyright (c) 2011, John Engelhart 10 | 11 | All rights reserved. 12 | 13 | Redistribution and use in source and binary forms, with or without 14 | modification, are permitted provided that the following conditions are met: 15 | 16 | * Redistributions of source code must retain the above copyright 17 | notice, this list of conditions and the following disclaimer. 18 | 19 | * Redistributions in binary form must reproduce the above copyright 20 | notice, this list of conditions and the following disclaimer in the 21 | documentation and/or other materials provided with the distribution. 22 | 23 | * Neither the name of the Zang Industries nor the names of its 24 | contributors may be used to endorse or promote products derived from 25 | this software without specific prior written permission. 26 | 27 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 28 | "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 29 | LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 30 | A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 31 | OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 32 | SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED 33 | TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 34 | PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 35 | LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 36 | NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 37 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 38 | */ 39 | 40 | /* 41 | Copyright 2011 John Engelhart 42 | 43 | Licensed under the Apache License, Version 2.0 (the "License"); 44 | you may not use this file except in compliance with the License. 45 | You may obtain a copy of the License at 46 | 47 | http://www.apache.org/licenses/LICENSE-2.0 48 | 49 | Unless required by applicable law or agreed to in writing, software 50 | distributed under the License is distributed on an "AS IS" BASIS, 51 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 52 | See the License for the specific language governing permissions and 53 | limitations under the License. 54 | */ 55 | 56 | #include 57 | #include 58 | #include 59 | #include 60 | #include 61 | 62 | #ifdef __OBJC__ 63 | #import 64 | #import 65 | #import 66 | #import 67 | #import 68 | #import 69 | #endif // __OBJC__ 70 | 71 | #ifdef __cplusplus 72 | extern "C" { 73 | #endif 74 | 75 | 76 | // For Mac OS X < 10.5. 77 | #ifndef NSINTEGER_DEFINED 78 | #define NSINTEGER_DEFINED 79 | #if defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) 80 | typedef long NSInteger; 81 | typedef unsigned long NSUInteger; 82 | #define NSIntegerMin LONG_MIN 83 | #define NSIntegerMax LONG_MAX 84 | #define NSUIntegerMax ULONG_MAX 85 | #else // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) 86 | typedef int NSInteger; 87 | typedef unsigned int NSUInteger; 88 | #define NSIntegerMin INT_MIN 89 | #define NSIntegerMax INT_MAX 90 | #define NSUIntegerMax UINT_MAX 91 | #endif // defined(__LP64__) || defined(NS_BUILD_32_LIKE_64) 92 | #endif // NSINTEGER_DEFINED 93 | 94 | 95 | #ifndef _JSONKIT_H_ 96 | #define _JSONKIT_H_ 97 | 98 | #if defined(__GNUC__) && (__GNUC__ >= 4) && defined(__APPLE_CC__) && (__APPLE_CC__ >= 5465) 99 | #define JK_DEPRECATED_ATTRIBUTE __attribute__((deprecated)) 100 | #else 101 | #define JK_DEPRECATED_ATTRIBUTE 102 | #endif 103 | 104 | #define JSONKIT_VERSION_MAJOR 1 105 | #define JSONKIT_VERSION_MINOR 4 106 | 107 | typedef NSUInteger JKFlags; 108 | 109 | /* 110 | JKParseOptionComments : Allow C style // and /_* ... *_/ (without a _, obviously) comments in JSON. 111 | JKParseOptionUnicodeNewlines : Allow Unicode recommended (?:\r\n|[\n\v\f\r\x85\p{Zl}\p{Zp}]) newlines. 112 | JKParseOptionLooseUnicode : Normally the decoder will stop with an error at any malformed Unicode. 113 | This option allows JSON with malformed Unicode to be parsed without reporting an error. 114 | Any malformed Unicode is replaced with \uFFFD, or "REPLACEMENT CHARACTER". 115 | */ 116 | 117 | enum { 118 | JKParseOptionNone = 0, 119 | JKParseOptionStrict = 0, 120 | JKParseOptionComments = (1 << 0), 121 | JKParseOptionUnicodeNewlines = (1 << 1), 122 | JKParseOptionLooseUnicode = (1 << 2), 123 | JKParseOptionPermitTextAfterValidJSON = (1 << 3), 124 | JKParseOptionValidFlags = (JKParseOptionComments | JKParseOptionUnicodeNewlines | JKParseOptionLooseUnicode | JKParseOptionPermitTextAfterValidJSON), 125 | }; 126 | typedef JKFlags JKParseOptionFlags; 127 | 128 | enum { 129 | JKSerializeOptionNone = 0, 130 | JKSerializeOptionPretty = (1 << 0), 131 | JKSerializeOptionEscapeUnicode = (1 << 1), 132 | JKSerializeOptionEscapeForwardSlashes = (1 << 4), 133 | JKSerializeOptionValidFlags = (JKSerializeOptionPretty | JKSerializeOptionEscapeUnicode | JKSerializeOptionEscapeForwardSlashes), 134 | }; 135 | typedef JKFlags JKSerializeOptionFlags; 136 | 137 | #ifdef __OBJC__ 138 | 139 | typedef struct JKParseState JKParseState; // Opaque internal, private type. 140 | 141 | // As a general rule of thumb, if you use a method that doesn't accept a JKParseOptionFlags argument, it defaults to JKParseOptionStrict 142 | 143 | @interface JSONDecoder : NSObject { 144 | JKParseState *parseState; 145 | } 146 | + (id)decoder; 147 | + (id)decoderWithParseOptions:(JKParseOptionFlags)parseOptionFlags; 148 | - (id)initWithParseOptions:(JKParseOptionFlags)parseOptionFlags; 149 | - (void)clearCache; 150 | 151 | // The parse... methods were deprecated in v1.4 in favor of the v1.4 objectWith... methods. 152 | - (id)parseUTF8String:(const unsigned char *)string length:(size_t)length JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length: instead. 153 | - (id)parseUTF8String:(const unsigned char *)string length:(size_t)length error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithUTF8String:length:error: instead. 154 | // The NSData MUST be UTF8 encoded JSON. 155 | - (id)parseJSONData:(NSData *)jsonData JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData: instead. 156 | - (id)parseJSONData:(NSData *)jsonData error:(NSError **)error JK_DEPRECATED_ATTRIBUTE; // Deprecated in JSONKit v1.4. Use objectWithData:error: instead. 157 | 158 | // Methods that return immutable collection objects. 159 | - (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length; 160 | - (id)objectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error; 161 | // The NSData MUST be UTF8 encoded JSON. 162 | - (id)objectWithData:(NSData *)jsonData; 163 | - (id)objectWithData:(NSData *)jsonData error:(NSError **)error; 164 | 165 | // Methods that return mutable collection objects. 166 | - (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length; 167 | - (id)mutableObjectWithUTF8String:(const unsigned char *)string length:(NSUInteger)length error:(NSError **)error; 168 | // The NSData MUST be UTF8 encoded JSON. 169 | - (id)mutableObjectWithData:(NSData *)jsonData; 170 | - (id)mutableObjectWithData:(NSData *)jsonData error:(NSError **)error; 171 | 172 | @end 173 | 174 | //////////// 175 | #pragma mark Deserializing methods 176 | //////////// 177 | 178 | @interface NSString (JSONKitDeserializing) 179 | - (id)objectFromJSONString; 180 | - (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags; 181 | - (id)objectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; 182 | - (id)mutableObjectFromJSONString; 183 | - (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags; 184 | - (id)mutableObjectFromJSONStringWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; 185 | @end 186 | 187 | @interface NSData (JSONKitDeserializing) 188 | // The NSData MUST be UTF8 encoded JSON. 189 | - (id)objectFromJSONData; 190 | - (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags; 191 | - (id)objectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; 192 | - (id)mutableObjectFromJSONData; 193 | - (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags; 194 | - (id)mutableObjectFromJSONDataWithParseOptions:(JKParseOptionFlags)parseOptionFlags error:(NSError **)error; 195 | @end 196 | 197 | //////////// 198 | #pragma mark Serializing methods 199 | //////////// 200 | 201 | @interface NSString (JSONKitSerializing) 202 | // Convenience methods for those that need to serialize the receiving NSString (i.e., instead of having to serialize a NSArray with a single NSString, you can "serialize to JSON" just the NSString). 203 | // Normally, a string that is serialized to JSON has quotation marks surrounding it, which you may or may not want when serializing a single string, and can be controlled with includeQuotes: 204 | // includeQuotes:YES `a "test"...` -> `"a \"test\"..."` 205 | // includeQuotes:NO `a "test"...` -> `a \"test\"...` 206 | - (NSData *)JSONData; // Invokes JSONDataWithOptions:JKSerializeOptionNone includeQuotes:YES 207 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error; 208 | - (NSString *)JSONString; // Invokes JSONStringWithOptions:JKSerializeOptionNone includeQuotes:YES 209 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions includeQuotes:(BOOL)includeQuotes error:(NSError **)error; 210 | @end 211 | 212 | @interface NSArray (JSONKitSerializing) 213 | - (NSData *)JSONData; 214 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; 215 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; 216 | - (NSString *)JSONString; 217 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; 218 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; 219 | @end 220 | 221 | @interface NSDictionary (JSONKitSerializing) 222 | - (NSData *)JSONData; 223 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; 224 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; 225 | - (NSString *)JSONString; 226 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions error:(NSError **)error; 227 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingDelegate:(id)delegate selector:(SEL)selector error:(NSError **)error; 228 | @end 229 | 230 | #ifdef __BLOCKS__ 231 | 232 | @interface NSArray (JSONKitSerializingBlockAdditions) 233 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; 234 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; 235 | @end 236 | 237 | @interface NSDictionary (JSONKitSerializingBlockAdditions) 238 | - (NSData *)JSONDataWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; 239 | - (NSString *)JSONStringWithOptions:(JKSerializeOptionFlags)serializeOptions serializeUnsupportedClassesUsingBlock:(id(^)(id object))block error:(NSError **)error; 240 | @end 241 | 242 | #endif 243 | 244 | 245 | #endif // __OBJC__ 246 | 247 | #endif // _JSONKIT_H_ 248 | 249 | #ifdef __cplusplus 250 | } // extern "C" 251 | #endif -------------------------------------------------------------------------------- /pushmenu/SendtoiPhone.workflow/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | NSServices 6 | 7 | 8 | NSMenuItem 9 | 10 | default 11 | Send to iPhone 12 | 13 | NSMessage 14 | runWorkflowAsService 15 | NSSendTypes 16 | 17 | public.utf8-plain-text 18 | 19 | 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /pushmenu/SendtoiPhone.workflow/Contents/QuickLook/Thumbnail.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/pushmenu/SendtoiPhone.workflow/Contents/QuickLook/Thumbnail.png -------------------------------------------------------------------------------- /pushmenu/SendtoiPhone.workflow/Contents/document.wflow: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | AMApplicationBuild 6 | 329 7 | AMApplicationVersion 8 | 2.2 9 | AMDocumentVersion 10 | 2 11 | actions 12 | 13 | 14 | action 15 | 16 | AMAccepts 17 | 18 | Container 19 | List 20 | Optional 21 | 22 | Types 23 | 24 | com.apple.applescript.object 25 | 26 | 27 | AMActionVersion 28 | 1.0.1 29 | AMApplication 30 | 31 | Automator 32 | 33 | AMParameterProperties 34 | 35 | source 36 | 37 | 38 | AMProvides 39 | 40 | Container 41 | List 42 | Types 43 | 44 | com.apple.applescript.object 45 | 46 | 47 | ActionBundlePath 48 | /System/Library/Automator/Run AppleScript.action 49 | ActionName 50 | AppleScript ausführen 51 | ActionParameters 52 | 53 | source 54 | on run {input, parameters} tell application "pushmenu" sendmessage input end tell end run 55 | 56 | BundleIdentifier 57 | com.apple.Automator.RunScript 58 | CFBundleVersion 59 | 1.0.1 60 | CanShowSelectedItemsWhenRun 61 | 62 | CanShowWhenRun 63 | 64 | Category 65 | 66 | AMCategoryUtilities 67 | 68 | Class Name 69 | RunScriptAction 70 | InputUUID 71 | 03572CA5-3940-4B52-AC21-23B90FAA4ECE 72 | Keywords 73 | 74 | Ausführen 75 | 76 | OutputUUID 77 | 5C69768E-7D3D-4289-9B02-0F32EDFC4ED2 78 | UUID 79 | 88976C7D-12E2-4242-A16E-215B165D43C7 80 | UnlocalizedApplications 81 | 82 | Automator 83 | 84 | arguments 85 | 86 | 0 87 | 88 | default value 89 | on run {input, parameters} 90 | 91 | (* Your script goes here *) 92 | 93 | return input 94 | end run 95 | name 96 | source 97 | required 98 | 0 99 | type 100 | 0 101 | uuid 102 | 0 103 | 104 | 105 | isViewVisible 106 | 107 | location 108 | 309.500000:554.000000 109 | nibPath 110 | /System/Library/Automator/Run AppleScript.action/Contents/Resources/German.lproj/main.nib 111 | 112 | isViewVisible 113 | 114 | 115 | 116 | connectors 117 | 118 | workflowMetaData 119 | 120 | serviceInputTypeIdentifier 121 | com.apple.Automator.text 122 | serviceOutputTypeIdentifier 123 | com.apple.Automator.nothing 124 | serviceProcessesInput 125 | 0 126 | workflowTypeIdentifier 127 | com.apple.Automator.servicesMenu 128 | 129 | 130 | 131 | -------------------------------------------------------------------------------- /pushmenu/credits-tmpl.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 |

pushmenu

26 |

Release 0.3 (xxx)

27 | 28 |

29 | Developed by Sebastian Kalcher
30 | Copyright © 2014 Sebastian Kalcher 31 |

32 |

Released under BSD License. 33 | The source code is available here

34 | 35 |

36 | pushmenu uses portions of the following Open Source projects:

37 | Growl, 38 | Sparkle, 39 | EMKeychain, 40 | JSONKit, 41 | DDHotKey 42 |

43 |

44 | Icons are based on the icon "iPhone" by thenounproject.com, 45 | licensed under
CCBY3.0. 46 |

47 | 48 | -------------------------------------------------------------------------------- /pushmenu/credits.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 21 | 22 | 23 | 24 | 25 |

pushmenu

26 |

Release 0.2 (xxx)

27 | 28 |

29 | Developed by Sebastian Kalcher
30 | Copyright © 2013 Sebastian Kalcher 31 |

32 |

Released under BSD License. 33 | The source code is available here

34 | 35 |

36 | pushmenu uses portions of the following Open Source projects:

37 | Growl, 38 | Sparkle, 39 | EMKeychain, 40 | JSONKit, 41 | DDHotKey 42 |

43 |

44 | Icons are based on the icon "iPhone" by thenounproject.com, 45 | licensed under
CCBY3.0. 46 |

47 | 48 | -------------------------------------------------------------------------------- /pushmenu/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQCTYhkUXTAUw+9ovcC2SuTmJc5LTp1B 3 | Qx08APWYvfSc2GxlXStlmS4cYF43nj37k0v2a4ezNmvRmdau6vIumosb0P7E7bkt 4 | MiZ8zxBVx3MIIMgpkh12u7rOxyKYr76k2acYoK2AEPzGwMK9WcIh+2GaODCAV3iY 5 | r9KwHdIqD40783UGsV3mBHLO0EawmYswsR0tHfB//wIgkCMOktB2rFIbhSDRYSI/ 6 | QdoyBKqBEaFQWjSZK01IYIGsJEtOnEY3UnhOtQLHrcS9BweC9K2JOmZQBYIvcxQ8 7 | eLDVhkDf1q9FLx4Wr6cPgioq/5h3yVxmbnjQVmzgYCYDfv48EBa/JBppAhUApYmz 8 | maQHGhDGNOVzP4H/zPzRdI8CggEAVgmNowzjb/c4L6B3xJ/0OKguKrJtT7zaxuOD 9 | Slwh46bO2V3NIMsbznx1fxxt6ptMvtl+55rnY5hwmuYKlFBMs+75sIcUeOd0BzZ5 10 | hqlufdGRaHzGJBC8VRPhRp6U5KDQrgL03q+afvBBrcwUdqTijc3YHHDPklj9IiTQ 11 | 798J34Opeb5I0/J2vJvesDGPXY8kZodFed7I+p072vl0FT/xPem5rYOKeqT17v7D 12 | disKgBnOR1UCHg3X2HUGYH9SeJbDz1EnpB7PVlYjSt4XDrBvQaj2c12gkrRTXAIu 13 | VcOgycPnAU5aKFV8mW7B/rPKtkiGO1dtzw8ZVQUXvjFb+LlryAOCAQUAAoIBAB0r 14 | QZ461dmoYa82QGWQ2ecgyL+Ep646/rCmSbOKqKQBnFmA69oYzM0EcLYdGyrxAgJM 15 | znjeagg3W0g3Edn4PpWhbpm5BAj8LyLiDwRy5v56ZEfslMFBAlUZ6YdwHkJePDhR 16 | QyG+nG+6+WB3FiJhm9XWXr242DkLEz6VGOE5tu8i8/eU2D10NFcRARyy3krCZLYr 17 | f7whtjkUunug5F6lWjd96KJYjs0/si+B70GGJIEmPfEcMwk9fh5Czr3YrUbHSZ3d 18 | 7SZco8nO5RR8gTYh7ZETzshenVPkC4f6H4mWlFGV+CGGNj0ofR0MY0rSAjlIHMSn 19 | ZQYbu1dTalz+NDtscuE= 20 | -----END PUBLIC KEY----- 21 | -------------------------------------------------------------------------------- /pushmenu/en.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} 2 | {\colortbl;\red255\green255\blue255;} 3 | \paperw9840\paperh8400 4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 5 | 6 | \f0\b\fs24 \cf0 Engineering: 7 | \b0 \ 8 | Some people\ 9 | \ 10 | 11 | \b Human Interface Design: 12 | \b0 \ 13 | Some other people\ 14 | \ 15 | 16 | \b Testing: 17 | \b0 \ 18 | Hopefully not nobody\ 19 | \ 20 | 21 | \b Documentation: 22 | \b0 \ 23 | Whoever\ 24 | \ 25 | 26 | \b With special thanks to: 27 | \b0 \ 28 | Mom\ 29 | } 30 | -------------------------------------------------------------------------------- /pushmenu/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /pushmenu/license.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2011, Sebastian Kalcher. 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | * Redistributions of source code must retain the above copyright 7 | notice, this list of conditions and the following disclaimer. 8 | * Redistributions in binary form must reproduce the above copyright 9 | notice, this list of conditions and the following disclaimer in the 10 | documentation and/or other materials provided with the distribution. 11 | * Neither the name of Sebastian Kalcher nor the names of the contributors 12 | may be used to endorse or promote products derived from this software 13 | without specific prior written permission. 14 | 15 | THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS ''AS IS'' AND ANY 16 | EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 17 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 18 | DISCLAIMED. IN NO EVENT SHALL SEBASTIAN KALCHER BE LIABLE FOR ANY 19 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 20 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 21 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 22 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 23 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 24 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 | -------------------------------------------------------------------------------- /pushmenu/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // pushmenu 4 | // 5 | // Created by Sebastian Kalcher on 29.07.11. 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, char *argv[]) 12 | { 13 | return NSApplicationMain(argc, (const char **)argv); 14 | } 15 | -------------------------------------------------------------------------------- /pushmenu/pushmenu-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleDocumentTypes 8 | 9 | CFBundleExecutable 10 | ${EXECUTABLE_NAME} 11 | CFBundleIconFile 12 | pushmenu.icns 13 | CFBundleIdentifier 14 | de.sekal.${PRODUCT_NAME:rfc1034identifier} 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundleName 18 | ${PRODUCT_NAME} 19 | CFBundlePackageType 20 | APPL 21 | CFBundleShortVersionString 22 | 0.3 23 | CFBundleURLTypes 24 | 25 | CFBundleVersion 26 | 0.3 27 | LSApplicationCategoryType 28 | public.app-category.utilities 29 | LSMinimumSystemVersion 30 | ${MACOSX_DEPLOYMENT_TARGET} 31 | LSUIElement 32 | 33 | NSAppleScriptEnabled 34 | 35 | NSHumanReadableCopyright 36 | Copyright © 2014 Sebastian Kalcher. All rights reserved. 37 | NSMainNibFile 38 | MainMenu 39 | NSPrincipalClass 40 | NSApplication 41 | NSServices 42 | 43 | OSAScriptingDefinition 44 | pushmenu.sdef 45 | SUFeedURL 46 | https://raw.github.com/kalcher/pushmenu/master/pushmenu-appcast.xml 47 | SUScheduledCheckInterval 48 | 172800 49 | SUPublicDSAKeyFile 50 | dsa_pub.pem 51 | UTExportedTypeDeclarations 52 | 53 | UTImportedTypeDeclarations 54 | 55 | 56 | 57 | -------------------------------------------------------------------------------- /pushmenu/pushmenu-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header for all source files of the 'pushmenu' target in the 'pushmenu' project 3 | // 4 | 5 | #ifdef __OBJC__ 6 | #import 7 | #endif 8 | -------------------------------------------------------------------------------- /pushmenu/pushmenu.sdef: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /pushmenu/pushmenuAppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // pushmenuAppDelegate.h 3 | // pushmenu 4 | // 5 | // Copyright (c) 2011, Sebastian Kalcher. 6 | // All rights reserved. 7 | // 8 | // Redistribution and use in source and binary forms, with or without 9 | // modification, are permitted provided that the following conditions are met: 10 | // * Redistributions of source code must retain the above copyright 11 | // notice, this list of conditions and the following disclaimer. 12 | // * Redistributions in binary form must reproduce the above copyright 13 | // notice, this list of conditions and the following disclaimer in the 14 | // documentation and/or other materials provided with the distribution. 15 | // * Neither the name of Sebastian Kalcher nor the names of the contributors 16 | // may be used to endorse or promote products derived from this software 17 | // without specific prior written permission. 18 | // 19 | // THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDERS ''AS IS'' AND ANY 20 | // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED 21 | // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 22 | // DISCLAIMED. IN NO EVENT SHALL SEBASTIAN KALCHER BE LIABLE FOR ANY 23 | // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES 24 | // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 25 | // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 26 | // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 27 | // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 28 | // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29 | 30 | #import 31 | #import 32 | #import "EMKeychain/EMKeychainItem.h" 33 | 34 | @interface pushmenuAppDelegate : NSScriptCommand < NSApplicationDelegate, 35 | NSXMLParserDelegate, 36 | NSTextFieldDelegate, 37 | GrowlApplicationBridgeDelegate 38 | > { 39 | NSWindow *window; 40 | NSStatusItem *pmItem; 41 | 42 | NSImage *pmImage; 43 | NSImage *pmActive; 44 | 45 | IBOutlet NSMenu *pmMenu; 46 | IBOutlet NSTextView *credits; 47 | IBOutlet NSWindow *prefWindow; 48 | IBOutlet NSWindow *aboutWindow; 49 | IBOutlet NSButtonCell *installService; 50 | IBOutlet NSButtonCell *shortcut; 51 | 52 | // Prowl 53 | IBOutlet NSTextField *ProwlApikey; 54 | BOOL ProwlActive; 55 | NSString *ProwlStatusCode; 56 | 57 | 58 | // Notifo 59 | IBOutlet NSTextField *NotifoUser; 60 | IBOutlet NSTextField *NotifoSecret; 61 | BOOL NotifoActive; 62 | 63 | // Boxcar 64 | IBOutlet NSTextField *BoxcarUser; 65 | IBOutlet NSTextField *BoxcarPassword; 66 | IBOutlet NSTextField *BoxcarToken; 67 | BOOL BoxcarActive; 68 | 69 | NSData *growlImage; 70 | 71 | // keychain 72 | EMGenericKeychainItem *PKeychainItem; 73 | EMGenericKeychainItem *NKeychainItem; 74 | EMGenericKeychainItem *BKeychainItem; 75 | } 76 | 77 | - (IBAction)handleLoginItem:(id)sender; 78 | - (IBAction)clipboard2iPhone:(id)sender; 79 | - (IBAction)display3rdPartyLicenses:(id)sender; 80 | - (IBAction)installService:(id)sender; 81 | - (IBAction)hotKey:(id) sender; 82 | 83 | - (void)prowlSendMessage:(NSString *)message; 84 | - (void)notifoSendMessage:(NSString *)message; 85 | - (void)boxcarSendMessage:(NSString *)message; 86 | 87 | // Applescript 88 | - (id)performDefaultImplementation; 89 | 90 | 91 | - (NSString *)urlEncodeString:(NSString *)str; 92 | 93 | 94 | @property (assign) IBOutlet NSWindow *window; 95 | 96 | @end 97 | -------------------------------------------------------------------------------- /pushmenu/pushmenu_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/pushmenu/pushmenu_menu.png -------------------------------------------------------------------------------- /pushmenu/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/pushmenu/screenshot.png -------------------------------------------------------------------------------- /pushmenuTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /pushmenuTests/pushmenuTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | de.sekal.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /pushmenuTests/pushmenuTests.h: -------------------------------------------------------------------------------- 1 | // 2 | // pushmenuTests.h 3 | // pushmenuTests 4 | // 5 | // Created by Sebastian Kalcher on 29.07.11. 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface pushmenuTests : SenTestCase 12 | 13 | @end 14 | -------------------------------------------------------------------------------- /pushmenuTests/pushmenuTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // pushmenuTests.m 3 | // pushmenuTests 4 | // 5 | // Created by Sebastian Kalcher on 29.07.11. 6 | // Copyright 2011 __MyCompanyName__. All rights reserved. 7 | // 8 | 9 | #import "pushmenuTests.h" 10 | 11 | @implementation pushmenuTests 12 | 13 | - (void)setUp 14 | { 15 | [super setUp]; 16 | 17 | // Set-up code here. 18 | } 19 | 20 | - (void)tearDown 21 | { 22 | // Tear-down code here. 23 | 24 | [super tearDown]; 25 | } 26 | 27 | - (void)testExample 28 | { 29 | STFail(@"Unit tests are not implemented yet in pushmenuTests"); 30 | } 31 | 32 | @end 33 | -------------------------------------------------------------------------------- /pushmenu_large.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kalcher/pushmenu/22ae34081f198fdd36fee03477d9152935d3532b/pushmenu_large.png --------------------------------------------------------------------------------