├── .gitignore ├── Lato-Black.ttf ├── Lato-Bol.ttf ├── Lato-Lig.ttf ├── Lato-Reg.ttf ├── Lyricism-Bridging-Header.h ├── Lyricism.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── Lyricism.xcworkspace └── contents.xcworkspacedata ├── Lyricism ├── AppDelegate.swift ├── AppearanceViewController.swift ├── Assets.xcassets │ ├── AppIcon.appiconset │ │ ├── Contents.json │ │ ├── Icon-128.0@1x.png │ │ ├── Icon-128.0@2x.png │ │ ├── Icon-16.0@1x.png │ │ ├── Icon-16.0@2x.png │ │ ├── Icon-256.0@1x.png │ │ ├── Icon-256.0@2x.png │ │ ├── Icon-32.0@1x.png │ │ ├── Icon-32.0@2x.png │ │ ├── Icon-512.0@1x.png │ │ └── Icon-512.0@2x.png │ ├── Contents.json │ ├── StatusBarButtonImage.imageset │ │ ├── Contents.json │ │ └── StatusBarButtonImage@2x.png │ ├── avatar.imageset │ │ ├── Contents.json │ │ └── avatar.png │ ├── dark_lyrics.imageset │ │ ├── Contents.json │ │ └── dark_lyrics.pdf │ ├── fast-forward.imageset │ │ ├── Contents.json │ │ └── fast-forward.png │ ├── iTunes.imageset │ │ ├── Contents.json │ │ └── iTunes.png │ ├── light_lyrics.imageset │ │ ├── Contents.json │ │ └── light_lyrics.pdf │ ├── note_dark.imageset │ │ ├── Contents.json │ │ └── note_dark.pdf │ ├── note_light.imageset │ │ ├── Contents.json │ │ └── note_light.pdf │ ├── pin-post.imageset │ │ ├── Contents.json │ │ └── pin-post.png │ ├── pin.imageset │ │ ├── Contents.json │ │ └── unpin.pdf │ ├── setting_dark.imageset │ │ ├── Contents.json │ │ └── setting_dark.pdf │ ├── setting_light.imageset │ │ ├── Contents.json │ │ └── setting_light.pdf │ ├── spotify.imageset │ │ ├── Contents.json │ │ └── spotify.png │ └── unpin.imageset │ │ ├── Contents.json │ │ └── pin.pdf ├── Base.lproj │ ├── Localizable.strings.strings │ ├── Main.storyboard │ └── Preferences.storyboard ├── BlurBackground.swift ├── BlurBackground.xib ├── ContainerSwitchable.swift ├── Document.swift ├── EventMonitor.swift ├── Info.plist ├── JumpOnLabelViewController.swift ├── Lyricism.entitlements ├── LyricsSettingViewController.swift ├── LyricsViewController.swift ├── MResponse.swift ├── MacUtilities.swift ├── MarqueeView.swift ├── MusiXMatch.swift ├── MusiXMatchApi.swift ├── NSObject+Extension.swift ├── PlayerControllerPanel.swift ├── PlayerControllerPanel.xib ├── PopoverContentView.swift ├── PreferenceSegue.swift ├── PreferenceViewController.swift ├── PreferencesSetable.swift ├── PreferencesWindowController.swift ├── SFPopover.swift ├── SFRealm.swift ├── SettingMenu.swift ├── Text.swift ├── Timerable.swift ├── Track.swift ├── ViewController.swift ├── en.lproj │ ├── Main.strings │ └── Preferences.strings ├── es.lproj │ ├── Main.strings │ └── Preferences.strings ├── iTunesPresentable.swift ├── ja.lproj │ ├── Main.strings │ └── Preferences.strings ├── th.lproj │ ├── Main.strings │ └── Preferences.strings └── zh-Hant.lproj │ ├── Localizable.strings.strings │ ├── Main.strings │ └── Preferences.strings ├── Podfile.lock ├── Pods ├── Alamofire │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── Alamofire.swift │ │ ├── Download.swift │ │ ├── Error.swift │ │ ├── Manager.swift │ │ ├── MultipartFormData.swift │ │ ├── NetworkReachabilityManager.swift │ │ ├── Notifications.swift │ │ ├── ParameterEncoding.swift │ │ ├── Request.swift │ │ ├── Response.swift │ │ ├── ResponseSerialization.swift │ │ ├── Result.swift │ │ ├── ServerTrustPolicy.swift │ │ ├── Stream.swift │ │ ├── Timeline.swift │ │ ├── Upload.swift │ │ └── Validation.swift ├── Crashlytics │ ├── Crashlytics.framework │ │ ├── README │ │ └── submit │ ├── OSX │ │ └── Crashlytics.framework │ │ │ ├── Crashlytics │ │ │ ├── Headers │ │ │ ├── Modules │ │ │ ├── Resources │ │ │ ├── Versions │ │ │ ├── A │ │ │ │ ├── Crashlytics │ │ │ │ ├── Headers │ │ │ │ │ ├── ANSCompatibility.h │ │ │ │ │ ├── Answers.h │ │ │ │ │ ├── CLSAttributes.h │ │ │ │ │ ├── CLSLogging.h │ │ │ │ │ ├── CLSReport.h │ │ │ │ │ ├── CLSStackFrame.h │ │ │ │ │ └── Crashlytics.h │ │ │ │ ├── Modules │ │ │ │ │ └── module.modulemap │ │ │ │ └── Resources │ │ │ │ │ └── Info.plist │ │ │ └── Current │ │ │ ├── run │ │ │ ├── submit │ │ │ └── uploadDSYM │ ├── README.md │ └── submit ├── Fabric │ ├── Fabric.framework │ │ ├── README │ │ └── run │ ├── OSX │ │ └── Fabric.framework │ │ │ ├── Fabric │ │ │ ├── Headers │ │ │ ├── Modules │ │ │ ├── Resources │ │ │ ├── Versions │ │ │ ├── A │ │ │ │ ├── Fabric │ │ │ │ ├── Headers │ │ │ │ │ ├── FABAttributes.h │ │ │ │ │ └── Fabric.h │ │ │ │ ├── Modules │ │ │ │ │ └── module.modulemap │ │ │ │ └── Resources │ │ │ │ │ └── Info.plist │ │ │ └── Current │ │ │ ├── run │ │ │ └── uploadDSYM │ ├── README.md │ ├── run │ ├── upload-symbols │ └── uploadDSYM ├── Manifest.lock ├── Pods.xcodeproj │ ├── project.pbxproj │ └── xcuserdata │ │ └── Stan.xcuserdatad │ │ └── xcschemes │ │ ├── Alamofire.xcscheme │ │ ├── SWXMLHash.xcscheme │ │ ├── SwiftyJSON.xcscheme │ │ └── xcschememanagement.plist ├── ReachabilitySwift │ ├── LICENSE │ ├── README.md │ └── Reachability │ │ └── Reachability.swift ├── SWXMLHash │ ├── LICENSE │ ├── README.md │ └── Source │ │ ├── SWXMLHash+TypeConversion.swift │ │ └── SWXMLHash.swift ├── SwiftyJSON │ ├── LICENSE │ ├── README.md │ └── Source │ │ └── SwiftyJSON.swift └── Target Support Files │ ├── Alamofire │ ├── Alamofire-dummy.m │ ├── Alamofire-prefix.pch │ ├── Alamofire-umbrella.h │ ├── Alamofire.modulemap │ ├── Alamofire.xcconfig │ └── Info.plist │ ├── Pods-Lyricism │ ├── Info.plist │ ├── Pods-Lyricism-acknowledgements.markdown │ ├── Pods-Lyricism-acknowledgements.plist │ ├── Pods-Lyricism-dummy.m │ ├── Pods-Lyricism-frameworks.sh │ ├── Pods-Lyricism-resources.sh │ ├── Pods-Lyricism-umbrella.h │ ├── Pods-Lyricism.debug.xcconfig │ ├── Pods-Lyricism.modulemap │ └── Pods-Lyricism.release.xcconfig │ ├── ReachabilitySwift │ ├── Info.plist │ ├── ReachabilitySwift-dummy.m │ ├── ReachabilitySwift-prefix.pch │ ├── ReachabilitySwift-umbrella.h │ ├── ReachabilitySwift.modulemap │ └── ReachabilitySwift.xcconfig │ ├── SWXMLHash │ ├── Info.plist │ ├── SWXMLHash-dummy.m │ ├── SWXMLHash-prefix.pch │ ├── SWXMLHash-umbrella.h │ ├── SWXMLHash.modulemap │ └── SWXMLHash.xcconfig │ └── SwiftyJSON │ ├── Info.plist │ ├── SwiftyJSON-dummy.m │ ├── SwiftyJSON-prefix.pch │ ├── SwiftyJSON-umbrella.h │ ├── SwiftyJSON.modulemap │ └── SwiftyJSON.xcconfig ├── README.md ├── Safari.h ├── Spotify.h ├── Spotify.sdef ├── Spotify.swift ├── SpotifyScripting.swift ├── fastlane ├── Appfile ├── Deliverfile ├── Fastfile ├── README.md └── metadata │ ├── copyright.txt │ ├── en-US │ ├── description.txt │ ├── keywords.txt │ ├── marketing_url.txt │ ├── name.txt │ ├── privacy_url.txt │ ├── release_notes.txt │ └── support_url.txt │ ├── primary_category.txt │ ├── primary_first_sub_category.txt │ ├── primary_second_sub_category.txt │ ├── secondary_category.txt │ ├── secondary_first_sub_category.txt │ └── secondary_second_sub_category.txt ├── iTunes ├── iTunes.h ├── iTunes.sdef ├── iTunes.swift └── iTunesScripting.swift ├── iTunesScripting ├── Info.plist └── iTunesScripting.h ├── podfile └── screenshot ├── Screen Shot 2016-07-21 at 4.34.33 PM.jpg ├── Screen Shot 2016-07-21 at 4.35.50 PM.jpg ├── Screen Shot 2016-07-21 at 4.36.23 PM.jpg ├── Screen Shot 2016-07-21 at 4.36.44 PM.jpg ├── Screen Shot 2016-09-20 at 9.22.59 AM.jpg ├── Screen Shot 2016-09-20 at 9.23.34 AM.jpg └── Screen Shot 2016-09-20 at 9.30.00 AM.jpg /.gitignore: -------------------------------------------------------------------------------- 1 | b 2 | # Xcode 3 | # 4 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore 5 | 6 | ## Build generated 7 | build/ 8 | DerivedData/ 9 | 10 | ## Various settings 11 | *.pbxuser 12 | !default.pbxuser 13 | *.mode1v3 14 | !default.mode1v3 15 | *.mode2v3 16 | !default.mode2v3 17 | *.perspectivev3 18 | !default.perspectivev3 19 | xcuserdata/ 20 | 21 | ## Other 22 | *.moved-aside 23 | *.xcuserstate 24 | 25 | ## Obj-C/Swift specific 26 | *.hmap 27 | *.ipa 28 | *.dSYM.zip 29 | *.dSYM 30 | 31 | ## Playgrounds 32 | timeline.xctimeline 33 | playground.xcworkspace 34 | 35 | # Swift Package Manager 36 | # 37 | # Add this line if you want to avoid checking in source code from Swift Package Manager dependencies. 38 | # Packages/ 39 | .build/ 40 | 41 | # CocoaPods 42 | # 43 | # We recommend against adding the Pods directory to your .gitignore. However 44 | # you should judge for yourself, the pros and cons are mentioned at: 45 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control 46 | # 47 | # Pods/ 48 | 49 | # Carthage 50 | # 51 | # Add this line if you want to avoid checking in source code from Carthage dependencies. 52 | # Carthage/Checkouts 53 | 54 | Carthage/Build 55 | 56 | # fastlane 57 | # 58 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the 59 | # screenshots whenever they are needed. 60 | # For more information about the recommended setup visit: 61 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md 62 | 63 | fastlane/report.xml 64 | fastlane/Preview.html 65 | fastlane/screenshots 66 | fastlane/test_output 67 | -------------------------------------------------------------------------------- /Lato-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lato-Black.ttf -------------------------------------------------------------------------------- /Lato-Bol.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lato-Bol.ttf -------------------------------------------------------------------------------- /Lato-Lig.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lato-Lig.ttf -------------------------------------------------------------------------------- /Lato-Reg.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lato-Reg.ttf -------------------------------------------------------------------------------- /Lyricism-Bridging-Header.h: -------------------------------------------------------------------------------- 1 | // 2 | // Use this file to import your target's public headers that you would like to expose to Swift. 3 | // 4 | 5 | 6 | #import 7 | 8 | -------------------------------------------------------------------------------- /Lyricism.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Lyricism.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /Lyricism/AppearanceViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppearanceViewController.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 02/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | protocol PlayerSourceable { 12 | 13 | func setPlayerSource(type: SBApplicationID) 14 | func getPlayerSource() -> SBApplicationID 15 | } 16 | 17 | extension PlayerSourceable where Self: NSViewController { 18 | 19 | func setPlayerSource(type: SBApplicationID) { 20 | 21 | switch type { 22 | case .itunes: NSUserDefaults.standardUserDefaults().setInteger(0, forKey: SBApplicationID.sourceKey) 23 | case .spotify: 24 | NSUserDefaults.standardUserDefaults().setInteger(1, forKey: SBApplicationID.sourceKey) 25 | } 26 | } 27 | 28 | func getPlayerSource() -> SBApplicationID { 29 | 30 | switch NSUserDefaults.standardUserDefaults().integerForKey(SBApplicationID.sourceKey) { 31 | case 0: return SBApplicationID.itunes 32 | case 1: return SBApplicationID.spotify 33 | default: 34 | s_print("getPlayerSource SBApplicationID out of bounds, AppearanceViewController, Line: 33") 35 | return SBApplicationID.itunes 36 | } 37 | } 38 | } 39 | 40 | class AppearanceViewController: NSViewController, PreferencesSetable, PlayerSourceable { 41 | 42 | /* 43 | @IBOutlet weak var scrollView: NSScrollView! { 44 | didSet { 45 | if let tableView = scrollView.documentView as? NSTableView { 46 | tableView.setDataSource(self) 47 | tableView.setDelegate(self) 48 | tableView.backgroundColor = NSColor.grayColor() 49 | } 50 | } 51 | }*/ 52 | @IBOutlet weak var isOnDockBtn: NSButton! 53 | @IBOutlet weak var isAlwaysTopBtn: NSButton! 54 | 55 | var sourceButtons: [NSButton]! 56 | 57 | @IBOutlet weak var iTunesButton: NSButton! 58 | 59 | @IBOutlet weak var spotifyButton: NSButton! 60 | 61 | var delegate: PlayerSourceable? 62 | 63 | override func viewDidLoad() { 64 | super.viewDidLoad() 65 | 66 | isOnDockBtn.state = isDockerShown() ? 1 : 0 67 | isAlwaysTopBtn.state = isWindowsOnTop() ? 1 : 0 68 | 69 | sourceButtons = [iTunesButton, spotifyButton] 70 | 71 | clean() 72 | getPlayerSource() == .itunes ? iTunesButton.selected(true) : spotifyButton.selected(true) 73 | } 74 | 75 | @IBAction func hideDock(sender: AnyObject) { 76 | 77 | s_print("show:\((sender as! NSButton).state)") 78 | 79 | setDocker(Settings.Docker(rawValue: isOnDockBtn.state)!) 80 | } 81 | 82 | @IBAction func onTop(sender: AnyObject) { 83 | 84 | setWindowsOnTop(Settings.WindowsOnTop(rawValue: isAlwaysTopBtn.state)!) 85 | } 86 | 87 | func clean() { 88 | 89 | for button in sourceButtons { 90 | 91 | button.selected(false) 92 | } 93 | } 94 | 95 | @IBAction func sourceButtonsPressed(sender: AnyObject) { 96 | 97 | clean() 98 | 99 | (sender as! NSButton).selected(true) 100 | 101 | setPlayerSource((sender as! NSButton) == iTunesButton ? .itunes : .spotify) 102 | s_print("source: \((sender as! NSButton) == iTunesButton ? "itunes" : "spotify")") 103 | 104 | NSNotificationCenter.defaultCenter().postNotificationName(SBApplicationID.sourceKey, object: nil) 105 | } 106 | 107 | func setSourceImage(type: SBApplicationID) { } 108 | } 109 | 110 | extension NSButton { 111 | 112 | func selected(option: Bool) { 113 | 114 | // This must set, otherwise it won't appear layer 115 | self.wantsLayer = true 116 | 117 | if option { 118 | self.layer?.borderWidth = 5.0 119 | self.layer?.borderColor = NSColor.whiteColor().CGColor 120 | self.layer?.cornerRadius = self.frame.height / 2 121 | self.layer?.masksToBounds = true 122 | } else { 123 | self.layer?.borderColor = NSColor.clearColor().CGColor 124 | } 125 | } 126 | } 127 | 128 | /* 129 | extension AppearanceViewController: NSTableViewDelegate { 130 | 131 | func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? { 132 | 133 | let text = "I am a text" 134 | var cellIdentifier = "cell" 135 | 136 | 137 | if tableColumn == tableView.tableColumns[0] { 138 | 139 | cellIdentifier = "cell" 140 | } 141 | 142 | if let cell = tableView.makeViewWithIdentifier(cellIdentifier, owner: nil) as? NSTableCellView { 143 | 144 | cell.textField?.stringValue = text 145 | return cell 146 | } 147 | return nil 148 | } 149 | 150 | func tableView(tableView: NSTableView, objectValueForTableColumn tableColumn: NSTableColumn?, row: Int) -> AnyObject? { 151 | 152 | return nil 153 | } 154 | } 155 | 156 | extension AppearanceViewController: NSTableViewDataSource { 157 | 158 | func numberOfRowsInTableView(tableView: NSTableView) -> Int { 159 | return 1 160 | } 161 | 162 | 163 | } 164 | */ -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "Icon-16.0@1x.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "Icon-16.0@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "Icon-32.0@1x.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "Icon-32.0@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "size" : "128x128", 29 | "idiom" : "mac", 30 | "filename" : "Icon-128.0@1x.png", 31 | "scale" : "1x" 32 | }, 33 | { 34 | "size" : "128x128", 35 | "idiom" : "mac", 36 | "filename" : "Icon-128.0@2x.png", 37 | "scale" : "2x" 38 | }, 39 | { 40 | "size" : "256x256", 41 | "idiom" : "mac", 42 | "filename" : "Icon-256.0@1x.png", 43 | "scale" : "1x" 44 | }, 45 | { 46 | "size" : "256x256", 47 | "idiom" : "mac", 48 | "filename" : "Icon-256.0@2x.png", 49 | "scale" : "2x" 50 | }, 51 | { 52 | "size" : "512x512", 53 | "idiom" : "mac", 54 | "filename" : "Icon-512.0@1x.png", 55 | "scale" : "1x" 56 | }, 57 | { 58 | "size" : "512x512", 59 | "idiom" : "mac", 60 | "filename" : "Icon-512.0@2x.png", 61 | "scale" : "2x" 62 | } 63 | ], 64 | "info" : { 65 | "version" : 1, 66 | "author" : "xcode" 67 | } 68 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-128.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-128.0@1x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-128.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-128.0@2x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-16.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-16.0@1x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-16.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-16.0@2x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-256.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-256.0@1x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-256.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-256.0@2x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-32.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-32.0@1x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-32.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-32.0@2x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-512.0@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-512.0@1x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-512.0@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-512.0@2x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "info" : { 3 | "version" : 1, 4 | "author" : "xcode" 5 | } 6 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/StatusBarButtonImage.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal" 5 | }, 6 | { 7 | "idiom" : "universal", 8 | "scale" : "1x" 9 | }, 10 | { 11 | "idiom" : "universal", 12 | "filename" : "StatusBarButtonImage@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "idiom" : "universal", 17 | "scale" : "3x" 18 | }, 19 | { 20 | "idiom" : "mac" 21 | }, 22 | { 23 | "idiom" : "mac", 24 | "scale" : "1x" 25 | }, 26 | { 27 | "idiom" : "mac", 28 | "scale" : "2x" 29 | } 30 | ], 31 | "info" : { 32 | "version" : 1, 33 | "author" : "xcode" 34 | }, 35 | "properties" : { 36 | "template-rendering-intent" : "template" 37 | } 38 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage@2x.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/avatar.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "avatar.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/avatar.imageset/avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/avatar.imageset/avatar.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/dark_lyrics.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "dark_lyrics.pdf", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/dark_lyrics.imageset/dark_lyrics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/dark_lyrics.imageset/dark_lyrics.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/fast-forward.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "fast-forward.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/fast-forward.imageset/fast-forward.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/fast-forward.imageset/fast-forward.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/iTunes.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "iTunes.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/iTunes.imageset/iTunes.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/iTunes.imageset/iTunes.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/light_lyrics.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "light_lyrics.pdf", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/light_lyrics.imageset/light_lyrics.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/light_lyrics.imageset/light_lyrics.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/note_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "note_dark.pdf", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/note_dark.imageset/note_dark.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/note_dark.imageset/note_dark.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/note_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "scale" : "1x" 6 | }, 7 | { 8 | "idiom" : "universal", 9 | "filename" : "note_light.pdf", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/note_light.imageset/note_light.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/note_light.imageset/note_light.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/pin-post.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pin-post.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/pin-post.imageset/pin-post.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/pin-post.imageset/pin-post.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/pin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "unpin.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/pin.imageset/unpin.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/pin.imageset/unpin.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/setting_dark.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "setting_dark.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/setting_dark.imageset/setting_dark.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/setting_dark.imageset/setting_dark.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/setting_light.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "setting_light.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | }, 16 | { 17 | "idiom" : "mac", 18 | "scale" : "1x" 19 | }, 20 | { 21 | "idiom" : "mac", 22 | "scale" : "2x" 23 | } 24 | ], 25 | "info" : { 26 | "version" : 1, 27 | "author" : "xcode" 28 | } 29 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/setting_light.imageset/setting_light.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/setting_light.imageset/setting_light.pdf -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/spotify.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "spotify.png", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/spotify.imageset/spotify.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/spotify.imageset/spotify.png -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/unpin.imageset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "idiom" : "universal", 5 | "filename" : "pin.pdf", 6 | "scale" : "1x" 7 | }, 8 | { 9 | "idiom" : "universal", 10 | "scale" : "2x" 11 | }, 12 | { 13 | "idiom" : "universal", 14 | "scale" : "3x" 15 | } 16 | ], 17 | "info" : { 18 | "version" : 1, 19 | "author" : "xcode" 20 | } 21 | } -------------------------------------------------------------------------------- /Lyricism/Assets.xcassets/unpin.imageset/pin.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Lyricism/Assets.xcassets/unpin.imageset/pin.pdf -------------------------------------------------------------------------------- /Lyricism/Base.lproj/Localizable.strings.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings.strings 3 | Lyricism 4 | 5 | Created by Stan Liu on 12/09/2016. 6 | Copyright © 2016 Stan Liu. All rights reserved. 7 | */ 8 | 9 | 10 | "✔︎ On Top" : "✔︎ On Top"; 11 | " Not On Top" : " Not On Top"; 12 | 13 | "Couldn't Find Any Relative Lyrics": "Couldn't Find Any Relative Lyrics"; 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Lyricism/BlurBackground.swift: -------------------------------------------------------------------------------- 1 | // 2 | // BlurBackground.swift 3 | // macOS 4 | // 5 | // Created by Stan Liu on 21/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class BlurBackground: NSView { 12 | 13 | override init(frame frameRect: NSRect) { 14 | 15 | super.init(frame: frameRect) 16 | 17 | setBackgroundColor() 18 | } 19 | 20 | required init?(coder: NSCoder) { 21 | 22 | super.init(coder: coder) 23 | 24 | setBackgroundColor() 25 | } 26 | 27 | override func awakeFromNib() { 28 | 29 | setBackgroundColor() 30 | } 31 | 32 | func setBackgroundColor() { 33 | 34 | wantsLayer = true 35 | layer?.backgroundColor = NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 0.7).CGColor 36 | } 37 | 38 | 39 | override func drawRect(dirtyRect: NSRect) { 40 | super.drawRect(dirtyRect) 41 | 42 | // Drawing code here. 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Lyricism/BlurBackground.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Lyricism/ContainerSwitchable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ContainerSwitchable.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 02/09/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | protocol ContainerSwitchable: class { 12 | 13 | var tTarget: NSViewController { get } 14 | var tContainerView: NSView { get } 15 | var currentViewController: NSViewController? { get set } 16 | } 17 | 18 | 19 | extension ContainerSwitchable where Self: NSViewController { 20 | 21 | func cycleFromViewController(oldViewController: NSViewController?, toViewController newViewController: NSViewController) { 22 | 23 | newViewController.view.translatesAutoresizingMaskIntoConstraints = false 24 | currentViewController = newViewController 25 | 26 | 27 | tTarget.addChildViewController(newViewController) 28 | addSubview(newViewController.view, toView:tContainerView) 29 | newViewController.view.alphaValue = 0 30 | newViewController.view.layoutSubtreeIfNeeded() 31 | /* 32 | NSView.animateWithDuration(0.5, animations: { 33 | 34 | newViewController.view.alphaValue = 1 35 | oldViewController?.view.alphaValue = 0 36 | 37 | }, completion: { finished in 38 | 39 | oldViewController?.view.removeFromSuperview() 40 | oldViewController?.removeFromParentViewController() 41 | newViewController.didMoveToParentViewController(self.tTarget) 42 | })*/ 43 | 44 | newViewController.view.alphaValue = 1 45 | oldViewController?.view.alphaValue = 0 46 | 47 | oldViewController?.view.removeFromSuperview() 48 | oldViewController?.removeFromParentViewController() 49 | } 50 | 51 | // 把新的ViewController.view 貼到containerView上, 新的view需要autolayout 52 | func addSubview(subView: NSView, toView parentView: NSView) { 53 | 54 | parentView.addSubview(subView) 55 | 56 | var viewBindingsDict = [String: AnyObject]() 57 | viewBindingsDict["subView"] = subView 58 | parentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|[subView]|", 59 | options: [], metrics: nil, views: viewBindingsDict)) 60 | parentView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|[subView]|", 61 | options: [], metrics: nil, views: viewBindingsDict)) 62 | } 63 | } -------------------------------------------------------------------------------- /Lyricism/Document.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Document.swift 3 | // macOS 4 | // 5 | // Created by Stan Liu on 16/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class Document: NSDocument { 12 | 13 | override init() { 14 | super.init() 15 | // Add your subclass-specific initialization here. 16 | 17 | } 18 | 19 | override class func autosavesInPlace() -> Bool { 20 | return true 21 | } 22 | 23 | override func makeWindowControllers() { 24 | // Returns the Storyboard that contains your Document window. 25 | /* 26 | let storyboard = NSStoryboard(name: "Main", bundle: nil) 27 | let windowController = storyboard.instantiateControllerWithIdentifier("Document Window Controller") as! NSWindowController 28 | self.addWindowController(windowController) 29 | */ 30 | } 31 | 32 | override func dataOfType(typeName: String) throws -> NSData { 33 | // Insert code here to write your document to data of the specified type. If outError != nil, ensure that you create and set an appropriate error when returning nil. 34 | // You can also choose to override fileWrapperOfType:error:, writeToURL:ofType:error:, or writeToURL:ofType:forSaveOperation:originalContentsURL:error: instead. 35 | throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil) 36 | } 37 | 38 | override func readFromData(data: NSData, ofType typeName: String) throws { 39 | // Insert code here to read your document from the given data of the specified type. If outError != nil, ensure that you create and set an appropriate error when returning false. 40 | // You can also choose to override readFromFileWrapper:ofType:error: or readFromURL:ofType:error: instead. 41 | // If you override either of these, you should also override -isEntireFileLoaded to return false if the contents are lazily loaded. 42 | throw NSError(domain: NSOSStatusErrorDomain, code: unimpErr, userInfo: nil) 43 | } 44 | 45 | 46 | } 47 | 48 | -------------------------------------------------------------------------------- /Lyricism/EventMonitor.swift: -------------------------------------------------------------------------------- 1 | // 2 | // EventMonitor.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 21/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | public class EventMonitor { 12 | 13 | private var monitor: AnyObject? 14 | private let mask: NSEventMask 15 | private let handler: NSEvent? -> () 16 | 17 | public init(mask: NSEventMask, handler: NSEvent? -> ()) { 18 | self.mask = mask 19 | self.handler = handler 20 | } 21 | 22 | deinit { 23 | stop() 24 | } 25 | 26 | public func start() { 27 | monitor = NSEvent.addGlobalMonitorForEventsMatchingMask(mask, handler: handler) 28 | } 29 | 30 | public func stop() { 31 | if monitor != nil { 32 | NSEvent.removeMonitor(monitor!) 33 | monitor = nil 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /Lyricism/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ATSApplicationFontsPath 6 | . 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleDocumentTypes 10 | 11 | 12 | CFBundleTypeExtensions 13 | 14 | mydoc 15 | 16 | CFBundleTypeIconFile 17 | 18 | CFBundleTypeName 19 | DocumentType 20 | CFBundleTypeOSTypes 21 | 22 | ???? 23 | 24 | CFBundleTypeRole 25 | Editor 26 | NSDocumentClass 27 | $(PRODUCT_MODULE_NAME).Document 28 | 29 | 30 | CFBundleExecutable 31 | $(EXECUTABLE_NAME) 32 | CFBundleIconFile 33 | 34 | CFBundleIdentifier 35 | $(PRODUCT_BUNDLE_IDENTIFIER) 36 | CFBundleInfoDictionaryVersion 37 | 6.0 38 | CFBundleName 39 | $(PRODUCT_NAME) 40 | CFBundlePackageType 41 | APPL 42 | CFBundleShortVersionString 43 | 1.061 44 | CFBundleSignature 45 | ???? 46 | CFBundleVersion 47 | 1.061 48 | Fabric 49 | 50 | APIKey 51 | 4904cf7385aa6323b6e41446da80613995dbdfa2 52 | Kits 53 | 54 | 55 | KitInfo 56 | 57 | KitName 58 | Crashlytics 59 | 60 | 61 | 62 | LSApplicationCategoryType 63 | public.app-category.music 64 | LSMinimumSystemVersion 65 | $(MACOSX_DEPLOYMENT_TARGET) 66 | NSAppTransportSecurity 67 | 68 | NSAllowsArbitraryLoads 69 | 70 | 71 | NSHumanReadableCopyright 72 | Copyright © 2016 Stan Liu. All rights reserved. 73 | NSMainStoryboardFile 74 | Main 75 | NSPrincipalClass 76 | NSApplication 77 | 78 | 79 | -------------------------------------------------------------------------------- /Lyricism/JumpOnLabelViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // JumpOnLabelViewController.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 01/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | // Change Triagle Background Color 12 | class PopoverContentViewJumpOnLabel: NSView { 13 | 14 | var backgroundViewLayer: ColorBackgroundView? 15 | 16 | override func viewDidMoveToWindow() { 17 | 18 | if let frameView = self.window?.contentView?.superview where backgroundViewLayer == nil { 19 | 20 | backgroundViewLayer = ColorBackgroundView(frame: frameView.bounds) 21 | backgroundViewLayer!.autoresizingMask = NSAutoresizingMaskOptions([.ViewWidthSizable, .ViewHeightSizable]); 22 | frameView.addSubview(backgroundViewLayer!, positioned: NSWindowOrderingMode.Below, relativeTo: frameView) 23 | } 24 | super.viewDidMoveToWindow() 25 | } 26 | } 27 | // Change Triagle Background Color 28 | class ColorBackgroundView: NSView { 29 | 30 | // NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 6.0) 31 | var color: NSColor = NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 6.0) 32 | 33 | override func drawRect(dirtyRect: NSRect) { 34 | 35 | color.set() 36 | NSRectFill(bounds) 37 | } 38 | } 39 | 40 | // dark blue: NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 6.0) 41 | // Spotify green: NSColor(colorLiteralRed: 90.0/255.0, green: 213.0/255.0, blue: 79.0/255.0, alpha: 6.0) 42 | // iTunes white: NSColor(colorLiteralRed: 218.0/255.0, green: 223.0/255.0, blue: 227.0/255.0, alpha: 6.0) 43 | // iTunes font: NSColor(colorLiteralRed: 230.0/255.0, green: 62.0/255.0, blue: 92.0/255.0, alpha: 6.0) 44 | 45 | class JumpOnLabelViewController: NSViewController { 46 | 47 | var source: SBApplicationID = .itunes { 48 | 49 | didSet { 50 | 51 | switch source { 52 | case .itunes: 53 | (traigleView as! PopoverContentViewJumpOnLabel).backgroundViewLayer!.color = NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 6.0) 54 | titleLabel.textColor = NSColor.whiteColor() 55 | case .spotify: 56 | (traigleView as! PopoverContentViewJumpOnLabel).backgroundViewLayer!.color = NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 6.0) 57 | titleLabel.textColor = NSColor.whiteColor() 58 | } 59 | } 60 | } 61 | 62 | @IBOutlet weak var titleLabel: NSTextField! { 63 | 64 | didSet { 65 | 66 | titleLabel.font = NSFont(name: "Lato Regular", size: 12) 67 | titleLabel.textColor = NSColor.whiteColor() 68 | titleLabel.alignment = .Center 69 | } 70 | } 71 | 72 | var trackTitle: String = "" { 73 | didSet { 74 | 75 | self.titleLabel.stringValue = trackTitle 76 | } 77 | } 78 | 79 | var traigleView: NSView? 80 | 81 | override func viewDidAppear() { 82 | super.viewDidAppear() 83 | 84 | titleLabel.translatesAutoresizingMaskIntoConstraints = false 85 | titleLabel.topAnchor.constraintEqualToAnchor(view.topAnchor, constant: 0).active = true 86 | titleLabel.bottomAnchor.constraintEqualToAnchor(view.bottomAnchor, constant: 0).active = true 87 | //titleLabel.leadingAnchor.constraintEqualToAnchor(view.leadingAnchor, constant: 0).active = true 88 | //titleLabel.trailingAnchor.constraintEqualToAnchor(view.trailingAnchor, constant: 0).active = true 89 | } 90 | 91 | override func viewDidLoad() { 92 | super.viewDidLoad() 93 | 94 | traigleView = PopoverContentViewJumpOnLabel(frame: view.frame) 95 | view.addSubview(traigleView!) 96 | 97 | view.layoutSubtreeIfNeeded() 98 | } 99 | } 100 | -------------------------------------------------------------------------------- /Lyricism/Lyricism.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | com.apple.security.network.client 8 | 9 | com.apple.security.scripting-targets 10 | 11 | com.spotify.client 12 | 13 | com.spotify.client.playback 14 | 15 | com.apple.iTunes 16 | 17 | com.apple.iTunes.playback 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /Lyricism/LyricsSettingViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // LyricsSettingViewController.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 22/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class LyricsSettingViewController: NSViewController { 12 | 13 | override func viewDidLoad() { 14 | super.viewDidLoad() 15 | // Do view setup here. 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Lyricism/MResponse.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MResponse.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 27/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | public struct MResponse { 12 | 13 | public let lyrics: String? 14 | public let photo100x100URL: NSURL? 15 | public let photo350x350URL: NSURL? 16 | public let photo500x500URL: NSURL? 17 | public let photo600x600URL: NSURL? 18 | public let trackID: NSNumber? 19 | public let albumName: String? 20 | public let albumID: NSNumber? 21 | 22 | public init( 23 | lyrics: String?, 24 | photo100x100URL: NSURL?, 25 | photo350x350URL: NSURL?, 26 | photo500x500URL: NSURL?, 27 | photo600x600URL: NSURL?, 28 | trackID: NSNumber?, 29 | albumName: String?, 30 | albumID: NSNumber?) { 31 | 32 | self.lyrics = lyrics 33 | self.photo100x100URL = photo100x100URL 34 | self.photo350x350URL = photo350x350URL 35 | self.photo500x500URL = photo500x500URL 36 | self.photo600x600URL = photo600x600URL 37 | self.trackID = trackID 38 | self.albumName = albumName 39 | self.albumID = albumID 40 | 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /Lyricism/MacUtilities.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MacUtilities.swift 3 | // macOS 4 | // 5 | // Created by Stan Liu on 17/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import ScriptingBridge 11 | import MediaLibrary 12 | 13 | /* 14 | @objc protocol iTunesApplicationn { 15 | optional func currentTrack()-> AnyObject 16 | optional var properties: NSDictionary {get} 17 | //if you need another object or method from the iTunes.h, you must add it here 18 | }*/ 19 | 20 | class MacUtilities: NSObject { 21 | /* 22 | class func getCurrentMusicInfo() -> PlayingTrack? { 23 | 24 | let iTunesApp: AnyObject = SBApplication(bundleIdentifier: MLMediaSourceiTunesIdentifier)! 25 | let trackDict = iTunesApp.currentTrack!().properties as Dictionary 26 | //print("trackDict:\(trackDict)") 27 | if trackDict["name"] != nil { // if nil then no current track 28 | print(trackDict["name"]!) // print the title 29 | print(trackDict["artist"]!) 30 | print(trackDict["album"]!) 31 | print(trackDict["playedCount"]!) 32 | // print(trackDict) // print the dictionary 33 | if let track = trackDict["name"] as? String, 34 | artist = trackDict["artist"]as? String, 35 | album = trackDict["album"] as? String, 36 | time = trackDict["time"] as? String { 37 | 38 | let playingTrack = PlayingTrack(track: track, artist: artist, album: album, time: time) 39 | 40 | return playingTrack 41 | } else { 42 | return nil 43 | } 44 | } else { 45 | return nil 46 | } 47 | }*/ 48 | } 49 | 50 | extension NSObject { 51 | 52 | func sd_print(message: T, 53 | file: String = #file, 54 | method: String = #function, 55 | line: Int = #line) 56 | { 57 | #if DEBUG 58 | print("\((file as NSString).lastPathComponent)[\(line)], \(method): \(message)") 59 | #endif 60 | } 61 | 62 | func s_print(message: String, method: String = #function) { 63 | 64 | #if DEBUG 65 | print("\(method): \(message)") 66 | #endif 67 | } 68 | 69 | 70 | } 71 | -------------------------------------------------------------------------------- /Lyricism/MarqueeView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MarqueeTextField.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 27/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class MarqueeView: NSView { 12 | 13 | var timer: NSTimer? = nil 14 | 15 | var fullString: String? = "" 16 | var point: CGPoint! = CGPointZero 17 | var stringWidth: CGFloat! 18 | 19 | var textAttributes: [String: AnyObject] = [NSFontAttributeName: NSFont(name: "Lato Light", size: 23.0)!, NSForegroundColorAttributeName: NSColor.whiteColor()] 20 | // yellow color for test marquee label 21 | var otherTextAttributes: [String: AnyObject] = [NSFontAttributeName: NSFont(name: "Lato Light", size: 23.0)!, NSForegroundColorAttributeName: NSColor.yellowColor()] 22 | 23 | required init?(coder: NSCoder) { 24 | super.init(coder: coder) 25 | 26 | } 27 | 28 | deinit { 29 | 30 | timer?.invalidate() 31 | 32 | } 33 | 34 | override func drawRect(dirtyRect: NSRect) { 35 | super.drawRect(dirtyRect) 36 | 37 | stringWidth = NSString(string: text).sizeWithAttributes(textAttributes).width 38 | // if title width smaller than self.frame. make title in the center 39 | if stringWidth < self.frame.width { 40 | timer?.invalidate() 41 | timer = nil 42 | let centerPointX = CGPoint(x: (self.frame.width - stringWidth) / 2, y: point.y) 43 | NSString(string: text).drawAtPoint(centerPointX, withAttributes: textAttributes) 44 | return 45 | } 46 | 47 | // Drawing code here. 48 | //self.printLog("point.x: \(point.x)") 49 | if point.x < -stringWidth { 50 | 51 | point.x += stringWidth + 20 52 | } 53 | NSString(string: text).drawAtPoint(point, withAttributes: textAttributes) 54 | 55 | if point.x + stringWidth > 0 { 56 | var otherPoint = point 57 | //otherPoint.x += dirtyRect.size.width 58 | otherPoint.x += stringWidth + 20 59 | NSString(string: text).drawAtPoint(otherPoint, withAttributes: textAttributes) 60 | } 61 | } 62 | 63 | var text: String = "" { 64 | 65 | didSet { 66 | //self.printLog("label.stringvalue: \(text)") 67 | fullString = text.copy() as? String 68 | point = NSZeroPoint 69 | stringWidth = NSString(string: text).sizeWithAttributes(textAttributes).width 70 | 71 | if timer == nil && speed > 0 && fullString != nil { 72 | 73 | timer = NSTimer.scheduledTimerWithTimeInterval(speed, target: self, selector: #selector(moveText), userInfo: nil, repeats: true) 74 | } 75 | } 76 | } 77 | /* 78 | func setText(newText: String) { 79 | 80 | fullString = newText.copy() as? String 81 | point = NSZeroPoint 82 | stringWidth = NSString(string: newText).sizeWithAttributes(textAttributes).width 83 | 84 | if timer == nil && speed > 0 && fullString != nil { 85 | 86 | timer = NSTimer.scheduledTimerWithTimeInterval(speed, target: self, selector: #selector(moveText), userInfo: nil, repeats: true) 87 | } 88 | }*/ 89 | 90 | func moveText(t: NSTimer) { 91 | 92 | dispatch_async(dispatch_get_main_queue()) { 93 | //self.printLog("maqueree moveText") 94 | self.point.x = self.point.x - 1.0 95 | self.needsDisplay = true 96 | } 97 | } 98 | 99 | var speed: NSTimeInterval = 0.02 { 100 | 101 | didSet { 102 | 103 | timer?.invalidate() 104 | timer = nil 105 | if speed > 0 && fullString != nil { 106 | timer = NSTimer.scheduledTimerWithTimeInterval(speed, target: self, selector: #selector(moveText), userInfo: nil, repeats: true) 107 | } 108 | } 109 | } 110 | /* 111 | func setSpeed(newSpeed: NSTimeInterval) { 112 | 113 | if newSpeed != speed { 114 | 115 | speed = newSpeed 116 | timer?.invalidate() 117 | timer = nil 118 | 119 | timer = NSTimer(timeInterval: 0.2, target: self, selector: #selector(moveText), userInfo: nil, repeats: true) 120 | } 121 | } 122 | */ 123 | } 124 | 125 | 126 | extension String { 127 | 128 | func copy() -> AnyObject? { 129 | 130 | if let asCopying = (self as AnyObject) as? NSCopying { 131 | return asCopying.copyWithZone(nil) 132 | } else { 133 | assert(false, "This class doesn't implement NSCopying") 134 | return nil 135 | } 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /Lyricism/MusiXMatch.swift: -------------------------------------------------------------------------------- 1 | // 2 | // MusiXMatch.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 30/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import SwiftyJSON 11 | 12 | struct PlayerTrack { 13 | 14 | let artist: String 15 | let name: String 16 | let time: String 17 | } 18 | 19 | 20 | extension PlayerTrack: LyricsViewPresentable { 21 | 22 | var lvTime: String { return time } 23 | var lvArtistNTrack: (artist: String, trackName: String) { return (artist, name) } 24 | var lvTrack: PlayerTrack { return PlayerTrack(artist: artist, name: name, time: time) } 25 | } 26 | 27 | struct MusiXTrack { 28 | 29 | let id: Int 30 | let name: String 31 | let time: String 32 | 33 | let lyric_id: Int 34 | let album_id: Int 35 | let spotify_id: Int 36 | let artist_id: Int 37 | } 38 | 39 | struct MusiXAlbum { 40 | let id: Int 41 | let name: String 42 | let artist_id: String 43 | let url_str: String 44 | let artwork: NSData 45 | let tracks: [Int] 46 | //let composer: String 47 | } 48 | 49 | struct MusiXArtist { 50 | 51 | let id: Int 52 | let name: String 53 | } 54 | 55 | struct MusiXLyric { 56 | 57 | let id: Int 58 | let name: String 59 | let text: String 60 | } 61 | 62 | struct MusicInfo { 63 | 64 | let has_lyrics: NSNumber! 65 | 66 | let track_share_url: String! 67 | let commontrack_vanity_id: String! 68 | let restricted: NSNumber! 69 | let track_spotify_id: String! 70 | let track_id: NSNumber! 71 | let artist_mbid: String! 72 | let artist_name: String! 73 | let album_coverart_800x800: String? 74 | let artist_id: NSNumber! 75 | let updated_time: String! 76 | let album_id: NSNumber! 77 | let album_coverart_100x100: String? 78 | let first_release_date: String! 79 | let album_coverart_350x350: String? 80 | let lyrics_id: NSNumber! 81 | let track_name: String! 82 | let track_length: NSNumber! 83 | let commontrack_id: NSNumber! 84 | let has_subtitles: NSNumber! 85 | 86 | let primary_genres: [String: AnyObject]? 87 | let secondary_genres: [String: AnyObject]? 88 | let music_genre_list: [AnyObject]? 89 | 90 | let music_genre_id: NSNumber? 91 | let music_genre_vanity: String? 92 | let music_genre_name: String? 93 | let music_genre_name_extended: String? 94 | 95 | let lyric: String? 96 | /* 97 | func getTrackPropertyAndValue(json: JSON) { 98 | 99 | let properties = self.propertyNames() 100 | for key in properties { 101 | 102 | if let stringValue = json["message"]["body"]["track"][key].string { 103 | 104 | //print("property: \(key), value: \(stringValue)") 105 | self.setValue(stringValue, forKey: key) 106 | } else if let numberValue = json["message"]["body"]["track"][key].int { 107 | 108 | //print("property: \(key), value: \(numberValue)") 109 | self.setValue(numberValue, forKey: key) 110 | } else { 111 | 112 | //primary_genre 113 | if let _ = json["message"]["body"]["track"]["primary_genres"].dictionary { 114 | //print("property: \(key), value: \(primary_genres)") 115 | 116 | } 117 | if let genreStringValue = json["message"]["body"]["track"]["primary_genres"]["music_genre_list"][0]["music_genre"][key].string { 118 | //print("property: \(key), value: \(genreStringValue)") 119 | self.setValue(genreStringValue, forKey: key) 120 | 121 | } 122 | if let genreNumberValue = json["message"]["body"]["track"]["primary_genres"]["music_genre_list"][0]["music_genre"][key].number { 123 | //print("property: \(key), value: \(genreNumberValue)") 124 | self.setValue(genreNumberValue, forKey: key) 125 | } 126 | } 127 | } 128 | }*/ 129 | 130 | } 131 | 132 | -------------------------------------------------------------------------------- /Lyricism/NSObject+Extension.swift: -------------------------------------------------------------------------------- 1 | // 2 | // NSObject+Extension.swift 3 | // macOS 4 | // 5 | // Created by Stan Liu on 18/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | 11 | class iOSXFoundation { 12 | 13 | class func getClassPropertyNames(myClass: AnyClass) -> [String] { 14 | 15 | var results: [String] = [] 16 | var count: UInt32 = 0 17 | let properties = class_copyPropertyList(myClass, &count) 18 | 19 | for i: UInt32 in 0 ..< count { 20 | 21 | let property = properties[Int(i)] 22 | let cname = property_getName(property) 23 | let name = String.fromCString(cname) 24 | results.append(name!) 25 | } 26 | free(properties) 27 | 28 | return results 29 | } 30 | 31 | 32 | class func propertyValues(classObject: AnyClass) { 33 | 34 | //let myClass: AnyClass = classObject.classForCoder 35 | 36 | let propertyNames: [String] = getClassPropertyNames(classObject) 37 | var count: UInt32 = 0 38 | let properties = class_copyPropertyList(classObject, &count) 39 | 40 | weak var player: Player? = Player.sharedPlayer 41 | 42 | for name in propertyNames { 43 | 44 | //let cname = name.cStringUsingEncoding(NSUTF8StringEncoding) 45 | if let value = player!.valueForKey(name) { 46 | 47 | //print("property name: \(name), value:\(value)") 48 | } 49 | } 50 | } 51 | 52 | } 53 | 54 | extension NSObject { 55 | 56 | func propertyNames() -> [String] { 57 | 58 | var results: [String] = [] 59 | // retrieve the properties via the class_copyPropertyList function 60 | var count: UInt32 = 0 61 | let myClass: AnyClass = self.classForCoder 62 | let properties = class_copyPropertyList(myClass, &count) 63 | 64 | // iterate each objc_property_t struct 65 | for i: UInt32 in 0 ..< count { 66 | 67 | let property = properties[Int(i)] 68 | // retrieve the property name by calling property_getName function 69 | let cname = property_getName(property) 70 | // convert the c string into a swift string 71 | let name = String.fromCString(cname) 72 | results.append(name!) 73 | } 74 | 75 | // release objc_property_t struct 76 | free(properties) 77 | 78 | return results 79 | } 80 | 81 | func propertyValues(myClass: NSObject) { 82 | 83 | let propertiesName: [String] = myClass.propertyNames() 84 | 85 | 86 | for (_, name) in propertiesName.enumerate() { 87 | 88 | //s_print("property name: \(name), value:\(myClass.valueForKey(name))") 89 | } 90 | } 91 | 92 | func attributes() -> [AnyObject] { 93 | 94 | var results: [AnyObject] = [] 95 | // retrieve the properties via the class_copyPropertyList function 96 | var count: UInt32 = 0 97 | let myClass: AnyClass = self.classForCoder 98 | let properties = class_copyPropertyList(myClass, &count) 99 | 100 | // iterate each objc_property_t struct 101 | for i: UInt32 in 0 ..< count { 102 | 103 | let property = properties[Int(i)] 104 | 105 | let attribute = property_getAttributes(property) 106 | let attributeString = String(UTF8String: attribute) 107 | //s_print("attributeString:\(attributeString!)") 108 | let attributes = attributeString!.componentsSeparatedByString(",") 109 | 110 | results.append(attributes) 111 | } 112 | 113 | // release objc_property_t struct 114 | free(properties) 115 | 116 | return results 117 | } 118 | } 119 | -------------------------------------------------------------------------------- /Lyricism/PlayerControllerPanel.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PlayerControllerPanel.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 29/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class PlayerControllerPanel: NSView { 12 | 13 | var view: NSView! 14 | var array: NSArray! 15 | 16 | required init?(coder: NSCoder) { 17 | 18 | super.init(coder: coder) 19 | 20 | } 21 | 22 | 23 | override func awakeFromNib() { 24 | super.awakeFromNib() 25 | 26 | } 27 | 28 | override func drawRect(dirtyRect: NSRect) { 29 | super.drawRect(dirtyRect) 30 | 31 | // Drawing code here. 32 | NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 0.4).set() 33 | NSRectFill(bounds) 34 | 35 | } 36 | 37 | } 38 | -------------------------------------------------------------------------------- /Lyricism/PlayerControllerPanel.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 23 | 30 | 31 | 32 | 33 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /Lyricism/PopoverContentView.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PopoverContentView.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 31/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | // This is For LyricViewController use only, not JumpOnLabel 12 | 13 | // Change Triagle Background Color 14 | class PopoverContentView: NSView { 15 | 16 | var backgroundView: PopoverBackgroundView? 17 | override func viewDidMoveToWindow() { 18 | 19 | super.viewDidMoveToWindow() 20 | 21 | if let frameView = self.window?.contentView?.superview { 22 | if backgroundView == nil { 23 | 24 | backgroundView = PopoverBackgroundView(frame: frameView.bounds) 25 | backgroundView!.autoresizingMask = NSAutoresizingMaskOptions([.ViewWidthSizable, .ViewHeightSizable]); 26 | frameView.addSubview(backgroundView!, positioned: NSWindowOrderingMode.Below, relativeTo: frameView) 27 | } 28 | } 29 | } 30 | } 31 | // Change Triagle Background Color 32 | class PopoverBackgroundView: NSView { 33 | 34 | override func drawRect(dirtyRect: NSRect) { 35 | NSColor(colorLiteralRed: 41.0/255.0, green: 48.0/255.0, blue: 66.0/255.0, alpha: 0.4).set() 36 | NSRectFill(bounds) 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /Lyricism/PreferenceSegue.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PreferenceSegue.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 02/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class PreferenceSegue: NSStoryboardSegue { 12 | 13 | override func perform() { 14 | 15 | 16 | } 17 | 18 | } 19 | -------------------------------------------------------------------------------- /Lyricism/PreferenceViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PreferenceViewController.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 02/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class PreferenceViewController: NSViewController, ContainerSwitchable { 12 | 13 | @IBOutlet weak var containerView: NSView! 14 | 15 | var containerViewController: NSViewController! 16 | 17 | var appearanceViewController: AppearanceViewController? 18 | 19 | var tTarget: NSViewController { return self } 20 | var tContainerView: NSView { return containerView } 21 | var currentViewController: NSViewController? 22 | 23 | 24 | override func viewDidLoad() { 25 | super.viewDidLoad() 26 | 27 | 28 | } 29 | 30 | func preferenceCategory(prefer: PreferencesIdentifiers) { 31 | 32 | var newViewController: NSViewController! 33 | let preferenceStoryboard = NSStoryboard(name: "Preferences", bundle: nil) 34 | 35 | switch prefer { 36 | case .appearance: 37 | newViewController = preferenceStoryboard.instantiateControllerWithIdentifier(String(AppearanceViewController)) as? AppearanceViewController 38 | case .other: 39 | newViewController = preferenceStoryboard.instantiateControllerWithIdentifier(String(AppearanceViewController)) as? AppearanceViewController 40 | } 41 | 42 | cycleFromViewController(currentViewController, toViewController: newViewController) 43 | } 44 | 45 | @available(OSX 10.10, *) 46 | override func prepareForSegue(segue: NSStoryboardSegue, sender: AnyObject?) { 47 | 48 | if segue.destinationController is PreferenceViewController { 49 | 50 | containerViewController = segue.destinationController as? PreferenceViewController 51 | } 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /Lyricism/PreferencesSetable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Settings.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 04/09/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | struct Settings { 12 | 13 | static let docker_setting = "show_dock_option" 14 | static let windows_on_top_setting = "is_always_on_top" 15 | 16 | enum Docker: Int { 17 | case no = 0 18 | case yes = 1 19 | } 20 | 21 | enum WindowsOnTop: Int { 22 | case no = 0 23 | case yes = 1 24 | } 25 | } 26 | 27 | protocol PreferencesSetable { } 28 | 29 | extension PreferencesSetable { 30 | 31 | func setDocker(type: Settings.Docker) { 32 | 33 | switch type { 34 | case .yes: 35 | NSUserDefaults.standardUserDefaults().setBool(true, forKey: Settings.docker_setting) 36 | NSApp.setActivationPolicy(.Regular) 37 | case .no: 38 | NSUserDefaults.standardUserDefaults().setBool(false, forKey: Settings.docker_setting) 39 | NSApp.setActivationPolicy(.Accessory) 40 | } 41 | } 42 | 43 | func setDocker() { 44 | 45 | let option = NSUserDefaults.standardUserDefaults().boolForKey(Settings.docker_setting) 46 | option ? setDocker(.yes) : setDocker(.no) 47 | } 48 | 49 | func isDockerShown() -> Bool { 50 | 51 | return NSUserDefaults.standardUserDefaults().boolForKey(Settings.docker_setting) 52 | } 53 | 54 | func setWindowsOnTop(type: Settings.WindowsOnTop) { 55 | switch type { 56 | case .yes: 57 | NSUserDefaults.standardUserDefaults().setBool(true, forKey: Settings.windows_on_top_setting) 58 | //print("bool: \(NSUserDefaults.standardUserDefaults().boolForKey(Settings.windows_on_top_setting))") 59 | 60 | case .no: 61 | NSUserDefaults.standardUserDefaults().setBool(false, forKey: Settings.windows_on_top_setting) 62 | //print("bool: \(NSUserDefaults.standardUserDefaults().boolForKey(Settings.windows_on_top_setting))") 63 | } 64 | } 65 | 66 | func setWinowsOnTop() { 67 | 68 | let option = NSUserDefaults.standardUserDefaults().boolForKey(Settings.windows_on_top_setting) 69 | option ? setWindowsOnTop(.no) : setWindowsOnTop(.yes) 70 | } 71 | 72 | func isWindowsOnTop() -> Bool { 73 | 74 | return NSUserDefaults.standardUserDefaults().boolForKey(Settings.windows_on_top_setting) 75 | } 76 | } -------------------------------------------------------------------------------- /Lyricism/PreferencesWindowController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // PreferencesWindownController.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 22/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | enum PreferencesIdentifiers: String { 12 | 13 | case appearance = "appearance" 14 | case other = "" 15 | } 16 | 17 | class PreferencesWindowController: NSWindowController { 18 | 19 | @IBOutlet weak var toolBar: NSToolbar! 20 | 21 | var preferenceViewController: PreferenceViewController { 22 | 23 | return contentViewController as! PreferenceViewController 24 | } 25 | 26 | override func windowDidLoad() { 27 | super.windowDidLoad() 28 | 29 | 30 | preferenceViewController.preferenceCategory(.appearance) 31 | toolBar.selectedItemIdentifier = PreferencesIdentifiers.appearance.rawValue 32 | 33 | } 34 | 35 | @IBAction func appearanceBtnPressed(sender: AnyObject) { 36 | 37 | preferenceViewController.preferenceCategory(.appearance) 38 | } 39 | 40 | @IBAction func otherBtnPressed(sender: AnyObject) { 41 | 42 | preferenceViewController.preferenceCategory(.other) 43 | } 44 | 45 | 46 | } 47 | -------------------------------------------------------------------------------- /Lyricism/SFRealm.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SFRealm.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 10/09/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import RealmSwift 11 | 12 | enum TString: String { 13 | 14 | case album = "album_id" 15 | case artist = "artist_id" 16 | case track = "track_id" 17 | case lyric = "lyric_id" 18 | } 19 | 20 | class SFRealm { 21 | 22 | class func write(t: T) { 23 | 24 | do { 25 | let realm = try Realm() 26 | try realm.write { 27 | realm.add(t) 28 | } 29 | } catch let error as NSError { 30 | 31 | print("SFRealm write error:\(error.localizedDescription)") 32 | } 33 | } 34 | 35 | class func update(t: T) { 36 | 37 | do { 38 | let realm = try Realm() 39 | try realm.write { 40 | realm.add(t, update: true) 41 | } 42 | } catch let error as NSError { 43 | 44 | print("SFRealm update error:\(error.localizedDescription)") 45 | } 46 | } 47 | 48 | class func create(predicate p: [String: AnyObject], t: T.Type) { 49 | 50 | do { 51 | let realm = try Realm() 52 | try realm.write { 53 | realm.create(t.self, value: p, update: true) 54 | } 55 | } catch let error as NSError { 56 | 57 | print("SFRealm update error:\(error.localizedDescription)") 58 | } 59 | } 60 | 61 | class func delete(t: T) { 62 | 63 | do { 64 | let realm = try Realm() 65 | try realm.write { 66 | realm.delete(t) 67 | } 68 | } catch let error as NSError { 69 | 70 | print("SFRealm delete error:\(error.localizedDescription)") 71 | } 72 | } 73 | 74 | class func queryAll(t: T.Type) -> Results? { 75 | 76 | let realm = try! Realm() 77 | 78 | return realm.objects(t.self) 79 | } 80 | 81 | class func query(id i: Int, t: T.Type) -> Results? { 82 | 83 | let realm = try! Realm() 84 | 85 | return realm.objects(t.self).filter("id == \(i)") 86 | } 87 | 88 | class func query(name n: String, t: T.Type) -> Results? { 89 | 90 | let realm = try! Realm() 91 | 92 | let predicate = NSPredicate(format: "name = %@", n) 93 | 94 | return realm.objects(t.self).filter(predicate) 95 | 96 | } 97 | 98 | class func query(predict p: String, t: T.Type) -> Results? { 99 | 100 | let realm = try! Realm() 101 | 102 | return realm.objects(t.self).filter(p) 103 | } 104 | 105 | } -------------------------------------------------------------------------------- /Lyricism/SettingMenu.swift: -------------------------------------------------------------------------------- 1 | // 2 | // SettingMenu.swift 3 | // LyriKing 4 | // 5 | // Created by Stan Liu on 02/07/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | class SettingMenu: NSMenu { 12 | 13 | override init(title aTitle: String) { 14 | 15 | super.init(title: aTitle) 16 | createMenu() 17 | } 18 | 19 | required init?(coder aDecoder: NSCoder) { 20 | super.init(coder: aDecoder) 21 | } 22 | 23 | init() { 24 | 25 | super.init(title: "Setting Page") 26 | createMenu() 27 | } 28 | 29 | func createMenu() { 30 | 31 | self.addItem(NSMenuItem(title: "Setting", action: #selector(toggleSetting), keyEquivalent: "S")) 32 | self.addItem(NSMenuItem.separatorItem()) 33 | self.addItem(NSMenuItem(title: "Quit", action: #selector(toggleQuit), keyEquivalent: "q")) 34 | } 35 | 36 | func toggleSetting() { 37 | 38 | } 39 | 40 | func toggleQuit() { 41 | 42 | NSApplication.sharedApplication().terminate(self) 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /Lyricism/Text.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Text.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 10/09/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | 12 | protocol TextViewSetable { 13 | 14 | var aligment: NSTextAlignment { get } 15 | var textColor: NSColor { get } 16 | 17 | func fontWithSize(size: CGFloat) -> NSFont 18 | } 19 | 20 | extension TextViewSetable { 21 | 22 | var aligment: NSTextAlignment { return .Center } 23 | var textColor: NSColor { return NSColor.whiteColor() } 24 | 25 | func fontWithSize(size: CGFloat) -> NSFont { 26 | 27 | return NSFont(name: "Lato Regular", size: size)! 28 | } 29 | } 30 | 31 | struct TextViewViewModel { } 32 | extension TextViewViewModel: TextViewSetable { } 33 | 34 | extension NSTextField: TextViewSetable { } 35 | 36 | extension NSScrollView { 37 | 38 | func defaultSetting(withPresenter presenter: TextViewSetable) { 39 | 40 | if let textView = self.contentView.documentView as? NSTextView { 41 | 42 | textView.font = presenter.fontWithSize(17) 43 | textView.alignment = presenter.aligment 44 | textView.textColor = presenter.textColor 45 | } 46 | } 47 | } -------------------------------------------------------------------------------- /Lyricism/Timerable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Timerable.swift 3 | // 4 | // 5 | // Created by Stan Liu on 02/09/2016. 6 | // 7 | // 8 | 9 | import Cocoa 10 | 11 | protocol MusicTimerable { 12 | 13 | var timer: NSTimer? { get set } 14 | var trackTime: Int! { get set } 15 | 16 | func initTimer(timeInterval: NSTimeInterval, target: AnyObject, selector: Selector, repeats: Bool) 17 | 18 | func resumeTimer(target: AnyObject, selector: Selector, repeats: Bool) 19 | func stopTimer() 20 | } 21 | 22 | extension MusicTimerable where Self: LyricsViewController { 23 | 24 | func initTimer(timeInterval: NSTimeInterval, target: AnyObject, selector: Selector, repeats: Bool) { 25 | 26 | timer = NSTimer(timeInterval: timeInterval, target: target, selector: selector, userInfo: nil, repeats: repeats) 27 | 28 | NSRunLoop.mainRunLoop().addTimer(timer!, forMode: NSDefaultRunLoopMode) 29 | } 30 | 31 | func updateTimer(handler: (timeString: String) -> Void) { 32 | 33 | if trackTime == 0 { 34 | self.stopTimer() 35 | } 36 | 37 | trackTime = trackTime - 1 38 | 39 | let minutes = trackTime / 60 40 | let seconds = trackTime % 60 41 | 42 | var timeString: String = "" 43 | 44 | timeString = minutes < 10 ? "0\(minutes)" : "\(minutes)" 45 | 46 | timeString = seconds < 10 ? ("\(timeString):0\(seconds)") : ("\(timeString):\(seconds)") 47 | 48 | dispatch_async(dispatch_get_main_queue()) { 49 | //self.timeLabel.stringValue = timeString 50 | handler(timeString: timeString) 51 | } 52 | //s_print("track time :\(timeString)") 53 | } 54 | 55 | func resumeTimer(target: AnyObject, selector: Selector, repeats: Bool) { 56 | 57 | trackTime - 1 58 | 59 | if timer != nil { 60 | timer!.invalidate() 61 | timer = nil 62 | } 63 | initTimer(1.0, target: target, selector: selector, repeats: repeats) 64 | } 65 | 66 | func stopTimer() { 67 | 68 | guard timer != nil else { 69 | 70 | return 71 | } 72 | timer!.invalidate() 73 | timer = nil 74 | } 75 | } 76 | 77 | protocol DismissTimerable { 78 | 79 | var dismissTimer: NSTimer! { get set } 80 | var dismissTime: Int { get set } 81 | } 82 | 83 | extension DismissTimerable where Self: AppDelegate { 84 | 85 | func timerStop() { 86 | if let timer = dismissTimer { 87 | timer.invalidate() 88 | dismissTimer = nil 89 | dismissTime = 4 90 | } 91 | } 92 | 93 | func timerStart() { 94 | 95 | guard let timer = dismissTimer else { 96 | dismissTimer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: #selector(dismissTimerCountDown), userInfo: nil, repeats: true) 97 | return 98 | } 99 | timer.invalidate() 100 | dismissTimer = nil 101 | } 102 | 103 | } 104 | 105 | -------------------------------------------------------------------------------- /Lyricism/ViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // ViewController.swift 3 | // macOS 4 | // 5 | // Created by Stan Liu on 16/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | import MediaLibrary 11 | import ScriptingBridge 12 | import WebKit 13 | import Alamofire 14 | import SWXMLHash 15 | import SwiftyJSON 16 | 17 | class ViewController: NSViewController { 18 | 19 | @IBOutlet weak var scrollTextView: NSScrollView! { 20 | 21 | didSet { 22 | if let textView = self.scrollTextView.contentView.documentView as? NSTextView { 23 | 24 | textView.editable = false 25 | textView.textStorage?.mutableString.setString("default") 26 | } 27 | } 28 | } 29 | @IBOutlet weak var imageView: NSImageView! 30 | 31 | var url = NSURL(string: "https://www.google.com/#q=james+blunt+postcards+lyrics") 32 | 33 | @IBOutlet weak var webView: WebView! { 34 | 35 | didSet { 36 | 37 | webView.policyDelegate = self 38 | } 39 | } 40 | 41 | override func viewDidLoad() { 42 | super.viewDidLoad() 43 | 44 | /* 45 | let request = NSURLRequest(URL: url!) 46 | webView.mainFrame.loadRequest(request) 47 | 48 | NSURLSession.sharedSession().dataTaskWithURL(url!) { 49 | (data, response, error) in 50 | // deal with error etc accordingly 51 | print(data) 52 | 53 | }*/ 54 | } 55 | 56 | override var representedObject: AnyObject? { 57 | didSet { 58 | // Update the view, if already loaded. 59 | 60 | } 61 | } 62 | 63 | deinit { 64 | 65 | } 66 | 67 | func printAllTheLibraryName() { 68 | 69 | 70 | } 71 | 72 | func getCurrentIconImage() { 73 | 74 | 75 | iOSXFoundation.propertyValues(Player) 76 | 77 | } 78 | } 79 | 80 | extension ViewController: WebPolicyDelegate { 81 | 82 | func webView(webView: WebView!, decidePolicyForNavigationAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, frame: WebFrame!, decisionListener listener: WebPolicyDecisionListener!) { 83 | 84 | if WebNavigationType.LinkClicked.rawValue == actionInformation[WebActionNavigationTypeKey] as! Int { 85 | listener.ignore() 86 | //NSWorkspace.sharedWorkspace().openURL(request.URL!) 87 | webView.mainFrame.loadRequest(request) 88 | } 89 | 90 | print("request url:\(request.URL!)") 91 | listener.use() 92 | 93 | } 94 | 95 | func webView(webView: WebView!, decidePolicyForNewWindowAction actionInformation: [NSObject : AnyObject]!, request: NSURLRequest!, newFrameName frameName: String!, decisionListener listener: WebPolicyDecisionListener!) { 96 | 97 | } 98 | } 99 | 100 | -------------------------------------------------------------------------------- /Lyricism/en.lproj/Preferences.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 3 | "3eN-9f-m6k.label" = "Toolbar Item"; 4 | 5 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 6 | "3eN-9f-m6k.paletteLabel" = "Toolbar Item"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "Dock:"; ObjectID = "8sI-vs-XX6"; */ 9 | "8sI-vs-XX6.title" = "Dock:"; 10 | 11 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 12 | "DaZ-LR-WvL.label" = "Toolbar Item"; 13 | 14 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 15 | "DaZ-LR-WvL.paletteLabel" = "Toolbar Item"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Default Player Source:"; ObjectID = "W8y-yp-OSf"; */ 18 | "W8y-yp-OSf.title" = "Default Player Source:"; 19 | 20 | /* Class = "NSButtonCell"; title = "YES"; ObjectID = "XqT-od-Pj6"; */ 21 | "XqT-od-Pj6.title" = "YES"; 22 | 23 | /* Class = "NSButtonCell"; title = "Show"; ObjectID = "eSY-KU-cna"; */ 24 | "eSY-KU-cna.title" = "Show"; 25 | 26 | /* Class = "NSToolbarItem"; label = "General"; ObjectID = "f52-T9-yzN"; */ 27 | "f52-T9-yzN.label" = "General"; 28 | 29 | /* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "f52-T9-yzN"; */ 30 | "f52-T9-yzN.paletteLabel" = "General"; 31 | 32 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 33 | "gWp-sW-icq.label" = "Toolbar Item"; 34 | 35 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 36 | "gWp-sW-icq.paletteLabel" = "Toolbar Item"; 37 | 38 | /* Class = "NSWindow"; title = "Preferences"; ObjectID = "q06-sO-Ayg"; */ 39 | "q06-sO-Ayg.title" = "Preferences"; 40 | 41 | /* Class = "NSTextFieldCell"; title = "Always On Top:"; ObjectID = "qaa-Ev-WUO"; */ 42 | "qaa-Ev-WUO.title" = "Always On Top:"; 43 | 44 | /* Class = "NSToolbarItem"; label = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 45 | "tcP-hs-3Wz.label" = "Appearance"; 46 | 47 | /* Class = "NSToolbarItem"; paletteLabel = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 48 | "tcP-hs-3Wz.paletteLabel" = "Appearance"; 49 | -------------------------------------------------------------------------------- /Lyricism/es.lproj/Preferences.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 3 | "3eN-9f-m6k.label" = "Toolbar Item"; 4 | 5 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 6 | "3eN-9f-m6k.paletteLabel" = "Toolbar Item"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "Dock:"; ObjectID = "8sI-vs-XX6"; */ 9 | "8sI-vs-XX6.title" = "Dock:"; 10 | 11 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 12 | "DaZ-LR-WvL.label" = "Toolbar Item"; 13 | 14 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 15 | "DaZ-LR-WvL.paletteLabel" = "Toolbar Item"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Default Player Source:"; ObjectID = "W8y-yp-OSf"; */ 18 | "W8y-yp-OSf.title" = "Default Player Source:"; 19 | 20 | /* Class = "NSButtonCell"; title = "YES"; ObjectID = "XqT-od-Pj6"; */ 21 | "XqT-od-Pj6.title" = "YES"; 22 | 23 | /* Class = "NSButtonCell"; title = "Show"; ObjectID = "eSY-KU-cna"; */ 24 | "eSY-KU-cna.title" = "Show"; 25 | 26 | /* Class = "NSToolbarItem"; label = "General"; ObjectID = "f52-T9-yzN"; */ 27 | "f52-T9-yzN.label" = "General"; 28 | 29 | /* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "f52-T9-yzN"; */ 30 | "f52-T9-yzN.paletteLabel" = "General"; 31 | 32 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 33 | "gWp-sW-icq.label" = "Toolbar Item"; 34 | 35 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 36 | "gWp-sW-icq.paletteLabel" = "Toolbar Item"; 37 | 38 | /* Class = "NSWindow"; title = "Preferences"; ObjectID = "q06-sO-Ayg"; */ 39 | "q06-sO-Ayg.title" = "Preferences"; 40 | 41 | /* Class = "NSTextFieldCell"; title = "Always On Top:"; ObjectID = "qaa-Ev-WUO"; */ 42 | "qaa-Ev-WUO.title" = "Always On Top:"; 43 | 44 | /* Class = "NSToolbarItem"; label = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 45 | "tcP-hs-3Wz.label" = "Appearance"; 46 | 47 | /* Class = "NSToolbarItem"; paletteLabel = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 48 | "tcP-hs-3Wz.paletteLabel" = "Appearance"; 49 | -------------------------------------------------------------------------------- /Lyricism/iTunesPresentable.swift: -------------------------------------------------------------------------------- 1 | // 2 | // iTunesPresentable.swift 3 | // Lyricism 4 | // 5 | // Created by Stan Liu on 13/09/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | import Foundation 10 | import ScriptingBridge 11 | 12 | protocol PlayerPresentable { 13 | 14 | associatedtype T 15 | 16 | var track_name: String? { get } 17 | var track_artist: String? { get } 18 | var track_time: T? { get } 19 | var track_time_position: Double? { get } 20 | } 21 | 22 | struct iTunes: PlayerPresentable { 23 | 24 | let player: iTunesApplication? 25 | } 26 | 27 | struct Spotify: PlayerPresentable { 28 | 29 | let player: SpotifyApplication? 30 | } 31 | 32 | extension iTunes { 33 | 34 | var track_name: String? { 35 | 36 | guard let p = player else { 37 | 38 | return nil 39 | } 40 | 41 | return p.currentTrack?.name 42 | } 43 | 44 | var track_artist: String? { 45 | 46 | guard let p = player else { 47 | 48 | return nil 49 | } 50 | 51 | return p.currentTrack?.artist 52 | } 53 | 54 | var track_time: String? { 55 | 56 | guard let p = player else { 57 | 58 | return nil 59 | } 60 | 61 | return p.currentTrack?.time 62 | } 63 | 64 | var track_time_position: Double? { 65 | 66 | guard let p = player else { 67 | 68 | return nil 69 | } 70 | 71 | return p.playerPosition 72 | } 73 | } 74 | extension Spotify { 75 | 76 | var track_name: String? { 77 | 78 | guard let p = player else { 79 | 80 | return nil 81 | } 82 | 83 | return p.currentTrack?.name 84 | } 85 | 86 | var track_artist: String? { 87 | 88 | guard let p = player else { 89 | 90 | return nil 91 | } 92 | 93 | return p.currentTrack?.artist 94 | } 95 | 96 | var track_time: Int? { 97 | 98 | guard let p = player else { 99 | 100 | return nil 101 | } 102 | 103 | return p.currentTrack?.duration 104 | } 105 | 106 | var track_time_position: Double? { 107 | 108 | guard let p = player else { 109 | 110 | return nil 111 | } 112 | 113 | return p.playerPosition 114 | } 115 | } 116 | 117 | protocol iTunesPresentable { 118 | 119 | var player: iTunesApplication? { get } 120 | var track_name: String { get } 121 | var track_artist: String { get } 122 | var track_time: String { get } 123 | var track_time_position: Double { get } 124 | } 125 | 126 | protocol SpotifyPresentable: PlayerPresentable { 127 | 128 | var player: SBApplication? { get } 129 | var track_name: String { get } 130 | var track_artist: String { get } 131 | var track_time: String { get } 132 | var track_time_position: Double { get } 133 | } 134 | -------------------------------------------------------------------------------- /Lyricism/ja.lproj/Preferences.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 3 | "3eN-9f-m6k.label" = "Toolbar Item"; 4 | 5 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 6 | "3eN-9f-m6k.paletteLabel" = "Toolbar Item"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "Dock:"; ObjectID = "8sI-vs-XX6"; */ 9 | "8sI-vs-XX6.title" = "Dock:"; 10 | 11 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 12 | "DaZ-LR-WvL.label" = "Toolbar Item"; 13 | 14 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 15 | "DaZ-LR-WvL.paletteLabel" = "Toolbar Item"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Default Player Source:"; ObjectID = "W8y-yp-OSf"; */ 18 | "W8y-yp-OSf.title" = "Default Player Source:"; 19 | 20 | /* Class = "NSButtonCell"; title = "YES"; ObjectID = "XqT-od-Pj6"; */ 21 | "XqT-od-Pj6.title" = "YES"; 22 | 23 | /* Class = "NSButtonCell"; title = "Show"; ObjectID = "eSY-KU-cna"; */ 24 | "eSY-KU-cna.title" = "Show"; 25 | 26 | /* Class = "NSToolbarItem"; label = "General"; ObjectID = "f52-T9-yzN"; */ 27 | "f52-T9-yzN.label" = "General"; 28 | 29 | /* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "f52-T9-yzN"; */ 30 | "f52-T9-yzN.paletteLabel" = "General"; 31 | 32 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 33 | "gWp-sW-icq.label" = "Toolbar Item"; 34 | 35 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 36 | "gWp-sW-icq.paletteLabel" = "Toolbar Item"; 37 | 38 | /* Class = "NSWindow"; title = "Preferences"; ObjectID = "q06-sO-Ayg"; */ 39 | "q06-sO-Ayg.title" = "Preferences"; 40 | 41 | /* Class = "NSTextFieldCell"; title = "Always On Top:"; ObjectID = "qaa-Ev-WUO"; */ 42 | "qaa-Ev-WUO.title" = "Always On Top:"; 43 | 44 | /* Class = "NSToolbarItem"; label = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 45 | "tcP-hs-3Wz.label" = "Appearance"; 46 | 47 | /* Class = "NSToolbarItem"; paletteLabel = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 48 | "tcP-hs-3Wz.paletteLabel" = "Appearance"; 49 | -------------------------------------------------------------------------------- /Lyricism/th.lproj/Preferences.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 3 | "3eN-9f-m6k.label" = "Toolbar Item"; 4 | 5 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 6 | "3eN-9f-m6k.paletteLabel" = "Toolbar Item"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "Dock:"; ObjectID = "8sI-vs-XX6"; */ 9 | "8sI-vs-XX6.title" = "Dock:"; 10 | 11 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 12 | "DaZ-LR-WvL.label" = "Toolbar Item"; 13 | 14 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 15 | "DaZ-LR-WvL.paletteLabel" = "Toolbar Item"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Default Player Source:"; ObjectID = "W8y-yp-OSf"; */ 18 | "W8y-yp-OSf.title" = "Default Player Source:"; 19 | 20 | /* Class = "NSButtonCell"; title = "YES"; ObjectID = "XqT-od-Pj6"; */ 21 | "XqT-od-Pj6.title" = "YES"; 22 | 23 | /* Class = "NSButtonCell"; title = "Show"; ObjectID = "eSY-KU-cna"; */ 24 | "eSY-KU-cna.title" = "Show"; 25 | 26 | /* Class = "NSToolbarItem"; label = "General"; ObjectID = "f52-T9-yzN"; */ 27 | "f52-T9-yzN.label" = "General"; 28 | 29 | /* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "f52-T9-yzN"; */ 30 | "f52-T9-yzN.paletteLabel" = "General"; 31 | 32 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 33 | "gWp-sW-icq.label" = "Toolbar Item"; 34 | 35 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 36 | "gWp-sW-icq.paletteLabel" = "Toolbar Item"; 37 | 38 | /* Class = "NSWindow"; title = "Preferences"; ObjectID = "q06-sO-Ayg"; */ 39 | "q06-sO-Ayg.title" = "Preferences"; 40 | 41 | /* Class = "NSTextFieldCell"; title = "Always On Top:"; ObjectID = "qaa-Ev-WUO"; */ 42 | "qaa-Ev-WUO.title" = "Always On Top:"; 43 | 44 | /* Class = "NSToolbarItem"; label = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 45 | "tcP-hs-3Wz.label" = "Appearance"; 46 | 47 | /* Class = "NSToolbarItem"; paletteLabel = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 48 | "tcP-hs-3Wz.paletteLabel" = "Appearance"; 49 | -------------------------------------------------------------------------------- /Lyricism/zh-Hant.lproj/Localizable.strings.strings: -------------------------------------------------------------------------------- 1 | /* 2 | Localizable.strings.strings 3 | Lyricism 4 | 5 | Created by Stan Liu on 12/09/2016. 6 | Copyright © 2016 Stan Liu. All rights reserved. 7 | */ 8 | 9 | 10 | "✔︎ On Top" : "顯示於最上層"; 11 | " Not On Top" : "不顯示於最上層"; 12 | 13 | "Couldn't Find Any Relative Lyrics": "未搜尋到相關歌詞..."; 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /Lyricism/zh-Hant.lproj/Preferences.strings: -------------------------------------------------------------------------------- 1 | 2 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 3 | "3eN-9f-m6k.label" = "Toolbar Item"; 4 | 5 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "3eN-9f-m6k"; */ 6 | "3eN-9f-m6k.paletteLabel" = "Toolbar Item"; 7 | 8 | /* Class = "NSTextFieldCell"; title = "Dock:"; ObjectID = "8sI-vs-XX6"; */ 9 | "8sI-vs-XX6.title" = "Dock:"; 10 | 11 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 12 | "DaZ-LR-WvL.label" = "Toolbar Item"; 13 | 14 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "DaZ-LR-WvL"; */ 15 | "DaZ-LR-WvL.paletteLabel" = "Toolbar Item"; 16 | 17 | /* Class = "NSTextFieldCell"; title = "Default Player Source:"; ObjectID = "W8y-yp-OSf"; */ 18 | "W8y-yp-OSf.title" = "選擇預設播放器來源:"; 19 | 20 | /* Class = "NSButtonCell"; title = "YES"; ObjectID = "XqT-od-Pj6"; */ 21 | "XqT-od-Pj6.title" = "YES"; 22 | 23 | /* Class = "NSButtonCell"; title = "Show"; ObjectID = "eSY-KU-cna"; */ 24 | "eSY-KU-cna.title" = "顯示"; 25 | 26 | /* Class = "NSToolbarItem"; label = "General"; ObjectID = "f52-T9-yzN"; */ 27 | "f52-T9-yzN.label" = "一般"; 28 | 29 | /* Class = "NSToolbarItem"; paletteLabel = "General"; ObjectID = "f52-T9-yzN"; */ 30 | "f52-T9-yzN.paletteLabel" = "一般"; 31 | 32 | /* Class = "NSToolbarItem"; label = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 33 | "gWp-sW-icq.label" = "Toolbar Item"; 34 | 35 | /* Class = "NSToolbarItem"; paletteLabel = "Toolbar Item"; ObjectID = "gWp-sW-icq"; */ 36 | "gWp-sW-icq.paletteLabel" = "Toolbar Item"; 37 | 38 | /* Class = "NSWindow"; title = "Preferences"; ObjectID = "q06-sO-Ayg"; */ 39 | "q06-sO-Ayg.title" = "設定"; 40 | 41 | /* Class = "NSTextFieldCell"; title = "Always On Top:"; ObjectID = "qaa-Ev-WUO"; */ 42 | "qaa-Ev-WUO.title" = "顯示於最上層:"; 43 | 44 | /* Class = "NSToolbarItem"; label = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 45 | "tcP-hs-3Wz.label" = "介面"; 46 | 47 | /* Class = "NSToolbarItem"; paletteLabel = "Appearance"; ObjectID = "tcP-hs-3Wz"; */ 48 | "tcP-hs-3Wz.paletteLabel" = "介面"; 49 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (3.5.0) 3 | - Crashlytics (3.8.1): 4 | - Fabric (~> 1.6.3) 5 | - Fabric (1.6.8) 6 | - Kingfisher (2.6.0) 7 | - ProgressKit (0.5.1) 8 | - ReachabilitySwift (2.3.3) 9 | - Realm (1.0.2): 10 | - Realm/Headers (= 1.0.2) 11 | - Realm/Headers (1.0.2) 12 | - RealmSwift (1.0.2): 13 | - Realm (= 1.0.2) 14 | - SwiftyJSON (2.3.2) 15 | - SWXMLHash (2.3.2) 16 | 17 | DEPENDENCIES: 18 | - Alamofire (~> 3.4) 19 | - Crashlytics 20 | - Fabric 21 | - Kingfisher (~> 2.4) 22 | - ProgressKit 23 | - ReachabilitySwift 24 | - RealmSwift 25 | - SwiftyJSON 26 | - SWXMLHash (~> 2.3.0) 27 | 28 | SPEC CHECKSUMS: 29 | Alamofire: b70a7352335f8ea5babd0a923eb7e8eacc67b877 30 | Crashlytics: 4391d8df0b125345e9f209c5db6e7f40a6a8435d 31 | Fabric: 5755268d0171435ab167e3d0878a28a777deaf10 32 | Kingfisher: d84c5fd176ea86cc7b8aac65fd55feda6f70f130 33 | ProgressKit: 67a1bb2fceefe3c3c3bafa7bb5a66bc96826a9ea 34 | ReachabilitySwift: e0f6b6f280effb47731acfaaa2d5ffe223703793 35 | Realm: 9d5c46a4d7d27958530a8dfc58f63a99e5c2cba3 36 | RealmSwift: 82f3ac5e24530143dddfde2033acc0d308f27d96 37 | SwiftyJSON: 04ccea08915aa0109039157c7974cf0298da292a 38 | SWXMLHash: 2f8c49af765718ad56020c4f875ec3ff22612f06 39 | 40 | PODFILE CHECKSUM: fda2f555afcae8af77237631726f9745f27a743a 41 | 42 | COCOAPODS: 1.0.1 43 | -------------------------------------------------------------------------------- /Pods/Alamofire/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in 11 | all copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 19 | THE SOFTWARE. 20 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Error.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Error.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | /// The `Error` struct provides a convenience for creating custom Alamofire NSErrors. 28 | public struct Error { 29 | /// The domain used for creating all Alamofire errors. 30 | public static let Domain = "com.alamofire.error" 31 | 32 | /// The custom error codes generated by Alamofire. 33 | public enum Code: Int { 34 | case InputStreamReadFailed = -6000 35 | case OutputStreamWriteFailed = -6001 36 | case ContentTypeValidationFailed = -6002 37 | case StatusCodeValidationFailed = -6003 38 | case DataSerializationFailed = -6004 39 | case StringSerializationFailed = -6005 40 | case JSONSerializationFailed = -6006 41 | case PropertyListSerializationFailed = -6007 42 | } 43 | 44 | /// Custom keys contained within certain NSError `userInfo` dictionaries generated by Alamofire. 45 | public struct UserInfoKeys { 46 | /// The content type user info key for a `.ContentTypeValidationFailed` error stored as a `String` value. 47 | public static let ContentType = "ContentType" 48 | 49 | /// The status code user info key for a `.StatusCodeValidationFailed` error stored as an `Int` value. 50 | public static let StatusCode = "StatusCode" 51 | } 52 | 53 | /** 54 | Creates an `NSError` with the given error code and failure reason. 55 | 56 | - parameter code: The error code. 57 | - parameter failureReason: The failure reason. 58 | 59 | - returns: An `NSError` with the given error code and failure reason. 60 | */ 61 | @available(*, deprecated=3.4.0) 62 | public static func errorWithCode(code: Code, failureReason: String) -> NSError { 63 | return errorWithCode(code.rawValue, failureReason: failureReason) 64 | } 65 | 66 | /** 67 | Creates an `NSError` with the given error code and failure reason. 68 | 69 | - parameter code: The error code. 70 | - parameter failureReason: The failure reason. 71 | 72 | - returns: An `NSError` with the given error code and failure reason. 73 | */ 74 | @available(*, deprecated=3.4.0) 75 | public static func errorWithCode(code: Int, failureReason: String) -> NSError { 76 | let userInfo = [NSLocalizedFailureReasonErrorKey: failureReason] 77 | return NSError(domain: Domain, code: code, userInfo: userInfo) 78 | } 79 | 80 | static func error(domain domain: String = Error.Domain, code: Code, failureReason: String) -> NSError { 81 | return error(domain: domain, code: code.rawValue, failureReason: failureReason) 82 | } 83 | 84 | static func error(domain domain: String = Error.Domain, code: Int, failureReason: String) -> NSError { 85 | let userInfo = [NSLocalizedFailureReasonErrorKey: failureReason] 86 | return NSError(domain: domain, code: code, userInfo: userInfo) 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Notifications.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Notifications.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | /// Contains all the `NSNotification` names posted by Alamofire with descriptions of each notification's payload. 28 | public struct Notifications { 29 | /// Used as a namespace for all `NSURLSessionTask` related notifications. 30 | public struct Task { 31 | /// Notification posted when an `NSURLSessionTask` is resumed. The notification `object` contains the resumed 32 | /// `NSURLSessionTask`. 33 | public static let DidResume = "com.alamofire.notifications.task.didResume" 34 | 35 | /// Notification posted when an `NSURLSessionTask` is suspended. The notification `object` contains the 36 | /// suspended `NSURLSessionTask`. 37 | public static let DidSuspend = "com.alamofire.notifications.task.didSuspend" 38 | 39 | /// Notification posted when an `NSURLSessionTask` is cancelled. The notification `object` contains the 40 | /// cancelled `NSURLSessionTask`. 41 | public static let DidCancel = "com.alamofire.notifications.task.didCancel" 42 | 43 | /// Notification posted when an `NSURLSessionTask` is completed. The notification `object` contains the 44 | /// completed `NSURLSessionTask`. 45 | public static let DidComplete = "com.alamofire.notifications.task.didComplete" 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Response.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Response.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | /// Used to store all response data returned from a completed `Request`. 28 | public struct Response { 29 | /// The URL request sent to the server. 30 | public let request: NSURLRequest? 31 | 32 | /// The server's response to the URL request. 33 | public let response: NSHTTPURLResponse? 34 | 35 | /// The data returned by the server. 36 | public let data: NSData? 37 | 38 | /// The result of response serialization. 39 | public let result: Result 40 | 41 | /// The timeline of the complete lifecycle of the `Request`. 42 | public let timeline: Timeline 43 | 44 | /** 45 | Initializes the `Response` instance with the specified URL request, URL response, server data and response 46 | serialization result. 47 | 48 | - parameter request: The URL request sent to the server. 49 | - parameter response: The server's response to the URL request. 50 | - parameter data: The data returned by the server. 51 | - parameter result: The result of response serialization. 52 | - parameter timeline: The timeline of the complete lifecycle of the `Request`. Defaults to `Timeline()`. 53 | 54 | - returns: the new `Response` instance. 55 | */ 56 | public init( 57 | request: NSURLRequest?, 58 | response: NSHTTPURLResponse?, 59 | data: NSData?, 60 | result: Result, 61 | timeline: Timeline = Timeline()) 62 | { 63 | self.request = request 64 | self.response = response 65 | self.data = data 66 | self.result = result 67 | self.timeline = timeline 68 | } 69 | } 70 | 71 | // MARK: - CustomStringConvertible 72 | 73 | extension Response: CustomStringConvertible { 74 | /// The textual representation used when written to an output stream, which includes whether the result was a 75 | /// success or failure. 76 | public var description: String { 77 | return result.debugDescription 78 | } 79 | } 80 | 81 | // MARK: - CustomDebugStringConvertible 82 | 83 | extension Response: CustomDebugStringConvertible { 84 | /// The debug textual representation used when written to an output stream, which includes the URL request, the URL 85 | /// response, the server data and the response serialization result. 86 | public var debugDescription: String { 87 | var output: [String] = [] 88 | 89 | output.append(request != nil ? "[Request]: \(request!)" : "[Request]: nil") 90 | output.append(response != nil ? "[Response]: \(response!)" : "[Response]: nil") 91 | output.append("[Data]: \(data?.length ?? 0) bytes") 92 | output.append("[Result]: \(result.debugDescription)") 93 | output.append("[Timeline]: \(timeline.debugDescription)") 94 | 95 | return output.joinWithSeparator("\n") 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /Pods/Alamofire/Source/Result.swift: -------------------------------------------------------------------------------- 1 | // 2 | // Result.swift 3 | // 4 | // Copyright (c) 2014-2016 Alamofire Software Foundation (http://alamofire.org/) 5 | // 6 | // Permission is hereby granted, free of charge, to any person obtaining a copy 7 | // of this software and associated documentation files (the "Software"), to deal 8 | // in the Software without restriction, including without limitation the rights 9 | // to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | // copies of the Software, and to permit persons to whom the Software is 11 | // furnished to do so, subject to the following conditions: 12 | // 13 | // The above copyright notice and this permission notice shall be included in 14 | // all copies or substantial portions of the Software. 15 | // 16 | // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | // OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | // THE SOFTWARE. 23 | // 24 | 25 | import Foundation 26 | 27 | /** 28 | Used to represent whether a request was successful or encountered an error. 29 | 30 | - Success: The request and all post processing operations were successful resulting in the serialization of the 31 | provided associated value. 32 | - Failure: The request encountered an error resulting in a failure. The associated values are the original data 33 | provided by the server as well as the error that caused the failure. 34 | */ 35 | public enum Result { 36 | case Success(Value) 37 | case Failure(Error) 38 | 39 | /// Returns `true` if the result is a success, `false` otherwise. 40 | public var isSuccess: Bool { 41 | switch self { 42 | case .Success: 43 | return true 44 | case .Failure: 45 | return false 46 | } 47 | } 48 | 49 | /// Returns `true` if the result is a failure, `false` otherwise. 50 | public var isFailure: Bool { 51 | return !isSuccess 52 | } 53 | 54 | /// Returns the associated value if the result is a success, `nil` otherwise. 55 | public var value: Value? { 56 | switch self { 57 | case .Success(let value): 58 | return value 59 | case .Failure: 60 | return nil 61 | } 62 | } 63 | 64 | /// Returns the associated error value if the result is a failure, `nil` otherwise. 65 | public var error: Error? { 66 | switch self { 67 | case .Success: 68 | return nil 69 | case .Failure(let error): 70 | return error 71 | } 72 | } 73 | } 74 | 75 | // MARK: - CustomStringConvertible 76 | 77 | extension Result: CustomStringConvertible { 78 | /// The textual representation used when written to an output stream, which includes whether the result was a 79 | /// success or failure. 80 | public var description: String { 81 | switch self { 82 | case .Success: 83 | return "SUCCESS" 84 | case .Failure: 85 | return "FAILURE" 86 | } 87 | } 88 | } 89 | 90 | // MARK: - CustomDebugStringConvertible 91 | 92 | extension Result: CustomDebugStringConvertible { 93 | /// The debug textual representation used when written to an output stream, which includes whether the result was a 94 | /// success or failure in addition to the value or error. 95 | public var debugDescription: String { 96 | switch self { 97 | case .Success(let value): 98 | return "SUCCESS: \(value)" 99 | case .Failure(let error): 100 | return "FAILURE: \(error)" 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /Pods/Crashlytics/Crashlytics.framework/README: -------------------------------------------------------------------------------- 1 | We've now combined all our supported platforms into a single podspec. As a result, we moved our submit script to a new location for Cocoapods projects: ${PODS_ROOT}/Crashlytics/submit. To avoid breaking functionality that references the old location of the submit, we've placed this dummy script that calls to the correct location, while providing a helpful warning if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! 2 | -------------------------------------------------------------------------------- /Pods/Crashlytics/Crashlytics.framework/submit: -------------------------------------------------------------------------------- 1 | if [[ -z $PODS_ROOT ]]; then 2 | echo "error: The submit binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Crashlytics/submit'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the submit binary to fix this issue." 3 | else 4 | echo "warning: The submit script is now located at '$"{"PODS_ROOT"}"/Crashlytics/submit'. To remove this warning, update your path to point to this new location." 5 | sh "${PODS_ROOT}/Crashlytics/submit" "$@" 6 | fi 7 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Crashlytics: -------------------------------------------------------------------------------- 1 | Versions/Current/Crashlytics -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Crashlytics: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Crashlytics -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Headers/ANSCompatibility.h: -------------------------------------------------------------------------------- 1 | // 2 | // ANSCompatibility.h 3 | // AnswersKit 4 | // 5 | // Copyright (c) 2015 Crashlytics, Inc. All rights reserved. 6 | // 7 | 8 | #pragma once 9 | 10 | #if !__has_feature(nullability) 11 | #define nonnull 12 | #define nullable 13 | #define _Nullable 14 | #define _Nonnull 15 | #endif 16 | 17 | #ifndef NS_ASSUME_NONNULL_BEGIN 18 | #define NS_ASSUME_NONNULL_BEGIN 19 | #endif 20 | 21 | #ifndef NS_ASSUME_NONNULL_END 22 | #define NS_ASSUME_NONNULL_END 23 | #endif 24 | 25 | #if __has_feature(objc_generics) 26 | #define ANS_GENERIC_NSARRAY(type) NSArray 27 | #define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary 28 | #else 29 | #define ANS_GENERIC_NSARRAY(type) NSArray 30 | #define ANS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary 31 | #endif 32 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Headers/CLSAttributes.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLSAttributes.h 3 | // Crashlytics 4 | // 5 | // Copyright (c) 2015 Crashlytics, Inc. All rights reserved. 6 | // 7 | 8 | #pragma once 9 | 10 | #define CLS_DEPRECATED(x) __attribute__ ((deprecated(x))) 11 | 12 | #if !__has_feature(nullability) 13 | #define nonnull 14 | #define nullable 15 | #define _Nullable 16 | #define _Nonnull 17 | #endif 18 | 19 | #ifndef NS_ASSUME_NONNULL_BEGIN 20 | #define NS_ASSUME_NONNULL_BEGIN 21 | #endif 22 | 23 | #ifndef NS_ASSUME_NONNULL_END 24 | #define NS_ASSUME_NONNULL_END 25 | #endif 26 | 27 | #if __has_feature(objc_generics) 28 | #define CLS_GENERIC_NSARRAY(type) NSArray 29 | #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary 30 | #else 31 | #define CLS_GENERIC_NSARRAY(type) NSArray 32 | #define CLS_GENERIC_NSDICTIONARY(key_type,object_key) NSDictionary 33 | #endif 34 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Headers/CLSLogging.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLSLogging.h 3 | // Crashlytics 4 | // 5 | // Copyright (c) 2015 Crashlytics, Inc. All rights reserved. 6 | // 7 | #ifdef __OBJC__ 8 | #import "CLSAttributes.h" 9 | #import 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | #endif 13 | 14 | 15 | 16 | /** 17 | * 18 | * The CLS_LOG macro provides as easy way to gather more information in your log messages that are 19 | * sent with your crash data. CLS_LOG prepends your custom log message with the function name and 20 | * line number where the macro was used. If your app was built with the DEBUG preprocessor macro 21 | * defined CLS_LOG uses the CLSNSLog function which forwards your log message to NSLog and CLSLog. 22 | * If the DEBUG preprocessor macro is not defined CLS_LOG uses CLSLog only. 23 | * 24 | * Example output: 25 | * -[AppDelegate login:] line 134 $ login start 26 | * 27 | * If you would like to change this macro, create a new header file, unset our define and then define 28 | * your own version. Make sure this new header file is imported after the Crashlytics header file. 29 | * 30 | * #undef CLS_LOG 31 | * #define CLS_LOG(__FORMAT__, ...) CLSNSLog... 32 | * 33 | **/ 34 | #ifdef __OBJC__ 35 | #ifdef DEBUG 36 | #define CLS_LOG(__FORMAT__, ...) CLSNSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) 37 | #else 38 | #define CLS_LOG(__FORMAT__, ...) CLSLog((@"%s line %d $ " __FORMAT__), __PRETTY_FUNCTION__, __LINE__, ##__VA_ARGS__) 39 | #endif 40 | #endif 41 | 42 | /** 43 | * 44 | * Add logging that will be sent with your crash data. This logging will not show up in the system.log 45 | * and will only be visible in your Crashlytics dashboard. 46 | * 47 | **/ 48 | 49 | #ifdef __OBJC__ 50 | OBJC_EXTERN void CLSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); 51 | OBJC_EXTERN void CLSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); 52 | 53 | /** 54 | * 55 | * Add logging that will be sent with your crash data. This logging will show up in the system.log 56 | * and your Crashlytics dashboard. It is not recommended for Release builds. 57 | * 58 | **/ 59 | OBJC_EXTERN void CLSNSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2); 60 | OBJC_EXTERN void CLSNSLogv(NSString *format, va_list ap) NS_FORMAT_FUNCTION(1,0); 61 | 62 | 63 | NS_ASSUME_NONNULL_END 64 | #endif 65 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Headers/CLSReport.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLSReport.h 3 | // Crashlytics 4 | // 5 | // Copyright (c) 2015 Crashlytics, Inc. All rights reserved. 6 | // 7 | 8 | #import 9 | #import "CLSAttributes.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /** 14 | * The CLSCrashReport protocol is deprecated. See the CLSReport class and the CrashyticsDelegate changes for details. 15 | **/ 16 | @protocol CLSCrashReport 17 | 18 | @property (nonatomic, copy, readonly) NSString *identifier; 19 | @property (nonatomic, copy, readonly) NSDictionary *customKeys; 20 | @property (nonatomic, copy, readonly) NSString *bundleVersion; 21 | @property (nonatomic, copy, readonly) NSString *bundleShortVersionString; 22 | @property (nonatomic, copy, readonly) NSDate *crashedOnDate; 23 | @property (nonatomic, copy, readonly) NSString *OSVersion; 24 | @property (nonatomic, copy, readonly) NSString *OSBuildVersion; 25 | 26 | @end 27 | 28 | /** 29 | * The CLSReport exposes an interface to the phsyical report that Crashlytics has created. You can 30 | * use this class to get information about the event, and can also set some values after the 31 | * event has occured. 32 | **/ 33 | @interface CLSReport : NSObject 34 | 35 | - (instancetype)init NS_UNAVAILABLE; 36 | + (instancetype)new NS_UNAVAILABLE; 37 | 38 | /** 39 | * Returns the session identifier for the report. 40 | **/ 41 | @property (nonatomic, copy, readonly) NSString *identifier; 42 | 43 | /** 44 | * Returns the custom key value data for the report. 45 | **/ 46 | @property (nonatomic, copy, readonly) NSDictionary *customKeys; 47 | 48 | /** 49 | * Returns the CFBundleVersion of the application that generated the report. 50 | **/ 51 | @property (nonatomic, copy, readonly) NSString *bundleVersion; 52 | 53 | /** 54 | * Returns the CFBundleShortVersionString of the application that generated the report. 55 | **/ 56 | @property (nonatomic, copy, readonly) NSString *bundleShortVersionString; 57 | 58 | /** 59 | * Returns the date that the report was created. 60 | **/ 61 | @property (nonatomic, copy, readonly) NSDate *dateCreated; 62 | 63 | /** 64 | * Returns the os version that the application crashed on. 65 | **/ 66 | @property (nonatomic, copy, readonly) NSString *OSVersion; 67 | 68 | /** 69 | * Returns the os build version that the application crashed on. 70 | **/ 71 | @property (nonatomic, copy, readonly) NSString *OSBuildVersion; 72 | 73 | /** 74 | * Returns YES if the report contains any crash information, otherwise returns NO. 75 | **/ 76 | @property (nonatomic, assign, readonly) BOOL isCrash; 77 | 78 | /** 79 | * You can use this method to set, after the event, additional custom keys. The rules 80 | * and semantics for this method are the same as those documented in Crashlytics.h. Be aware 81 | * that the maximum size and count of custom keys is still enforced, and you can overwrite keys 82 | * and/or cause excess keys to be deleted by using this method. 83 | **/ 84 | - (void)setObjectValue:(nullable id)value forKey:(NSString *)key; 85 | 86 | /** 87 | * Record an application-specific user identifier. See Crashlytics.h for details. 88 | **/ 89 | @property (nonatomic, copy, nullable) NSString * userIdentifier; 90 | 91 | /** 92 | * Record a user name. See Crashlytics.h for details. 93 | **/ 94 | @property (nonatomic, copy, nullable) NSString * userName; 95 | 96 | /** 97 | * Record a user email. See Crashlytics.h for details. 98 | **/ 99 | @property (nonatomic, copy, nullable) NSString * userEmail; 100 | 101 | @end 102 | 103 | NS_ASSUME_NONNULL_END 104 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Headers/CLSStackFrame.h: -------------------------------------------------------------------------------- 1 | // 2 | // CLSStackFrame.h 3 | // Crashlytics 4 | // 5 | // Copyright 2015 Crashlytics, Inc. All rights reserved. 6 | // 7 | 8 | #import 9 | #import "CLSAttributes.h" 10 | 11 | NS_ASSUME_NONNULL_BEGIN 12 | 13 | /** 14 | * 15 | * This class is used in conjunction with -[Crashlytics recordCustomExceptionName:reason:frameArray:] to 16 | * record information about non-ObjC/C++ exceptions. All information included here will be displayed 17 | * in the Crashlytics UI, and can influence crash grouping. Be particularly careful with the use of the 18 | * address property. If set, Crashlytics will attempt symbolication and could overwrite other properities 19 | * in the process. 20 | * 21 | **/ 22 | @interface CLSStackFrame : NSObject 23 | 24 | + (instancetype)stackFrame; 25 | + (instancetype)stackFrameWithAddress:(NSUInteger)address; 26 | + (instancetype)stackFrameWithSymbol:(NSString *)symbol; 27 | 28 | @property (nonatomic, copy, nullable) NSString *symbol; 29 | @property (nonatomic, copy, nullable) NSString *rawSymbol; 30 | @property (nonatomic, copy, nullable) NSString *library; 31 | @property (nonatomic, copy, nullable) NSString *fileName; 32 | @property (nonatomic, assign) uint32_t lineNumber; 33 | @property (nonatomic, assign) uint64_t offset; 34 | @property (nonatomic, assign) uint64_t address; 35 | 36 | @end 37 | 38 | NS_ASSUME_NONNULL_END 39 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Crashlytics { 2 | header "Crashlytics.h" 3 | header "Answers.h" 4 | header "ANSCompatibility.h" 5 | header "CLSLogging.h" 6 | header "CLSReport.h" 7 | header "CLSStackFrame.h" 8 | header "CLSAttributes.h" 9 | 10 | export * 11 | 12 | link "z" 13 | link "c++" 14 | } 15 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 15G31 7 | CFBundleDevelopmentRegion 8 | English 9 | CFBundleExecutable 10 | Crashlytics 11 | CFBundleIdentifier 12 | com.twitter.crashlytics.mac 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Crashlytics 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 3.8.1 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 117 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 7D1014 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 15E60 37 | DTSDKName 38 | macosx10.11 39 | DTXcode 40 | 0731 41 | DTXcodeBuild 42 | 7D1014 43 | NSHumanReadableCopyright 44 | Copyright © 2016 Crashlytics, Inc. All rights reserved. 45 | UIDeviceFamily 46 | 47 | 3 48 | 2 49 | 1 50 | 4 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # run 4 | # 5 | # Copyright (c) 2015 Crashlytics. All rights reserved. 6 | 7 | # Figure out where we're being called from 8 | DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) 9 | 10 | # Quote path in case of spaces or special chars 11 | DIR="\"${DIR}" 12 | 13 | PATH_SEP="/" 14 | VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" 15 | UPLOAD_COMMAND="uploadDSYM\" $@ run-script" 16 | 17 | # Ensure params are as expected, run in sync mode to validate 18 | eval $DIR$PATH_SEP$VALIDATE_COMMAND 19 | return_code=$? 20 | 21 | if [[ $return_code != 0 ]]; then 22 | exit $return_code 23 | fi 24 | 25 | # Verification passed, upload dSYM in background to prevent Xcode from waiting 26 | # Note: Validation is performed again before upload. 27 | # Output can still be found in Console.app 28 | eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & 29 | -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/submit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Crashlytics/OSX/Crashlytics.framework/submit -------------------------------------------------------------------------------- /Pods/Crashlytics/OSX/Crashlytics.framework/uploadDSYM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Crashlytics/OSX/Crashlytics.framework/uploadDSYM -------------------------------------------------------------------------------- /Pods/Crashlytics/README.md: -------------------------------------------------------------------------------- 1 | ![Crashlytics Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-crashlytics-header.png) 2 | 3 | Part of [Twitter Fabric](https://www.fabric.io), [Crashlytics](http://try.crashlytics.com/) offers the most powerful, yet lightest weight crash reporting solution for iOS. Crashlytics also provides real-time analytics through [Answers](https://answers.io/) and app distributions to testers using [Beta](http://try.crashlytics.com/beta/). 4 | 5 | ## Setup 6 | 7 | 1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. 8 | 9 | 1. Open Fabric.app, login and select the Crashlytics SDK. 10 | 11 | ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) 12 | 13 | 1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. 14 | 15 | ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) 16 | 17 | 1. Select the Podfile option and follow the installation instructions to update your Podfile. **Note:** the Crashlytics Pod includes Answers. If you have Answers included as a separate Pod it should be removed from your Podfile to avoid duplicate symbol errors. 18 | 19 | ``` 20 | pod 'Fabric' 21 | pod 'Crashlytics' 22 | ``` 23 | 24 | 1. Run `pod install` 25 | 26 | 1. Add a Run Script Build Phase and build your app. 27 | 28 | ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) 29 | 30 | 1. Initialize the SDK by inserting code outlined in the Fabric.app. 31 | 32 | 1. Run your app to finish the installation. 33 | 34 | ## Resources 35 | 36 | * [Documentation](https://docs.fabric.io/ios/crashlytics/index.html) 37 | * [Forums](https://twittercommunity.com/c/fabric/crashlytics) 38 | * [Website](http://try.crashlytics.com/) 39 | * Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics) 40 | * Follow us on Periscope: [Fabric](https://periscope.tv/fabric) and [TwitterDev](https://periscope.tv/twitterdev) 41 | -------------------------------------------------------------------------------- /Pods/Crashlytics/submit: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Crashlytics/submit -------------------------------------------------------------------------------- /Pods/Fabric/Fabric.framework/README: -------------------------------------------------------------------------------- 1 | We've now combined all our supported platforms into a single podspec. As a result, we moved our run script to a new location for Cocoapods projects: ${PODS_ROOT}/Fabric/run. To avoid breaking builds that reference the old location of the run script, we've placed this dummy script that calls to the correct location, while providing a helpful warning in Xcode if it is invoked. This bridge for backwards compatibility will be removed in a future release, so please heed the warning! 2 | -------------------------------------------------------------------------------- /Pods/Fabric/Fabric.framework/run: -------------------------------------------------------------------------------- 1 | if [[ -z $PODS_ROOT ]]; then 2 | echo "error: The run binary delivered by cocoapods is in a new location, under '$"{"PODS_ROOT"}"/Fabric/run'. This script was put in place for backwards compatibility, but it relies on PODS_ROOT, which does not have a value in your current setup. Please update the path to the run binary to fix this issue." 3 | else 4 | echo "warning: The run script is now located at '$"{"PODS_ROOT"}"/Fabric/run'. To remove this warning, update your Run Script Build Phase to point to this new location." 5 | sh "${PODS_ROOT}/Fabric/run" "$@" 6 | fi 7 | -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Fabric: -------------------------------------------------------------------------------- 1 | Versions/Current/Fabric -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Headers: -------------------------------------------------------------------------------- 1 | Versions/Current/Headers -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Modules: -------------------------------------------------------------------------------- 1 | Versions/Current/Modules -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Resources: -------------------------------------------------------------------------------- 1 | Versions/Current/Resources -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Versions/A/Fabric: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Fabric/OSX/Fabric.framework/Versions/A/Fabric -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Versions/A/Headers/FABAttributes.h: -------------------------------------------------------------------------------- 1 | // 2 | // FABAttributes.h 3 | // Fabric 4 | // 5 | // Copyright (C) 2015 Twitter, Inc. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #pragma once 21 | 22 | #define FAB_UNAVAILABLE(x) __attribute__((unavailable(x))) 23 | 24 | #if !__has_feature(nullability) 25 | #define nonnull 26 | #define nullable 27 | #define _Nullable 28 | #define _Nonnull 29 | #endif 30 | 31 | #ifndef NS_ASSUME_NONNULL_BEGIN 32 | #define NS_ASSUME_NONNULL_BEGIN 33 | #endif 34 | 35 | #ifndef NS_ASSUME_NONNULL_END 36 | #define NS_ASSUME_NONNULL_END 37 | #endif 38 | 39 | 40 | /** 41 | * The following macros are defined here to provide 42 | * backwards compatability. If you are still using 43 | * them you should migrate to the native nullability 44 | * macros. 45 | */ 46 | #define fab_nullable nullable 47 | #define fab_nonnull nonnull 48 | #define FAB_NONNULL __fab_nonnull 49 | #define FAB_NULLABLE __fab_nullable 50 | #define FAB_START_NONNULL NS_ASSUME_NONNULL_BEGIN 51 | #define FAB_END_NONNULL NS_ASSUME_NONNULL_END 52 | -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Versions/A/Headers/Fabric.h: -------------------------------------------------------------------------------- 1 | // 2 | // Fabric.h 3 | // Fabric 4 | // 5 | // Copyright (C) 2015 Twitter, Inc. 6 | // 7 | // Licensed under the Apache License, Version 2.0 (the "License"); 8 | // you may not use this file except in compliance with the License. 9 | // You may obtain a copy of the License at 10 | // 11 | // http://www.apache.org/licenses/LICENSE-2.0 12 | // 13 | // Unless required by applicable law or agreed to in writing, software 14 | // distributed under the License is distributed on an "AS IS" BASIS, 15 | // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 16 | // See the License for the specific language governing permissions and 17 | // limitations under the License. 18 | // 19 | 20 | #import 21 | #import "FABAttributes.h" 22 | 23 | NS_ASSUME_NONNULL_BEGIN 24 | 25 | #if TARGET_OS_IPHONE 26 | #if __IPHONE_OS_VERSION_MIN_REQUIRED < 60000 27 | #error "Fabric's minimum iOS version is 6.0" 28 | #endif 29 | #else 30 | #if __MAC_OS_X_VERSION_MIN_REQUIRED < 1070 31 | #error "Fabric's minimum OS X version is 10.7" 32 | #endif 33 | #endif 34 | 35 | /** 36 | * Fabric Base. Coordinates configuration and starts all provided kits. 37 | */ 38 | @interface Fabric : NSObject 39 | 40 | /** 41 | * Initialize Fabric and all provided kits. Call this method within your App Delegate's `application:didFinishLaunchingWithOptions:` and provide the kits you wish to use. 42 | * 43 | * For example, in Objective-C: 44 | * 45 | * `[Fabric with:@[[Crashlytics class], [Twitter class], [Digits class], [MoPub class]]];` 46 | * 47 | * Swift: 48 | * 49 | * `Fabric.with([Crashlytics.self(), Twitter.self(), Digits.self(), MoPub.self()])` 50 | * 51 | * Only the first call to this method is honored. Subsequent calls are no-ops. 52 | * 53 | * @param kitClasses An array of kit Class objects 54 | * 55 | * @return Returns the shared Fabric instance. In most cases this can be ignored. 56 | */ 57 | + (instancetype)with:(NSArray *)kitClasses; 58 | 59 | /** 60 | * Returns the Fabric singleton object. 61 | */ 62 | + (instancetype)sharedSDK; 63 | 64 | /** 65 | * This BOOL enables or disables debug logging, such as kit version information. The default value is NO. 66 | */ 67 | @property (nonatomic, assign) BOOL debug; 68 | 69 | /** 70 | * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. 71 | */ 72 | - (id)init FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); 73 | 74 | /** 75 | * Unavailable. Use `+sharedSDK` to retrieve the shared Fabric instance. 76 | */ 77 | + (instancetype)new FAB_UNAVAILABLE("Use +sharedSDK to retrieve the shared Fabric instance."); 78 | 79 | @end 80 | 81 | NS_ASSUME_NONNULL_END 82 | 83 | -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Versions/A/Modules/module.modulemap: -------------------------------------------------------------------------------- 1 | framework module Fabric { 2 | umbrella header "Fabric.h" 3 | 4 | export * 5 | module * { export * } 6 | } -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Versions/A/Resources/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | BuildMachineOSBuild 6 | 15E65 7 | CFBundleDevelopmentRegion 8 | en 9 | CFBundleExecutable 10 | Fabric 11 | CFBundleIdentifier 12 | io.fabric.sdk.mac 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | Fabric 17 | CFBundlePackageType 18 | FMWK 19 | CFBundleShortVersionString 20 | 1.6.8 21 | CFBundleSignature 22 | ???? 23 | CFBundleSupportedPlatforms 24 | 25 | MacOSX 26 | 27 | CFBundleVersion 28 | 55 29 | DTCompiler 30 | com.apple.compilers.llvm.clang.1_0 31 | DTPlatformBuild 32 | 7D1014 33 | DTPlatformVersion 34 | GM 35 | DTSDKBuild 36 | 15E60 37 | DTSDKName 38 | macosx10.11 39 | DTXcode 40 | 0731 41 | DTXcodeBuild 42 | 7D1014 43 | NSHumanReadableCopyright 44 | Copyright © 2015 Twitter. All rights reserved. 45 | UIDeviceFamily 46 | 47 | 3 48 | 2 49 | 1 50 | 4 51 | 52 | 53 | 54 | -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/Versions/Current: -------------------------------------------------------------------------------- 1 | A -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # run 4 | # 5 | # Copyright (c) 2015 Crashlytics. All rights reserved. 6 | 7 | # Figure out where we're being called from 8 | DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) 9 | 10 | # Quote path in case of spaces or special chars 11 | DIR="\"${DIR}" 12 | 13 | PATH_SEP="/" 14 | VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" 15 | UPLOAD_COMMAND="uploadDSYM\" $@ run-script" 16 | 17 | # Ensure params are as expected, run in sync mode to validate 18 | eval $DIR$PATH_SEP$VALIDATE_COMMAND 19 | return_code=$? 20 | 21 | if [[ $return_code != 0 ]]; then 22 | exit $return_code 23 | fi 24 | 25 | # Verification passed, upload dSYM in background to prevent Xcode from waiting 26 | # Note: Validation is performed again before upload. 27 | # Output can still be found in Console.app 28 | eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & 29 | -------------------------------------------------------------------------------- /Pods/Fabric/OSX/Fabric.framework/uploadDSYM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Fabric/OSX/Fabric.framework/uploadDSYM -------------------------------------------------------------------------------- /Pods/Fabric/README.md: -------------------------------------------------------------------------------- 1 | ![Fabric Header](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-header.png) 2 | 3 | # Fabric 4 | 5 | ## Overview 6 | 7 | [Fabric](https://www.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Twitter and the team that built Crashlytics, Fabric provides an easy way to manage all your SDKs so that you’ll never have to worry about tedious configurations or juggling different accounts. We let you get right into coding and building the next big app. 8 | 9 | For a full list of SDK provided through Fabric visit [https://fabric.io/kits](https://fabric.io/kits). 10 | 11 | ## Setup 12 | 13 | The Fabric Pod is a dependency for all Fabric SDKs and is included when installing any Fabric related Pods. General setup instructions are shown below; however, these vary depending on the selected SDK. 14 | 15 | 1. Visit [https://fabric.io/sign_up](https://fabric.io/sign_up) to create your Fabric account and to download Fabric.app. 16 | 17 | 1. Open Fabric.app, login and select an SDK to install. 18 | 19 | ![Fabric Plugin](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-fabric-plugin.png) 20 | 21 | 1. The Fabric app automatically detects when a project uses CocoaPods and gives you the option to install via the Podfile or Xcode. 22 | 23 | ![Fabric Installation Options](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-pod-installation-option.png) 24 | 25 | 1. Select the Podfile option and follow the installation instructions to update your Podfile. Note: the example below is for the Crashlytics SDK. The instructions will vary based on the selected SDK. 26 | 27 | ![Fabric Podfile Instructions](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-podfile-instructions.png) 28 | 29 | 1. Add a Run Script Build Phase and build your app. 30 | 31 | ![Fabric Run Script Build Phase](https://docs.fabric.io/ios/cocoapod-readmes/cocoapods-rsbp.png) 32 | 33 | 1. Initialize the SDK by inserting code outlined in Fabric.app. 34 | 35 | 1. Run your app to finish the installation. 36 | 37 | ## Resources 38 | 39 | * [Documentation](https://docs.fabric.io/) 40 | * [Forums](https://twittercommunity.com/c/fabric) 41 | * [Website](https://www.fabric.io) 42 | * Follow us on Twitter: [@fabric](https://twitter.com/fabric) 43 | * Follow us on Periscope: [Fabric](https://periscope.tv/fabric) and [TwitterDev](https://periscope.tv/twitterdev) 44 | -------------------------------------------------------------------------------- /Pods/Fabric/run: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # run 4 | # 5 | # Copyright (c) 2015 Crashlytics. All rights reserved. 6 | 7 | # Figure out where we're being called from 8 | DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd ) 9 | 10 | # Quote path in case of spaces or special chars 11 | DIR="\"${DIR}" 12 | 13 | PATH_SEP="/" 14 | VALIDATE_COMMAND="uploadDSYM\" $@ validate run-script" 15 | UPLOAD_COMMAND="uploadDSYM\" $@ run-script" 16 | 17 | # Ensure params are as expected, run in sync mode to validate 18 | eval $DIR$PATH_SEP$VALIDATE_COMMAND 19 | return_code=$? 20 | 21 | if [[ $return_code != 0 ]]; then 22 | exit $return_code 23 | fi 24 | 25 | # Verification passed, upload dSYM in background to prevent Xcode from waiting 26 | # Note: Validation is performed again before upload. 27 | # Output can still be found in Console.app 28 | eval $DIR$PATH_SEP$UPLOAD_COMMAND > /dev/null 2>&1 & 29 | -------------------------------------------------------------------------------- /Pods/Fabric/upload-symbols: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Fabric/upload-symbols -------------------------------------------------------------------------------- /Pods/Fabric/uploadDSYM: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/Pods/Fabric/uploadDSYM -------------------------------------------------------------------------------- /Pods/Manifest.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - Alamofire (3.5.0) 3 | - Crashlytics (3.8.1): 4 | - Fabric (~> 1.6.3) 5 | - Fabric (1.6.8) 6 | - Kingfisher (2.6.0) 7 | - ProgressKit (0.5.1) 8 | - ReachabilitySwift (2.3.3) 9 | - Realm (1.0.2): 10 | - Realm/Headers (= 1.0.2) 11 | - Realm/Headers (1.0.2) 12 | - RealmSwift (1.0.2): 13 | - Realm (= 1.0.2) 14 | - SwiftyJSON (2.3.2) 15 | - SWXMLHash (2.3.2) 16 | 17 | DEPENDENCIES: 18 | - Alamofire (~> 3.4) 19 | - Crashlytics 20 | - Fabric 21 | - Kingfisher (~> 2.4) 22 | - ProgressKit 23 | - ReachabilitySwift 24 | - RealmSwift 25 | - SwiftyJSON 26 | - SWXMLHash (~> 2.3.0) 27 | 28 | SPEC CHECKSUMS: 29 | Alamofire: b70a7352335f8ea5babd0a923eb7e8eacc67b877 30 | Crashlytics: 4391d8df0b125345e9f209c5db6e7f40a6a8435d 31 | Fabric: 5755268d0171435ab167e3d0878a28a777deaf10 32 | Kingfisher: d84c5fd176ea86cc7b8aac65fd55feda6f70f130 33 | ProgressKit: 67a1bb2fceefe3c3c3bafa7bb5a66bc96826a9ea 34 | ReachabilitySwift: e0f6b6f280effb47731acfaaa2d5ffe223703793 35 | Realm: 9d5c46a4d7d27958530a8dfc58f63a99e5c2cba3 36 | RealmSwift: 82f3ac5e24530143dddfde2033acc0d308f27d96 37 | SwiftyJSON: 04ccea08915aa0109039157c7974cf0298da292a 38 | SWXMLHash: 2f8c49af765718ad56020c4f875ec3ff22612f06 39 | 40 | PODFILE CHECKSUM: fda2f555afcae8af77237631726f9745f27a743a 41 | 42 | COCOAPODS: 1.0.1 43 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Stan.xcuserdatad/xcschemes/Alamofire.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Stan.xcuserdatad/xcschemes/SWXMLHash.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Stan.xcuserdatad/xcschemes/SwiftyJSON.xcscheme: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 15 | 21 | 22 | 23 | 24 | 25 | 30 | 31 | 32 | 33 | 43 | 44 | 45 | 46 | 52 | 53 | 55 | 56 | 59 | 60 | 61 | -------------------------------------------------------------------------------- /Pods/Pods.xcodeproj/xcuserdata/Stan.xcuserdatad/xcschemes/xcschememanagement.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | SchemeUserState 6 | 7 | Alamofire.xcscheme 8 | 9 | isShown 10 | 11 | 12 | Kingfisher.xcscheme 13 | 14 | isShown 15 | 16 | 17 | Pods-Lyricism.xcscheme 18 | 19 | isShown 20 | 21 | 22 | ProgressKit.xcscheme 23 | 24 | isShown 25 | 26 | 27 | ReachabilitySwift.xcscheme 28 | 29 | isShown 30 | 31 | 32 | Realm.xcscheme 33 | 34 | isShown 35 | 36 | 37 | RealmSwift.xcscheme 38 | 39 | isShown 40 | 41 | 42 | SWXMLHash.xcscheme 43 | 44 | isShown 45 | 46 | 47 | SwiftyJSON.xcscheme 48 | 49 | isShown 50 | 51 | 52 | 53 | SuppressBuildableAutocreation 54 | 55 | 2670376012DBC0600772E39515EEE626 56 | 57 | primary 58 | 59 | 60 | 26BBED24D65B4A486BF313620DA89CE3 61 | 62 | primary 63 | 64 | 65 | 309E79FE78B808CD1BE2ABFDB672EF93 66 | 67 | primary 68 | 69 | 70 | 79C040AFDDCE1BCBF6D8B5EB0B85887F 71 | 72 | primary 73 | 74 | 75 | 87C92EA4D49CF8D12A8DD3F0A7B47D54 76 | 77 | primary 78 | 79 | 80 | A31696687E1B3D8589039C5790496A1A 81 | 82 | primary 83 | 84 | 85 | BFAD45204D291E63E2750FB5878E7EF0 86 | 87 | primary 88 | 89 | 90 | E063FC654A74CD02AEA9B82CEBBF5BC6 91 | 92 | primary 93 | 94 | 95 | F1F264E16B8A05888871B33E942BB3F3 96 | 97 | primary 98 | 99 | 100 | 101 | 102 | 103 | -------------------------------------------------------------------------------- /Pods/ReachabilitySwift/LICENSE: -------------------------------------------------------------------------------- 1 | /* 2 | Copyright (c) 2014, Ashley Mills 3 | All rights reserved. 4 | 5 | Redistribution and use in source, with or without modification, is permitted provided that the following condition is met: 6 | 7 | 1. Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 11 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 12 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 13 | ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE 14 | LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 15 | CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 16 | SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 17 | INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 18 | CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 19 | ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 20 | POSSIBILITY OF SUCH DAMAGE. 21 | */ 22 | -------------------------------------------------------------------------------- /Pods/ReachabilitySwift/README.md: -------------------------------------------------------------------------------- 1 | # Reachability.swift 2 | 3 | Reachability.swift is a replacement for Apple's Reachability sample, re-written in Swift with closures. 4 | 5 | It is compatible with **iOS** (8.0 - 9.2), **OSX** (10.9 - 10.11) and **tvOS** (9.0 - 9.1) 6 | 7 | Inspired by https://github.com/tonymillion/Reachability 8 | 9 | ## Supporting **Reachability.swift** 10 | Keeping **Reachability.swift** up-to-date is a time consuming task. Making updates, reviewing pull requests, responding to issues and answering emails all take time. If you'd like to help keep me motivated, please download my free app, [Foto Flipper] from the App Store. (To really motivate me, pay $0.99 for the IAP!) 11 | 12 | And don't forget to **★** the repo. This increases its visibility and encourages others to contribute. 13 | 14 | Thanks 15 | Ash 16 | 17 | ## Installation 18 | ### Manual 19 | Just drop the **Reachability.swift** file into your project. That's it! 20 | 21 | ### CocoaPods 22 | [CocoaPods][] is a dependency manager for Cocoa projects. To install Reachability.swift with CocoaPods: 23 | 24 | 1. Make sure CocoaPods is [installed][CocoaPods Installation]. 25 | 26 | 2. Update your Podfile to include the following: 27 | 28 | ``` ruby 29 | use_frameworks! 30 | pod 'ReachabilitySwift', git: 'https://github.com/ashleymills/Reachability.swift' 31 | ``` 32 | 33 | 3. Run `pod install`. 34 | 35 | [CocoaPods]: https://cocoapods.org 36 | [CocoaPods Installation]: https://guides.cocoapods.org/using/getting-started.html#getting-started 37 | 38 | ### Carthage 39 | [Carthage][] is a decentralized dependency manager that builds your dependencies and provides you with binary frameworks. 40 | To install Reachability.swift with Carthage: 41 | 42 | 1. Install Carthage via [Homebrew][] 43 | ```bash 44 | $ brew update 45 | $ brew install carthage 46 | ``` 47 | 48 | 2. Add `github "ashleymills/Reachability.swift"` to your Cartfile. 49 | 50 | 3. Run `carthage update`. 51 | 52 | 4. Drag `Reachability.framework` from the `Carthage/Build/iOS/` directory to the `Linked Frameworks and Libraries` section of your Xcode project’s `General` settings. 53 | 54 | 5. Add `$(SRCROOT)/Carthage/Build/iOS/Reachability.framework` to `Input Files` of Run Script Phase for Carthage. 55 | 56 | [Carthage]: https://github.com/Carthage/Carthage 57 | [Homebrew]: http://brew.sh 58 | [Foto Flipper]: http://itunes.com/apps/fotoflipper 59 | 60 | ## Example - closures 61 | 62 | ```swift 63 | let reachability: Reachability 64 | do { 65 | reachability = try Reachability.reachabilityForInternetConnection() 66 | } catch { 67 | print("Unable to create Reachability") 68 | return 69 | } 70 | 71 | 72 | reachability.whenReachable = { reachability in 73 | // this is called on a background thread, but UI updates must 74 | // be on the main thread, like this: 75 | dispatch_async(dispatch_get_main_queue()) { 76 | if reachability.isReachableViaWiFi() { 77 | print("Reachable via WiFi") 78 | } else { 79 | print("Reachable via Cellular") 80 | } 81 | } 82 | } 83 | reachability.whenUnreachable = { reachability in 84 | // this is called on a background thread, but UI updates must 85 | // be on the main thread, like this: 86 | dispatch_async(dispatch_get_main_queue()) { 87 | print("Not reachable") 88 | } 89 | } 90 | 91 | do { 92 | try reachability.startNotifier() 93 | } catch { 94 | print("Unable to start notifier") 95 | } 96 | ``` 97 | 98 | and for stopping notifications 99 | 100 | ```swift 101 | reachability.stopNotifier() 102 | ``` 103 | 104 | ## Example - notifications 105 | 106 | This sample will use `NSNotification`s to notify when the interface has changed. They will be delivered on the **MAIN THREAD**, so you *can* do UI updates from within the function. 107 | 108 | ```swift 109 | let reachability: Reachability 110 | do { 111 | reachability = try Reachability.reachabilityForInternetConnection() 112 | } catch { 113 | print("Unable to create Reachability") 114 | return 115 | } 116 | 117 | NSNotificationCenter.defaultCenter().addObserver(self, 118 | selector: "reachabilityChanged:", 119 | name: ReachabilityChangedNotification, 120 | object: reachability) 121 | 122 | reachability.startNotifier() 123 | ``` 124 | 125 | and 126 | 127 | ```swift 128 | func reachabilityChanged(note: NSNotification) { 129 | 130 | let reachability = note.object as! Reachability 131 | 132 | if reachability.isReachable() { 133 | if reachability.isReachableViaWiFi() { 134 | print("Reachable via WiFi") 135 | } else { 136 | print("Reachable via Cellular") 137 | } 138 | } else { 139 | print("Not reachable") 140 | } 141 | } 142 | ``` 143 | 144 | and for stopping notifications 145 | 146 | ```swift 147 | reachability.stopNotifier() 148 | NSNotificationCenter.defaultCenter().removeObserver(self, 149 | name: ReachabilityChangedNotification, 150 | object: reachability) 151 | ``` 152 | 153 | ## Want to help? 154 | 155 | Got a bug fix, or a new feature? Create a pull request and go for it! 156 | 157 | ## Let me know! 158 | 159 | If you use **Reachability.swift**, please let me know about your app and I'll put a link [here…](https://github.com/ashleymills/Reachability.swift/wiki/Apps-using-Reachability.swift) and tell your friends! 160 | 161 | Cheers, 162 | Ash 163 | -------------------------------------------------------------------------------- /Pods/SWXMLHash/LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2014 David Mohundro 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Pods/SwiftyJSON/LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Ruoyu Fu 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Alamofire : NSObject 3 | @end 4 | @implementation PodsDummy_Alamofire 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double AlamofireVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char AlamofireVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.modulemap: -------------------------------------------------------------------------------- 1 | framework module Alamofire { 2 | umbrella header "Alamofire-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Alamofire.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/Alamofire 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Alamofire/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 3.5.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_Pods_Lyricism : NSObject 3 | @end 4 | @implementation PodsDummy_Pods_Lyricism 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism-frameworks.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 5 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 6 | 7 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}" 8 | 9 | install_framework() 10 | { 11 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then 12 | local source="${BUILT_PRODUCTS_DIR}/$1" 13 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then 14 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")" 15 | elif [ -r "$1" ]; then 16 | local source="$1" 17 | fi 18 | 19 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 20 | 21 | if [ -L "${source}" ]; then 22 | echo "Symlinked..." 23 | source="$(readlink "${source}")" 24 | fi 25 | 26 | # use filter instead of exclude so missing patterns dont' throw errors 27 | echo "rsync -av --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\"" 28 | rsync -av --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}" 29 | 30 | local basename 31 | basename="$(basename -s .framework "$1")" 32 | binary="${destination}/${basename}.framework/${basename}" 33 | if ! [ -r "$binary" ]; then 34 | binary="${destination}/${basename}" 35 | fi 36 | 37 | # Strip invalid architectures so "fat" simulator / device frameworks work on device 38 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then 39 | strip_invalid_archs "$binary" 40 | fi 41 | 42 | # Resign the code if required by the build settings to avoid unstable apps 43 | code_sign_if_enabled "${destination}/$(basename "$1")" 44 | 45 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7. 46 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then 47 | local swift_runtime_libs 48 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]}) 49 | for lib in $swift_runtime_libs; do 50 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\"" 51 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}" 52 | code_sign_if_enabled "${destination}/${lib}" 53 | done 54 | fi 55 | } 56 | 57 | # Signs a framework with the provided identity 58 | code_sign_if_enabled() { 59 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then 60 | # Use the current code_sign_identitiy 61 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}" 62 | echo "/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements \"$1\"" 63 | /usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS} --preserve-metadata=identifier,entitlements "$1" 64 | fi 65 | } 66 | 67 | # Strip invalid architectures 68 | strip_invalid_archs() { 69 | binary="$1" 70 | # Get architectures for current file 71 | archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | rev)" 72 | stripped="" 73 | for arch in $archs; do 74 | if ! [[ "${VALID_ARCHS}" == *"$arch"* ]]; then 75 | # Strip non-valid architectures in-place 76 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1 77 | stripped="$stripped $arch" 78 | fi 79 | done 80 | if [[ "$stripped" ]]; then 81 | echo "Stripped $binary of architectures:$stripped" 82 | fi 83 | } 84 | 85 | 86 | if [[ "$CONFIGURATION" == "Debug" ]]; then 87 | install_framework "$BUILT_PRODUCTS_DIR/Alamofire/Alamofire.framework" 88 | install_framework "$BUILT_PRODUCTS_DIR/Kingfisher/Kingfisher.framework" 89 | install_framework "$BUILT_PRODUCTS_DIR/ProgressKit/ProgressKit.framework" 90 | install_framework "$BUILT_PRODUCTS_DIR/ReachabilitySwift/ReachabilitySwift.framework" 91 | install_framework "$BUILT_PRODUCTS_DIR/Realm/Realm.framework" 92 | install_framework "$BUILT_PRODUCTS_DIR/RealmSwift/RealmSwift.framework" 93 | install_framework "$BUILT_PRODUCTS_DIR/SWXMLHash/SWXMLHash.framework" 94 | install_framework "$BUILT_PRODUCTS_DIR/SwiftyJSON/SwiftyJSON.framework" 95 | fi 96 | if [[ "$CONFIGURATION" == "Release" ]]; then 97 | install_framework "$BUILT_PRODUCTS_DIR/Alamofire/Alamofire.framework" 98 | install_framework "$BUILT_PRODUCTS_DIR/Kingfisher/Kingfisher.framework" 99 | install_framework "$BUILT_PRODUCTS_DIR/ProgressKit/ProgressKit.framework" 100 | install_framework "$BUILT_PRODUCTS_DIR/ReachabilitySwift/ReachabilitySwift.framework" 101 | install_framework "$BUILT_PRODUCTS_DIR/Realm/Realm.framework" 102 | install_framework "$BUILT_PRODUCTS_DIR/RealmSwift/RealmSwift.framework" 103 | install_framework "$BUILT_PRODUCTS_DIR/SWXMLHash/SWXMLHash.framework" 104 | install_framework "$BUILT_PRODUCTS_DIR/SwiftyJSON/SwiftyJSON.framework" 105 | fi 106 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism-resources.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -e 3 | 4 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 5 | 6 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt 7 | > "$RESOURCES_TO_COPY" 8 | 9 | XCASSET_FILES=() 10 | 11 | case "${TARGETED_DEVICE_FAMILY}" in 12 | 1,2) 13 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone" 14 | ;; 15 | 1) 16 | TARGET_DEVICE_ARGS="--target-device iphone" 17 | ;; 18 | 2) 19 | TARGET_DEVICE_ARGS="--target-device ipad" 20 | ;; 21 | *) 22 | TARGET_DEVICE_ARGS="--target-device mac" 23 | ;; 24 | esac 25 | 26 | realpath() { 27 | DIRECTORY="$(cd "${1%/*}" && pwd)" 28 | FILENAME="${1##*/}" 29 | echo "$DIRECTORY/$FILENAME" 30 | } 31 | 32 | install_resource() 33 | { 34 | if [[ "$1" = /* ]] ; then 35 | RESOURCE_PATH="$1" 36 | else 37 | RESOURCE_PATH="${PODS_ROOT}/$1" 38 | fi 39 | if [[ ! -e "$RESOURCE_PATH" ]] ; then 40 | cat << EOM 41 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script. 42 | EOM 43 | exit 1 44 | fi 45 | case $RESOURCE_PATH in 46 | *.storyboard) 47 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 48 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .storyboard`.storyboardc" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 49 | ;; 50 | *.xib) 51 | echo "ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile ${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib $RESOURCE_PATH --sdk ${SDKROOT} ${TARGET_DEVICE_ARGS}" 52 | ibtool --reference-external-strings-file --errors --warnings --notices --minimum-deployment-target ${!DEPLOYMENT_TARGET_SETTING_NAME} --output-format human-readable-text --compile "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename \"$RESOURCE_PATH\" .xib`.nib" "$RESOURCE_PATH" --sdk "${SDKROOT}" ${TARGET_DEVICE_ARGS} 53 | ;; 54 | *.framework) 55 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 56 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 57 | echo "rsync -av $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 58 | rsync -av "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" 59 | ;; 60 | *.xcdatamodel) 61 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" 62 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom" 63 | ;; 64 | *.xcdatamodeld) 65 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" 66 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd" 67 | ;; 68 | *.xcmappingmodel) 69 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" 70 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm" 71 | ;; 72 | *.xcassets) 73 | ABSOLUTE_XCASSET_FILE=$(realpath "$RESOURCE_PATH") 74 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE") 75 | ;; 76 | *) 77 | echo "$RESOURCE_PATH" 78 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY" 79 | ;; 80 | esac 81 | } 82 | 83 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 84 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 85 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then 86 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 87 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 88 | fi 89 | rm -f "$RESOURCES_TO_COPY" 90 | 91 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "$XCASSET_FILES" ] 92 | then 93 | # Find all other xcassets (this unfortunately includes those of path pods and other targets). 94 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d) 95 | while read line; do 96 | if [[ $line != "`realpath $PODS_ROOT`*" ]]; then 97 | XCASSET_FILES+=("$line") 98 | fi 99 | done <<<"$OTHER_XCASSETS" 100 | 101 | printf "%s\0" "${XCASSET_FILES[@]}" | xargs -0 xcrun actool --output-format human-readable-text --notices --warnings --platform "${PLATFORM_NAME}" --minimum-deployment-target "${!DEPLOYMENT_TARGET_SETTING_NAME}" ${TARGET_DEVICE_ARGS} --compress-pngs --compile "${BUILT_PRODUCTS_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}" 102 | fi 103 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double Pods_LyricismVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char Pods_LyricismVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism.debug.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher" "$PODS_CONFIGURATION_BUILD_DIR/ProgressKit" "$PODS_CONFIGURATION_BUILD_DIR/ReachabilitySwift" "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" "$PODS_CONFIGURATION_BUILD_DIR/SWXMLHash" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "${PODS_ROOT}/Crashlytics/OSX" "${PODS_ROOT}/Fabric/OSX" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 7 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher/Kingfisher.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ProgressKit/ProgressKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ReachabilitySwift/ReachabilitySwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Realm/Realm.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift/RealmSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SWXMLHash/SWXMLHash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" 8 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Alamofire" -framework "Crashlytics" -framework "Fabric" -framework "Kingfisher" -framework "ProgressKit" -framework "ReachabilitySwift" -framework "Realm" -framework "RealmSwift" -framework "SWXMLHash" -framework "Security" -framework "SwiftyJSON" -framework "SystemConfiguration" 9 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 10 | PODS_BUILD_DIR = $BUILD_DIR 11 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism.modulemap: -------------------------------------------------------------------------------- 1 | framework module Pods_Lyricism { 2 | umbrella header "Pods-Lyricism-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/Pods-Lyricism/Pods-Lyricism.release.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES 3 | FRAMEWORK_SEARCH_PATHS = $(inherited) "$PODS_CONFIGURATION_BUILD_DIR/Alamofire" "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher" "$PODS_CONFIGURATION_BUILD_DIR/ProgressKit" "$PODS_CONFIGURATION_BUILD_DIR/ReachabilitySwift" "$PODS_CONFIGURATION_BUILD_DIR/Realm" "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift" "$PODS_CONFIGURATION_BUILD_DIR/SWXMLHash" "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON" "${PODS_ROOT}/Crashlytics/OSX" "${PODS_ROOT}/Fabric/OSX" 4 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 5 | HEADER_SEARCH_PATHS = $(inherited) "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" 6 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks' 7 | OTHER_CFLAGS = $(inherited) -iquote "$PODS_CONFIGURATION_BUILD_DIR/Alamofire/Alamofire.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Kingfisher/Kingfisher.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ProgressKit/ProgressKit.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/ReachabilitySwift/ReachabilitySwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/Realm/Realm.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/RealmSwift/RealmSwift.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SWXMLHash/SWXMLHash.framework/Headers" -iquote "$PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON/SwiftyJSON.framework/Headers" -isystem "${PODS_ROOT}/Headers/Public" -isystem "${PODS_ROOT}/Headers/Public/Crashlytics" -isystem "${PODS_ROOT}/Headers/Public/Fabric" 8 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Alamofire" -framework "Crashlytics" -framework "Fabric" -framework "Kingfisher" -framework "ProgressKit" -framework "ReachabilitySwift" -framework "Realm" -framework "RealmSwift" -framework "SWXMLHash" -framework "Security" -framework "SwiftyJSON" -framework "SystemConfiguration" 9 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 10 | PODS_BUILD_DIR = $BUILD_DIR 11 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 12 | PODS_ROOT = ${SRCROOT}/Pods 13 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReachabilitySwift/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.3.3 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_ReachabilitySwift : NSObject 3 | @end 4 | @implementation PodsDummy_ReachabilitySwift 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double ReachabilitySwiftVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char ReachabilitySwiftVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.modulemap: -------------------------------------------------------------------------------- 1 | framework module ReachabilitySwift { 2 | umbrella header "ReachabilitySwift-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/ReachabilitySwift/ReachabilitySwift.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/ReachabilitySwift 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" 5 | OTHER_LDFLAGS = -framework "SystemConfiguration" 6 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 7 | PODS_BUILD_DIR = $BUILD_DIR 8 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 9 | PODS_ROOT = ${SRCROOT} 10 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 11 | SKIP_INSTALL = YES 12 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SWXMLHash/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.3.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SWXMLHash/SWXMLHash-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SWXMLHash : NSObject 3 | @end 4 | @implementation PodsDummy_SWXMLHash 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SWXMLHash/SWXMLHash-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SWXMLHash/SWXMLHash-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double SWXMLHashVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char SWXMLHashVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SWXMLHash/SWXMLHash.modulemap: -------------------------------------------------------------------------------- 1 | framework module SWXMLHash { 2 | umbrella header "SWXMLHash-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SWXMLHash/SWXMLHash.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SWXMLHash 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyJSON/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | ${PRODUCT_BUNDLE_IDENTIFIER} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | ${PRODUCT_NAME} 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 2.3.2 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | ${CURRENT_PROJECT_VERSION} 23 | NSPrincipalClass 24 | 25 | 26 | 27 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyJSON/SwiftyJSON-dummy.m: -------------------------------------------------------------------------------- 1 | #import 2 | @interface PodsDummy_SwiftyJSON : NSObject 3 | @end 4 | @implementation PodsDummy_SwiftyJSON 5 | @end 6 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyJSON/SwiftyJSON-prefix.pch: -------------------------------------------------------------------------------- 1 | #ifdef __OBJC__ 2 | #import 3 | #endif 4 | 5 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyJSON/SwiftyJSON-umbrella.h: -------------------------------------------------------------------------------- 1 | #import 2 | 3 | 4 | FOUNDATION_EXPORT double SwiftyJSONVersionNumber; 5 | FOUNDATION_EXPORT const unsigned char SwiftyJSONVersionString[]; 6 | 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyJSON/SwiftyJSON.modulemap: -------------------------------------------------------------------------------- 1 | framework module SwiftyJSON { 2 | umbrella header "SwiftyJSON-umbrella.h" 3 | 4 | export * 5 | module * { export * } 6 | } 7 | -------------------------------------------------------------------------------- /Pods/Target Support Files/SwiftyJSON/SwiftyJSON.xcconfig: -------------------------------------------------------------------------------- 1 | CODE_SIGN_IDENTITY = 2 | CONFIGURATION_BUILD_DIR = $PODS_CONFIGURATION_BUILD_DIR/SwiftyJSON 3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1 4 | HEADER_SEARCH_PATHS = "${PODS_ROOT}/Headers/Private" "${PODS_ROOT}/Headers/Public" "${PODS_ROOT}/Headers/Public/Crashlytics" "${PODS_ROOT}/Headers/Public/Fabric" 5 | OTHER_SWIFT_FLAGS = $(inherited) "-D" "COCOAPODS" 6 | PODS_BUILD_DIR = $BUILD_DIR 7 | PODS_CONFIGURATION_BUILD_DIR = $PODS_BUILD_DIR/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME) 8 | PODS_ROOT = ${SRCROOT} 9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier} 10 | SKIP_INSTALL = YES 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | #Lyricism 2 | 3 | 4 | ![Image of Lyricism](https://github.com/lyc2345/Lyricism/blob/master/Lyricism/Assets.xcassets/AppIcon.appiconset/Icon-32.0%402x.png) 5 | macOS app to show you lyric what currently iTunes or Spotify is playing. 6 | 7 | Here are some screenshots :blush: 8 | 9 | ![Image of Lyricism](https://github.com/lyc2345/Lyricism/blob/master/screenshot/Screen%20Shot%202016-07-21%20at%204.34.33%20PM.jpg) 10 | ![Image of Lyricism](https://github.com/lyc2345/Lyricism/blob/master/screenshot/Screen%20Shot%202016-09-20%20at%209.22.59%20AM.jpg) 11 | ![Image of Lyricism](https://github.com/lyc2345/Lyricism/blob/master/screenshot/Screen%20Shot%202016-09-20%20at%209.23.34%20AM.jpg) 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /Spotify.h: -------------------------------------------------------------------------------- 1 | /* 2 | * Spotify.h 3 | */ 4 | 5 | #import 6 | #import 7 | 8 | 9 | @class SpotifyApplication, SpotifyTrack, SpotifyApplication; 10 | 11 | enum SpotifyEPlS { 12 | SpotifyEPlSStopped = 'kPSS', 13 | SpotifyEPlSPlaying = 'kPSP', 14 | SpotifyEPlSPaused = 'kPSp' 15 | }; 16 | typedef enum SpotifyEPlS SpotifyEPlS; 17 | 18 | 19 | 20 | /* 21 | * Spotify Suite 22 | */ 23 | 24 | // The Spotify application. 25 | @interface SpotifyApplication : SBApplication 26 | 27 | @property (copy, readonly) SpotifyTrack *currentTrack; // The current playing track. 28 | @property NSInteger soundVolume; // The sound output volume (0 = minimum, 100 = maximum) 29 | @property (readonly) SpotifyEPlS playerState; // Is Spotify stopped, paused, or playing? 30 | @property double playerPosition; // The player’s position within the currently playing track in seconds. 31 | @property (readonly) BOOL repeatingEnabled; // Is repeating enabled in the current playback context? 32 | @property BOOL repeating; // Is repeating on or off? 33 | @property (readonly) BOOL shufflingEnabled; // Is shuffling enabled in the current playback context? 34 | @property BOOL shuffling; // Is shuffling on or off? 35 | 36 | - (void) nextTrack; // Skip to the next track. 37 | - (void) previousTrack; // Skip to the previous track. 38 | - (void) playpause; // Toggle play/pause. 39 | - (void) pause; // Pause playback. 40 | - (void) play; // Resume playback. 41 | - (void) playTrack:(NSString *)x inContext:(NSString *)inContext; // Start playback of a track in the given context. 42 | 43 | @end 44 | 45 | // A Spotify track. 46 | @interface SpotifyTrack : SBObject 47 | 48 | @property (copy, readonly) NSString *artist; // The artist of the track. 49 | @property (copy, readonly) NSString *album; // The album of the track. 50 | @property (readonly) NSInteger discNumber; // The disc number of the track. 51 | @property (readonly) NSInteger duration; // The length of the track in seconds. 52 | @property (readonly) NSInteger playedCount; // The number of times this track has been played. 53 | @property (readonly) NSInteger trackNumber; // The index of the track in its album. 54 | @property (readonly) BOOL starred; // Is the track starred? 55 | @property (readonly) NSInteger popularity; // How popular is this track? 0-100 56 | - (NSString *) id; // The ID of the item. 57 | @property (copy, readonly) NSString *name; // The name of the track. 58 | @property (copy, readonly) NSString *artworkUrl; // The URL of the track%apos;s album cover. 59 | @property (copy, readonly) NSImage *artwork; // The property is deprecated and will never be set. Use the 'artwork url' instead. 60 | @property (copy, readonly) NSString *albumArtist; // That album artist of the track. 61 | @property (copy) NSString *spotifyUrl; // The URL of the track. 62 | 63 | 64 | @end 65 | 66 | 67 | 68 | /* 69 | * Standard Suite 70 | */ 71 | 72 | // The application's top level scripting object. 73 | @interface SpotifyApplication (StandardSuite) 74 | 75 | @property (copy, readonly) NSString *name; // The name of the application. 76 | @property (readonly) BOOL frontmost; // Is this the frontmost (active) application? 77 | @property (copy, readonly) NSString *version; // The version of the application. 78 | 79 | @end 80 | 81 | -------------------------------------------------------------------------------- /Spotify.swift: -------------------------------------------------------------------------------- 1 | import AppKit 2 | import ScriptingBridge 3 | 4 | @objc public protocol SpotifyObjectProtocol: NSObjectProtocol { 5 | func get() -> AnyObject! 6 | } 7 | 8 | @objc public protocol SpotifyApplicationProtocol: SpotifyObjectProtocol { 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: SpotifyApplicationProtocol { 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: SpotifyObjectProtocol { 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 | -------------------------------------------------------------------------------- /SpotifyScripting.swift: -------------------------------------------------------------------------------- 1 | public enum SpotifyScripting: String { 2 | 3 | case Track = "track" 4 | case Application = "application" 5 | } 6 | -------------------------------------------------------------------------------- /fastlane/Appfile: -------------------------------------------------------------------------------- 1 | app_identifier "com.Stan.LyriKing" # The bundle identifier of your app 2 | apple_id "lyc2345+tw@gmail.com" # Your Apple email address 3 | 4 | team_id "29DN3FMVP9" # Developer Portal Team ID 5 | 6 | # you can even provide different app identifiers, Apple IDs and team names per lane: 7 | # More information: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Appfile.md 8 | -------------------------------------------------------------------------------- /fastlane/Deliverfile: -------------------------------------------------------------------------------- 1 | ###################### More Options ###################### 2 | # If you want to have even more control, check out the documentation 3 | # https://github.com/fastlane/fastlane/blob/master/deliver/Deliverfile.md 4 | 5 | 6 | ###################### Automatically generated ###################### 7 | # Feel free to remove the following line if you use fastlane (which you should) 8 | 9 | app_identifier "com.Stan.LyriKing" # The bundle identifier of your app 10 | username "lyc2345+tw@gmail.com" # your Apple ID user 11 | -------------------------------------------------------------------------------- /fastlane/Fastfile: -------------------------------------------------------------------------------- 1 | # Customise this file, documentation can be found here: 2 | # https://github.com/fastlane/fastlane/tree/master/fastlane/docs 3 | # All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md 4 | # can also be listed using the `fastlane actions` command 5 | 6 | # Change the syntax highlighting to Ruby 7 | # All lines starting with a # are ignored when running `fastlane` 8 | 9 | # If you want to automatically update fastlane if a new version is available: 10 | # update_fastlane 11 | 12 | # This is the minimum version number required. 13 | # Update this, if you use features of a newer version 14 | fastlane_version "1.95.0" 15 | 16 | default_platform :ios 17 | 18 | platform :ios do 19 | before_all do 20 | # ENV["SLACK_URL"] = "https://hooks.slack.com/services/..." 21 | cocoapods 22 | 23 | end 24 | 25 | desc "Runs all the tests" 26 | lane :test do 27 | scan 28 | end 29 | 30 | desc "Submit a new Beta Build to Apple TestFlight" 31 | desc "This will also make sure the profile is up to date" 32 | lane :beta do 33 | # match(type: "appstore") # more information: https://codesigning.guide 34 | gym(scheme: "macOS") # Build your app - more options available 35 | pilot 36 | 37 | # sh "your_script.sh" 38 | # You can also use other beta testing services here (run `fastlane actions`) 39 | end 40 | 41 | desc "Deploy a new version to the App Store" 42 | lane :appstore do 43 | # match(type: "appstore") 44 | # snapshot 45 | gym(scheme: "macOS") # Build your app - more options available 46 | deliver(force: true) 47 | # frameit 48 | end 49 | 50 | # You can define as many lanes as you want 51 | 52 | after_all do |lane| 53 | # This block is called, only if the executed lane was successful 54 | 55 | # slack( 56 | # message: "Successfully deployed new App Update." 57 | # ) 58 | end 59 | 60 | error do |lane, exception| 61 | # slack( 62 | # message: exception.message, 63 | # success: false 64 | # ) 65 | end 66 | end 67 | 68 | 69 | # More information about multiple platforms in fastlane: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Platforms.md 70 | # All available actions: https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Actions.md 71 | 72 | # fastlane reports which actions are used 73 | # No personal data is recorded. Learn more at https://github.com/fastlane/enhancer 74 | -------------------------------------------------------------------------------- /fastlane/README.md: -------------------------------------------------------------------------------- 1 | fastlane documentation 2 | ================ 3 | # Installation 4 | ``` 5 | sudo gem install fastlane 6 | ``` 7 | # Available Actions 8 | ## iOS 9 | ### ios test 10 | ``` 11 | fastlane ios test 12 | ``` 13 | Runs all the tests 14 | ### ios beta 15 | ``` 16 | fastlane ios beta 17 | ``` 18 | Submit a new Beta Build to Apple TestFlight 19 | 20 | This will also make sure the profile is up to date 21 | ### ios appstore 22 | ``` 23 | fastlane ios appstore 24 | ``` 25 | Deploy a new version to the App Store 26 | 27 | ---- 28 | 29 | This README.md is auto-generated and will be re-generated every time to run [fastlane](https://fastlane.tools). 30 | More information about fastlane can be found on [https://fastlane.tools](https://fastlane.tools). 31 | The documentation of fastlane can be found on [GitHub](https://github.com/fastlane/fastlane/tree/master/fastlane). -------------------------------------------------------------------------------- /fastlane/metadata/copyright.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/copyright.txt -------------------------------------------------------------------------------- /fastlane/metadata/en-US/description.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/en-US/description.txt -------------------------------------------------------------------------------- /fastlane/metadata/en-US/keywords.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/en-US/keywords.txt -------------------------------------------------------------------------------- /fastlane/metadata/en-US/marketing_url.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/en-US/marketing_url.txt -------------------------------------------------------------------------------- /fastlane/metadata/en-US/name.txt: -------------------------------------------------------------------------------- 1 | LyriKing -------------------------------------------------------------------------------- /fastlane/metadata/en-US/privacy_url.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/en-US/privacy_url.txt -------------------------------------------------------------------------------- /fastlane/metadata/en-US/release_notes.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/en-US/release_notes.txt -------------------------------------------------------------------------------- /fastlane/metadata/en-US/support_url.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/en-US/support_url.txt -------------------------------------------------------------------------------- /fastlane/metadata/primary_category.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/primary_category.txt -------------------------------------------------------------------------------- /fastlane/metadata/primary_first_sub_category.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/primary_first_sub_category.txt -------------------------------------------------------------------------------- /fastlane/metadata/primary_second_sub_category.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/primary_second_sub_category.txt -------------------------------------------------------------------------------- /fastlane/metadata/secondary_category.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/secondary_category.txt -------------------------------------------------------------------------------- /fastlane/metadata/secondary_first_sub_category.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/secondary_first_sub_category.txt -------------------------------------------------------------------------------- /fastlane/metadata/secondary_second_sub_category.txt: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/fastlane/metadata/secondary_second_sub_category.txt -------------------------------------------------------------------------------- /iTunes/iTunesScripting.swift: -------------------------------------------------------------------------------- 1 | public enum iTunesScripting: String { 2 | case PrintSettings = "print settings" 3 | case AirplayDevice = "AirPlay device" 4 | case Application = "application" 5 | case Artwork = "artwork" 6 | case AudioCdPlaylist = "audio CD playlist" 7 | case AudioCdTrack = "audio CD track" 8 | case BrowserWindow = "browser window" 9 | case Encoder = "encoder" 10 | case EqPreset = "EQ preset" 11 | case EqWindow = "EQ window" 12 | case FileTrack = "file track" 13 | case FolderPlaylist = "folder playlist" 14 | case Item = "item" 15 | case LibraryPlaylist = "library playlist" 16 | case MiniplayerWindow = "miniplayer window" 17 | case Playlist = "playlist" 18 | case PlaylistWindow = "playlist window" 19 | case RadioTunerPlaylist = "radio tuner playlist" 20 | case SharedTrack = "shared track" 21 | case Source = "source" 22 | case SubscriptionPlaylist = "subscription playlist" 23 | case Track = "track" 24 | case UrlTrack = "URL track" 25 | case UserPlaylist = "user playlist" 26 | case VideoWindow = "video window" 27 | case Visual = "visual" 28 | case Window = "window" 29 | } 30 | -------------------------------------------------------------------------------- /iTunesScripting/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | FMWK 17 | CFBundleShortVersionString 18 | 1.0 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | $(CURRENT_PROJECT_VERSION) 23 | NSHumanReadableCopyright 24 | Copyright © 2016 Stan Liu. All rights reserved. 25 | NSPrincipalClass 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /iTunesScripting/iTunesScripting.h: -------------------------------------------------------------------------------- 1 | // 2 | // iTunesScripting.h 3 | // iTunesScripting 4 | // 5 | // Created by Stan Liu on 28/06/2016. 6 | // Copyright © 2016 Stan Liu. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | //! Project version number for iTunesScripting. 12 | FOUNDATION_EXPORT double iTunesScriptingVersionNumber; 13 | 14 | //! Project version string for iTunesScripting. 15 | FOUNDATION_EXPORT const unsigned char iTunesScriptingVersionString[]; 16 | 17 | // In this header, you should import all the public headers of your framework using statements like #import 18 | 19 | 20 | -------------------------------------------------------------------------------- /podfile: -------------------------------------------------------------------------------- 1 | # Uncomment this line to define a global platform for your project 2 | # platform :ios, '8.0' 3 | # Uncomment this line if you're using Swift 4 | use_frameworks! 5 | 6 | target 'Lyricism' do 7 | 8 | pod 'Alamofire', '~> 3.4' 9 | pod 'SwiftyJSON' 10 | pod 'SWXMLHash', '~> 2.3.0' 11 | pod 'ReachabilitySwift' 12 | 13 | pod 'RealmSwift' 14 | pod 'Kingfisher', '~> 2.4' 15 | pod 'ProgressKit' 16 | 17 | # Fabric 18 | pod 'Fabric' 19 | pod 'Crashlytics' 20 | #pod 'Optimizely-iOS-SDK' 21 | #pod 'Appsee' 22 | 23 | 24 | end 25 | 26 | -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-07-21 at 4.34.33 PM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-07-21 at 4.34.33 PM.jpg -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-07-21 at 4.35.50 PM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-07-21 at 4.35.50 PM.jpg -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-07-21 at 4.36.23 PM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-07-21 at 4.36.23 PM.jpg -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-07-21 at 4.36.44 PM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-07-21 at 4.36.44 PM.jpg -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-09-20 at 9.22.59 AM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-09-20 at 9.22.59 AM.jpg -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-09-20 at 9.23.34 AM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-09-20 at 9.23.34 AM.jpg -------------------------------------------------------------------------------- /screenshot/Screen Shot 2016-09-20 at 9.30.00 AM.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lyc2345/Lyricism/cb3f17d7ba5d701af151dd4bb25afe2442f3b92b/screenshot/Screen Shot 2016-09-20 at 9.30.00 AM.jpg --------------------------------------------------------------------------------