├── .gitignore ├── Frameworks └── Sparkle.framework │ ├── Headers │ ├── Modules │ ├── PrivateHeaders │ ├── Resources │ ├── Sparkle │ └── Versions │ ├── A │ ├── Headers │ │ ├── SUAppcast.h │ │ ├── SUAppcastItem.h │ │ ├── SUErrors.h │ │ ├── SUExport.h │ │ ├── SUStandardVersionComparator.h │ │ ├── SUUpdater.h │ │ ├── SUVersionComparisonProtocol.h │ │ ├── SUVersionDisplayProtocol.h │ │ └── Sparkle.h │ ├── Modules │ │ └── module.modulemap │ ├── PrivateHeaders │ │ └── SUUnarchiver.h │ ├── Resources │ │ ├── Autoupdate.app │ │ │ └── Contents │ │ │ │ ├── Info.plist │ │ │ │ ├── MacOS │ │ │ │ └── Autoupdate │ │ │ │ ├── PkgInfo │ │ │ │ └── Resources │ │ │ │ ├── AppIcon.icns │ │ │ │ ├── SUStatus.nib │ │ │ │ ├── ar.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ca.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── cs.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── da.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── de.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── el.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── en.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── es.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── fi.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── fr.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── he.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── is.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── it.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ja.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ko.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── nb.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── nl.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pl.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pt_BR.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── pt_PT.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ro.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── ru.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sk.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sl.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── sv.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── th.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── tr.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── uk.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ ├── zh_CN.lproj │ │ │ │ └── Sparkle.strings │ │ │ │ └── zh_TW.lproj │ │ │ │ └── Sparkle.strings │ │ ├── Info.plist │ │ ├── SUModelTranslation.plist │ │ ├── SUStatus.nib │ │ ├── ar.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── ca.lproj │ │ │ └── Sparkle.strings │ │ ├── cs.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── da.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── de.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── el.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── en.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── es.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── fi.lproj │ │ │ └── Sparkle.strings │ │ ├── fr.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── fr_CA.lproj │ │ ├── he.lproj │ │ │ └── Sparkle.strings │ │ ├── is.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── it.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── ja.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── ko.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── nb.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── nl.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── pl.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── pt.lproj │ │ ├── pt_BR.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── pt_PT.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── ro.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── ru.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── sk.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── sl.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── sv.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── th.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── tr.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── uk.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ ├── zh_CN.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ │ └── zh_TW.lproj │ │ │ ├── SUAutomaticUpdateAlert.nib │ │ │ ├── SUUpdateAlert.nib │ │ │ ├── SUUpdatePermissionPrompt.nib │ │ │ └── Sparkle.strings │ └── Sparkle │ └── Current ├── LICENSE.txt ├── README.md ├── SVG Icons ├── README.md ├── SpotiFree_Black.ai ├── SpotiFree_Black.svg ├── SpotiFree_Color.ai └── SpotiFree_Color.svg ├── Spotifree.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata └── Spotifree ├── AppDelegate.swift ├── AppleScriptCmds.plist ├── Assets.xcassets ├── AppIcon.appiconset │ ├── Contents.json │ ├── icon_1024.png │ ├── icon_128.png │ ├── icon_16.png │ ├── icon_256.png │ ├── icon_32.png │ ├── icon_512.png │ └── icon_64.png ├── Contents.json ├── statusBarIconActiveTemplate.imageset │ ├── Contents.json │ ├── active.png │ └── active@2x.png ├── statusBarIconBlockingAdTemplate.imageset │ ├── Contents.json │ ├── blocking_ad.png │ └── blocking_ad@2x.png ├── statusBarIconHighlighted.imageset │ ├── Contents.json │ ├── inverted.png │ └── inverted@2x.png └── statusBarIconInactiveTemplate.imageset │ ├── Contents.json │ ├── inactive.png │ └── inactive@2x.png ├── Credits.rtf ├── DataManager.swift ├── Info.plist ├── Main.storyboard ├── MenuController.swift ├── Spotify.swift ├── SpotifyManager.swift ├── de.lproj └── Localizable.strings ├── dsa_pub.pem ├── en.lproj └── Localizable.strings ├── fi.lproj └── Localizable.strings ├── fr.lproj └── Localizable.strings ├── hu.lproj └── Localizable.strings ├── it.lproj └── Localizable.strings ├── ko-KR.lproj └── Localizable.strings ├── nl.lproj └── Localizable.strings └── pl-PL.lproj └── Localizable.strings /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # CocoaPods 23 | Pods 24 | 25 | *.pem 26 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/PrivateHeaders: -------------------------------------------------------------------------------- 1 | Versions/Current/PrivateHeaders -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Sparkle: -------------------------------------------------------------------------------- 1 | Versions/Current/Sparkle -------------------------------------------------------------------------------- /Frameworks/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 | #import 13 | #import "SUExport.h" 14 | 15 | @class SUAppcastItem; 16 | SU_EXPORT @interface SUAppcast : NSObject 17 | 18 | @property (copy) NSString *userAgentString; 19 | @property (copy) NSDictionary *httpHeaders; 20 | 21 | - (void)fetchAppcastFromURL:(NSURL *)url completionBlock:(void (^)(NSError *))err; 22 | 23 | @property (readonly, copy) NSArray *items; 24 | @end 25 | 26 | #endif 27 | -------------------------------------------------------------------------------- /Frameworks/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 | #import 13 | #import "SUExport.h" 14 | 15 | SU_EXPORT @interface SUAppcastItem : NSObject 16 | @property (copy, readonly) NSString *title; 17 | @property (copy, readonly) NSDate *date; 18 | @property (copy, readonly) NSString *itemDescription; 19 | @property (strong, readonly) NSURL *releaseNotesURL; 20 | @property (copy, readonly) NSString *DSASignature; 21 | @property (copy, readonly) NSString *minimumSystemVersion; 22 | @property (copy, readonly) NSString *maximumSystemVersion; 23 | @property (strong, readonly) NSURL *fileURL; 24 | @property (copy, readonly) NSString *versionString; 25 | @property (copy, readonly) NSString *displayVersionString; 26 | @property (copy, readonly) NSDictionary *deltaUpdates; 27 | @property (strong, readonly) NSURL *infoURL; 28 | 29 | // Initializes with data from a dictionary provided by the RSS class. 30 | - (instancetype)initWithDictionary:(NSDictionary *)dict; 31 | - (instancetype)initWithDictionary:(NSDictionary *)dict failureReason:(NSString **)error; 32 | 33 | @property (getter=isDeltaUpdate, readonly) BOOL deltaUpdate; 34 | @property (getter=isCriticalUpdate, readonly) BOOL criticalUpdate; 35 | @property (getter=isInformationOnlyUpdate, readonly) BOOL informationOnlyUpdate; 36 | 37 | // Returns the dictionary provided in initWithDictionary; this might be useful later for extensions. 38 | @property (readonly, copy) NSDictionary *propertiesDictionary; 39 | 40 | - (NSURL *)infoURL; 41 | 42 | @end 43 | 44 | #endif 45 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUErrors.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUErrors.h 3 | // Sparkle 4 | // 5 | // Created by C.W. Betts on 10/13/14. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUERRORS_H 10 | #define SUERRORS_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | 15 | /** 16 | * Error domain used by Sparkle 17 | */ 18 | SU_EXPORT extern NSString *const SUSparkleErrorDomain; 19 | 20 | typedef NS_ENUM(OSStatus, SUError) { 21 | // Appcast phase errors. 22 | SUAppcastParseError = 1000, 23 | SUNoUpdateError = 1001, 24 | SUAppcastError = 1002, 25 | SURunningFromDiskImageError = 1003, 26 | 27 | // Downlaod phase errors. 28 | SUTemporaryDirectoryError = 2000, 29 | 30 | // Extraction phase errors. 31 | SUUnarchivingError = 3000, 32 | SUSignatureError = 3001, 33 | 34 | // Installation phase errors. 35 | SUFileCopyFailure = 4000, 36 | SUAuthenticationFailure = 4001, 37 | SUMissingUpdateError = 4002, 38 | SUMissingInstallerToolError = 4003, 39 | SURelaunchError = 4004, 40 | SUInstallationError = 4005, 41 | SUDowngradeError = 4006, 42 | 43 | // System phase errors 44 | SUSystemPowerOffError = 5000 45 | }; 46 | 47 | #endif 48 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUExport.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUExport.h 3 | // Sparkle 4 | // 5 | // Created by Jake Petroules on 2014-08-23. 6 | // Copyright (c) 2014 Sparkle Project. All rights reserved. 7 | // 8 | 9 | #ifndef SUEXPORT_H 10 | #define SUEXPORT_H 11 | 12 | #ifdef BUILDING_SPARKLE 13 | #define SU_EXPORT __attribute__((visibility("default"))) 14 | #else 15 | #define SU_EXPORT 16 | #endif 17 | 18 | #endif 19 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUStandardVersionComparator.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUStandardVersionComparator.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 SUSTANDARDVERSIONCOMPARATOR_H 10 | #define SUSTANDARDVERSIONCOMPARATOR_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | #import "SUVersionComparisonProtocol.h" 15 | 16 | /*! 17 | Sparkle's default version comparator. 18 | 19 | This comparator is adapted from MacPAD, by Kevin Ballard. 20 | It's "dumb" in that it does essentially string comparison, 21 | in components split by character type. 22 | */ 23 | SU_EXPORT @interface SUStandardVersionComparator : NSObject 24 | 25 | /*! 26 | Returns a singleton instance of the comparator. 27 | */ 28 | + (SUStandardVersionComparator *)defaultComparator; 29 | 30 | /*! 31 | Compares version strings through textual analysis. 32 | 33 | See the implementation for more details. 34 | */ 35 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; 36 | @end 37 | 38 | #endif 39 | -------------------------------------------------------------------------------- /Frameworks/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 | #import "SUExport.h" 14 | #import "SUVersionComparisonProtocol.h" 15 | #import "SUVersionDisplayProtocol.h" 16 | 17 | @class SUUpdateDriver, SUAppcastItem, SUHost, SUAppcast; 18 | 19 | @protocol SUUpdaterDelegate; 20 | 21 | /*! 22 | The main API in Sparkle for controlling the update mechanism. 23 | 24 | This class is used to configure the update paramters as well as manually 25 | and automatically schedule and control checks for updates. 26 | */ 27 | SU_EXPORT @interface SUUpdater : NSObject 28 | 29 | @property (unsafe_unretained) IBOutlet id delegate; 30 | 31 | + (SUUpdater *)sharedUpdater; 32 | + (SUUpdater *)updaterForBundle:(NSBundle *)bundle; 33 | - (instancetype)initForBundle:(NSBundle *)bundle; 34 | 35 | @property (readonly, strong) NSBundle *hostBundle; 36 | @property (strong, readonly) NSBundle *sparkleBundle; 37 | 38 | @property BOOL automaticallyChecksForUpdates; 39 | 40 | @property NSTimeInterval updateCheckInterval; 41 | 42 | /*! 43 | * The URL of the appcast used to download update information. 44 | * 45 | * This property must be called on the main thread. 46 | */ 47 | @property (copy) NSURL *feedURL; 48 | 49 | @property (nonatomic, copy) NSString *userAgentString; 50 | 51 | @property (copy) NSDictionary *httpHeaders; 52 | 53 | @property BOOL sendsSystemProfile; 54 | 55 | @property BOOL automaticallyDownloadsUpdates; 56 | 57 | /*! 58 | Explicitly checks for updates and displays a progress dialog while doing so. 59 | 60 | This method is meant for a main menu item. 61 | Connect any menu item to this action in Interface Builder, 62 | and Sparkle will check for updates and report back its findings verbosely 63 | when it is invoked. 64 | */ 65 | - (IBAction)checkForUpdates:(id)sender; 66 | 67 | /*! 68 | Checks for updates, but does not display any UI unless an update is found. 69 | 70 | This is meant for programmatically initating a check for updates. That is, 71 | it will display no UI unless it actually finds an update, in which case it 72 | proceeds as usual. 73 | 74 | If the fully automated updating is turned on, however, this will invoke that 75 | behavior, and if an update is found, it will be downloaded and prepped for 76 | installation. 77 | */ 78 | - (void)checkForUpdatesInBackground; 79 | 80 | /*! 81 | Checks for updates and, if available, immediately downloads and installs them. 82 | A progress dialog is shown but the user will never be prompted to read the 83 | release notes. 84 | 85 | You may want to respond to the userDidCancelDownload delegate method in case 86 | the user clicks the "Cancel" button while the update is downloading. 87 | */ 88 | - (void)installUpdatesIfAvailable; 89 | 90 | /*! 91 | Returns the date of last update check. 92 | 93 | \returns \c nil if no check has been performed. 94 | */ 95 | @property (readonly, copy) NSDate *lastUpdateCheckDate; 96 | 97 | /*! 98 | Begins a "probing" check for updates which will not actually offer to 99 | update to that version. 100 | 101 | However, the delegate methods 102 | SUUpdaterDelegate::updater:didFindValidUpdate: and 103 | SUUpdaterDelegate::updaterDidNotFindUpdate: will be called, 104 | so you can use that information in your UI. 105 | */ 106 | - (void)checkForUpdateInformation; 107 | 108 | /*! 109 | Appropriately schedules or cancels the update checking timer according to 110 | the preferences for time interval and automatic checks. 111 | 112 | This call does not change the date of the next check, 113 | but only the internal NSTimer. 114 | */ 115 | - (void)resetUpdateCycle; 116 | 117 | @property (readonly) BOOL updateInProgress; 118 | 119 | @end 120 | 121 | // ----------------------------------------------------------------------------- 122 | // SUUpdater Notifications for events that might be interesting to more than just the delegate 123 | // The updater will be the notification object 124 | // ----------------------------------------------------------------------------- 125 | SU_EXPORT extern NSString *const SUUpdaterDidFinishLoadingAppCastNotification; 126 | SU_EXPORT extern NSString *const SUUpdaterDidFindValidUpdateNotification; 127 | SU_EXPORT extern NSString *const SUUpdaterDidNotFindUpdateNotification; 128 | SU_EXPORT extern NSString *const SUUpdaterWillRestartNotification; 129 | #define SUUpdaterWillRelaunchApplicationNotification SUUpdaterWillRestartNotification; 130 | #define SUUpdaterWillInstallUpdateNotification SUUpdaterWillRestartNotification; 131 | 132 | // Key for the SUAppcastItem object in the SUUpdaterDidFindValidUpdateNotification userInfo 133 | SU_EXPORT extern NSString *const SUUpdaterAppcastItemNotificationKey; 134 | // Key for the SUAppcast object in the SUUpdaterDidFinishLoadingAppCastNotification userInfo 135 | SU_EXPORT extern NSString *const SUUpdaterAppcastNotificationKey; 136 | 137 | // ----------------------------------------------------------------------------- 138 | // SUUpdater Delegate: 139 | // ----------------------------------------------------------------------------- 140 | 141 | /*! 142 | Provides methods to control the behavior of an SUUpdater object. 143 | */ 144 | @protocol SUUpdaterDelegate 145 | @optional 146 | 147 | /*! 148 | Returns whether to allow Sparkle to pop up. 149 | 150 | For example, this may be used to prevent Sparkle from interrupting a setup assistant. 151 | 152 | \param updater The SUUpdater instance. 153 | */ 154 | - (BOOL)updaterMayCheckForUpdates:(SUUpdater *)updater; 155 | 156 | /*! 157 | Returns additional parameters to append to the appcast URL's query string. 158 | 159 | This is potentially based on whether or not Sparkle will also be sending along the system profile. 160 | 161 | \param updater The SUUpdater instance. 162 | \param sendingProfile Whether the system profile will also be sent. 163 | 164 | \return An array of dictionaries with keys: "key", "value", "displayKey", "displayValue", the latter two being specifically for display to the user. 165 | */ 166 | - (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile; 167 | 168 | /*! 169 | Returns a custom appcast URL. 170 | 171 | Override this to dynamically specify the entire URL. 172 | 173 | \param updater The SUUpdater instance. 174 | */ 175 | - (NSString *)feedURLStringForUpdater:(SUUpdater *)updater; 176 | 177 | /*! 178 | Returns whether Sparkle should prompt the user about automatic update checks. 179 | 180 | Use this to override the default behavior. 181 | 182 | \param updater The SUUpdater instance. 183 | */ 184 | - (BOOL)updaterShouldPromptForPermissionToCheckForUpdates:(SUUpdater *)updater; 185 | 186 | /*! 187 | Called after Sparkle has downloaded the appcast from the remote server. 188 | 189 | Implement this if you want to do some special handling with the appcast once it finishes loading. 190 | 191 | \param updater The SUUpdater instance. 192 | \param appcast The appcast that was downloaded from the remote server. 193 | */ 194 | - (void)updater:(SUUpdater *)updater didFinishLoadingAppcast:(SUAppcast *)appcast; 195 | 196 | /*! 197 | Returns the item in the appcast corresponding to the update that should be installed. 198 | 199 | If you're using special logic or extensions in your appcast, 200 | implement this to use your own logic for finding a valid update, if any, 201 | in the given appcast. 202 | 203 | \param appcast The appcast that was downloaded from the remote server. 204 | \param updater The SUUpdater instance. 205 | */ 206 | - (SUAppcastItem *)bestValidUpdateInAppcast:(SUAppcast *)appcast forUpdater:(SUUpdater *)updater; 207 | 208 | /*! 209 | Called when a valid update is found by the update driver. 210 | 211 | \param updater The SUUpdater instance. 212 | \param item The appcast item corresponding to the update that is proposed to be installed. 213 | */ 214 | - (void)updater:(SUUpdater *)updater didFindValidUpdate:(SUAppcastItem *)item; 215 | 216 | /*! 217 | Called when a valid update is not found. 218 | 219 | \param updater The SUUpdater instance. 220 | */ 221 | - (void)updaterDidNotFindUpdate:(SUUpdater *)updater; 222 | 223 | /*! 224 | Called immediately before downloading the specified update. 225 | 226 | \param updater The SUUpdater instance. 227 | \param item The appcast item corresponding to the update that is proposed to be downloaded. 228 | \param request The mutable URL request that will be used to download the update. 229 | */ 230 | - (void)updater:(SUUpdater *)updater willDownloadUpdate:(SUAppcastItem *)item withRequest:(NSMutableURLRequest *)request; 231 | 232 | /*! 233 | Called after the specified update failed to download. 234 | 235 | \param updater The SUUpdater instance. 236 | \param item The appcast item corresponding to the update that failed to download. 237 | \param error The error generated by the failed download. 238 | */ 239 | - (void)updater:(SUUpdater *)updater failedToDownloadUpdate:(SUAppcastItem *)item error:(NSError *)error; 240 | 241 | /*! 242 | Called when the user clicks the cancel button while and update is being downloaded. 243 | 244 | \param updater The SUUpdater instance. 245 | */ 246 | - (void)userDidCancelDownload:(SUUpdater *)updater; 247 | 248 | /*! 249 | Called immediately before installing the specified update. 250 | 251 | \param updater The SUUpdater instance. 252 | \param item The appcast item corresponding to the update that is proposed to be installed. 253 | */ 254 | - (void)updater:(SUUpdater *)updater willInstallUpdate:(SUAppcastItem *)item; 255 | 256 | /*! 257 | Returns whether the relaunch should be delayed in order to perform other tasks. 258 | 259 | This is not called if the user didn't relaunch on the previous update, 260 | in that case it will immediately restart. 261 | 262 | \param updater The SUUpdater instance. 263 | \param item The appcast item corresponding to the update that is proposed to be installed. 264 | \param invocation The invocation that must be completed before continuing with the relaunch. 265 | 266 | \return \c YES to delay the relaunch until \p invocation is invoked. 267 | */ 268 | - (BOOL)updater:(SUUpdater *)updater shouldPostponeRelaunchForUpdate:(SUAppcastItem *)item untilInvoking:(NSInvocation *)invocation; 269 | 270 | /*! 271 | Returns whether the application should be relaunched at all. 272 | 273 | Some apps \b cannot be relaunched under certain circumstances. 274 | This method can be used to explicitly prevent a relaunch. 275 | 276 | \param updater The SUUpdater instance. 277 | */ 278 | - (BOOL)updaterShouldRelaunchApplication:(SUUpdater *)updater; 279 | 280 | /*! 281 | Called immediately before relaunching. 282 | 283 | \param updater The SUUpdater instance. 284 | */ 285 | - (void)updaterWillRelaunchApplication:(SUUpdater *)updater; 286 | 287 | /*! 288 | Returns an object that compares version numbers to determine their arithmetic relation to each other. 289 | 290 | This method allows you to provide a custom version comparator. 291 | If you don't implement this method or return \c nil, 292 | the standard version comparator will be used. 293 | 294 | \sa SUStandardVersionComparator 295 | 296 | \param updater The SUUpdater instance. 297 | */ 298 | - (id)versionComparatorForUpdater:(SUUpdater *)updater; 299 | 300 | /*! 301 | Returns an object that formats version numbers for display to the user. 302 | 303 | If you don't implement this method or return \c nil, 304 | the standard version formatter will be used. 305 | 306 | \sa SUUpdateAlert 307 | 308 | \param updater The SUUpdater instance. 309 | */ 310 | - (id)versionDisplayerForUpdater:(SUUpdater *)updater; 311 | 312 | /*! 313 | Returns the path which is used to relaunch the client after the update is installed. 314 | 315 | The default is the path of the host bundle. 316 | 317 | \param updater The SUUpdater instance. 318 | */ 319 | - (NSString *)pathToRelaunchForUpdater:(SUUpdater *)updater; 320 | 321 | /*! 322 | Called before an updater shows a modal alert window, 323 | to give the host the opportunity to hide attached windows that may get in the way. 324 | 325 | \param updater The SUUpdater instance. 326 | */ 327 | - (void)updaterWillShowModalAlert:(SUUpdater *)updater; 328 | 329 | /*! 330 | Called after an updater shows a modal alert window, 331 | to give the host the opportunity to hide attached windows that may get in the way. 332 | 333 | \param updater The SUUpdater instance. 334 | */ 335 | - (void)updaterDidShowModalAlert:(SUUpdater *)updater; 336 | 337 | /*! 338 | Called when an update is scheduled to be silently installed on quit. 339 | 340 | \param updater The SUUpdater instance. 341 | \param item The appcast item corresponding to the update that is proposed to be installed. 342 | \param invocation Can be used to trigger an immediate silent install and relaunch. 343 | */ 344 | - (void)updater:(SUUpdater *)updater willInstallUpdateOnQuit:(SUAppcastItem *)item immediateInstallationInvocation:(NSInvocation *)invocation; 345 | 346 | /*! 347 | Calls after an update that was scheduled to be silently installed on quit has been canceled. 348 | 349 | \param updater The SUUpdater instance. 350 | \param item The appcast item corresponding to the update that was proposed to be installed. 351 | */ 352 | - (void)updater:(SUUpdater *)updater didCancelInstallUpdateOnQuit:(SUAppcastItem *)item; 353 | 354 | /*! 355 | Called after an update is aborted due to an error. 356 | 357 | \param updater The SUUpdater instance. 358 | \param error The error that caused the abort 359 | */ 360 | - (void)updater:(SUUpdater *)updater didAbortWithError:(NSError *)error; 361 | 362 | @end 363 | 364 | #endif 365 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionComparisonProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionComparisonProtocol.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 12/21/07. 6 | // Copyright 2007 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUVERSIONCOMPARISONPROTOCOL_H 10 | #define SUVERSIONCOMPARISONPROTOCOL_H 11 | 12 | #import 13 | #import "SUExport.h" 14 | 15 | /*! 16 | Provides version comparison facilities for Sparkle. 17 | */ 18 | @protocol SUVersionComparison 19 | 20 | /*! 21 | An abstract method to compare two version strings. 22 | 23 | Should return NSOrderedAscending if b > a, NSOrderedDescending if b < a, 24 | and NSOrderedSame if they are equivalent. 25 | */ 26 | - (NSComparisonResult)compareVersion:(NSString *)versionA toVersion:(NSString *)versionB; // *** MAY BE CALLED ON NON-MAIN THREAD! 27 | 28 | @end 29 | 30 | #endif 31 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Headers/SUVersionDisplayProtocol.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUVersionDisplayProtocol.h 3 | // EyeTV 4 | // 5 | // Created by Uli Kusterer on 08.12.09. 6 | // Copyright 2009 Elgato Systems GmbH. All rights reserved. 7 | // 8 | 9 | #import 10 | #import "SUExport.h" 11 | 12 | /*! 13 | Applies special display formatting to version numbers. 14 | */ 15 | @protocol SUVersionDisplay 16 | 17 | /*! 18 | Formats two version strings. 19 | 20 | Both versions are provided so that important distinguishing information 21 | can be displayed while also leaving out unnecessary/confusing parts. 22 | */ 23 | - (void)formatVersion:(NSString **)inOutVersionA andVersion:(NSString **)inOutVersionB; 24 | 25 | @end 26 | -------------------------------------------------------------------------------- /Frameworks/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 | #import 13 | 14 | // This list should include the shared headers. It doesn't matter if some of them aren't shared (unless 15 | // there are name-space collisions) so we can list all of them to start with: 16 | 17 | #import "SUAppcast.h" 18 | #import "SUAppcastItem.h" 19 | #import "SUStandardVersionComparator.h" 20 | #import "SUUpdater.h" 21 | #import "SUVersionComparisonProtocol.h" 22 | #import "SUVersionDisplayProtocol.h" 23 | #import "SUErrors.h" 24 | 25 | #endif 26 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Sparkle { 2 | umbrella header "Sparkle.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/PrivateHeaders/SUUnarchiver.h: -------------------------------------------------------------------------------- 1 | // 2 | // SUUnarchiver.h 3 | // Sparkle 4 | // 5 | // Created by Andy Matuschak on 3/16/06. 6 | // Copyright 2006 Andy Matuschak. All rights reserved. 7 | // 8 | 9 | #ifndef SUUNARCHIVER_H 10 | #define SUUNARCHIVER_H 11 | 12 | #import 13 | 14 | @class SUHost; 15 | @protocol SUUnarchiverDelegate; 16 | 17 | @interface SUUnarchiver : NSObject 18 | 19 | @property (copy, readonly) NSString *archivePath; 20 | @property (copy, readonly) NSString *updateHostBundlePath; 21 | @property (weak) id delegate; 22 | 23 | + (SUUnarchiver *)unarchiverForPath:(NSString *)path updatingHostBundlePath:(NSString *)host; 24 | 25 | - (void)start; 26 | @end 27 | 28 | @protocol SUUnarchiverDelegate 29 | - (void)unarchiverDidFinish:(SUUnarchiver *)unarchiver; 30 | - (void)unarchiverDidFail:(SUUnarchiver *)unarchiver; 31 | @optional 32 | - (void)unarchiver:(SUUnarchiver *)unarchiver extractedProgress:(double)progress; 33 | @end 34 | 35 | #endif 36 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 15C50 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | Autoupdate 11 | CFBundleIconFile 12 | AppIcon 13 | CFBundleIdentifier 14 | org.sparkle-project.Sparkle.Autoupdate 15 | CFBundleInfoDictionaryVersion 16 | 6.0 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.13.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1.13.0 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 7C68 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 15C43 37 | DTSDKName 38 | macosx10.11 39 | DTXcode 40 | 0720 41 | DTXcodeBuild 42 | 7C68 43 | LSBackgroundOnly 44 | 1 45 | LSMinimumSystemVersion 46 | 10.7 47 | LSUIElement 48 | 1 49 | NSMainNibFile 50 | MainMenu 51 | NSPrincipalClass 52 | NSApplication 53 | 54 | 55 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/MacOS/Autoupdate -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/PkgInfo: -------------------------------------------------------------------------------- 1 | APPL???? -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/AppIcon.icns -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/Autoupdate.app/Contents/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 15C50 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Sparkle 11 | CFBundleIdentifier 12 | org.sparkle-project.Sparkle 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Sparkle 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.13.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 1.13.0 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 7C68 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 15C43 37 | DTSDKName 38 | macosx10.11 39 | DTXcode 40 | 0720 41 | DTXcodeBuild 42 | 7C68 43 | 44 | 45 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/SUModelTranslation.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ADP2,1 6 | Developer Transition Kit 7 | iMac1,1 8 | iMac G3 (Rev A-D) 9 | iMac4,1 10 | iMac (Core Duo) 11 | iMac4,2 12 | iMac for Education (17 inch, Core Duo) 13 | iMac5,1 14 | iMac (Core 2 Duo, 17 or 20 inch, SuperDrive) 15 | iMac5,2 16 | iMac (Core 2 Duo, 17 inch, Combo Drive) 17 | iMac6,1 18 | iMac (Core 2 Duo, 24 inch, SuperDrive) 19 | iMac7,1 20 | iMac Intel Core 2 Duo (aluminum enclosure) 21 | iMac8,1 22 | iMac (Core 2 Duo, 20 or 24 inch, Early 2008 ) 23 | iMac9,1 24 | iMac (Core 2 Duo, 20 or 24 inch, Early or Mid 2009 ) 25 | iMac10,1 26 | iMac (Core 2 Duo, 21.5 or 27 inch, Late 2009 ) 27 | iMac11,1 28 | iMac (Core i5 or i7, 27 inch Late 2009) 29 | iMac11,2 30 | 21.5" iMac (mid 2010) 31 | iMac11,3 32 | iMac (Core i5 or i7, 27 inch Mid 2010) 33 | iMac12,1 34 | iMac (Core i3 or i5 or i7, 21.5 inch Mid 2010 or Late 2011) 35 | iMac12,2 36 | iMac (Core i5 or i7, 27 inch Mid 2011) 37 | iMac13,1 38 | iMac (Core i3 or i5 or i7, 21.5 inch Late 2012 or Early 2013) 39 | iMac13,2 40 | iMac (Core i5 or i7, 27 inch Late 2012) 41 | iMac14,1 42 | iMac (Core i5, 21.5 inch Late 2013) 43 | iMac14,2 44 | iMac (Core i5 or i7, 27 inch Late 2013) 45 | iMac14,3 46 | iMac (Core i5 or i7, 21.5 inch Late 2013) 47 | iMac14,4 48 | iMac (Core i5, 21.5 inch Mid 2014) 49 | iMac15,1 50 | iMac (Retina 5K Core i5 or i7, 27 inch Late 2014 or Mid 2015) 51 | iMac16,1 52 | iMac (Core i5, 21,5 inch Late 2015) 53 | iMac16,2 54 | iMac (Retina 4K Core i5 or i7, 21.5 inch Late 2015) 55 | iMac17,1 56 | iMac (Retina 5K Core i5 or i7, 27 inch Late 2015) 57 | MacBook1,1 58 | MacBook (Core Duo) 59 | MacBook2,1 60 | MacBook (Core 2 Duo) 61 | MacBook4,1 62 | MacBook (Core 2 Duo Feb 2008) 63 | MacBook5,1 64 | MacBook (Core 2 Duo, Late 2008, Unibody) 65 | MacBook5,2 66 | MacBook (Core 2 Duo, Early 2009, White) 67 | MacBook6,1 68 | MacBook (Core 2 Duo, Late 2009, Unibody) 69 | MacBook7,1 70 | MacBook (Core 2 Duo, Mid 2010, White) 71 | MacBook8,1 72 | MacBook (Core M, 12 inch, Early 2015) 73 | MacBookAir1,1 74 | MacBook Air (Core 2 Duo, 13 inch, Early 2008) 75 | MacBookAir2,1 76 | MacBook Air (Core 2 Duo, 13 inch, Mid 2009) 77 | MacBookAir3,1 78 | MacBook Air (Core 2 Duo, 11 inch, Late 2010) 79 | MacBookAir3,2 80 | MacBook Air (Core 2 Duo, 13 inch, Late 2010) 81 | MacBookAir4,1 82 | MacBook Air (Core i5 or i7, 11 inch, Mid 2011) 83 | MacBookAir4,2 84 | MacBook Air (Core i5 or i7, 13 inch, Mid 2011) 85 | MacBookAir5,1 86 | MacBook Air (Core i5 or i7, 11 inch, Mid 2012) 87 | MacBookAir5,2 88 | MacBook Air (Core i5 or i7, 13 inch, Mid 2012) 89 | MacBookAir6,1 90 | MacBook Air (Core i5 or i7, 11 inch, Mid 2013 or Early 2014) 91 | MacBookAir6,2 92 | MacBook Air (Core i5 or i7, 13 inch, Mid 2013 or Early 2014) 93 | MacBookAir7,1 94 | MacBook Air (Core i5 or i7, 11 inch, Early 2015) 95 | MacBookAir7,2 96 | MacBook Air (Core i5 or i7, 13 inch, Early 2015) 97 | MacBookPro1,1 98 | MacBook Pro Core Duo (15-inch) 99 | MacBookPro1,2 100 | MacBook Pro Core Duo (17-inch) 101 | MacBookPro2,1 102 | MacBook Pro Core 2 Duo (17-inch) 103 | MacBookPro2,2 104 | MacBook Pro Core 2 Duo (15-inch) 105 | MacBookPro3,1 106 | MacBook Pro Core 2 Duo (15-inch LED, Core 2 Duo) 107 | MacBookPro3,2 108 | MacBook Pro Core 2 Duo (17-inch HD, Core 2 Duo) 109 | MacBookPro4,1 110 | MacBook Pro (Core 2 Duo Feb 2008) 111 | MacBookPro5,1 112 | MacBook Pro Intel Core 2 Duo (aluminum unibody) 113 | MacBookPro5,2 114 | MacBook Pro Intel Core 2 Duo (aluminum unibody) 115 | MacBookPro5,3 116 | MacBook Pro Intel Core 2 Duo (aluminum unibody) 117 | MacBookPro5,4 118 | MacBook Pro Intel Core 2 Duo (aluminum unibody) 119 | MacBookPro5,5 120 | MacBook Pro Intel Core 2 Duo (aluminum unibody) 121 | MacBookPro6,1 122 | MacBook Pro Intel Core i5, Intel Core i7 (mid 2010) 123 | MacBookPro6,2 124 | MacBook Pro Intel Core i5, Intel Core i7 (mid 2010) 125 | MacBookPro7,1 126 | MacBook Pro Intel Core 2 Duo (mid 2010) 127 | MacBookPro8,1 128 | MacBook Pro Intel Core i5, Intel Core i7, 13" (early 2011) 129 | MacBookPro8,2 130 | MacBook Pro Intel Core i7, 15" (early 2011) 131 | MacBookPro8,3 132 | MacBook Pro Intel Core i7, 17" (early 2011) 133 | MacBookPro9,1 134 | MacBook Pro (15-inch, Mid 2012) 135 | MacBookPro9,2 136 | MacBook Pro (13-inch, Mid 2012) 137 | MacBookPro10,1 138 | MacBook Pro (Retina, Mid 2012) 139 | MacBookPro10,2 140 | MacBook Pro (Retina, 13-inch, Late 2012) 141 | MacBookPro11,1 142 | MacBook Pro (Retina, 13-inch, Late 2013) 143 | MacBookPro11,2 144 | MacBook Pro (Retina, 15-inch, Late 2013) 145 | MacBookPro11,3 146 | MacBook Pro (Retina, 15-inch, Late 2013) 147 | MacbookPro11,4 148 | MacBook Pro (Retina, 15-inch, Mid 2015) 149 | MacbookPro11,5 150 | MacBook Pro (Retina, 15-inch, Mid 2015) 151 | MacbookPro12,1  152 | MacBook Pro (Retina, 13-inch, Early 2015) 153 | Macmini1,1 154 | Mac Mini (Core Solo/Duo) 155 | Macmini2,1 156 | Mac mini Intel Core 157 | Macmini3,1 158 | Mac mini Intel Core 159 | Macmini4,1 160 | Mac mini Intel Core (Mid 2010) 161 | Macmini5,1 162 | Mac mini (Core i5, Mid 2011) 163 | Macmini5,2 164 | Mac mini (Core i5 or Core i7, Mid 2011) 165 | Macmini5,3 166 | Mac mini (Core i7, Server, Mid 2011) 167 | Macmini6,1 168 | Mac mini (Core i5, Late 2012) 169 | Macmini6,2 170 | Mac mini (Core i7, Normal or Server, Late 2012) 171 | Macmini7,1 172 | Mac mini (Core i5 or Core i7, Late 2014) 173 | MacPro1,1,Quad 174 | Mac Pro 175 | MacPro1,1 176 | Mac Pro (four-core) 177 | MacPro2,1 178 | Mac Pro (eight-core) 179 | MacPro3,1 180 | Mac Pro (January 2008 4- or 8- core "Harpertown") 181 | MacPro4,1 182 | Mac Pro (March 2009) 183 | MacPro5,1 184 | Mac Pro (2010 or 2012) 185 | MacPro6,1 186 | Mac Pro (Late 2013) 187 | PowerBook1,1 188 | PowerBook G3 189 | PowerBook2,1 190 | iBook G3 191 | PowerBook2,2 192 | iBook G3 (FireWire) 193 | PowerBook2,3 194 | iBook G3 195 | PowerBook2,4 196 | iBook G3 197 | PowerBook3,1 198 | PowerBook G3 (FireWire) 199 | PowerBook3,2 200 | PowerBook G4 201 | PowerBook3,3 202 | PowerBook G4 (Gigabit Ethernet) 203 | PowerBook3,4 204 | PowerBook G4 (DVI) 205 | PowerBook3,5 206 | PowerBook G4 (1GHz / 867MHz) 207 | PowerBook4,1 208 | iBook G3 (Dual USB, Late 2001) 209 | PowerBook4,2 210 | iBook G3 (16MB VRAM) 211 | PowerBook4,3 212 | iBook G3 Opaque 16MB VRAM, 32MB VRAM, Early 2003) 213 | PowerBook5,1 214 | PowerBook G4 (17 inch) 215 | PowerBook5,2 216 | PowerBook G4 (15 inch FW 800) 217 | PowerBook5,3 218 | PowerBook G4 (17-inch 1.33GHz) 219 | PowerBook5,4 220 | PowerBook G4 (15 inch 1.5/1.33GHz) 221 | PowerBook5,5 222 | PowerBook G4 (17-inch 1.5GHz) 223 | PowerBook5,6 224 | PowerBook G4 (15 inch 1.67GHz/1.5GHz) 225 | PowerBook5,7 226 | PowerBook G4 (17-inch 1.67GHz) 227 | PowerBook5,8 228 | PowerBook G4 (Double layer SD, 15 inch) 229 | PowerBook5,9 230 | PowerBook G4 (Double layer SD, 17 inch) 231 | PowerBook6,1 232 | PowerBook G4 (12 inch) 233 | PowerBook6,2 234 | PowerBook G4 (12 inch, DVI) 235 | PowerBook6,3 236 | iBook G4 237 | PowerBook6,4 238 | PowerBook G4 (12 inch 1.33GHz) 239 | PowerBook6,5 240 | iBook G4 (Early-Late 2004) 241 | PowerBook6,7 242 | iBook G4 (Mid 2005) 243 | PowerBook6,8 244 | PowerBook G4 (12 inch 1.5GHz) 245 | PowerMac1,1 246 | Power Macintosh G3 (Blue & White) 247 | PowerMac1,2 248 | Power Macintosh G4 (PCI Graphics) 249 | PowerMac2,1 250 | iMac G3 (Slot-loading CD-ROM) 251 | PowerMac2,2 252 | iMac G3 (Summer 2000) 253 | PowerMac3,1 254 | Power Macintosh G4 (AGP Graphics) 255 | PowerMac3,2 256 | Power Macintosh G4 (AGP Graphics) 257 | PowerMac3,3 258 | Power Macintosh G4 (Gigabit Ethernet) 259 | PowerMac3,4 260 | Power Macintosh G4 (Digital Audio) 261 | PowerMac3,5 262 | Power Macintosh G4 (Quick Silver) 263 | PowerMac3,6 264 | Power Macintosh G4 (Mirrored Drive Door) 265 | PowerMac4,1 266 | iMac G3 (Early/Summer 2001) 267 | PowerMac4,2 268 | iMac G4 (Flat Panel) 269 | PowerMac4,4 270 | eMac 271 | PowerMac4,5 272 | iMac G4 (17-inch Flat Panel) 273 | PowerMac5,1 274 | Power Macintosh G4 Cube 275 | PowerMac5,2 276 | Power Mac G4 Cube 277 | PowerMac6,1 278 | iMac G4 (USB 2.0) 279 | PowerMac6,3 280 | iMac G4 (20-inch Flat Panel) 281 | PowerMac6,4 282 | eMac (USB 2.0, 2005) 283 | PowerMac7,2 284 | Power Macintosh G5 285 | PowerMac7,3 286 | Power Macintosh G5 287 | PowerMac8,1 288 | iMac G5 289 | PowerMac8,2 290 | iMac G5 (Ambient Light Sensor) 291 | PowerMac9,1 292 | Power Macintosh G5 (Late 2005) 293 | PowerMac10,1 294 | Mac Mini G4 295 | PowerMac10,2 296 | Mac Mini (Late 2005) 297 | PowerMac11,2 298 | Power Macintosh G5 (Late 2005) 299 | PowerMac12,1 300 | iMac G5 (iSight) 301 | RackMac1,1 302 | Xserve G4 303 | RackMac1,2 304 | Xserve G4 (slot-loading, cluster node) 305 | RackMac3,1 306 | Xserve G5 307 | Xserve1,1 308 | Xserve (Intel Xeon) 309 | Xserve2,1 310 | Xserve (January 2008 quad-core) 311 | Xserve3,1 312 | Xserve (early 2009) 313 | 314 | 315 | -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/SUStatus.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ar.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ca.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/cs.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/da.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/de.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/el.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/en.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/es.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/fi.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/fr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/fr_CA.lproj: -------------------------------------------------------------------------------- 1 | fr.lproj -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/he.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/is.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/it.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ja.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ko.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nb.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/nl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt.lproj: -------------------------------------------------------------------------------- 1 | pt_BR.lproj -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_BR.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/pt_PT.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ro.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/ru.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sl.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/sv.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/th.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/tr.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/uk.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_CN.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUAutomaticUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdateAlert.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/SUUpdatePermissionPrompt.nib -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Resources/zh_TW.lproj/Sparkle.strings -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/A/Sparkle: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Frameworks/Sparkle.framework/Versions/A/Sparkle -------------------------------------------------------------------------------- /Frameworks/Sparkle.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 Artem Gordinsky 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Spotifree (DISCONTINUED) 2 | Spotifree is a free OS X app that automatically detects and mutes Spotify audio ads. 3 | 4 | ## Installing 5 | 1. Download **Spotifree** from [the website](http://spotifree.gordinskiy.com); 6 | 2. Move **Spotifree.app** to the **Applications** folder, run, and enjoy your ad-free music listening experience :) 7 | 8 | On the first run, **Spotifree** will be added to the login items. From this moment, **Spotifree** will mute all **Spotify** ads it detects (usually, all of them). Don't worry though, it will not impact your Mac's performance and you'll never notice it running. 9 | 10 | ## How it works 11 | **Spotifree** is polling Spotify every **.3** seconds to see whether the current track number is 0 (as in all ads). If it is, Spotify is muted for a duration of an ad. When an ad is over, the volume is set to the way it was before. 12 | 13 | #### Alternatives 14 | [MuteSpotifyAds](https://github.com/simonmeusel/MuteSpotifyAds) by [Simon Meusel](https://github.com/simonmeusel) is a good alternative if Spotifree does not work for you. 15 | 16 | 17 | #### Thanks 18 | Thanks Chris Ferrara from MacRumors forums, for the original idea and the proof-of-concept script. 19 | Thanks [Eneas](https://github.com/E-n-e-a-s), for turning that brittle AppleScript into a robust native application. 20 | Thanks to all other contributors for helping make Spotifree better. 21 | -------------------------------------------------------------------------------- /SVG Icons/README.md: -------------------------------------------------------------------------------- 1 | These icons were vectorized by [Bruno Philipe](http://www.brunophilipe.com) from the previous raster versions. 2 | The icons in vector format are licensed under the Attribution-ShareAlike 4.0 International ([CC BY-SA 4.0](http://creativecommons.org/licenses/by-sa/4.0/)) Creative Commons license. 3 | 4 | The icons were created in Adobe Illustrator, and the `.ai` version is prefered for editing. The `.svg` versions were exported from Illustrator, so they may not include all features of the original art. -------------------------------------------------------------------------------- /SVG Icons/SpotiFree_Black.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/SVG Icons/SpotiFree_Black.ai -------------------------------------------------------------------------------- /SVG Icons/SpotiFree_Black.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 10 | 14 | 24 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /SVG Icons/SpotiFree_Color.ai: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/SVG Icons/SpotiFree_Color.ai -------------------------------------------------------------------------------- /SVG Icons/SpotiFree_Color.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 11 | 20 | 21 | 22 | 35 | 37 | 38 | 39 | 52 | 54 | 55 | 56 | 57 | 58 | 63 | 64 | 65 | 68 | 69 | 70 | 72 | 73 | 74 | 76 | 77 | 78 | 80 | 81 | 82 | 84 | 85 | 86 | 88 | 89 | 90 | 92 | 93 | 94 | 97 | 98 | 99 | 102 | 103 | 104 | 107 | 108 | 109 | 114 | 115 | 116 | 118 | 119 | 120 | 122 | 123 | 124 | 126 | 127 | 128 | 130 | 131 | 132 | 134 | 135 | 136 | 138 | 139 | 140 | 144 | 145 | 146 | 149 | 150 | 151 | 153 | 154 | 155 | 157 | 158 | 159 | 161 | 162 | 163 | 165 | 166 | 167 | 169 | 170 | 171 | 173 | 174 | 175 | 177 | 178 | 179 | 181 | 182 | 183 | 185 | 186 | 187 | 189 | 190 | 191 | 193 | 194 | 195 | 197 | 198 | 199 | 201 | 202 | 203 | 205 | 206 | 207 | 209 | 210 | 211 | 213 | 214 | 215 | 217 | 218 | 219 | 222 | 223 | 224 | 226 | 227 | 228 | 230 | 231 | 232 | 234 | 235 | 236 | 238 | 239 | 240 | 242 | 243 | 244 | 246 | 247 | 248 | 250 | 251 | 252 | 254 | 255 | 256 | 258 | 259 | 260 | 262 | 263 | 264 | 266 | 267 | 268 | 270 | 271 | 272 | 274 | 275 | 276 | 278 | 279 | 280 | 282 | 283 | 284 | 286 | 287 | 288 | 290 | 291 | 292 | 294 | 295 | 296 | 297 | -------------------------------------------------------------------------------- /Spotifree.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 9400F68A1C32E93B00A5D61A /* dsa_pub.pem in Resources */ = {isa = PBXBuildFile; fileRef = 9400F6891C32E93B00A5D61A /* dsa_pub.pem */; }; 11 | 9400F68C1C32EF1500A5D61A /* DataManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9400F68B1C32EF1500A5D61A /* DataManager.swift */; }; 12 | 9400F68E1C32EF4800A5D61A /* AppleScriptCmds.plist in Resources */ = {isa = PBXBuildFile; fileRef = 9400F68D1C32EF4800A5D61A /* AppleScriptCmds.plist */; }; 13 | 944D3A3A1C32028D00FC3324 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944D3A391C32028D00FC3324 /* AppDelegate.swift */; }; 14 | 944D3A3E1C32028D00FC3324 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 944D3A3D1C32028D00FC3324 /* Assets.xcassets */; }; 15 | 944D3A4C1C3203A600FC3324 /* ScriptingBridge.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 944D3A4B1C3203A600FC3324 /* ScriptingBridge.framework */; }; 16 | 944D3A4F1C32061900FC3324 /* MenuController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 944D3A4E1C32061900FC3324 /* MenuController.swift */; }; 17 | 946F4C751C321A6D00E784DA /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 946F4C741C321A6D00E784DA /* Credits.rtf */; }; 18 | 9475F5A71C35490C009F1736 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 9475F5A61C35490C009F1736 /* Main.storyboard */; }; 19 | 9475F5AA1C35514B009F1736 /* Localizable.strings in Resources */ = {isa = PBXBuildFile; fileRef = 9475F5AC1C35514B009F1736 /* Localizable.strings */; }; 20 | 949A3E9D1C32CC4400D85C57 /* SpotifyManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 949A3E9C1C32CC4400D85C57 /* SpotifyManager.swift */; }; 21 | 94CA85E81C34031A00173312 /* Sparkle.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 94CA85E71C34031A00173312 /* Sparkle.framework */; }; 22 | 94CA85E91C3404F500173312 /* Sparkle.framework in Copy Files */ = {isa = PBXBuildFile; fileRef = 94CA85E71C34031A00173312 /* Sparkle.framework */; settings = {ATTRIBUTES = (CodeSignOnCopy, RemoveHeadersOnCopy, ); }; }; 23 | 94EF69091F25087900C5D2BD /* Spotify.swift in Sources */ = {isa = PBXBuildFile; fileRef = 94EF69081F25087900C5D2BD /* Spotify.swift */; }; 24 | /* End PBXBuildFile section */ 25 | 26 | /* Begin PBXCopyFilesBuildPhase section */ 27 | 9400F6871C32E6C400A5D61A /* Copy Files */ = { 28 | isa = PBXCopyFilesBuildPhase; 29 | buildActionMask = 2147483647; 30 | dstPath = ""; 31 | dstSubfolderSpec = 10; 32 | files = ( 33 | 94CA85E91C3404F500173312 /* Sparkle.framework in Copy Files */, 34 | ); 35 | name = "Copy Files"; 36 | runOnlyForDeploymentPostprocessing = 0; 37 | }; 38 | /* End PBXCopyFilesBuildPhase section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 325696CE1D8BF0BE00BF4537 /* hu */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/Localizable.strings; sourceTree = ""; }; 42 | 4467BF5C1C74A967008AD6F1 /* it */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/Localizable.strings; sourceTree = ""; }; 43 | 5030701C1DFB215A00FF00FB /* pl-PL */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pl-PL"; path = "pl-PL.lproj/Localizable.strings"; sourceTree = ""; }; 44 | 9400F6891C32E93B00A5D61A /* dsa_pub.pem */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = dsa_pub.pem; sourceTree = ""; }; 45 | 9400F68B1C32EF1500A5D61A /* DataManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DataManager.swift; sourceTree = ""; }; 46 | 9400F68D1C32EF4800A5D61A /* AppleScriptCmds.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = AppleScriptCmds.plist; sourceTree = ""; }; 47 | 944D3A361C32028D00FC3324 /* Spotifree.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Spotifree.app; sourceTree = BUILT_PRODUCTS_DIR; }; 48 | 944D3A391C32028D00FC3324 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 49 | 944D3A3D1C32028D00FC3324 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 50 | 944D3A421C32028D00FC3324 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 51 | 944D3A4B1C3203A600FC3324 /* ScriptingBridge.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScriptingBridge.framework; path = System/Library/Frameworks/ScriptingBridge.framework; sourceTree = SDKROOT; }; 52 | 944D3A4E1C32061900FC3324 /* MenuController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MenuController.swift; sourceTree = ""; }; 53 | 946F4C741C321A6D00E784DA /* Credits.rtf */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.rtf; path = Credits.rtf; sourceTree = ""; }; 54 | 9475F5A61C35490C009F1736 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 55 | 9475F5AB1C35514B009F1736 /* en */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 56 | 9475F5AD1C35514F009F1736 /* de */ = {isa = PBXFileReference; fileEncoding = 10; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = ""; }; 57 | 949A3E9C1C32CC4400D85C57 /* SpotifyManager.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SpotifyManager.swift; sourceTree = ""; }; 58 | 94CA85E71C34031A00173312 /* Sparkle.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Sparkle.framework; path = Frameworks/Sparkle.framework; sourceTree = ""; }; 59 | 94EF69081F25087900C5D2BD /* Spotify.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Spotify.swift; sourceTree = ""; }; 60 | AE4B7C271D20488B0029D415 /* nl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/Localizable.strings; sourceTree = ""; }; 61 | BF97E41C1D6646BF00DC71DC /* fr */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/Localizable.strings; sourceTree = ""; }; 62 | F86148771DD4BA3800B44D42 /* ko-KR */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; name = "ko-KR"; path = "ko-KR.lproj/Localizable.strings"; sourceTree = ""; }; 63 | /* End PBXFileReference section */ 64 | 65 | /* Begin PBXFrameworksBuildPhase section */ 66 | 944D3A331C32028D00FC3324 /* Frameworks */ = { 67 | isa = PBXFrameworksBuildPhase; 68 | buildActionMask = 2147483647; 69 | files = ( 70 | 944D3A4C1C3203A600FC3324 /* ScriptingBridge.framework in Frameworks */, 71 | 94CA85E81C34031A00173312 /* Sparkle.framework in Frameworks */, 72 | ); 73 | runOnlyForDeploymentPostprocessing = 0; 74 | }; 75 | /* End PBXFrameworksBuildPhase section */ 76 | 77 | /* Begin PBXGroup section */ 78 | 9400F6841C32E5F900A5D61A /* Resources */ = { 79 | isa = PBXGroup; 80 | children = ( 81 | 9400F68D1C32EF4800A5D61A /* AppleScriptCmds.plist */, 82 | 9400F6891C32E93B00A5D61A /* dsa_pub.pem */, 83 | 944D3A3D1C32028D00FC3324 /* Assets.xcassets */, 84 | 944D3A421C32028D00FC3324 /* Info.plist */, 85 | 946F4C741C321A6D00E784DA /* Credits.rtf */, 86 | ); 87 | name = Resources; 88 | sourceTree = ""; 89 | }; 90 | 944D3A2D1C32028D00FC3324 = { 91 | isa = PBXGroup; 92 | children = ( 93 | 944D3A381C32028D00FC3324 /* Spotifree */, 94 | 944D3A4D1C3203B600FC3324 /* Frameworks */, 95 | 944D3A371C32028D00FC3324 /* Products */, 96 | ); 97 | sourceTree = ""; 98 | }; 99 | 944D3A371C32028D00FC3324 /* Products */ = { 100 | isa = PBXGroup; 101 | children = ( 102 | 944D3A361C32028D00FC3324 /* Spotifree.app */, 103 | ); 104 | name = Products; 105 | sourceTree = ""; 106 | }; 107 | 944D3A381C32028D00FC3324 /* Spotifree */ = { 108 | isa = PBXGroup; 109 | children = ( 110 | 94EF69081F25087900C5D2BD /* Spotify.swift */, 111 | 944D3A391C32028D00FC3324 /* AppDelegate.swift */, 112 | 9400F68B1C32EF1500A5D61A /* DataManager.swift */, 113 | 949A3E9C1C32CC4400D85C57 /* SpotifyManager.swift */, 114 | 944D3A4E1C32061900FC3324 /* MenuController.swift */, 115 | 9475F5AC1C35514B009F1736 /* Localizable.strings */, 116 | 9475F5A61C35490C009F1736 /* Main.storyboard */, 117 | 9400F6841C32E5F900A5D61A /* Resources */, 118 | ); 119 | path = Spotifree; 120 | sourceTree = ""; 121 | }; 122 | 944D3A4D1C3203B600FC3324 /* Frameworks */ = { 123 | isa = PBXGroup; 124 | children = ( 125 | 94CA85E71C34031A00173312 /* Sparkle.framework */, 126 | 944D3A4B1C3203A600FC3324 /* ScriptingBridge.framework */, 127 | ); 128 | name = Frameworks; 129 | sourceTree = ""; 130 | }; 131 | /* End PBXGroup section */ 132 | 133 | /* Begin PBXNativeTarget section */ 134 | 944D3A351C32028D00FC3324 /* Spotifree */ = { 135 | isa = PBXNativeTarget; 136 | buildConfigurationList = 944D3A451C32028D00FC3324 /* Build configuration list for PBXNativeTarget "Spotifree" */; 137 | buildPhases = ( 138 | 944D3A321C32028D00FC3324 /* Sources */, 139 | 944D3A331C32028D00FC3324 /* Frameworks */, 140 | 944D3A341C32028D00FC3324 /* Resources */, 141 | 9400F6871C32E6C400A5D61A /* Copy Files */, 142 | ); 143 | buildRules = ( 144 | ); 145 | dependencies = ( 146 | ); 147 | name = Spotifree; 148 | productName = Spotifree; 149 | productReference = 944D3A361C32028D00FC3324 /* Spotifree.app */; 150 | productType = "com.apple.product-type.application"; 151 | }; 152 | /* End PBXNativeTarget section */ 153 | 154 | /* Begin PBXProject section */ 155 | 944D3A2E1C32028D00FC3324 /* Project object */ = { 156 | isa = PBXProject; 157 | attributes = { 158 | LastSwiftUpdateCheck = 0720; 159 | LastUpgradeCheck = 0720; 160 | ORGANIZATIONNAME = "Eneas Rotterdam"; 161 | TargetAttributes = { 162 | 944D3A351C32028D00FC3324 = { 163 | CreatedOnToolsVersion = 7.2; 164 | LastSwiftMigration = 0830; 165 | }; 166 | }; 167 | }; 168 | buildConfigurationList = 944D3A311C32028D00FC3324 /* Build configuration list for PBXProject "Spotifree" */; 169 | compatibilityVersion = "Xcode 3.2"; 170 | developmentRegion = English; 171 | hasScannedForEncodings = 0; 172 | knownRegions = ( 173 | en, 174 | de, 175 | it, 176 | "pl-PL", 177 | "ko-KR", 178 | hu, 179 | fr, 180 | nl, 181 | ); 182 | mainGroup = 944D3A2D1C32028D00FC3324; 183 | productRefGroup = 944D3A371C32028D00FC3324 /* Products */; 184 | projectDirPath = ""; 185 | projectRoot = ""; 186 | targets = ( 187 | 944D3A351C32028D00FC3324 /* Spotifree */, 188 | ); 189 | }; 190 | /* End PBXProject section */ 191 | 192 | /* Begin PBXResourcesBuildPhase section */ 193 | 944D3A341C32028D00FC3324 /* Resources */ = { 194 | isa = PBXResourcesBuildPhase; 195 | buildActionMask = 2147483647; 196 | files = ( 197 | 9475F5A71C35490C009F1736 /* Main.storyboard in Resources */, 198 | 9400F68A1C32E93B00A5D61A /* dsa_pub.pem in Resources */, 199 | 944D3A3E1C32028D00FC3324 /* Assets.xcassets in Resources */, 200 | 9475F5AA1C35514B009F1736 /* Localizable.strings in Resources */, 201 | 9400F68E1C32EF4800A5D61A /* AppleScriptCmds.plist in Resources */, 202 | 946F4C751C321A6D00E784DA /* Credits.rtf in Resources */, 203 | ); 204 | runOnlyForDeploymentPostprocessing = 0; 205 | }; 206 | /* End PBXResourcesBuildPhase section */ 207 | 208 | /* Begin PBXSourcesBuildPhase section */ 209 | 944D3A321C32028D00FC3324 /* Sources */ = { 210 | isa = PBXSourcesBuildPhase; 211 | buildActionMask = 2147483647; 212 | files = ( 213 | 949A3E9D1C32CC4400D85C57 /* SpotifyManager.swift in Sources */, 214 | 94EF69091F25087900C5D2BD /* Spotify.swift in Sources */, 215 | 9400F68C1C32EF1500A5D61A /* DataManager.swift in Sources */, 216 | 944D3A4F1C32061900FC3324 /* MenuController.swift in Sources */, 217 | 944D3A3A1C32028D00FC3324 /* AppDelegate.swift in Sources */, 218 | ); 219 | runOnlyForDeploymentPostprocessing = 0; 220 | }; 221 | /* End PBXSourcesBuildPhase section */ 222 | 223 | /* Begin PBXVariantGroup section */ 224 | 9475F5AC1C35514B009F1736 /* Localizable.strings */ = { 225 | isa = PBXVariantGroup; 226 | children = ( 227 | 9475F5AB1C35514B009F1736 /* en */, 228 | 9475F5AD1C35514F009F1736 /* de */, 229 | 4467BF5C1C74A967008AD6F1 /* it */, 230 | 5030701C1DFB215A00FF00FB /* pl-PL */, 231 | F86148771DD4BA3800B44D42 /* ko-KR */, 232 | 325696CE1D8BF0BE00BF4537 /* hu */, 233 | BF97E41C1D6646BF00DC71DC /* fr */, 234 | AE4B7C271D20488B0029D415 /* nl */, 235 | ); 236 | name = Localizable.strings; 237 | sourceTree = ""; 238 | }; 239 | /* End PBXVariantGroup section */ 240 | 241 | /* Begin XCBuildConfiguration section */ 242 | 944D3A431C32028D00FC3324 /* Debug */ = { 243 | isa = XCBuildConfiguration; 244 | buildSettings = { 245 | ALWAYS_SEARCH_USER_PATHS = NO; 246 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 247 | CLANG_CXX_LIBRARY = "libc++"; 248 | CLANG_ENABLE_MODULES = YES; 249 | CLANG_ENABLE_OBJC_ARC = YES; 250 | CLANG_WARN_BOOL_CONVERSION = YES; 251 | CLANG_WARN_CONSTANT_CONVERSION = YES; 252 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 253 | CLANG_WARN_EMPTY_BODY = YES; 254 | CLANG_WARN_ENUM_CONVERSION = YES; 255 | CLANG_WARN_INT_CONVERSION = YES; 256 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 257 | CLANG_WARN_UNREACHABLE_CODE = YES; 258 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 259 | CODE_SIGN_IDENTITY = "-"; 260 | COPY_PHASE_STRIP = NO; 261 | DEBUG_INFORMATION_FORMAT = dwarf; 262 | ENABLE_STRICT_OBJC_MSGSEND = YES; 263 | ENABLE_TESTABILITY = YES; 264 | GCC_C_LANGUAGE_STANDARD = gnu99; 265 | GCC_DYNAMIC_NO_PIC = NO; 266 | GCC_NO_COMMON_BLOCKS = YES; 267 | GCC_OPTIMIZATION_LEVEL = 0; 268 | GCC_PREPROCESSOR_DEFINITIONS = ( 269 | "DEBUG=1", 270 | "$(inherited)", 271 | ); 272 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 273 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 274 | GCC_WARN_UNDECLARED_SELECTOR = YES; 275 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 276 | GCC_WARN_UNUSED_FUNCTION = YES; 277 | GCC_WARN_UNUSED_VARIABLE = YES; 278 | MACOSX_DEPLOYMENT_TARGET = 10.9; 279 | MTL_ENABLE_DEBUG_INFO = YES; 280 | ONLY_ACTIVE_ARCH = YES; 281 | SDKROOT = macosx; 282 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 283 | }; 284 | name = Debug; 285 | }; 286 | 944D3A441C32028D00FC3324 /* Release */ = { 287 | isa = XCBuildConfiguration; 288 | buildSettings = { 289 | ALWAYS_SEARCH_USER_PATHS = NO; 290 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 291 | CLANG_CXX_LIBRARY = "libc++"; 292 | CLANG_ENABLE_MODULES = YES; 293 | CLANG_ENABLE_OBJC_ARC = YES; 294 | CLANG_WARN_BOOL_CONVERSION = YES; 295 | CLANG_WARN_CONSTANT_CONVERSION = YES; 296 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 297 | CLANG_WARN_EMPTY_BODY = YES; 298 | CLANG_WARN_ENUM_CONVERSION = YES; 299 | CLANG_WARN_INT_CONVERSION = YES; 300 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 301 | CLANG_WARN_UNREACHABLE_CODE = YES; 302 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 303 | CODE_SIGN_IDENTITY = "-"; 304 | COPY_PHASE_STRIP = NO; 305 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 306 | ENABLE_NS_ASSERTIONS = NO; 307 | ENABLE_STRICT_OBJC_MSGSEND = YES; 308 | GCC_C_LANGUAGE_STANDARD = gnu99; 309 | GCC_NO_COMMON_BLOCKS = YES; 310 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 311 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 312 | GCC_WARN_UNDECLARED_SELECTOR = YES; 313 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 314 | GCC_WARN_UNUSED_FUNCTION = YES; 315 | GCC_WARN_UNUSED_VARIABLE = YES; 316 | MACOSX_DEPLOYMENT_TARGET = 10.9; 317 | MTL_ENABLE_DEBUG_INFO = NO; 318 | SDKROOT = macosx; 319 | }; 320 | name = Release; 321 | }; 322 | 944D3A461C32028D00FC3324 /* Debug */ = { 323 | isa = XCBuildConfiguration; 324 | buildSettings = { 325 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 326 | COMBINE_HIDPI_IMAGES = YES; 327 | FRAMEWORK_SEARCH_PATHS = ( 328 | "$(inherited)", 329 | "$(PROJECT_DIR)", 330 | "$(PROJECT_DIR)/Frameworks", 331 | ); 332 | INFOPLIST_FILE = Spotifree/Info.plist; 333 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 334 | LIBRARY_SEARCH_PATHS = ( 335 | "$(inherited)", 336 | "$(SDKROOT)/usr/lib/system", 337 | ); 338 | MACOSX_DEPLOYMENT_TARGET = 10.9; 339 | PRODUCT_BUNDLE_IDENTIFIER = de.eneas.Spotifree; 340 | PRODUCT_NAME = "$(TARGET_NAME)"; 341 | SWIFT_OBJC_BRIDGING_HEADER = ""; 342 | SWIFT_VERSION = 3.0; 343 | }; 344 | name = Debug; 345 | }; 346 | 944D3A471C32028D00FC3324 /* Release */ = { 347 | isa = XCBuildConfiguration; 348 | buildSettings = { 349 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 350 | COMBINE_HIDPI_IMAGES = YES; 351 | FRAMEWORK_SEARCH_PATHS = ( 352 | "$(inherited)", 353 | "$(PROJECT_DIR)", 354 | "$(PROJECT_DIR)/Frameworks", 355 | ); 356 | INFOPLIST_FILE = Spotifree/Info.plist; 357 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 358 | LIBRARY_SEARCH_PATHS = ( 359 | "$(inherited)", 360 | "$(SDKROOT)/usr/lib/system", 361 | ); 362 | MACOSX_DEPLOYMENT_TARGET = 10.9; 363 | PRODUCT_BUNDLE_IDENTIFIER = de.eneas.Spotifree; 364 | PRODUCT_NAME = "$(TARGET_NAME)"; 365 | SWIFT_OBJC_BRIDGING_HEADER = ""; 366 | SWIFT_VERSION = 3.0; 367 | }; 368 | name = Release; 369 | }; 370 | /* End XCBuildConfiguration section */ 371 | 372 | /* Begin XCConfigurationList section */ 373 | 944D3A311C32028D00FC3324 /* Build configuration list for PBXProject "Spotifree" */ = { 374 | isa = XCConfigurationList; 375 | buildConfigurations = ( 376 | 944D3A431C32028D00FC3324 /* Debug */, 377 | 944D3A441C32028D00FC3324 /* Release */, 378 | ); 379 | defaultConfigurationIsVisible = 0; 380 | defaultConfigurationName = Release; 381 | }; 382 | 944D3A451C32028D00FC3324 /* Build configuration list for PBXNativeTarget "Spotifree" */ = { 383 | isa = XCConfigurationList; 384 | buildConfigurations = ( 385 | 944D3A461C32028D00FC3324 /* Debug */, 386 | 944D3A471C32028D00FC3324 /* Release */, 387 | ); 388 | defaultConfigurationIsVisible = 0; 389 | defaultConfigurationName = Release; 390 | }; 391 | /* End XCConfigurationList section */ 392 | }; 393 | rootObject = 944D3A2E1C32028D00FC3324 /* Project object */; 394 | } 395 | -------------------------------------------------------------------------------- /Spotifree.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Spotifree/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // Spotifree 4 | // 5 | // Created by Eneas Rotterdam on 29.12.15. 6 | // Copyright © 2015 Eneas Rotterdam. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | @NSApplicationMain 12 | class AppDelegate: NSObject, NSApplicationDelegate { 13 | 14 | var menuController = MenuController() 15 | var spotifyManger = SpotifyManager() 16 | 17 | func applicationDidFinishLaunching(_ aNotification: Notification) { 18 | spotifyManger.delegate = menuController 19 | spotifyManger.start() 20 | } 21 | 22 | func applicationShouldHandleReopen(_ sender: NSApplication, hasVisibleWindows flag: Bool) -> Bool { 23 | menuController.showMenuBarIconIfNeeded() 24 | return true 25 | } 26 | 27 | func applicationWillTerminate(_ aNotification: Notification) { 28 | // Insert code here to tear down your application 29 | } 30 | 31 | 32 | } 33 | 34 | -------------------------------------------------------------------------------- /Spotifree/AppleScriptCmds.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | addLoginItem 6 | 7 | tell application "System Events" 8 | make login item at end of login items with properties {name:"Spotifree", path:"%@", hidden:true} 9 | end tell 10 | 11 | removeLoginItem 12 | 13 | tell application "System Events" 14 | get the name of every login item 15 | if login item "Spotifree" exists then 16 | delete login item "Spotifree" 17 | end if 18 | end tell 19 | 20 | isInLoginItems 21 | 22 | tell application "System Events" 23 | if login item "Spotifree" exists then 24 | return true 25 | else 26 | return false 27 | end if 28 | end tell 29 | 30 | isLoginItemPathCorrect 31 | 32 | tell application "System Events" 33 | return path of login item "Spotifree" is equal to "%@" 34 | end tell 35 | 36 | 37 | 38 | -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "icon_16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "icon_32.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "icon_32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "icon_64.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "icon_128.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "icon_256.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "icon_256.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "icon_512.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "icon_512.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "icon_1024.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_1024.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_1024.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_128.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_16.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_256.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_32.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_512.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/AppIcon.appiconset/icon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/AppIcon.appiconset/icon_64.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconActiveTemplate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "active.png", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "active@2x.png", 14 | "scale" : "2x" 15 | }, 16 | { 17 | "idiom" : "universal", 18 | "scale" : "3x" 19 | } 20 | ], 21 | "info" : { 22 | "version" : 1, 23 | "author" : "xcode" 24 | } 25 | } -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconActiveTemplate.imageset/active.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconActiveTemplate.imageset/active.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconActiveTemplate.imageset/active@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconActiveTemplate.imageset/active@2x.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconBlockingAdTemplate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "blocking_ad.png", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "blocking_ad@2x.png", 14 | "scale" : "2x" 15 | }, 16 | { 17 | "idiom" : "universal", 18 | "scale" : "3x" 19 | } 20 | ], 21 | "info" : { 22 | "version" : 1, 23 | "author" : "xcode" 24 | } 25 | } -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconBlockingAdTemplate.imageset/blocking_ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconBlockingAdTemplate.imageset/blocking_ad.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconBlockingAdTemplate.imageset/blocking_ad@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconBlockingAdTemplate.imageset/blocking_ad@2x.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconHighlighted.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "inverted.png", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "inverted@2x.png", 14 | "scale" : "2x" 15 | }, 16 | { 17 | "idiom" : "universal", 18 | "scale" : "3x" 19 | } 20 | ], 21 | "info" : { 22 | "version" : 1, 23 | "author" : "xcode" 24 | } 25 | } -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconHighlighted.imageset/inverted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconHighlighted.imageset/inverted.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconHighlighted.imageset/inverted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconHighlighted.imageset/inverted@2x.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconInactiveTemplate.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "filename" : "inactive.png", 9 | "scale" : "1x" 10 | }, 11 | { 12 | "idiom" : "universal", 13 | "filename" : "inactive@2x.png", 14 | "scale" : "2x" 15 | }, 16 | { 17 | "idiom" : "universal", 18 | "scale" : "3x" 19 | } 20 | ], 21 | "info" : { 22 | "version" : 1, 23 | "author" : "xcode" 24 | } 25 | } -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconInactiveTemplate.imageset/inactive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconInactiveTemplate.imageset/inactive.png -------------------------------------------------------------------------------- /Spotifree/Assets.xcassets/statusBarIconInactiveTemplate.imageset/inactive@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/Assets.xcassets/statusBarIconInactiveTemplate.imageset/inactive@2x.png -------------------------------------------------------------------------------- /Spotifree/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf1\ansi\ansicpg1252\cocoartf1404\cocoasubrtf340 2 | {\fonttbl\f0\fswiss\fcharset0 Helvetica;} 3 | {\colortbl;\red255\green255\blue255;\red38\green38\blue38;} 4 | \paperw11900\paperh16840\vieww9600\viewh8400\viewkind0 5 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 6 | 7 | \f0\b\fs24 \cf0 Coding: 8 | \b0 \ 9 | Artem Gordinsky\ 10 | Eneas Rotterdam\ 11 | \ 12 | 13 | \b Human Interface Design: 14 | \b0 \ 15 | Eneas Rotterdam\ 16 | \ 17 | \pard\pardeftab720\partightenfactor0 18 | \cf2 Copyright (c) 2015 Eneas Rotterdam\ 19 | \ 20 | THE SOFTWARE IS PROVIDED "AS IS",\ 21 | WITHOUT WARRANTY OF ANY KIND, EXPRESS\ 22 | OR IMPLIED, INCLUDING BUT NOT LIMITED\ 23 | TO THE WARRANTIES OF MERCHANTABILITY,\ 24 | FITNESS FOR A PARTICULAR PURPOSE AND\ 25 | NONINFRINGEMENT. IN NO EVENT SHALL\ 26 | THE AUTHORS OR COPYRIGHT HOLDERS BE\ 27 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\ 28 | LIABILITY, WHETHER IN AN ACTION OF\ 29 | CONTRACT, TORT OR OTHERWISE, ARISING\ 30 | FROM, OUT OF OR IN CONNECTION WITH THE\ 31 | SOFTWARE OR THE USE OR OTHER DEALINGS\ 32 | IN THE SOFTWARE.\ 33 | \cf0 \ 34 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\partightenfactor0 35 | \cf0 \ 36 | \pard\pardeftab720\partightenfactor0 37 | \cf2 =================\ 38 | EXTERNAL LICENSES\ 39 | =================\ 40 | \cf0 \ 41 | \cf2 License for the Sparkle framework\ 42 | ():\cf0 \ 43 | \cf2 /*-\ 44 | * Copyright (c) 2006 Andy Matuschak\ 45 | *\ 46 | * Permission is hereby granted,\ 47 | * free of charge, to any person\ 48 | * obtaining a copy of this software\ 49 | * and associated documentation\ 50 | * files (the "Software"), to deal\ 51 | * in the Software without restriction,\ 52 | * including without limitation\ 53 | * the rights to use, copy, modify,\ 54 | * merge, publish, distribute,\ 55 | * sublicense, and/or sell copies of\ 56 | * the Software, and to permit persons\ 57 | * to whom the Software is furnished\ 58 | * to do so, subject to the\ 59 | * following conditions:\ 60 | *\ 61 | * The above copyright notice and\ 62 | * this permission notice shall be\ 63 | * included in all copies or substantial\ 64 | * portions of the Software.\ 65 | *\ 66 | * THE SOFTWARE IS PROVIDED "AS IS",\ 67 | * WITHOUT WARRANTY OF ANY KIND, EXPRESS\ 68 | * OR IMPLIED, INCLUDING BUT NOT LIMITED\ 69 | * TO THE WARRANTIES OF MERCHANTABILITY,\ 70 | * FITNESS FOR A PARTICULAR PURPOSE AND\ 71 | * NONINFRINGEMENT. IN NO EVENT SHALL\ 72 | * THE AUTHORS OR COPYRIGHT HOLDERS BE\ 73 | * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\ 74 | * LIABILITY, WHETHER IN AN ACTION OF\ 75 | * CONTRACT, TORT OR OTHERWISE, ARISING\ 76 | * FROM, OUT OF OR IN CONNECTION WITH THE\ 77 | * SOFTWARE OR THE USE OR OTHER DEALINGS\ 78 | * IN THE SOFTWARE.\ 79 | */\ 80 | \ 81 | License for bspatch.c and bsdiff.c,\ 82 | from bsdiff 4.3\ 83 | ():\ 84 | /*-\ 85 | \'a0* Copyright 2003-2005 Colin Percival\ 86 | \'a0* All rights reserved\ 87 | \'a0*\ 88 | \'a0* Redistribution and use in source and\ 89 | * binary forms, with or without\ 90 | \'a0* modification, are permitted providing\ 91 | * that the following conditions are met:\ 92 | * \ 93 | \'a0* 1. Redistributions of source code must\ 94 | * retain the above copyright notice,\ 95 | * this list of conditions and the\ 96 | * following disclaimer.\ 97 | \'a0* 2. Redistributions in binary form must\ 98 | * reproduce the above copyright\ 99 | * notice, this list of conditions and\ 100 | * the following disclaimer in the\ 101 | * documentation and/or other \ 102 | * materials provided with the\ 103 | * distribution.\ 104 | \'a0*\ 105 | \'a0* THIS SOFTWARE IS PROVIDED BY THE\ 106 | * AUTHOR ``AS IS'' AND ANY EXPRESS OR\ 107 | \'a0* IMPLIED WARRANTIES, INCLUDING, BUT NOT\ 108 | * LIMITED TO, THE IMPLIED WARRANTIES OF\ 109 | * MERCHANTABILITY AND FITNESS FOR A\ 110 | * PARTICULAR PURPOSE ARE DISCLAIMED. IN\ 111 | * NO EVENT SHALL THE AUTHOR BE LIABLE\ 112 | * FOR ANY DIRECT, INDIRECT, INCIDENTAL,\ 113 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\ 114 | \'a0* DAMAGES (INCLUDING, BUT NOT\ 115 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE\ 116 | * GOODS OR SERVICES; LOSS OF USE, DATA,\ 117 | * OR PROFITS; OR BUSINESS INTERRUPTION)\ 118 | \'a0* HOWEVER CAUSED AND ON ANY THEORY OF\ 119 | * LIABILITY, WHETHER IN CONTRACT,\ 120 | \'a0* STRICT LIABILITY, OR TORT (INCLUDING\ 121 | * NEGLIGENCE OR OTHERWISE) ARISING IN\ 122 | * ANY WAY OUT OF THE USE OF THIS\ 123 | * SOFTWARE, EVEN IF ADVISED OF THE\ 124 | \'a0* POSSIBILITY OF SUCH DAMAGE.\ 125 | \'a0*/} -------------------------------------------------------------------------------- /Spotifree/DataManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DataManager.swift 3 | // Spotifree 4 | // 5 | // Created by Eneas Rotterdam on 29.12.15. 6 | // Copyright © 2015 Eneas Rotterdam. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | let KEY_MENU_BAR_ICON_HIDDEN = "SFMenuBarIconHidden" 12 | let KEY_SHOW_NOTIFICATIONS = "SFShowNotifications" 13 | let KEY_POLLING_RATE = "SFPollingRate" 14 | 15 | class DataManager : NSObject { 16 | static let sharedData = DataManager() 17 | 18 | private let appleScriptCmds = NSDictionary(contentsOfFile: Bundle.main.path(forResource: "AppleScriptCmds", ofType: "plist")!)! 19 | 20 | override init() { 21 | super.init() 22 | 23 | if isInLoginItems() && !isLoginItemPathCorrect() { 24 | removeLoginItem() 25 | addLoginItem() 26 | } 27 | 28 | let defaults = [KEY_MENU_BAR_ICON_HIDDEN : false, KEY_SHOW_NOTIFICATIONS : false, KEY_POLLING_RATE : 0.3] as [String : Any] 29 | UserDefaults.standard.register(defaults: defaults) 30 | 31 | if !UserDefaults.standard.bool(forKey: "SUHasLaunchedBefore") { 32 | addLoginItem() 33 | } 34 | } 35 | 36 | func pollingRate() -> Double { 37 | return UserDefaults.standard.double(forKey: KEY_POLLING_RATE) 38 | } 39 | 40 | func isMenuBarIconHidden() -> Bool { 41 | return UserDefaults.standard.bool(forKey: KEY_MENU_BAR_ICON_HIDDEN) 42 | } 43 | 44 | func setMenuBarIconHidden(_ hidden : Bool) { 45 | UserDefaults.standard.set(hidden, forKey: KEY_MENU_BAR_ICON_HIDDEN) 46 | UserDefaults.standard.synchronize() 47 | } 48 | 49 | func toggleLoginItem() { 50 | isInLoginItems() ? removeLoginItem() : addLoginItem() 51 | } 52 | 53 | func addLoginItem() { 54 | NSAppleScript(source: String(format: appleScriptCmds["addLoginItem"] as! String, Bundle.main.bundlePath))?.executeAndReturnError(nil) 55 | } 56 | 57 | func removeLoginItem() { 58 | NSAppleScript(source: appleScriptCmds["removeLoginItem"] as! String)?.executeAndReturnError(nil) 59 | } 60 | 61 | 62 | func isInLoginItems() -> Bool{ 63 | var isInItems = true 64 | let desc = NSAppleScript(source: appleScriptCmds["isInLoginItems"] as! String)?.executeAndReturnError(nil) 65 | if let desc = desc { 66 | isInItems = desc.booleanValue 67 | } 68 | return isInItems 69 | } 70 | 71 | func isLoginItemPathCorrect() -> Bool { 72 | var isCorrect = true 73 | let desc = NSAppleScript(source: String(format: appleScriptCmds["isLoginItemPathCorrect"] as! String, Bundle.main.bundlePath))?.executeAndReturnError(nil) 74 | if let desc = desc { 75 | isCorrect = desc.booleanValue 76 | } 77 | return isCorrect 78 | } 79 | 80 | func toggleShowNotifications() { 81 | let showNotifications = UserDefaults.standard.bool(forKey: KEY_SHOW_NOTIFICATIONS) 82 | UserDefaults.standard.set(!showNotifications, forKey: KEY_SHOW_NOTIFICATIONS) 83 | UserDefaults.standard.synchronize() 84 | } 85 | 86 | func shouldShowNofifications() -> Bool { 87 | return UserDefaults.standard.bool(forKey: KEY_SHOW_NOTIFICATIONS) 88 | } 89 | } 90 | -------------------------------------------------------------------------------- /Spotifree/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 2.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 2.0 25 | LSApplicationCategoryType 26 | public.app-category.utilities 27 | LSMinimumSystemVersion 28 | $(MACOSX_DEPLOYMENT_TARGET) 29 | LSUIElement 30 | 31 | NSHumanReadableCopyright 32 | Copyright © 2015 Eneas Rotterdam. All rights reserved. 33 | NSMainStoryboardFile 34 | Main 35 | NSPrincipalClass 36 | NSApplication 37 | SUFeedURL 38 | https://s3.amazonaws.com/spotifree.gordinskiy.com/appcast.xml 39 | SUPublicDSAKeyFile 40 | dsa_pub.pem 41 | 42 | 43 | -------------------------------------------------------------------------------- /Spotifree/MenuController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MenuController.swift 3 | // Spotifree 4 | // 5 | // Created by Eneas Rotterdam on 29.12.15. 6 | // Copyright © 2015 Eneas Rotterdam. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import Sparkle 11 | 12 | class MenuController : NSObject { 13 | fileprivate var statusItem : NSStatusItem? 14 | 15 | override init() { 16 | super.init() 17 | 18 | if !DataManager.sharedData.isMenuBarIconHidden() { 19 | setUpMenu() 20 | } 21 | } 22 | 23 | func setUpMenu() { 24 | let statusMenu = NSMenu(title: "Spotifree") 25 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_INACTIVE", comment: "Spotify state: Inactive"), action: nil, keyEquivalent: "").tag = 1 26 | statusMenu.addItem(NSMenuItem.separator()) 27 | 28 | let updateMenu = NSMenu() 29 | updateMenu.addItem(withTitle: NSLocalizedString("MENU_UPDATES_CHECK_FOR_UPDATES", comment:"Menu: Check For Updates..."), action: #selector(SUUpdater.checkForUpdates(_:)), keyEquivalent: "").target = SUUpdater.shared() 30 | updateMenu.addItem(NSMenuItem.separator()) 31 | updateMenu.addItem(withTitle: NSLocalizedString("MENU_UPDATES_CHECK_AUTOMATICALLY", comment: "Menu: Check Automatically"), action: #selector(MenuController.toggleAutomaticallyCheckForUpdates), keyEquivalent: "").target = self 32 | updateMenu.addItem(withTitle: NSLocalizedString("MENU_UPDATES_DOWNLOAD_AUTOMATICALLY", comment: "Menu: Download automatically"), action: #selector(MenuController.toggleAutomaticallyDownloadUpdates), keyEquivalent: "").target = self 33 | let updateItem = NSMenuItem(title:NSLocalizedString("MENU_UPDATES", comment: "Menu: Updates"), action: nil, keyEquivalent: "") 34 | updateItem.submenu = updateMenu; 35 | 36 | statusMenu.addItem(updateItem); 37 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_HIDE_ICON", comment: "Menu: Hide Icon"), action: #selector(MenuController.hideIconClicked), keyEquivalent: "").target = self 38 | statusMenu.addItem(NSMenuItem.separator()) 39 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_RUN_AT_LOGIN", comment: "Menu: Run At Login"), action: #selector(MenuController.toggleLoginItem), keyEquivalent: "").target = self 40 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_NOTIFICATIONS", comment: "Menu: Notifications"), action: #selector(MenuController.toggleNotifications), keyEquivalent: "").target = self 41 | statusMenu.addItem(NSMenuItem.separator()) 42 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_DONATE", comment: "Menu: Donate"), action: #selector(MenuController.donateLinkClicked), keyEquivalent: "").target = self 43 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_ABOUT", comment: "Menu: About"), action: #selector(MenuController.aboutItemClicked), keyEquivalent: "").target = self 44 | statusMenu.addItem(withTitle: NSLocalizedString("MENU_QUIT", comment: "Menu: Quit"), action: #selector(NSApplication.shared().terminate(_:)), keyEquivalent: "q").keyEquivalentModifierMask = NSEventModifierFlags(rawValue: UInt(Int(NSEventModifierFlags.command.rawValue))); 45 | statusMenu.addItem(NSMenuItem.separator()) 46 | 47 | statusItem = NSStatusBar.system().statusItem(withLength: NSSquareStatusItemLength) 48 | statusItem!.image = NSImage(named: "statusBarIconInactiveTemplate") 49 | statusItem!.menu = statusMenu 50 | statusItem!.highlightMode = true 51 | } 52 | 53 | override func validateMenuItem(_ menuItem: NSMenuItem) -> Bool { 54 | if menuItem.action == #selector(MenuController.toggleNotifications) { 55 | menuItem.state = Int(DataManager.sharedData.shouldShowNofifications()) 56 | } 57 | if menuItem.action == #selector(MenuController.toggleLoginItem) { 58 | menuItem.state = Int(DataManager.sharedData.isInLoginItems()) 59 | } 60 | if menuItem.action == #selector(MenuController.toggleAutomaticallyCheckForUpdates) { 61 | menuItem.state = Int(SUUpdater.shared().automaticallyChecksForUpdates) 62 | } 63 | if menuItem.action == #selector(MenuController.toggleAutomaticallyDownloadUpdates) { 64 | menuItem.state = Int(SUUpdater.shared().automaticallyDownloadsUpdates) 65 | return SUUpdater.shared().automaticallyChecksForUpdates 66 | } 67 | return true 68 | } 69 | 70 | func hideIconClicked() { 71 | let alert = NSAlert() 72 | alert.messageText = NSLocalizedString("ALERT_HIDE_ICON_INFO", comment: "Alert info: To show the icon again, simply launch Spotifree from Dock or Finder") 73 | alert.addButton(withTitle: NSLocalizedString("OK", comment: "General: OK")) 74 | alert.addButton(withTitle: NSLocalizedString("CANCEL", comment: "General: Cancel")) 75 | 76 | if !DataManager.sharedData.isInLoginItems() { 77 | alert.informativeText = NSLocalizedString("ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO", comment: "Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login") 78 | alert.showsSuppressionButton = true 79 | alert.suppressionButton?.title = NSLocalizedString("MENU_RUN_AT_LOGIN", comment: "Menu: Run At Login") 80 | alert.suppressionButton?.state = NSOffState 81 | } 82 | 83 | statusItem?.highlightMode = false 84 | let response = alert.runModal() 85 | if response == NSAlertFirstButtonReturn { 86 | DataManager.sharedData.setMenuBarIconHidden(true) 87 | NSStatusBar.system().removeStatusItem(statusItem!) 88 | statusItem = nil 89 | 90 | if alert.suppressionButton?.state == NSOnState { 91 | DataManager.sharedData.toggleLoginItem() 92 | } 93 | } 94 | statusItem?.highlightMode = true 95 | } 96 | 97 | func showMenuBarIconIfNeeded() { 98 | if self.statusItem != nil {return} 99 | 100 | DataManager.sharedData.setMenuBarIconHidden(false) 101 | setUpMenu() 102 | } 103 | 104 | func toggleNotifications() { 105 | DataManager.sharedData.toggleShowNotifications() 106 | } 107 | 108 | func toggleLoginItem() { 109 | DataManager.sharedData.toggleLoginItem() 110 | } 111 | 112 | func toggleAutomaticallyCheckForUpdates() { 113 | SUUpdater.shared().automaticallyChecksForUpdates = !SUUpdater.shared().automaticallyChecksForUpdates 114 | SUUpdater.shared().automaticallyDownloadsUpdates = false; 115 | } 116 | 117 | func toggleAutomaticallyDownloadUpdates() { 118 | SUUpdater.shared().automaticallyDownloadsUpdates = !SUUpdater.shared().automaticallyDownloadsUpdates 119 | } 120 | 121 | func donateLinkClicked() { 122 | let donateURL = "https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=UG7ECWW2QNWBJ&lc=US&item_name=Donation%20for%20the%20development%20of%20Spotifree%20app¤cy_code=USD&bn=PP%2dDonationsBF%3abtn_donateCC_LG%2egif%3aNonHosted" 123 | 124 | NSWorkspace.shared().open(URL(string: donateURL)!) 125 | } 126 | 127 | func aboutItemClicked() { 128 | NSApplication.shared().activate(ignoringOtherApps: true) 129 | NSApplication.shared().orderFrontStandardAboutPanel(self) 130 | } 131 | } 132 | 133 | extension MenuController : SpotifyManagerDelegate { 134 | func spotifreeStateChanged(_ state: SFSpotifreeState) { 135 | if let statusItem = statusItem { 136 | var label = "Status Unknown" 137 | var icon : NSImage? 138 | 139 | switch state { 140 | case .active: 141 | label = NSLocalizedString("MENU_ACTIVE", comment: "Spotify state: Active") 142 | icon = NSImage(named: "statusBarIconActiveTemplate") 143 | case .muting: 144 | label = NSLocalizedString("MENU_MUTING_AD", comment: "Spotify state: Muting Ad") 145 | icon = NSImage(named: "statusBarIconBlockingAdTemplate") 146 | case .inactive: 147 | label = NSLocalizedString("MENU_INACTIVE", comment: "Spotify state: Inactive") 148 | icon = NSImage(named: "statusBarIconInactiveTemplate") 149 | } 150 | 151 | statusItem.image = icon 152 | statusItem.menu?.item(withTag: 1)?.title = label 153 | } 154 | } 155 | } 156 | 157 | extension Int { 158 | init(_ bool:Bool) { 159 | self = bool ? 1 : 0 160 | } 161 | } 162 | -------------------------------------------------------------------------------- /Spotifree/Spotify.swift: -------------------------------------------------------------------------------- 1 | import AppKit 2 | import ScriptingBridge 3 | 4 | @objc public protocol SBObjectProtocol: NSObjectProtocol { 5 | func get() -> Any! 6 | } 7 | 8 | @objc public protocol SBApplicationProtocol: SBObjectProtocol { 9 | func activate() 10 | var delegate: SBApplicationDelegate! { get set } 11 | var running: Bool { @objc(isRunning) get } 12 | } 13 | 14 | // MARK: SpotifyEPlS 15 | @objc public enum SpotifyEPlS : AEKeyword { 16 | case stopped = 0x6b505353 /* 'kPSS' */ 17 | case playing = 0x6b505350 /* 'kPSP' */ 18 | case paused = 0x6b505370 /* 'kPSp' */ 19 | } 20 | 21 | // MARK: SpotifyApplication 22 | @objc public protocol SpotifyApplication: SBApplicationProtocol { 23 | @objc optional var currentTrack: SpotifyTrack { get } // The current playing track. 24 | @objc optional var soundVolume: Int { get } // The sound output volume (0 = minimum, 100 = maximum) 25 | @objc optional var playerState: SpotifyEPlS { get } // Is Spotify stopped, paused, or playing? 26 | @objc optional var playerPosition: Double { get } // The player’s position within the currently playing track in seconds. 27 | @objc optional var repeatingEnabled: Bool { get } // Is repeating enabled in the current playback context? 28 | @objc optional var repeating: Bool { get } // Is repeating on or off? 29 | @objc optional var shufflingEnabled: Bool { get } // Is shuffling enabled in the current playback context? 30 | @objc optional var shuffling: Bool { get } // Is shuffling on or off? 31 | @objc optional func nextTrack() // Skip to the next track. 32 | @objc optional func previousTrack() // Skip to the previous track. 33 | @objc optional func playpause() // Toggle play/pause. 34 | @objc optional func pause() // Pause playback. 35 | @objc optional func play() // Resume playback. 36 | @objc optional func playTrack(_ x: String!, inContext: String!) // Start playback of a track in the given context. 37 | @objc optional func setSoundVolume(_ soundVolume: Int) // The sound output volume (0 = minimum, 100 = maximum) 38 | @objc optional func setPlayerPosition(_ playerPosition: Double) // The player’s position within the currently playing track in seconds. 39 | @objc optional func setRepeating(_ repeating: Bool) // Is repeating on or off? 40 | @objc optional func setShuffling(_ shuffling: Bool) // Is shuffling on or off? 41 | @objc optional var name: String { get } // The name of the application. 42 | @objc optional var frontmost: Bool { get } // Is this the frontmost (active) application? 43 | @objc optional var version: String { get } // The version of the application. 44 | } 45 | extension SBApplication: SpotifyApplication {} 46 | 47 | // MARK: SpotifyTrack 48 | @objc public protocol SpotifyTrack: SBObjectProtocol { 49 | @objc optional var artist: String { get } // The artist of the track. 50 | @objc optional var album: String { get } // The album of the track. 51 | @objc optional var discNumber: Int { get } // The disc number of the track. 52 | @objc optional var duration: Int { get } // The length of the track in seconds. 53 | @objc optional var playedCount: Int { get } // The number of times this track has been played. 54 | @objc optional var trackNumber: Int { get } // The index of the track in its album. 55 | @objc optional var starred: Bool { get } // Is the track starred? 56 | @objc optional var popularity: Int { get } // How popular is this track? 0-100 57 | @objc optional func id() -> String // The ID of the item. 58 | @objc optional var name: String { get } // The name of the track. 59 | @objc optional var artworkUrl: String { get } // The URL of the track%apos;s album cover. 60 | @objc optional var artwork: NSImage { get } // The property is deprecated and will never be set. Use the 'artwork url' instead. 61 | @objc optional var albumArtist: String { get } // That album artist of the track. 62 | @objc optional var spotifyUrl: String { get } // The URL of the track. 63 | @objc optional func setSpotifyUrl(_ spotifyUrl: String!) // The URL of the track. 64 | } 65 | extension SBObject: SpotifyTrack {} 66 | 67 | -------------------------------------------------------------------------------- /Spotifree/SpotifyManager.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SpotifyManager.swift 3 | // Spotifree 4 | // 5 | // Created by Eneas Rotterdam on 29.12.15. 6 | // Copyright © 2015 Eneas Rotterdam. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import ScriptingBridge 11 | 12 | let fakeAds = false 13 | 14 | enum SFSpotifreeState { 15 | case active 16 | case muting 17 | case inactive 18 | } 19 | 20 | protocol SpotifyManagerDelegate { 21 | func spotifreeStateChanged(_ state: SFSpotifreeState) 22 | } 23 | // Optional Functions 24 | extension SpotifyManagerDelegate { 25 | func spotifreeStateChanged(_ state: SFSpotifreeState) {} 26 | } 27 | 28 | class SpotifyManager: NSObject { 29 | var delegate : SpotifyManagerDelegate? 30 | 31 | private var timer : Timer? 32 | 33 | private let spotify = SBApplication(bundleIdentifier: "com.spotify.client")! as SpotifyApplication 34 | 35 | private var isMuted = false 36 | private var oldVolume = 75 37 | 38 | private var state = SFSpotifreeState.inactive { 39 | didSet { 40 | delegate?.spotifreeStateChanged(state) 41 | } 42 | } 43 | 44 | func start() { 45 | DistributedNotificationCenter.default().addObserver(self, selector: #selector(SpotifyManager.playbackStateChanged(_:)), name: NSNotification.Name(rawValue: "com.spotify.client.PlaybackStateChanged"), object: nil); 46 | 47 | if NSRunningApplication.runningApplications(withBundleIdentifier: "com.spotify.client").count != 0 && spotify.playerState! == .playing { 48 | startPolling() 49 | } 50 | } 51 | 52 | func playbackStateChanged(_ notification : Notification) { 53 | let playerState = notification.userInfo!["Player State"] as! String 54 | switch playerState { 55 | case "Stopped": 56 | state = .inactive 57 | fallthrough 58 | case "Paused": 59 | stopPolling() 60 | case "Playing": 61 | startPolling() 62 | case _: break 63 | } 64 | } 65 | 66 | func checkForAd() { 67 | let currentTrack = spotify.currentTrack! 68 | let isAd = fakeAds ? currentTrack.spotifyUrl!.hasPrefix("spotify:local") : currentTrack.trackNumber! == 0 && !currentTrack.spotifyUrl!.hasPrefix("spotify:local") 69 | isAd ? mute() : unmute() 70 | } 71 | 72 | func startPolling() { 73 | if (timer != nil) {return} 74 | timer = Timer.scheduledTimer(timeInterval: DataManager.sharedData.pollingRate(), target: self, selector: #selector(SpotifyManager.checkForAd), userInfo: nil, repeats: true) 75 | timer!.fire() 76 | 77 | state = .active 78 | } 79 | 80 | func stopPolling() { 81 | if let timer = timer { 82 | timer.invalidate() 83 | self.timer = nil 84 | state = isMuted ? .muting : .inactive 85 | } 86 | } 87 | 88 | func mute() { 89 | if isMuted {return} 90 | 91 | isMuted = true 92 | oldVolume = (spotify.soundVolume)! 93 | 94 | stopPolling() 95 | 96 | spotify.pause!() 97 | spotify.setSoundVolume!(0); 98 | spotify.play!() 99 | 100 | if DataManager.sharedData.shouldShowNofifications() { 101 | var duration = 0 102 | duration = spotify.currentTrack!.duration! / 1000 * 2 103 | displayNotificationWithText(String(format: NSLocalizedString("NOTIFICATION_AD_DETECTED", comment: "Notification: A Spotify ad was detected! Music will be back in about %i seconds…"), duration)) 104 | } 105 | } 106 | 107 | func unmute() { 108 | if !isMuted {return} 109 | 110 | delay(3/4) { 111 | self.isMuted = false 112 | self.spotify.setSoundVolume!(self.oldVolume) 113 | } 114 | } 115 | 116 | func displayNotificationWithText(_ text : String) { 117 | let notification = NSUserNotification() 118 | notification.title = "Spotifree" 119 | notification.informativeText = text 120 | notification.soundName = nil 121 | 122 | NSUserNotificationCenter.default.deliver(notification) 123 | } 124 | 125 | func delay(_ delay:Double, closure:@escaping ()->()) { 126 | let when = DispatchTime.now() + delay 127 | DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /Spotifree/de.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/de.lproj/Localizable.strings -------------------------------------------------------------------------------- /Spotifree/dsa_pub.pem: -------------------------------------------------------------------------------- 1 | -----BEGIN PUBLIC KEY----- 2 | MIIDOjCCAi0GByqGSM44BAEwggIgAoIBAQDJEmu3sAzW+OgUmVTHlF610SkJxxyX 3 | JSf1avvOdM45gkjOHFjQdSvfd/yo3q5XL7JLs0cig7ssKYo+HxopdhbUHoone+IK 4 | 6MoF/k2aztqD44H/ryyt/rexs7HXcdJoW2IDHlv7Jgk4D8uBn2E4Cenf2uEkWyep 5 | uhX821qj+f8yyLR1AoaKD1Kep3QFKRgIHblRUpgusLf7Gzkw1yz9uxIzWnAymbmX 6 | iqt1/q+2BQjvkPxmGD+ZIi/UmNuhW3Dad+DTE/Np6UiFZPCpsl7pNW8c4ORk/6k8 7 | bDfgcaxxcRe9KF0Uub3s9gQJL0pZB3FE+caU3PvYqIJIjZ392VOoqGr3AhUApT93 8 | R06LCdtrPMT1p4AUvBY4E2ECggEAP5ubmTe3n7mGsHbdiNNgSs5Lsmtx2dhOhs6G 9 | w1nzx/0Ak1w026eCuaSQw3vnlTQK1G1QOw9ptb5lO+nOJLtIaMEZLE55sG/lUDRT 10 | Ixnh0qn8VoR8EUlqwpIfGq/mC/fj27aK6rMDEtO/0aT7HuK0iM+H0WQ8ft0+4FMq 11 | lpc+YJ35bJlAfkHGNcrtmrry8Cgc3mgw2G/OZBNOax9yfPV5gHaZA4LqMDuerYbf 12 | HcH7NnXXNWsFOCmjrGeLO0CGwjE/QC0STJdTzXqyVvVCL0/7qV6f7IbeFm+UvO9p 13 | eFnh/lT8TCB7iwRhlB5YIdQdRnTX4di2rXvXgF1PhxyxRn5rgQOCAQUAAoIBAAnx 14 | OuXMysm08dDnS1ev8CrkCBtY4hNRsR9uMKbb+frBWWWRl1SytNHvbzB8wIW6B/aw 15 | JUN0A1f1ScLyWDdzYqGGrYfVdwBxlAgPoAY2jzOr+9RZbhkXbxajPDj4yTqH0Ny1 16 | JCF6nVYeY43qbd0u3UaH+g7fEDGVpX2k/sUcUUnBLEq2hui/7GERp1ux1/iJ+WYe 17 | /DiSoIDlYqFq3uyv88g0Gtu5ThOAWWwXZTnRNw+ZViBAqeSf94c00l0v7q/2PlKC 18 | 1ej1SFrS5Z73XvTI/EDPvSmvsSR0pPghpHlxlPZFdq3LJ/q1XhAVWYXX6TpBFfqn 19 | C1OIv5qeW1/tDn90fRs= 20 | -----END PUBLIC KEY----- 21 | -------------------------------------------------------------------------------- /Spotifree/en.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/en.lproj/Localizable.strings -------------------------------------------------------------------------------- /Spotifree/fi.lproj/Localizable.strings: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/artemgordinskiy/Spotifree/0dea3fea5093209e5df87466efe2ff17269bcb4b/Spotifree/fi.lproj/Localizable.strings -------------------------------------------------------------------------------- /Spotifree/fr.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Alert info: To show the icon again, simply launch Spotifree from Dock or Finder */ 2 | "ALERT_HIDE_ICON_INFO" = "Pour revoir cet icône, relancer Spotifree depuis le Dock ou le Finder"; 3 | 4 | /* Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login */ 5 | "ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO" = "Si vous voulez rendre l'application complètement invisible, activez le lancement au démarrage de la session"; 6 | 7 | /* General: Cancel */ 8 | "CANCEL" = "Annuler"; 9 | 10 | /* Menu: About */ 11 | "MENU_ABOUT" = "À propos de Spotifree"; 12 | 13 | /* Spotify state: Active */ 14 | "MENU_ACTIVE" = "Actif"; 15 | 16 | /* Menu: Donate */ 17 | "MENU_DONATE" = "Faire un don"; 18 | 19 | /* Menu: Hide Icon */ 20 | "MENU_HIDE_ICON" = "Masquer l'icône"; 21 | 22 | /* Spotify state: Inactive */ 23 | "MENU_INACTIVE" = "Inactif"; 24 | 25 | /* Spotify state: Muting Ad */ 26 | "MENU_MUTING_AD" = "Pub muette"; 27 | 28 | /* Menu: Notifications */ 29 | "MENU_NOTIFICATIONS" = "Notifications"; 30 | 31 | /* Menu: Quit */ 32 | "MENU_QUIT" = "Quitter Spotifree"; 33 | 34 | /* Menu: Run At Login */ 35 | "MENU_RUN_AT_LOGIN" = "Lancer au démarrage de la sesion"; 36 | 37 | /* Menu: Updates */ 38 | "MENU_UPDATES" = "Mises à jour"; 39 | 40 | /* Menu: Check Automatically */ 41 | "MENU_UPDATES_CHECK_AUTOMATICALLY" = "Vérifier automatiquement"; 42 | 43 | /* Menu: Check For Updates... */ 44 | "MENU_UPDATES_CHECK_FOR_UPDATES" = "Vérifier les mises à jour..."; 45 | 46 | /* Menu: Download automatically */ 47 | "MENU_UPDATES_DOWNLOAD_AUTOMATICALLY" = "Télécharger automatiquement"; 48 | 49 | /* Notification: A Spotify ad was detected! Music will be back in about %i seconds... */ 50 | "NOTIFICATION_AD_DETECTED" = "Une pub Spotify a été détectée! La musique va revenir dans %i secondes"; 51 | 52 | /* General: OK */ 53 | "OK" = "OK"; 54 | 55 | -------------------------------------------------------------------------------- /Spotifree/hu.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Alert info: To show the icon again, simply launch Spotifree from Dock or Finder */ 2 | "ALERT_HIDE_ICON_INFO" = "Hogy újra megjelenjen az ikon, csak indítsd el a Spotifree-t a Dock-ról vagy Finder-ből"; 3 | 4 | /* Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login */ 5 | "ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO" = "Ha teljesen láthatatlanná szeretnéd tenni az alkalmazást, ajánlott engedélyezni az indulását a rendszerrel együtt"; 6 | 7 | /* General: Cancel */ 8 | "CANCEL" = "Mégsem"; 9 | 10 | /* Menu: About */ 11 | "MENU_ABOUT" = "A Spotifree-ről"; 12 | 13 | /* Spotify state: Active */ 14 | "MENU_ACTIVE" = "Aktív"; 15 | 16 | /* Menu: Donate */ 17 | "MENU_DONATE" = "Támogatás"; 18 | 19 | /* Menu: Hide Icon */ 20 | "MENU_HIDE_ICON" = "Ikon elrejtése"; 21 | 22 | /* Spotify state: Inactive */ 23 | "MENU_INACTIVE" = "Inaktív"; 24 | 25 | /* Spotify state: Muting Ad */ 26 | "MENU_MUTING_AD" = "Reklám némítás"; 27 | 28 | /* Menu: Notifications */ 29 | "MENU_NOTIFICATIONS" = "Értesítések"; 30 | 31 | /* Menu: Quit */ 32 | "MENU_QUIT" = "Spotifree bezárása"; 33 | 34 | /* Menu: Run At Login */ 35 | "MENU_RUN_AT_LOGIN" = "Indulás a rendszerrel együtt"; 36 | 37 | /* Menu: Updates */ 38 | "MENU_UPDATES" = "Frissítések"; 39 | 40 | /* Menu: Check Automatically */ 41 | "MENU_UPDATES_CHECK_AUTOMATICALLY" = "Automatikus ellenőrzés"; 42 | 43 | /* Menu: Check For Updates... */ 44 | "MENU_UPDATES_CHECK_FOR_UPDATES" = "Frissítések keresése..."; 45 | 46 | /* Menu: Download automatically */ 47 | "MENU_UPDATES_DOWNLOAD_AUTOMATICALLY" = "Automatikus letöltés"; 48 | 49 | /* Notification: A Spotify ad was detected! Music will be back in about %i seconds... */ 50 | "NOTIFICATION_AD_DETECTED" = "Spotify reklám észlelve! A zene folytatódik körülbelül %i másodperc múlva..."; 51 | 52 | /* General: OK */ 53 | "OK" = "Rendben"; 54 | 55 | -------------------------------------------------------------------------------- /Spotifree/it.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Alert info: To show the icon again, simply launch Spotifree from Dock or Finder */ 2 | "ALERT_HIDE_ICON_INFO" = "Per mostrare di nuovo l'icona, semplicemente apri Spotifree dal Dock o dal Finder"; 3 | 4 | /* Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login */ 5 | "ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO" = "Se vuoi rendere l'app davvero invisibile, ti suggeriamo di consentirne l'avvio al login"; 6 | 7 | /* General: Cancel */ 8 | "CANCEL" = "Annulla"; 9 | 10 | /* Menu: About */ 11 | "MENU_ABOUT" = "Informazioni su Spotifree"; 12 | 13 | /* Spotify state: Active */ 14 | "MENU_ACTIVE" = "Attivo"; 15 | 16 | /* Menu: Donate */ 17 | "MENU_DONATE" = "Dona"; 18 | 19 | /* Menu: Hide Icon */ 20 | "MENU_HIDE_ICON" = "Nascondi icona"; 21 | 22 | /* Spotify state: Inactive */ 23 | "MENU_INACTIVE" = "Non attivo"; 24 | 25 | /* Spotify state: Muting Ad */ 26 | "MENU_MUTING_AD" = "Disattivo pubblicità"; 27 | 28 | /* Menu: Notifications */ 29 | "MENU_NOTIFICATIONS" = "Notifiche"; 30 | 31 | /* Menu: Quit */ 32 | "MENU_QUIT" = "Esci da Spotifree"; 33 | 34 | /* Menu: Run At Login */ 35 | "MENU_RUN_AT_LOGIN" = "Avvia al login"; 36 | 37 | /* Menu: Updates */ 38 | "MENU_UPDATES" = "Aggiornamenti"; 39 | 40 | /* Menu: Check Automatically */ 41 | "MENU_UPDATES_CHECK_AUTOMATICALLY" = "Verifica automaticamente"; 42 | 43 | /* Menu: Check For Updates... */ 44 | "MENU_UPDATES_CHECK_FOR_UPDATES" = "Verifica aggiornamenti…"; 45 | 46 | /* Menu: Download automatically */ 47 | "MENU_UPDATES_DOWNLOAD_AUTOMATICALLY" = "Scarica automaticamente"; 48 | 49 | /* Notification: A Spotify ad was detected! Music will be back in about %i seconds... */ 50 | "NOTIFICATION_AD_DETECTED" = "È stata rilevata una pubblicità di Spotify! La musica tornerà tra circa %i secondi…"; 51 | 52 | /* General: OK */ 53 | "OK" = "OK"; 54 | 55 | -------------------------------------------------------------------------------- /Spotifree/ko-KR.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Alert info: To show the icon again, simply launch Spotifree from Dock or Finder */ 2 | "ALERT_HIDE_ICON_INFO" = "아이콘을 숨깁니다. 다시 보고 싶다면 독이나 파인더에서 프로그램을 실행하세요."; 3 | 4 | /* Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login */ 5 | "ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO" = "정말 프로그램을 보이지 않게 하고 싶다면, 로그인 시 실행 옵션을 함께 이용하세요"; 6 | 7 | /* General: Cancel */ 8 | "CANCEL" = "취소"; 9 | 10 | /* Menu: About */ 11 | "MENU_ABOUT" = "프로그램 정보"; 12 | 13 | /* Spotify state: Active */ 14 | "MENU_ACTIVE" = "활성"; 15 | 16 | /* Menu: Donate */ 17 | "MENU_DONATE" = "기부"; 18 | 19 | /* Menu: Hide Icon */ 20 | "MENU_HIDE_ICON" = "아이콘 숨기기"; 21 | 22 | /* Spotify state: Inactive */ 23 | "MENU_INACTIVE" = "비활성"; 24 | 25 | /* Spotify state: Muting Ad */ 26 | "MENU_MUTING_AD" = "광고 중 음소거"; 27 | 28 | /* Menu: Notifications */ 29 | "MENU_NOTIFICATIONS" = "알림"; 30 | 31 | /* Menu: Quit */ 32 | "MENU_QUIT" = "프로그램 종료"; 33 | 34 | /* Menu: Run At Login */ 35 | "MENU_RUN_AT_LOGIN" = "로그인 시 실행"; 36 | 37 | /* Menu: Updates */ 38 | "MENU_UPDATES" = "업데이트"; 39 | 40 | /* Menu: Check Automatically */ 41 | "MENU_UPDATES_CHECK_AUTOMATICALLY" = "자동 확인"; 42 | 43 | /* Menu: Check For Updates... */ 44 | "MENU_UPDATES_CHECK_FOR_UPDATES" = "업데이트 확인중..."; 45 | 46 | /* Menu: Download automatically */ 47 | "MENU_UPDATES_DOWNLOAD_AUTOMATICALLY" = "자동 다운로드"; 48 | 49 | /* Notification: A Spotify ad was detected! Music will be back in about %i seconds... */ 50 | "NOTIFICATION_AD_DETECTED" = "광고가 감지되었습니다! 음악이 약 %i 초 뒤에 다시 시작됩니다..."; 51 | 52 | /* General: OK */ 53 | "OK" = "확인"; 54 | 55 | -------------------------------------------------------------------------------- /Spotifree/nl.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Alert info: To show the icon again, simply launch Spotifree from Dock or Finder */ 2 | "ALERT_HIDE_ICON_INFO" = "Om het pictogram opnieuw weer te geven, opent u Spotifree vanuit het Dock of Finder"; 3 | 4 | /* Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login */ 5 | "ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO" = "Als u de app echt onzichtbaar wilt maken, raden we u aan om Spotifree ook automatisch te laten starten bij het inloggen"; 6 | 7 | /* General: Cancel */ 8 | "CANCEL" = "Annuleren"; 9 | 10 | /* Menu: About */ 11 | "MENU_ABOUT" = "Over Spotifree"; 12 | 13 | /* Spotify state: Active */ 14 | "MENU_ACTIVE" = "Actief"; 15 | 16 | /* Menu: Donate */ 17 | "MENU_DONATE" = "Doneren"; 18 | 19 | /* Menu: Hide Icon */ 20 | "MENU_HIDE_ICON" = "Pictogram verbergen"; 21 | 22 | /* Spotify state: Inactive */ 23 | "MENU_INACTIVE" = "Inactief"; 24 | 25 | /* Spotify state: Muting Ad */ 26 | "MENU_MUTING_AD" = "Advertentie dempen"; 27 | 28 | /* Menu: Notifications */ 29 | "MENU_NOTIFICATIONS" = "Notificaties"; 30 | 31 | /* Menu: Quit */ 32 | "MENU_QUIT" = "Spotifree afsluiten"; 33 | 34 | /* Menu: Run At Login */ 35 | "MENU_RUN_AT_LOGIN" = "Automatisch starten"; 36 | 37 | /* Menu: Updates */ 38 | "MENU_UPDATES" = "Updates"; 39 | 40 | /* Menu: Check Automatically */ 41 | "MENU_UPDATES_CHECK_AUTOMATICALLY" = "Automatisch controleren"; 42 | 43 | /* Menu: Check For Updates... */ 44 | "MENU_UPDATES_CHECK_FOR_UPDATES" = "Naar updates zoeken..."; 45 | 46 | /* Menu: Download automatically */ 47 | "MENU_UPDATES_DOWNLOAD_AUTOMATICALLY" = "Automatisch downloaden"; 48 | 49 | /* Notification: A Spotify ad was detected! Music will be back in about %i seconds... */ 50 | "NOTIFICATION_AD_DETECTED" = "Een Spotify advertentie is gedetecteerd! De muziek zal verder gaan in ongeveer %i seconden..."; 51 | 52 | /* General: OK */ 53 | "OK" = "OK"; 54 | 55 | -------------------------------------------------------------------------------- /Spotifree/pl-PL.lproj/Localizable.strings: -------------------------------------------------------------------------------- 1 | /* Alert info: To show the icon again, simply launch Spotifree from Dock or Finder */ 2 | "ALERT_HIDE_ICON_INFO" = "Aby pokazać ikonę spowrotem, po prostu otwórz Spotifree z Dock'a albo Finder'a"; 3 | 4 | /* Alert info: If you want to make the app truly invisible, we suggest also allowing it to launch at login */ 5 | "ALERT_HIDE_ICON_LAUNCH_AT_LOGIN_INFO" = "Jeśli chcesz aby aplikacja była w pełni niewidoczna, sugerujemy zezwolenie na uruchomienie przy zalogowaniu"; 6 | 7 | /* General: Cancel */ 8 | "CANCEL" = "Anuluj"; 9 | 10 | /* Menu: About */ 11 | "MENU_ABOUT" = "O Spotifree"; 12 | 13 | /* Spotify state: Active */ 14 | "MENU_ACTIVE" = "Aktywne"; 15 | 16 | /* Menu: Donate */ 17 | "MENU_DONATE" = "Wspomóż"; 18 | 19 | /* Menu: Hide Icon */ 20 | "MENU_HIDE_ICON" = "Ukryj Ikonę"; 21 | 22 | /* Spotify state: Inactive */ 23 | "MENU_INACTIVE" = "Nieaktywne"; 24 | 25 | /* Spotify state: Muting Ad */ 26 | "MENU_MUTING_AD" = "Reklama jest wyciszona"; 27 | 28 | /* Menu: Notifications */ 29 | "MENU_NOTIFICATIONS" = "Powiadomienia"; 30 | 31 | /* Menu: Quit */ 32 | "MENU_QUIT" = "Zamknij Spotifree"; 33 | 34 | /* Menu: Run At Login */ 35 | "MENU_RUN_AT_LOGIN" = "Uruchom przy zalogowaniu"; 36 | 37 | /* Menu: Updates */ 38 | "MENU_UPDATES" = "Aktualizacje"; 39 | 40 | /* Menu: Check Automatically */ 41 | "MENU_UPDATES_CHECK_AUTOMATICALLY" = "Sprawdź automatycznie"; 42 | 43 | /* Menu: Check For Updates... */ 44 | "MENU_UPDATES_CHECK_FOR_UPDATES" = "Sprawdź dostępność aktualizacji"; 45 | 46 | /* Menu: Download automatically */ 47 | "MENU_UPDATES_DOWNLOAD_AUTOMATICALLY" = "Instaluj aktualizacje automatycznie"; 48 | 49 | /* Notification: A Spotify ad was detected! Music will be back in about %i seconds... */ 50 | "NOTIFICATION_AD_DETECTED" = "Reklama Spotify została wykryta! Muzyka zostanie wznowiona w przeciągu %i sekund..."; 51 | 52 | /* General: OK */ 53 | "OK" = "OK"; --------------------------------------------------------------------------------