├── .gitignore
├── Credits.md
├── Funky.xcodeproj
├── project.pbxproj
└── project.xcworkspace
│ └── contents.xcworkspacedata
├── Funky.xcworkspace
├── contents.xcworkspacedata
└── xcshareddata
│ └── IDEWorkspaceChecks.plist
├── Funky
├── Assets.xcassets
│ ├── AppIcon.appiconset
│ │ ├── Contents.json
│ │ ├── Funky-128x128.png
│ │ ├── Funky-128x128@2x.png
│ │ ├── Funky-16x16.png
│ │ ├── Funky-16x16@2x.png
│ │ ├── Funky-256x256.png
│ │ ├── Funky-256x256@2x.png
│ │ ├── Funky-32x32.png
│ │ ├── Funky-32x32@2x.png
│ │ ├── Funky-512x512.png
│ │ └── Funky-512x512@2x.png
│ ├── Contents.json
│ ├── FunkyStatusActiveTemplate.imageset
│ │ ├── Contents.json
│ │ ├── FunkyStatusActiveTemplate.png
│ │ └── FunkyStatusActiveTemplate@2x.png
│ └── FunkyStatusTemplate.imageset
│ │ ├── Contents.json
│ │ ├── FunkyStatusTemplate.png
│ │ └── FunkyStatusTemplate@2x.png
├── Base.lproj
│ └── MainMenu.xib
├── FKAppDelegate.h
├── FKAppDelegate.m
├── FKBinaryIcon.icns
├── FKBundle.h
├── FKBundle.m
├── FKBundleTableCellView.h
├── FKBundleTableCellView.m
├── FKExecutablePathWindowController.h
├── FKExecutablePathWindowController.m
├── FKExecutablePathWindowController.xib
├── FKHelper.h
├── FKHelper.m
├── FKPreferencesAdvancedViewController.h
├── FKPreferencesAdvancedViewController.m
├── FKPreferencesAdvancedViewController.xib
├── FKPreferencesAppsViewController.h
├── FKPreferencesAppsViewController.m
├── FKPreferencesAppsViewController.xib
├── FKPreferencesGeneralViewController.h
├── FKPreferencesGeneralViewController.m
├── FKPreferencesGeneralViewController.xib
├── FKPreferencesWindowController.h
├── FKPreferencesWindowController.m
├── FKPreferencesWindowController.xib
├── Funky.entitlements
├── Info.plist
├── RVNReceiptValidation.h
├── RVNReceiptValidation.m
└── main.m
├── FunkyHelper
├── AppDelegate.h
├── AppDelegate.m
├── FunkyHelper.entitlements
├── Info.plist
├── Main.xib
└── main.m
├── FunkyTests
├── FunkyTests.m
└── Info.plist
├── LICENSE
├── Podfile
├── Podfile.lock
├── Pods
├── 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
├── Local Podspecs
│ └── ShortcutRecorder.podspec.json
├── Manifest.lock
├── Pods.xcodeproj
│ └── project.pbxproj
├── ShortcutRecorder
│ ├── LICENSE.md
│ ├── Library
│ │ ├── Prefix.pch
│ │ ├── SRCommon.h
│ │ ├── SRCommon.m
│ │ ├── SRKeyCodeTransformer.h
│ │ ├── SRKeyCodeTransformer.m
│ │ ├── SRKeyEquivalentModifierMaskTransformer.h
│ │ ├── SRKeyEquivalentModifierMaskTransformer.m
│ │ ├── SRKeyEquivalentTransformer.h
│ │ ├── SRKeyEquivalentTransformer.m
│ │ ├── SRModifierFlagsTransformer.h
│ │ ├── SRModifierFlagsTransformer.m
│ │ ├── SRRecorderControl.h
│ │ ├── SRRecorderControl.m
│ │ ├── SRValidator.h
│ │ ├── SRValidator.m
│ │ └── ShortcutRecorder.h
│ ├── PTHotKey
│ │ ├── PTHotKey+ShortcutRecorder.h
│ │ ├── PTHotKey+ShortcutRecorder.m
│ │ ├── PTHotKey.h
│ │ ├── PTHotKey.m
│ │ ├── PTHotKeyCenter.h
│ │ ├── PTHotKeyCenter.m
│ │ ├── PTKeyCodeTranslator.h
│ │ ├── PTKeyCodeTranslator.m
│ │ ├── PTKeyCombo.h
│ │ └── PTKeyCombo.m
│ ├── README.md
│ └── Resources
│ │ ├── ca.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── cs.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── de.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── el.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── en.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── es-MX.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── es.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── fr.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── it.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── ja.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── ko.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── nb.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── nl.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── pl.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── pt-BR.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── pt.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── ro.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── ru.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── shortcut-recorder-bezel-blue-highlighted-left.png
│ │ ├── shortcut-recorder-bezel-blue-highlighted-left@2x.png
│ │ ├── shortcut-recorder-bezel-blue-highlighted-middle.png
│ │ ├── shortcut-recorder-bezel-blue-highlighted-middle@2x.png
│ │ ├── shortcut-recorder-bezel-blue-highlighted-right.png
│ │ ├── shortcut-recorder-bezel-blue-highlighted-right@2x.png
│ │ ├── shortcut-recorder-bezel-disabled-left.png
│ │ ├── shortcut-recorder-bezel-disabled-left@2x.png
│ │ ├── shortcut-recorder-bezel-disabled-middle.png
│ │ ├── shortcut-recorder-bezel-disabled-middle@2x.png
│ │ ├── shortcut-recorder-bezel-disabled-right.png
│ │ ├── shortcut-recorder-bezel-disabled-right@2x.png
│ │ ├── shortcut-recorder-bezel-editing-disabled-left.png
│ │ ├── shortcut-recorder-bezel-editing-disabled-left@2x.png
│ │ ├── shortcut-recorder-bezel-editing-disabled-middle.png
│ │ ├── shortcut-recorder-bezel-editing-disabled-middle@2x.png
│ │ ├── shortcut-recorder-bezel-editing-disabled-right.png
│ │ ├── shortcut-recorder-bezel-editing-disabled-right@2x.png
│ │ ├── shortcut-recorder-bezel-editing-left.png
│ │ ├── shortcut-recorder-bezel-editing-left@2x.png
│ │ ├── shortcut-recorder-bezel-editing-middle.png
│ │ ├── shortcut-recorder-bezel-editing-middle@2x.png
│ │ ├── shortcut-recorder-bezel-editing-right.png
│ │ ├── shortcut-recorder-bezel-editing-right@2x.png
│ │ ├── shortcut-recorder-bezel-graphite-highlighted-left.png
│ │ ├── shortcut-recorder-bezel-graphite-highlighted-left@2x.png
│ │ ├── shortcut-recorder-bezel-graphite-highlighted-middle.png
│ │ ├── shortcut-recorder-bezel-graphite-highlighted-middle@2x.png
│ │ ├── shortcut-recorder-bezel-graphite-highlighted-right.png
│ │ ├── shortcut-recorder-bezel-graphite-highlighted-right@2x.png
│ │ ├── shortcut-recorder-bezel-left.png
│ │ ├── shortcut-recorder-bezel-left@2x.png
│ │ ├── shortcut-recorder-bezel-middle.png
│ │ ├── shortcut-recorder-bezel-middle@2x.png
│ │ ├── shortcut-recorder-bezel-right.png
│ │ ├── shortcut-recorder-bezel-right@2x.png
│ │ ├── shortcut-recorder-clear-highlighted.png
│ │ ├── shortcut-recorder-clear-highlighted@2x.png
│ │ ├── shortcut-recorder-clear.png
│ │ ├── shortcut-recorder-clear@2x.png
│ │ ├── shortcut-recorder-snapback-highlighted.png
│ │ ├── shortcut-recorder-snapback-highlighted@2x.png
│ │ ├── shortcut-recorder-snapback.png
│ │ ├── shortcut-recorder-snapback@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-blue-highlighted-left.png
│ │ ├── shortcut-recorder-yosemite-bezel-blue-highlighted-left@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-blue-highlighted-middle.png
│ │ ├── shortcut-recorder-yosemite-bezel-blue-highlighted-middle@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-blue-highlighted-right.png
│ │ ├── shortcut-recorder-yosemite-bezel-blue-highlighted-right@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-disabled-left.png
│ │ ├── shortcut-recorder-yosemite-bezel-disabled-left@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-disabled-middle.png
│ │ ├── shortcut-recorder-yosemite-bezel-disabled-middle@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-disabled-right.png
│ │ ├── shortcut-recorder-yosemite-bezel-disabled-right@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-disabled-left.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-disabled-left@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-disabled-middle.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-disabled-middle@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-disabled-right.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-disabled-right@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-left.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-left@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-middle.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-middle@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-right.png
│ │ ├── shortcut-recorder-yosemite-bezel-editing-right@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-graphite-highlighted-left.png
│ │ ├── shortcut-recorder-yosemite-bezel-graphite-highlighted-left@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-graphite-highlighted-middle.png
│ │ ├── shortcut-recorder-yosemite-bezel-graphite-highlighted-middle@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-graphite-highlighted-right.png
│ │ ├── shortcut-recorder-yosemite-bezel-graphite-highlighted-right@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-left.png
│ │ ├── shortcut-recorder-yosemite-bezel-left@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-middle.png
│ │ ├── shortcut-recorder-yosemite-bezel-middle@2x.png
│ │ ├── shortcut-recorder-yosemite-bezel-right.png
│ │ ├── shortcut-recorder-yosemite-bezel-right@2x.png
│ │ ├── shortcut-recorder-yosemite-clear-highlighted.png
│ │ ├── shortcut-recorder-yosemite-clear-highlighted@2x.png
│ │ ├── shortcut-recorder-yosemite-clear.png
│ │ ├── shortcut-recorder-yosemite-clear@2x.png
│ │ ├── shortcut-recorder-yosemite-snapback-highlighted.png
│ │ ├── shortcut-recorder-yosemite-snapback-highlighted@2x.png
│ │ ├── shortcut-recorder-yosemite-snapback.png
│ │ ├── shortcut-recorder-yosemite-snapback@2x.png
│ │ ├── sk.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── sv.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── th.lproj
│ │ └── ShortcutRecorder.strings
│ │ ├── zh-Hans.lproj
│ │ └── ShortcutRecorder.strings
│ │ └── zh-Hant.lproj
│ │ └── ShortcutRecorder.strings
└── Target Support Files
│ ├── Pods-Funky
│ ├── Info.plist
│ ├── Pods-Funky-acknowledgements.markdown
│ ├── Pods-Funky-acknowledgements.plist
│ ├── Pods-Funky-dummy.m
│ ├── Pods-Funky-frameworks.sh
│ ├── Pods-Funky-resources.sh
│ ├── Pods-Funky-umbrella.h
│ ├── Pods-Funky.debug.xcconfig
│ ├── Pods-Funky.modulemap
│ └── Pods-Funky.release.xcconfig
│ └── ShortcutRecorder
│ ├── Info.plist
│ ├── ResourceBundle-ShortcutRecorder-Info.plist
│ ├── ShortcutRecorder-dummy.m
│ ├── ShortcutRecorder-prefix.pch
│ ├── ShortcutRecorder-umbrella.h
│ ├── ShortcutRecorder.modulemap
│ └── ShortcutRecorder.xcconfig
├── Privacy.md
└── Readme.md
/.gitignore:
--------------------------------------------------------------------------------
1 | # Xcode
2 | #
3 | # gitignore contributors: remember to update Global/Xcode.gitignore, Objective-C.gitignore & Swift.gitignore
4 |
5 | ## Build generated
6 | build/
7 | DerivedData/
8 |
9 | ## Various settings
10 | *.pbxuser
11 | !default.pbxuser
12 | *.mode1v3
13 | !default.mode1v3
14 | *.mode2v3
15 | !default.mode2v3
16 | *.perspectivev3
17 | !default.perspectivev3
18 | xcuserdata/
19 |
20 | ## Other
21 | *.moved-aside
22 | *.xcuserstate
23 |
24 | ## Obj-C/Swift specific
25 | *.hmap
26 | *.ipa
27 | *.dSYM.zip
28 | *.dSYM
29 |
30 | # CocoaPods
31 | #
32 | # We recommend against adding the Pods directory to your .gitignore. However
33 | # you should judge for yourself, the pros and cons are mentioned at:
34 | # https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control
35 | #
36 | # Pods/
37 |
38 | # Carthage
39 | #
40 | # Add this line if you want to avoid checking in source code from Carthage dependencies.
41 | # Carthage/Checkouts
42 |
43 | Carthage/Build
44 |
45 | # fastlane
46 | #
47 | # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the
48 | # screenshots whenever they are needed.
49 | # For more information about the recommended setup visit:
50 | # https://github.com/fastlane/fastlane/blob/master/fastlane/docs/Gitignore.md
51 |
52 | fastlane/report.xml
53 | fastlane/screenshots
54 |
55 | #Code Injection
56 | #
57 | # After new code Injection tools there's a generated folder /iOSInjectionProject
58 | # https://github.com/johnno1962/injectionforxcode
59 |
60 | iOSInjectionProject/
61 |
--------------------------------------------------------------------------------
/Credits.md:
--------------------------------------------------------------------------------
1 | # Credits
2 |
3 | Funky uses the following open-source third-party libraries
4 |
5 |
6 | ## ShortcutRecorder
7 |
8 | - **Source:** [https://github.com/JanX2/ShortcutRecorder/](https://github.com/JanX2/ShortcutRecorder/)
9 | - **License**: [https://github.com/JanX2/ShortcutRecorder/blob/master/LICENSE.md](https://github.com/JanX2/ShortcutRecorder/blob/master/LICENSE.md)
10 |
--------------------------------------------------------------------------------
/Funky.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Funky.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Funky.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "size" : "16x16",
5 | "idiom" : "mac",
6 | "filename" : "Funky-16x16.png",
7 | "scale" : "1x"
8 | },
9 | {
10 | "size" : "16x16",
11 | "idiom" : "mac",
12 | "filename" : "Funky-16x16@2x.png",
13 | "scale" : "2x"
14 | },
15 | {
16 | "size" : "32x32",
17 | "idiom" : "mac",
18 | "filename" : "Funky-32x32.png",
19 | "scale" : "1x"
20 | },
21 | {
22 | "size" : "32x32",
23 | "idiom" : "mac",
24 | "filename" : "Funky-32x32@2x.png",
25 | "scale" : "2x"
26 | },
27 | {
28 | "size" : "128x128",
29 | "idiom" : "mac",
30 | "filename" : "Funky-128x128.png",
31 | "scale" : "1x"
32 | },
33 | {
34 | "size" : "128x128",
35 | "idiom" : "mac",
36 | "filename" : "Funky-128x128@2x.png",
37 | "scale" : "2x"
38 | },
39 | {
40 | "size" : "256x256",
41 | "idiom" : "mac",
42 | "filename" : "Funky-256x256.png",
43 | "scale" : "1x"
44 | },
45 | {
46 | "size" : "256x256",
47 | "idiom" : "mac",
48 | "filename" : "Funky-256x256@2x.png",
49 | "scale" : "2x"
50 | },
51 | {
52 | "size" : "512x512",
53 | "idiom" : "mac",
54 | "filename" : "Funky-512x512.png",
55 | "scale" : "1x"
56 | },
57 | {
58 | "size" : "512x512",
59 | "idiom" : "mac",
60 | "filename" : "Funky-512x512@2x.png",
61 | "scale" : "2x"
62 | }
63 | ],
64 | "info" : {
65 | "version" : 1,
66 | "author" : "xcode"
67 | }
68 | }
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-128x128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-128x128.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-128x128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-128x128@2x.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-16x16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-16x16.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-16x16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-16x16@2x.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-256x256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-256x256.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-256x256@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-256x256@2x.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-32x32.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-32x32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-32x32@2x.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-512x512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-512x512.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/AppIcon.appiconset/Funky-512x512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/AppIcon.appiconset/Funky-512x512@2x.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/FunkyStatusActiveTemplate.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunkyStatusActiveTemplate.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunkyStatusActiveTemplate@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/FunkyStatusActiveTemplate.imageset/FunkyStatusActiveTemplate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/FunkyStatusActiveTemplate.imageset/FunkyStatusActiveTemplate.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/FunkyStatusActiveTemplate.imageset/FunkyStatusActiveTemplate@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/FunkyStatusActiveTemplate.imageset/FunkyStatusActiveTemplate@2x.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/FunkyStatusTemplate.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "universal",
5 | "filename" : "FunkyStatusTemplate.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "universal",
10 | "filename" : "FunkyStatusTemplate@2x.png",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "universal",
15 | "scale" : "3x"
16 | }
17 | ],
18 | "info" : {
19 | "version" : 1,
20 | "author" : "xcode"
21 | }
22 | }
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/FunkyStatusTemplate.imageset/FunkyStatusTemplate.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/FunkyStatusTemplate.imageset/FunkyStatusTemplate.png
--------------------------------------------------------------------------------
/Funky/Assets.xcassets/FunkyStatusTemplate.imageset/FunkyStatusTemplate@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/Assets.xcassets/FunkyStatusTemplate.imageset/FunkyStatusTemplate@2x.png
--------------------------------------------------------------------------------
/Funky/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
50 |
51 |
52 |
--------------------------------------------------------------------------------
/Funky/FKAppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKAppDelegate.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 01/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #define FKBundlesKeyPath @"FKBundles"
12 | #define FKToggleAppShortcutKeyPath @"FKToggleAppShortcut"
13 | #define FKToggleAppShortcutKeyIdentifier @"FKToggleAppHotKey"
14 | #define FKLaunchOnLoginKeyPath @"FKLaunchOnLogin"
15 |
16 | @class FKPreferencesWindowController, FKBundle;
17 |
18 | @interface FKAppDelegate : NSObject
19 |
20 | @property (strong) FKPreferencesWindowController *preferencesWindowController;
21 | @property (strong) NSStatusItem *statusItem;
22 | @property (assign) BOOL launchOnLogin;
23 |
24 | @property (strong) IBOutlet NSMenuItem *toggleCurrentAppMenuItem;
25 |
26 | @end
27 |
28 |
--------------------------------------------------------------------------------
/Funky/FKBinaryIcon.icns:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Funky/FKBinaryIcon.icns
--------------------------------------------------------------------------------
/Funky/FKBundle.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKBundle.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 20/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #define FKBundleNameKey @"name"
12 | #define FKBundlePathKey @"path"
13 | #define FKBundleExecutablePathKey @"executablePath"
14 | #define FKBundleIdentifierKey @"identifier"
15 | #define FKBundleImageKey @"image"
16 |
17 | @interface FKBundle : NSObject
18 |
19 | @property (nonatomic, strong) NSString *name;
20 | @property (nonatomic, strong) NSString *path;
21 | @property (nonatomic, strong) NSString *identifier;
22 | @property (nonatomic, strong) NSString *executablePath;
23 | @property (nonatomic, strong) NSImage *image;
24 |
25 | @property (nonatomic, readonly) BOOL available;
26 |
27 | + (instancetype __autoreleasing)bundleWithURL:(NSURL *)URL;
28 | + (instancetype __autoreleasing)bundleWithExecutableURL:(NSURL *)URL;
29 |
30 | - (instancetype)initWithURL:(NSURL *)URL;
31 | - (instancetype)initWithExecutableURL:(NSURL *)URL;
32 |
33 | @end
34 |
--------------------------------------------------------------------------------
/Funky/FKBundle.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKBundle.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 20/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "FKBundle.h"
12 |
13 | @implementation FKBundle
14 |
15 | + (instancetype)bundleWithURL:(NSURL *)URL {
16 | return [[FKBundle alloc] initWithURL:URL];
17 | }
18 |
19 | + (instancetype)bundleWithExecutableURL:(NSURL *)URL {
20 | return [[FKBundle alloc] initWithExecutableURL:URL];
21 | }
22 |
23 | - (instancetype)initWithExecutableURL:(NSURL *)URL {
24 | NSURL *expectedBundleURL = URL.URLByDeletingLastPathComponent.URLByDeletingLastPathComponent.URLByDeletingLastPathComponent;
25 | self = [self initWithURL:expectedBundleURL];
26 | if ( [self.executablePath isEqualToString:URL.path] ) {
27 | return self;
28 | }
29 |
30 | self = [super init];
31 | if ( self != nil ) {
32 | self.name = URL.lastPathComponent;
33 | self.path = URL.path;
34 | self.executablePath = URL.path;
35 | self.image = [[NSImage alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"FKBinaryIcon" withExtension:@"icns"]];
36 | }
37 | return self;
38 | }
39 |
40 | - (instancetype)initWithURL:(NSURL *)URL {
41 | self = [super init];
42 | if ( self != nil ) {
43 | NSBundle *bundle = [NSBundle bundleWithURL:URL];
44 | self.identifier = [bundle.bundleIdentifier copy];
45 | self.name = [bundle objectForInfoDictionaryKey:(__bridge NSString *)kCFBundleNameKey];
46 | self.path = [bundle.bundlePath copy];
47 | self.executablePath = [bundle.executablePath copy];
48 | self.image = [[NSWorkspace sharedWorkspace] iconForFile:bundle.bundlePath] ? : [NSImage imageNamed:NSImageNameApplicationIcon];
49 | }
50 | return self;
51 | }
52 |
53 | - (instancetype)initWithCoder:(NSCoder *)decoder {
54 | self = [super init];
55 | if ( self != nil ) {
56 | self.name = [decoder decodeObjectForKey:FKBundleNameKey];
57 | self.path = [decoder decodeObjectForKey:FKBundlePathKey];
58 | self.identifier = [decoder decodeObjectForKey:FKBundleIdentifierKey];
59 |
60 | self.executablePath = [decoder decodeObjectForKey:FKBundleExecutablePathKey];
61 | if ( self.executablePath.length == 0 ) {
62 | self.executablePath = [NSBundle bundleWithPath:self.path].executablePath;
63 | }
64 |
65 | if ( [self.path isEqualToString:self.executablePath] ) {
66 | self.image = [[NSImage alloc] initWithContentsOfURL:[[NSBundle mainBundle] URLForResource:@"FKBinaryIcon" withExtension:@"icns"]];
67 | } else {
68 | self.image = [[NSWorkspace sharedWorkspace] iconForFile:self.path] ? : [NSImage imageNamed:NSImageNameApplicationIcon];
69 | }
70 |
71 | }
72 | return self;
73 | }
74 |
75 | - (void)encodeWithCoder:(NSCoder *)coder {
76 | [coder encodeObject:self.name forKey:FKBundleNameKey];
77 | [coder encodeObject:self.path forKey:FKBundlePathKey];
78 | [coder encodeObject:self.identifier forKey:FKBundleIdentifierKey];
79 | [coder encodeObject:self.executablePath forKey:FKBundleExecutablePathKey];
80 | }
81 |
82 | - (NSString *)description {
83 | return [NSString stringWithFormat:@"%@ %@", super.description, self.name];
84 | }
85 |
86 | - (BOOL)isEqual:(id)object {
87 | return [self isEqualTo:object];
88 | }
89 |
90 | - (BOOL)isEqualTo:(id)object {
91 | if ( ![object isKindOfClass:[self class]] ) {
92 | return NO;
93 | }
94 | return [self.identifier isEqualToString:((FKBundle *) object).identifier];
95 | }
96 |
97 | @end
98 |
--------------------------------------------------------------------------------
/Funky/FKBundleTableCellView.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKBundleTableCellView.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 22/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface FKBundleTableCellView : NSTableCellView
12 |
13 | @property (weak) IBOutlet NSTextField *titleLabel;
14 | @property (weak) IBOutlet NSTextField *pathLabel;
15 | @property (weak) IBOutlet NSImageView *thumbnailImageView;
16 |
17 | @end
18 |
--------------------------------------------------------------------------------
/Funky/FKBundleTableCellView.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKBundleTableCellView.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 22/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import "FKBundleTableCellView.h"
10 |
11 | @implementation FKBundleTableCellView
12 |
13 | - (void)setBackgroundStyle:(NSBackgroundStyle)backgroundStyle {
14 | [super setBackgroundStyle:backgroundStyle];
15 | self.titleLabel.textColor = (backgroundStyle == NSBackgroundStyleLight ? [NSColor labelColor] : [NSColor selectedTextColor]);
16 | }
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/Funky/FKExecutablePathWindowController.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKExecutablePathWindowController.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 17/05/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface FKExecutablePathWindowController : NSWindowController
12 |
13 | @property (nonatomic, strong) NSString * selectedPath;
14 |
15 | - (IBAction)confirmPath:(id)sender;
16 | - (IBAction)cancel:(id)sender;
17 |
18 | @end
19 |
--------------------------------------------------------------------------------
/Funky/FKExecutablePathWindowController.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKExecutablePathWindowController.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 17/05/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import "FKExecutablePathWindowController.h"
10 |
11 | @interface FKExecutablePathWindowController ()
12 |
13 | @end
14 |
15 | @implementation FKExecutablePathWindowController
16 |
17 |
18 | - (IBAction)confirmPath:(id)sender {
19 | [NSApp endSheet:self.window returnCode:NSOKButton];
20 | [self close];
21 | }
22 |
23 | - (IBAction)cancel:(id)sender {
24 | [NSApp endSheet:self.window returnCode:NSCancelButton];
25 | [self close];
26 | }
27 |
28 |
29 | @end
30 |
--------------------------------------------------------------------------------
/Funky/FKHelper.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKHelper.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 02/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #define FKHelperErrorDomain @"FKHelperErrorDomain"
12 | #define FKHelperMachErrorDomain @"FKHelperMachErrorDomain"
13 |
14 | #define FKHelperMachErrorNoClass 101
15 | #define FKHelperMachErrorNoServices 102
16 |
17 | @interface FKHelper : NSObject
18 |
19 | + (instancetype)sharedHelper;
20 |
21 | - (BOOL)setFnKeyState:(BOOL)state error:(NSError * __autoreleasing *)error;
22 | - (pid_t)parentProcessForPID:(NSUInteger)pid error:(NSError * __autoreleasing *)error;
23 |
24 | @end
25 |
--------------------------------------------------------------------------------
/Funky/FKHelper.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKHelper.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 02/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 | #import
11 |
12 | #import "FKHelper.h"
13 |
14 | @interface FKHelper ()
15 |
16 | - (NSError *)machErrorWithResult:(kern_return_t)res;
17 | - (NSError *)posixError;
18 |
19 | @end
20 |
21 | @implementation FKHelper
22 |
23 | + (instancetype)sharedHelper {
24 | static FKHelper *sharedHelper;
25 | static dispatch_once_t onceToken;
26 | dispatch_once(&onceToken, ^{
27 | sharedHelper = [[FKHelper alloc] init];
28 | });
29 | return sharedHelper;
30 | }
31 |
32 | - (NSError *)machErrorWithResult:(kern_return_t)res {
33 | NSString *description = [NSString stringWithUTF8String:mach_error_string(res)] ? : [NSString stringWithFormat:@"Unknown kernel result code: %d", res];
34 | NSError *error = [NSError errorWithDomain:FKHelperMachErrorDomain code:@(res).integerValue userInfo:@{NSLocalizedDescriptionKey: description}];
35 | return error;
36 | }
37 |
38 | - (NSError *)posixError {
39 | int errorNo = errno;
40 | NSString *description = [NSString stringWithUTF8String:strerror(errorNo)];
41 | NSError *error = [NSError errorWithDomain:NSPOSIXErrorDomain code:@(errorNo).integerValue userInfo:@{NSLocalizedDescriptionKey: description}];
42 | return error;
43 | }
44 |
45 | - (BOOL)setFnKeyState:(BOOL)state error:(NSError *__autoreleasing *)error {
46 |
47 | kern_return_t ret;
48 | mach_port_t port;
49 |
50 | ret = IOMasterPort(bootstrap_port, &port);
51 | if ( ret != KERN_SUCCESS ) {
52 | if ( error != NULL ) {
53 | *error = [self machErrorWithResult:ret];
54 | }
55 | return NO;
56 | }
57 |
58 | CFDictionaryRef class = IOServiceMatching(kIOHIDSystemClass);
59 | if ( class == NULL ) {
60 | if ( error != NULL ) {
61 | *error = [NSError errorWithDomain:FKHelperMachErrorDomain code:FKHelperMachErrorNoClass userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"No matching IO Class: %s", kIOHIDSystemClass]}];
62 | }
63 | return NO;
64 | }
65 |
66 | io_iterator_t iterator;
67 | ret = IOServiceGetMatchingServices(port, class, &iterator);
68 | if ( ret != KERN_SUCCESS ) {
69 | if ( error != NULL ) {
70 | *error = [self machErrorWithResult:ret];
71 | }
72 | return NO;
73 | }
74 |
75 | io_service_t service = IOIteratorNext(iterator);
76 | IOObjectRelease(iterator);
77 |
78 | if ( !service ){
79 | if ( error != NULL ) {
80 | *error = [NSError errorWithDomain:FKHelperMachErrorDomain code:FKHelperMachErrorNoServices userInfo:@{NSLocalizedDescriptionKey: [NSString stringWithFormat:@"No matching services for class %s", kIOHIDSystemClass]}];
81 | }
82 | return NO;
83 | }
84 |
85 | io_connect_t connect;
86 | ret = IOServiceOpen(service, mach_task_self(), kIOHIDParamConnectType, &connect);
87 | if ( ret != KERN_SUCCESS ) {
88 | if ( error != NULL ) {
89 | *error = [self machErrorWithResult:ret];
90 | }
91 | return NO;
92 | }
93 |
94 | unsigned int val = state;
95 | ret = IOHIDSetParameter(connect, CFSTR(kIOHIDFKeyModeKey), &val, sizeof(val));
96 | if ( ret != KERN_SUCCESS ) {
97 | if ( error != NULL ) {
98 | *error = [self machErrorWithResult:ret];
99 | }
100 | IOServiceClose(connect);
101 | return NO;
102 | }
103 |
104 | IOServiceClose(connect);
105 | return YES;
106 | }
107 |
108 | - (pid_t)parentProcessForPID:(NSUInteger)pid error:(NSError * __autoreleasing *)error {
109 | struct kinfo_proc info;
110 | size_t length = sizeof(struct kinfo_proc);
111 | int mib[4] = { CTL_KERN, KERN_PROC, KERN_PROC_PID, @(pid).intValue };
112 |
113 | kern_return_t ret;
114 | ret = sysctl(mib, 4, &info, &length, NULL, 0);
115 |
116 | if ( ret != KERN_SUCCESS) {
117 | if ( error != NULL ) {
118 | *error = [self posixError];
119 | }
120 | return INT32_MAX;
121 | }
122 |
123 | if ( length == 0 ) {
124 | if ( error != NULL ) {
125 | *error = nil;
126 | }
127 | return INT32_MAX;
128 | }
129 |
130 | return info.kp_eproc.e_ppid;
131 | }
132 |
133 | @end
134 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesAdvancedViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesAdvancedViewController.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 07/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface FKPreferencesAdvancedViewController : NSViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesAdvancedViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesAdvancedViewController.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 07/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import "FKPreferencesAdvancedViewController.h"
10 |
11 | @interface FKPreferencesAdvancedViewController ()
12 |
13 | @end
14 |
15 | @implementation FKPreferencesAdvancedViewController
16 |
17 | - (void)awakeFromNib {
18 |
19 | }
20 |
21 | - (void)viewDidLoad {
22 | [super viewDidLoad];
23 |
24 | }
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesAdvancedViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesAppsViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesAppsViewController.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 05/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface FKPreferencesAppsViewController : NSViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesGeneralViewController.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesGeneralViewController.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 05/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface FKPreferencesGeneralViewController : NSViewController
12 |
13 | @end
14 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesGeneralViewController.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesGeneralViewController.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 05/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | #import "FKPreferencesGeneralViewController.h"
12 | #import "FKAppDelegate.h"
13 |
14 | @interface FKPreferencesGeneralViewController ()
15 |
16 | @property (nonatomic, weak) IBOutlet SRRecorderControl *toggleAppShortcut;
17 |
18 | @end
19 |
20 | @implementation FKPreferencesGeneralViewController
21 |
22 | - (void)awakeFromNib {
23 | [super awakeFromNib];
24 |
25 | [self.toggleAppShortcut bind:NSValueBinding toObject:[NSUserDefaults standardUserDefaults] withKeyPath:FKToggleAppShortcutKeyPath options:nil];
26 | }
27 |
28 | - (void)dealloc {
29 | [self.toggleAppShortcut unbind:NSValueBinding];
30 | }
31 |
32 | @end
33 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesGeneralViewController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesWindowController.h:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesWindowController.h
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 3/5/17.
6 | // Copyright (c) 2017 Cătălin Stan. All rights reserved.
7 |
8 | #import
9 |
10 | @interface FKPreferencesWindowController : NSWindowController
11 |
12 | - (instancetype)initWithWindowNibName:(NSString *)windowNibName currentViewIdx:(NSUInteger)idx;
13 |
14 | @end
15 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesWindowController.m:
--------------------------------------------------------------------------------
1 | //
2 | // FKPreferencesWindowController.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 3/5/17.
6 | // Copyright (c) 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import "FKPreferencesWindowController.h"
10 | #import "FKAppDelegate.h"
11 |
12 | @interface FKPreferencesWindowController () {
13 | BOOL shouldRecalculateWindowY;
14 | NSUInteger currentViewIdx;
15 | }
16 |
17 | @property (weak) IBOutlet NSToolbar *toolbar;
18 |
19 | @property (strong) NSViewController *currentViewController;
20 | @property (strong) NSButton *quitButton;
21 |
22 | @property (readonly) CGFloat toolbarHeight;
23 | @property (readonly) CGFloat titleHeight;
24 |
25 | - (IBAction)loadView:(id)sender;
26 |
27 | + (NSDictionary *)toolbarItems;
28 |
29 | @end
30 |
31 | @implementation FKPreferencesWindowController
32 |
33 | - (instancetype)initWithWindowNibName:(NSString *)windowNibName currentViewIdx:(NSUInteger)idx {
34 | self = [self initWithWindowNibName:windowNibName];
35 | if ( self != nil ) {
36 | currentViewIdx = MAX(MIN([FKPreferencesWindowController toolbarItems].count, idx), 0);
37 | }
38 | return self;
39 | }
40 |
41 | - (CGFloat)toolbarHeight {
42 | static CGFloat toolbarHeight;
43 | static dispatch_once_t onceToken;
44 | dispatch_once(&onceToken, ^{
45 | toolbarHeight = self.window.frame.size.height - [self titleHeight] - self.window.contentView.frame.size.height;
46 | });
47 | return toolbarHeight;
48 | }
49 |
50 | - (CGFloat)titleHeight {
51 | static CGFloat titleHeight;
52 | static dispatch_once_t onceToken;
53 | dispatch_once(&onceToken, ^{
54 | NSRect frame = NSMakeRect (0, 0, 100, 100);
55 | NSRect contentRect = [NSWindow contentRectForFrameRect: frame styleMask: NSTitledWindowMask];
56 | titleHeight = frame.size.height - contentRect.size.height;
57 | });
58 | return titleHeight;
59 | }
60 |
61 | + (NSDictionary *)toolbarItems {
62 | static NSDictionary *toolbarItems;
63 | static dispatch_once_t onceToken;
64 | dispatch_once(&onceToken, ^{
65 | toolbarItems = @{
66 | @"General": [NSImage imageNamed:NSImageNamePreferencesGeneral],
67 | @"Apps": [NSImage imageNamed:NSImageNameApplicationIcon],
68 | // @"Advanced": [NSImage imageNamed:NSImageNameAdvanced]
69 | };
70 | });
71 | return toolbarItems;
72 | }
73 |
74 | - (void)awakeFromNib {
75 | self.quitButton = [[NSButton alloc] initWithFrame:NSZeroRect];
76 | self.quitButton.title = @"Quit";
77 | self.quitButton.target = NSApp;
78 | self.quitButton.action = @selector(terminate:);
79 | self.quitButton.keyEquivalent = @"q";
80 | self.quitButton.keyEquivalentModifierMask = NSCommandKeyMask;
81 | [self.window.contentView addSubview:self.quitButton];
82 |
83 | [self.window standardWindowButton:NSWindowCloseButton].keyEquivalent = @"w";
84 | [self.window standardWindowButton:NSWindowCloseButton].keyEquivalentModifierMask = NSCommandKeyMask;
85 |
86 | self.toolbar.selectedItemIdentifier = self.toolbar.items[currentViewIdx].itemIdentifier;
87 | [self loadView:self.toolbar.items[currentViewIdx]];
88 | }
89 |
90 | - (void)windowWillClose:(NSNotification *)notification {
91 | FKAppDelegate *delegate = (FKAppDelegate *) NSApp.delegate;
92 | delegate.preferencesWindowController = nil;
93 | }
94 |
95 | - (instancetype)initWithWindowNibName:(NSString *)windowNibName {
96 | self = [super initWithWindowNibName:windowNibName];
97 | if ( self ) {
98 | }
99 | return self;
100 | }
101 |
102 | - (IBAction)loadView:(id)sender {
103 | NSToolbarItem *item = (NSToolbarItem*) sender;
104 | NSString *viewControllerClassName = [NSString stringWithFormat:@"FKPreferences%@ViewController", item.label];
105 | Class viewControllerClass = NSClassFromString(viewControllerClassName);
106 |
107 | if ( viewControllerClass == nil ) {
108 | NSLog(@"Unable to load class: %@", viewControllerClassName);
109 | return;
110 | }
111 |
112 | if ( [self.currentViewController isKindOfClass:viewControllerClass] ) {
113 | return;
114 | }
115 |
116 | NSString *title = self.window.title;
117 |
118 | self.window.title = [NSString stringWithFormat: @"Loading %@ ...", ((NSToolbarItem*) sender).label];
119 | [self.window setViewsNeedDisplay:YES];
120 |
121 | if ( self.currentViewController != nil) {
122 | [self.currentViewController.view removeFromSuperview];
123 | self.currentViewController = nil;
124 | }
125 |
126 | NSRect windowFrame = self.window.frame;
127 |
128 | self.currentViewController = [[viewControllerClass alloc] initWithNibName:nil bundle:nil];
129 | NSRect newViewFrame = self.currentViewController.view.frame;
130 | newViewFrame.size.width = windowFrame.size.width;
131 | newViewFrame.origin.y = 0;
132 |
133 | windowFrame.size.height = self.titleHeight + self.toolbarHeight + self.currentViewController.view.frame.size.height;
134 | if ( shouldRecalculateWindowY ) {
135 | windowFrame.origin.y -= windowFrame.size.height - self.window.frame.size.height;
136 | }
137 | shouldRecalculateWindowY = YES;
138 |
139 | [self.window setFrame:windowFrame display:YES animate:YES];
140 | [self.window.contentView addSubview:self.currentViewController.view];
141 | [self.currentViewController.view setFrame:newViewFrame];
142 |
143 | [self.window layoutIfNeeded];
144 | self.window.title = title;
145 | [self.window setViewsNeedDisplay:YES];
146 | }
147 |
148 | #pragma mark - NSToolbarDelegate
149 |
150 | - (NSToolbarItem *)toolbar:(NSToolbar *)toolbar itemForItemIdentifier:(NSString *)itemIdentifier willBeInsertedIntoToolbar:(BOOL)flag {
151 |
152 | NSString *itemClassName = [NSString stringWithFormat:@"FKPreferences%@ViewController", itemIdentifier];
153 | Class itemClass = NSClassFromString(itemClassName);
154 | if ( !itemClass ) {
155 | NSLog(@" * Unable to find %@. Skipping %@ toolbar item.", itemClassName, itemIdentifier);
156 | return nil;
157 | }
158 |
159 | NSToolbarItem *item = [[NSToolbarItem alloc] initWithItemIdentifier:itemIdentifier];
160 | item.label = NSLocalizedString(itemIdentifier,);
161 | item.image = [FKPreferencesWindowController toolbarItems][itemIdentifier];
162 | item.autovalidates = YES;
163 |
164 | if ( flag ) {
165 | item.action = @selector(loadView:);
166 | }
167 |
168 | return item;
169 | }
170 |
171 | - (NSArray *)toolbarSelectableItemIdentifiers:(NSToolbar *)toolbar {
172 | return [FKPreferencesWindowController toolbarItems].allKeys;
173 | }
174 |
175 | - (NSArray *)toolbarAllowedItemIdentifiers:(NSToolbar *)toolbar {
176 | return [FKPreferencesWindowController toolbarItems].allKeys;
177 | }
178 |
179 | - (NSArray *)toolbarDefaultItemIdentifiers:(NSToolbar *)toolbar {
180 | return [FKPreferencesWindowController toolbarItems].allKeys;
181 | }
182 |
183 |
184 | @end
185 |
--------------------------------------------------------------------------------
/Funky/FKPreferencesWindowController.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
--------------------------------------------------------------------------------
/Funky/Funky.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.developer.icloud-container-identifiers
6 |
7 | com.apple.developer.ubiquity-kvstore-identifier
8 | $(TeamIdentifierPrefix)$(CFBundleIdentifier)
9 | com.apple.security.app-sandbox
10 |
11 | com.apple.security.files.user-selected.read-only
12 |
13 | com.apple.security.network.client
14 |
15 | com.apple.security.temporary-exception.sbpl
16 |
17 | (allow iokit-set-properties (iokit-property "HIDFKeyMode"))
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/Funky/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0.1
21 | CFBundleVersion
22 | 6
23 | Fabric
24 |
25 | APIKey
26 | 41b2b87be52ab143a0c7a2fe9c4d179d3799509a
27 | Kits
28 |
29 |
30 | KitInfo
31 |
32 | KitName
33 | Crashlytics
34 |
35 |
36 |
37 | LSApplicationCategoryType
38 | public.app-category.productivity
39 | LSMinimumSystemVersion
40 | $(MACOSX_DEPLOYMENT_TARGET)
41 | LSUIElement
42 |
43 | NSHumanReadableCopyright
44 | Copyright © 2017 Cătălin Stan. All rights reserved.
45 | NSMainNibFile
46 | MainMenu
47 | NSPrincipalClass
48 | NSApplication
49 |
50 |
51 |
--------------------------------------------------------------------------------
/Funky/RVNReceiptValidation.h:
--------------------------------------------------------------------------------
1 | //
2 | // RVNReceiptValidation.h
3 | //
4 | // Created by Satoshi Numata on 12/06/30.
5 | // Copyright (c) 2012 Sazameki and Satoshi Numata, Ph.D. All rights reserved.
6 | //
7 | // This sample shows how to write the Mac App Store receipt validation code.
8 | // Replace kRVNBundleID and kRVNBundleVersion with your own ones.
9 | //
10 | // This sample is provided because the coding sample found in "Validating Mac App Store Receipts"
11 | // is somehow out-of-date today and some functions are deprecated in Mac OS X 10.7.
12 | // (cf. Validating Mac App Store Receipts: )
13 | //
14 | // You must want to make it much more robustness with some techniques, such as obfuscation
15 | // with your "own" way. If you use and share the same codes with your friends, attackers
16 | // will be able to make a special tool to patch application binaries so easily.
17 | // Again, this sample gives you the very basic idea that which APIs can be used for the validation.
18 | //
19 | // Don't forget to add IOKit.framework and Security.framework to your project.
20 | // The main() function should be replaced with the (commented out) main() code at the bottom of this sample.
21 | // This sample assume that you are using Automatic Reference Counting for memory management.
22 | //
23 | // Have a nice Cocoa flavor, guys!!
24 | //
25 | #import
26 |
27 | #import
28 | #import
29 | #import
30 | #import
31 | #import
32 |
33 | #import
34 |
35 | void RVNValidate(void);
--------------------------------------------------------------------------------
/Funky/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // Funky
4 | //
5 | // Created by Cătălin Stan on 01/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "RVNReceiptValidation.h"
11 |
12 | // Set this to 1 to skip Mac AppStore receipt validation
13 | #ifndef DEVELOPMENT
14 | # define DEVELOPMENT 0
15 | #endif
16 |
17 | int main(int argc, const char * argv[]) {
18 | @try {
19 | #if !DEBUG && !DEVELOPMENT
20 | RVNValidate();
21 | #endif
22 | return NSApplicationMain(argc, argv);
23 | } @catch (NSException *e) {
24 | NSLog(@"%@", e.reason);
25 | return EXIT_FAILURE;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/FunkyHelper/AppDelegate.h:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.h
3 | // FunkyHelper
4 | //
5 | // Created by Cătălin Stan on 17/05/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface AppDelegate : NSObject
12 |
13 |
14 | @end
15 |
16 |
--------------------------------------------------------------------------------
/FunkyHelper/AppDelegate.m:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.m
3 | // FunkyHelper
4 | //
5 | // Created by Cătălin Stan on 17/05/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import "AppDelegate.h"
10 |
11 | #define FKMainAppName @"Funky"
12 |
13 | @interface AppDelegate ()
14 |
15 | @end
16 |
17 | @implementation AppDelegate
18 |
19 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
20 |
21 | NSString* mainBundleIdentifier = [NSBundle mainBundle].bundleIdentifier.stringByDeletingPathExtension;
22 | NSArray *runningApps = [[NSWorkspace sharedWorkspace] runningApplications];
23 |
24 | #if DEBUG
25 | NSLog(@"Running apps:%@", [runningApps valueForKeyPath:@"bundleIdentifier"]);
26 | #endif
27 |
28 | __block BOOL alreadyRunning = NO;
29 | [runningApps enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(NSRunningApplication * _Nonnull app, NSUInteger idx, BOOL * _Nonnull stop) {
30 | if ([app.bundleIdentifier isEqualToString:mainBundleIdentifier]) {
31 | alreadyRunning = YES;
32 | *stop = YES;
33 | }
34 | }];
35 |
36 |
37 | NSLog(@"%@ is running ... %@", mainBundleIdentifier, alreadyRunning ? @"YES" : @"NO");
38 |
39 | if (!alreadyRunning) {
40 | NSMutableArray *pathComponents = [NSMutableArray arrayWithArray:[NSBundle mainBundle].bundlePath.pathComponents];
41 | [pathComponents removeLastObject];
42 | [pathComponents removeLastObject];
43 | [pathComponents removeLastObject];
44 | [pathComponents addObject:@"MacOS"];
45 | [pathComponents addObject:FKMainAppName];
46 | NSString *executablePath = [NSString pathWithComponents:pathComponents];
47 |
48 | BOOL isDir = NO;
49 | BOOL exists = [[NSFileManager defaultManager] fileExistsAtPath:executablePath isDirectory:&isDir];
50 |
51 | NSLog(@"Attempting to launch: %@", executablePath);
52 |
53 | if ( !exists ) {
54 | NSLog(@"File does not exist.");
55 | } else if ( isDir ) {
56 | NSLog(@"File exists but is a directory");
57 | } else {
58 | [[NSWorkspace sharedWorkspace] launchApplication:executablePath];
59 | }
60 | }
61 |
62 | NSLog(@"Exiting");
63 | [NSApp terminate:nil];
64 |
65 | }
66 |
67 | @end
68 |
--------------------------------------------------------------------------------
/FunkyHelper/FunkyHelper.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/FunkyHelper/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0.0
21 | CFBundleVersion
22 | 1
23 | LSApplicationCategoryType
24 | public.app-category.productivity
25 | LSBackgroundOnly
26 |
27 | LSMinimumSystemVersion
28 | $(MACOSX_DEPLOYMENT_TARGET)
29 | NSHumanReadableCopyright
30 | Copyright © 2017 Cătălin Stan. All rights reserved.
31 | NSMainNibFile
32 | Main
33 | NSPrincipalClass
34 | NSApplication
35 |
36 |
37 |
--------------------------------------------------------------------------------
/FunkyHelper/Main.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
--------------------------------------------------------------------------------
/FunkyHelper/main.m:
--------------------------------------------------------------------------------
1 | //
2 | // main.m
3 | // FunkyHelper
4 | //
5 | // Created by Cătălin Stan on 17/05/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | int main(int argc, const char * argv[]) {
12 | return NSApplicationMain(argc, argv);
13 | }
14 |
--------------------------------------------------------------------------------
/FunkyTests/FunkyTests.m:
--------------------------------------------------------------------------------
1 | //
2 | // FunkyTests.m
3 | // FunkyTests
4 | //
5 | // Created by Cătălin Stan on 01/03/2017.
6 | // Copyright © 2017 Cătălin Stan. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface FunkyTests : XCTestCase
12 |
13 | @end
14 |
15 | @implementation FunkyTests
16 |
17 | - (void)setUp {
18 | [super setUp];
19 | // Put setup code here. This method is called before the invocation of each test method in the class.
20 | }
21 |
22 | - (void)tearDown {
23 | // Put teardown code here. This method is called after the invocation of each test method in the class.
24 | [super tearDown];
25 | }
26 |
27 | - (void)testExample {
28 | // This is an example of a functional test case.
29 | // Use XCTAssert and related functions to verify your tests produce the correct results.
30 | }
31 |
32 | - (void)testPerformanceExample {
33 | // This is an example of a performance test case.
34 | [self measureBlock:^{
35 | // Put the code you want to measure the time of here.
36 | }];
37 | }
38 |
39 | @end
40 |
--------------------------------------------------------------------------------
/FunkyTests/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 | BNDL
17 | CFBundleShortVersionString
18 | 1.0
19 | CFBundleVersion
20 | 1
21 |
22 |
23 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | Copyright (c) 2017–2018 Cătălin Stan (https://catalinstan.com/)
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 |
--------------------------------------------------------------------------------
/Podfile:
--------------------------------------------------------------------------------
1 | platform :osx, '10.8'
2 | use_frameworks!
3 |
4 | target 'Funky' do
5 | pod 'Crashlytics', '~> 3.12.0'
6 | pod 'Fabric', '~> 1.9.0'
7 | pod 'ShortcutRecorder', :git => 'https://github.com/Kentzo/ShortcutRecorder', :branch => 'master'
8 | end
9 |
10 |
--------------------------------------------------------------------------------
/Podfile.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Crashlytics (3.12.0):
3 | - Fabric (~> 1.9.0)
4 | - Fabric (1.9.0)
5 | - ShortcutRecorder (2.17):
6 | - ShortcutRecorder/Core (= 2.17)
7 | - ShortcutRecorder/PTHotKey (= 2.17)
8 | - ShortcutRecorder/Core (2.17)
9 | - ShortcutRecorder/PTHotKey (2.17):
10 | - ShortcutRecorder/Core
11 |
12 | DEPENDENCIES:
13 | - Crashlytics (~> 3.12.0)
14 | - Fabric (~> 1.9.0)
15 | - ShortcutRecorder (from `https://github.com/Kentzo/ShortcutRecorder`, branch `master`)
16 |
17 | SPEC REPOS:
18 | https://github.com/cocoapods/specs.git:
19 | - Crashlytics
20 | - Fabric
21 |
22 | EXTERNAL SOURCES:
23 | ShortcutRecorder:
24 | :branch: master
25 | :git: https://github.com/Kentzo/ShortcutRecorder
26 |
27 | CHECKOUT OPTIONS:
28 | ShortcutRecorder:
29 | :commit: c978ce9bb482c31acfabe23baa2b075808a1fdd8
30 | :git: https://github.com/Kentzo/ShortcutRecorder
31 |
32 | SPEC CHECKSUMS:
33 | Crashlytics: 07fb167b1694128c1c9a5a5cc319b0e9c3ca0933
34 | Fabric: f988e33c97f08930a413e08123064d2e5f68d655
35 | ShortcutRecorder: c0e1ae0e97917925feab04e8817d2be6ef1b0548
36 |
37 | PODFILE CHECKSUM: 84bf582a2f5e83a99e035bfde35f42af6b80449b
38 |
39 | COCOAPODS: 1.5.3
40 |
--------------------------------------------------------------------------------
/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/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/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, readonly, nullable) 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 occurred.
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 | 17G65
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.12.0
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 136
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 10O35n
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 18B50b
37 | DTSDKName
38 | macosx10.14
39 | DTXcode
40 | 1010
41 | DTXcodeBuild
42 | 10O35n
43 | NSHumanReadableCopyright
44 | Copyright © 2016 Crashlytics, Inc. All rights reserved.
45 | UIDeviceFamily
46 |
47 | 1
48 | 2
49 | 3
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/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/Crashlytics/OSX/Crashlytics.framework/submit
--------------------------------------------------------------------------------
/Pods/Crashlytics/OSX/Crashlytics.framework/uploadDSYM:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/Crashlytics/OSX/Crashlytics.framework/uploadDSYM
--------------------------------------------------------------------------------
/Pods/Crashlytics/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | Part of [Google Fabric](https://get.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 | 
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 | 
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 | 
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/apple/crashlytics/overview.html)
37 | * [Forums](https://stackoverflow.com/questions/tagged/google-fabric)
38 | * [Website](http://try.crashlytics.com/)
39 | * Follow us on Twitter: [@fabric](https://twitter.com/fabric) and [@crashlytics](https://twitter.com/crashlytics)
40 |
--------------------------------------------------------------------------------
/Pods/Crashlytics/submit:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/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/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/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 | 17G65
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.9.0
21 | CFBundleSignature
22 | ????
23 | CFBundleSupportedPlatforms
24 |
25 | MacOSX
26 |
27 | CFBundleVersion
28 | 74
29 | DTCompiler
30 | com.apple.compilers.llvm.clang.1_0
31 | DTPlatformBuild
32 | 10O35n
33 | DTPlatformVersion
34 | GM
35 | DTSDKBuild
36 | 18B50b
37 | DTSDKName
38 | macosx10.14
39 | DTXcode
40 | 1010
41 | DTXcodeBuild
42 | 10O35n
43 | NSHumanReadableCopyright
44 | Copyright © 2015 Twitter. All rights reserved.
45 | UIDeviceFamily
46 |
47 | 1
48 | 2
49 | 3
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/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/Fabric/OSX/Fabric.framework/uploadDSYM
--------------------------------------------------------------------------------
/Pods/Fabric/README.md:
--------------------------------------------------------------------------------
1 | 
2 |
3 | # Fabric
4 |
5 | ## Overview
6 |
7 | [Fabric](https://get.fabric.io) provides developers with the tools they need to build the best apps. Developed and maintained by Google 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 | 
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 | 
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 | 
28 |
29 | 1. Add a Run Script Build Phase and build your app.
30 |
31 | 
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://stackoverflow.com/questions/tagged/google-fabric)
41 | * [Website](https://get.fabric.io)
42 | * Follow us on Twitter: [@fabric](https://twitter.com/fabric)
43 |
--------------------------------------------------------------------------------
/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/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/Fabric/upload-symbols
--------------------------------------------------------------------------------
/Pods/Fabric/uploadDSYM:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/Fabric/uploadDSYM
--------------------------------------------------------------------------------
/Pods/Local Podspecs/ShortcutRecorder.podspec.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ShortcutRecorder",
3 | "homepage": "https://github.com/Kentzo/ShortcutRecorder",
4 | "summary": "The only user interface control to record shortcuts. For Mac OS X 10.6+, 64bit",
5 | "version": "2.17",
6 | "source": {
7 | "git": "git://github.com/Kentzo/ShortcutRecorder.git",
8 | "branch": "master"
9 | },
10 | "authors": {
11 | "Ilya Kulakov": "kulakov.ilya@gmail.com"
12 | },
13 | "frameworks": [
14 | "Carbon",
15 | "Cocoa"
16 | ],
17 | "platforms": {
18 | "osx": "10.6"
19 | },
20 | "subspecs": [
21 | {
22 | "name": "Core",
23 | "source_files": "Library/*.{h,m}",
24 | "resource_bundles": {
25 | "ShortcutRecorder": [
26 | "Resources/*.lproj",
27 | "Resources/*.png"
28 | ]
29 | },
30 | "requires_arc": true,
31 | "prefix_header_file": "Library/Prefix.pch"
32 | },
33 | {
34 | "name": "PTHotKey",
35 | "source_files": "PTHotKey/*.{h,m}",
36 | "requires_arc": false,
37 | "dependencies": {
38 | "ShortcutRecorder/Core": [
39 |
40 | ]
41 | }
42 | }
43 | ]
44 | }
45 |
--------------------------------------------------------------------------------
/Pods/Manifest.lock:
--------------------------------------------------------------------------------
1 | PODS:
2 | - Crashlytics (3.12.0):
3 | - Fabric (~> 1.9.0)
4 | - Fabric (1.9.0)
5 | - ShortcutRecorder (2.17):
6 | - ShortcutRecorder/Core (= 2.17)
7 | - ShortcutRecorder/PTHotKey (= 2.17)
8 | - ShortcutRecorder/Core (2.17)
9 | - ShortcutRecorder/PTHotKey (2.17):
10 | - ShortcutRecorder/Core
11 |
12 | DEPENDENCIES:
13 | - Crashlytics (~> 3.12.0)
14 | - Fabric (~> 1.9.0)
15 | - ShortcutRecorder (from `https://github.com/Kentzo/ShortcutRecorder`, branch `master`)
16 |
17 | SPEC REPOS:
18 | https://github.com/cocoapods/specs.git:
19 | - Crashlytics
20 | - Fabric
21 |
22 | EXTERNAL SOURCES:
23 | ShortcutRecorder:
24 | :branch: master
25 | :git: https://github.com/Kentzo/ShortcutRecorder
26 |
27 | CHECKOUT OPTIONS:
28 | ShortcutRecorder:
29 | :commit: c978ce9bb482c31acfabe23baa2b075808a1fdd8
30 | :git: https://github.com/Kentzo/ShortcutRecorder
31 |
32 | SPEC CHECKSUMS:
33 | Crashlytics: 07fb167b1694128c1c9a5a5cc319b0e9c3ca0933
34 | Fabric: f988e33c97f08930a413e08123064d2e5f68d655
35 | ShortcutRecorder: c0e1ae0e97917925feab04e8817d2be6ef1b0548
36 |
37 | PODFILE CHECKSUM: 84bf582a2f5e83a99e035bfde35f42af6b80449b
38 |
39 | COCOAPODS: 1.5.3
40 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/LICENSE.md:
--------------------------------------------------------------------------------
1 | # ShortcutRecorder
2 |
3 | Copyright (c) 2006, Contributors
4 | All rights reserved.
5 |
6 | Redistribution and use in source and binary forms, with or without
7 | modification, are permitted provided that the following conditions are met:
8 | * Redistributions of source code must retain the above copyright
9 | notice, this list of conditions and the following disclaimer.
10 | * Redistributions in binary form must reproduce the above copyright
11 | notice, this list of conditions and the following disclaimer in the
12 | documentation and/or other materials provided with the distribution.
13 | * Neither the name of the organization nor the
14 | names of its contributors may be used to endorse or promote products
15 | derived from this software without specific prior written permission.
16 |
17 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
18 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20 | DISCLAIMED. IN NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY
21 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 |
28 | # PTHotKey
29 |
30 | Copyright (c) 2003 Quentin D. Carnicelli.
31 | All rights reserved.
32 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/Prefix.pch:
--------------------------------------------------------------------------------
1 | //
2 | // Prefix header for all source files of the 'ShortcutRecorder' target in the 'ShortcutRecorder' project
3 | //
4 |
5 | #ifdef __OBJC__
6 | #import
7 | #import
8 | #endif
9 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRCommon.h:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Library/SRCommon.h
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRCommon.m:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Library/SRCommon.m
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRKeyCodeTransformer.h:
--------------------------------------------------------------------------------
1 | //
2 | // SRKeyCodeTransformer.h
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2006-2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors:
10 | // David Dauer
11 | // Jesper
12 | // Jamie Kirkpatrick
13 | // Ilya Kulakov
14 | // Silvio Rizzi
15 |
16 | #import
17 | #import
18 |
19 |
20 | /*!
21 | Transforms key code into unicode character or plain string.
22 | */
23 | @interface SRKeyCodeTransformer : NSValueTransformer
24 |
25 | /*!
26 | Returns initialized key code transformer.
27 |
28 | @param aUsesASCII Determines whether transformer uses only ASCII capable keyboard input source.
29 |
30 | @param aUsesPlainStrings Determines whether key codes without readable glyphs (e.g. F1...F19) are transformed to
31 | to unicode characters (NSF1FunctionKey...NSF19FunctionKey) suitable for setting key equivalents
32 | of Cocoa controls or to plain strings (@"F1"...@"F19") suitable for drawing, logging and accessibility.
33 |
34 | @discussion This method is the designated initializer for SRKeyCodeTransformer.
35 | */
36 | - (instancetype)initWithASCIICapableKeyboardInputSource:(BOOL)aUsesASCII plainStrings:(BOOL)aUsesPlainStrings NS_DESIGNATED_INITIALIZER;
37 |
38 | /*!
39 | Determines whether transformer uses ASCII capable keyboard input source.
40 | */
41 | @property (readonly) BOOL usesASCIICapableKeyboardInputSource;
42 |
43 | /*!
44 | Determines whether key codes without readable glyphs are transformed to unicode characters
45 | suitable for setting keqEquivalents or to plain strings suitable for drawing, logging and accessibility.
46 | */
47 | @property (readonly) BOOL usesPlainStrings;
48 |
49 | /*!
50 | Returns the shared transformer.
51 | */
52 | + (instancetype)sharedTransformer;
53 |
54 | /*!
55 | Returns the shared transformer configured to use only ASCII capable keyboard input source.
56 | */
57 | + (instancetype)sharedASCIITransformer;
58 |
59 | /*!
60 | Returns the shared transformer configured to transform key codes to plain strings.
61 | */
62 | + (SRKeyCodeTransformer *)sharedPlainTransformer;
63 |
64 | /*!
65 | Returns the shared transformer configured to use only ASCII capable keyboard input source
66 | and to transform key codes to plain strings.
67 | */
68 | + (SRKeyCodeTransformer *)sharedPlainASCIITransformer;
69 |
70 |
71 | /*!
72 | Returns mapping from special key codes to unicode characters.
73 | */
74 | + (NSDictionary *)specialKeyCodesToUnicodeCharactersMapping;
75 |
76 | /*!
77 | Returns mapping from special key codes to plain strings.
78 | */
79 | + (NSDictionary *)specialKeyCodesToPlainStringsMapping;
80 |
81 | /*!
82 | Determines whether key code is special.
83 |
84 | @param aKeyCode Key code to be checked.
85 | */
86 | - (BOOL)isKeyCodeSpecial:(unsigned short)aKeyCode;
87 |
88 | /*!
89 | Transforms given special key code into unicode character by taking into account modifier flags.
90 |
91 | @discussion E.g. the key code 0x30 is transformed to ⇥. But if shift is pressed, it is transformed to ⇤.
92 |
93 | @result Unicode character or plain string. nil if not a special key code.
94 | */
95 | - (NSString *)transformedSpecialKeyCode:(NSNumber *)aKeyCode withExplicitModifierFlags:(NSNumber *)aModifierFlags;
96 |
97 | /*!
98 | Shorcut to [self transformedValue:aValue withImplicitModifierFlags:aModifierFlags explicitModifierFlags:0]
99 | */
100 | - (NSString *)transformedValue:(NSNumber *)aValue withModifierFlags:(NSNumber *)aModifierFlags;
101 |
102 | /*!
103 | Transfroms given key code into unicode character by taking into account modifier flags.
104 |
105 | @param aValue An instance of NSNumber (unsigned short) that represents key code.
106 |
107 | @param anImplicitModifierFlags An instance of NSNumber (NSEventModifierFlags) that represents implicit modifier flags like opt in å.
108 |
109 | @param anExplicitModifierFlags An instance of NSNumber (NSEventModifierFlags) that represents explicit modifier flags like shift in shift-⇤.
110 | */
111 | - (NSString *)transformedValue:(NSNumber *)aValue withImplicitModifierFlags:(NSNumber *)anImplicitModifierFlags explicitModifierFlags:(NSNumber *)anExplicitModifierFlags;
112 |
113 | @end
114 |
115 |
116 | /*!
117 | These constants represents drawable unicode characters for key codes that do not have
118 | appropriate constants in Carbon and Cocoa.
119 | */
120 | typedef NS_ENUM(unichar, SRKeyCodeGlyph)
121 | {
122 | SRKeyCodeGlyphTabRight = 0x21E5, // ⇥
123 | SRKeyCodeGlyphTabLeft = 0x21E4, // ⇤
124 | SRKeyCodeGlyphReturn = 0x2305, // ⌅
125 | SRKeyCodeGlyphReturnR2L = 0x21A9, // ↩
126 | SRKeyCodeGlyphDeleteLeft = 0x232B, // ⌫
127 | SRKeyCodeGlyphDeleteRight = 0x2326, // ⌦
128 | SRKeyCodeGlyphPadClear = 0x2327, // ⌧
129 | SRKeyCodeGlyphLeftArrow = 0x2190, // ←
130 | SRKeyCodeGlyphRightArrow = 0x2192, // →
131 | SRKeyCodeGlyphUpArrow = 0x2191, // ↑
132 | SRKeyCodeGlyphDownArrow = 0x2193, // ↓
133 | SRKeyCodeGlyphPageDown = 0x21DF, // ⇟
134 | SRKeyCodeGlyphPageUp = 0x21DE, // ⇞
135 | SRKeyCodeGlyphNorthwestArrow = 0x2196, // ↖
136 | SRKeyCodeGlyphSoutheastArrow = 0x2198, // ↘
137 | SRKeyCodeGlyphEscape = 0x238B, // ⎋
138 | SRKeyCodeGlyphSpace = 0x0020, // ' '
139 | };
140 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRKeyEquivalentModifierMaskTransformer.h:
--------------------------------------------------------------------------------
1 | //
2 | // SRKeyEquivalentModifierMaskTransformer.h
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors to this file:
10 | // Ilya Kulakov
11 |
12 | #import
13 |
14 |
15 | /*!
16 | Transform dictionary representation of shortcut into string suitable
17 | for -setKeyEquivalentModifierMask: of NSButton and NSMenuItem.
18 | */
19 | @interface SRKeyEquivalentModifierMaskTransformer : NSValueTransformer
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRKeyEquivalentModifierMaskTransformer.m:
--------------------------------------------------------------------------------
1 | //
2 | // SRKeyEquivalentModifierMaskTransformer.m
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors:
10 | // Ilya Kulakov
11 |
12 | #import "SRKeyEquivalentModifierMaskTransformer.h"
13 | #import "SRKeyCodeTransformer.h"
14 | #import "SRRecorderControl.h"
15 |
16 |
17 | @implementation SRKeyEquivalentModifierMaskTransformer
18 |
19 | #pragma mark NSValueTransformer
20 |
21 | + (BOOL)allowsReverseTransformation
22 | {
23 | return NO;
24 | }
25 |
26 | + (Class)transformedValueClass
27 | {
28 | return [NSNumber class];
29 | }
30 |
31 | - (NSNumber *)transformedValue:(NSDictionary *)aValue
32 | {
33 | if (![aValue isKindOfClass:[NSDictionary class]])
34 | return @(0);
35 |
36 | NSNumber *modifierFlags = aValue[SRShortcutModifierFlagsKey];
37 |
38 | if (![modifierFlags isKindOfClass:[NSNumber class]])
39 | return @(0);
40 |
41 | return modifierFlags;
42 | }
43 |
44 | @end
45 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRKeyEquivalentTransformer.h:
--------------------------------------------------------------------------------
1 | //
2 | // SRKeyEquivalentTransformer.h
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors to this file:
10 | // Ilya Kulakov
11 |
12 | #import
13 |
14 |
15 | /*!
16 | Transform dictionary representation of shortcut into string suitable
17 | for -setKeyEquivalent: of NSButton and NSMenuItem.
18 | */
19 | @interface SRKeyEquivalentTransformer : NSValueTransformer
20 |
21 | @end
22 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRKeyEquivalentTransformer.m:
--------------------------------------------------------------------------------
1 | //
2 | // SRKeyEquivalentTransformer.m
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors:
10 | // Ilya Kulakov
11 |
12 | #import "SRKeyEquivalentTransformer.h"
13 | #import "SRKeyCodeTransformer.h"
14 | #import "SRRecorderControl.h"
15 |
16 |
17 | @implementation SRKeyEquivalentTransformer
18 |
19 | #pragma mark NSValueTransformer
20 |
21 | + (BOOL)allowsReverseTransformation
22 | {
23 | return NO;
24 | }
25 |
26 | + (Class)transformedValueClass
27 | {
28 | return [NSString class];
29 | }
30 |
31 | - (NSString *)transformedValue:(NSDictionary *)aValue
32 | {
33 | if (![aValue isKindOfClass:[NSDictionary class]])
34 | return @"";
35 |
36 | NSNumber *keyCode = aValue[SRShortcutKeyCode];
37 |
38 | if (![keyCode isKindOfClass:[NSNumber class]])
39 | return @"";
40 |
41 | NSNumber *modifierFlags = aValue[SRShortcutModifierFlagsKey];
42 |
43 | if (![modifierFlags isKindOfClass:[NSNumber class]])
44 | modifierFlags = @(0);
45 |
46 | SRKeyCodeTransformer *t = [SRKeyCodeTransformer sharedASCIITransformer];
47 |
48 | return [t transformedValue:keyCode
49 | withImplicitModifierFlags:nil
50 | explicitModifierFlags:modifierFlags];
51 | }
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRModifierFlagsTransformer.h:
--------------------------------------------------------------------------------
1 | //
2 | // SRModifierFlagsTransformer.h
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2006-2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors:
10 | // Ilya Kulakov
11 |
12 | #import
13 |
14 |
15 | /*!
16 | Transforms mask of Cocoa modifier flags to string of unicode characters.
17 | */
18 | @interface SRModifierFlagsTransformer : NSValueTransformer
19 |
20 | - (instancetype)initWithPlainStrings:(BOOL)aUsesPlainStrings NS_DESIGNATED_INITIALIZER;
21 |
22 | /*!
23 | Determines whether modifier flags are transformed to unicode characters or to plain strings.
24 | */
25 | @property (readonly) BOOL usesPlainStrings;
26 |
27 | /*!
28 | Returns the shared transformer.
29 | */
30 | + (instancetype)sharedTransformer;
31 |
32 | /*!
33 | Returns the shared plain transformer.
34 | */
35 | + (instancetype)sharedPlainTransformer;
36 |
37 | @end
38 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRModifierFlagsTransformer.m:
--------------------------------------------------------------------------------
1 | //
2 | // SRModifierFlagsTransformer.m
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2006-2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors:
10 | // Ilya Kulakov
11 |
12 | #import "SRModifierFlagsTransformer.h"
13 | #import "SRCommon.h"
14 |
15 |
16 | @implementation SRModifierFlagsTransformer
17 |
18 | - (instancetype)initWithPlainStrings:(BOOL)aUsesPlainStrings
19 | {
20 | self = [super init];
21 |
22 | if (self)
23 | {
24 | _usesPlainStrings = aUsesPlainStrings;
25 | }
26 |
27 | return self;
28 | }
29 |
30 | - (instancetype)init
31 | {
32 | return [self initWithPlainStrings:NO];
33 | }
34 |
35 |
36 | #pragma mark Methods
37 |
38 | + (instancetype)sharedTransformer
39 | {
40 | static dispatch_once_t OnceToken;
41 | static SRModifierFlagsTransformer *Transformer = nil;
42 | dispatch_once(&OnceToken, ^{
43 | Transformer = [[self alloc] initWithPlainStrings:NO];
44 | });
45 | return Transformer;
46 | }
47 |
48 | + (instancetype)sharedPlainTransformer
49 | {
50 | static dispatch_once_t OnceToken;
51 | static SRModifierFlagsTransformer *Transformer = nil;
52 | dispatch_once(&OnceToken, ^{
53 | Transformer = [[self alloc] initWithPlainStrings:YES];
54 | });
55 | return Transformer;
56 | }
57 |
58 |
59 | #pragma mark NSValueTransformer
60 |
61 | + (Class)transformedValueClass
62 | {
63 | return [NSString class];
64 | }
65 |
66 | + (BOOL)allowsReverseTransformation
67 | {
68 | return NO;
69 | }
70 |
71 | - (NSString *)transformedValue:(NSNumber *)aValue
72 | {
73 | if (![aValue isKindOfClass:[NSNumber class]])
74 | return nil;
75 | else if (self.usesPlainStrings)
76 | {
77 | NSEventModifierFlags modifierFlags = aValue.unsignedIntegerValue;
78 | NSMutableString *s = [NSMutableString string];
79 |
80 | if (modifierFlags & NSControlKeyMask)
81 | [s appendString:SRLoc(@"Control-")];
82 |
83 | if (modifierFlags & NSAlternateKeyMask)
84 | [s appendString:SRLoc(@"Option-")];
85 |
86 | if (modifierFlags & NSShiftKeyMask)
87 | [s appendString:SRLoc(@"Shift-")];
88 |
89 | if (modifierFlags & NSCommandKeyMask)
90 | [s appendString:SRLoc(@"Command-")];
91 |
92 | if (s.length > 0)
93 | [s deleteCharactersInRange:NSMakeRange(s.length - 1, 1)];
94 |
95 | return s;
96 | }
97 | else
98 | {
99 | NSEventModifierFlags f = aValue.unsignedIntegerValue;
100 | return [NSString stringWithFormat:@"%@%@%@%@",
101 | (f & NSControlKeyMask ? @"⌃" : @""),
102 | (f & NSAlternateKeyMask ? @"⌥" : @""),
103 | (f & NSShiftKeyMask ? @"⇧" : @""),
104 | (f & NSCommandKeyMask ? @"⌘" : @"")];
105 | }
106 | }
107 |
108 | @end
109 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/SRValidator.h:
--------------------------------------------------------------------------------
1 | //
2 | // SRValidator.h
3 | // ShortcutRecorder
4 | //
5 | // Copyright 2006-2012 Contributors. All rights reserved.
6 | //
7 | // License: BSD
8 | //
9 | // Contributors:
10 | // David Dauer
11 | // Jesper
12 | // Jamie Kirkpatrick
13 | // Andy Kim
14 | // Silvio Rizzi
15 | // Ilya Kulakov
16 |
17 | #import
18 |
19 |
20 | @protocol SRValidatorDelegate;
21 |
22 | /*!
23 | Implements logic to check whether shortcut is taken by other parts of the application and system.
24 | */
25 | @interface SRValidator : NSObject
26 |
27 | @property (assign) NSObject *delegate;
28 |
29 | - (instancetype)initWithDelegate:(NSObject *)aDelegate NS_DESIGNATED_INITIALIZER;
30 |
31 | /*!
32 | Determines whether shortcut is taken.
33 |
34 | @discussion Key is checked in the following order:
35 | 1. If delegate implements shortcutValidator:isKeyCode:andFlagsTaken:reason:
36 | 2. If delegate allows system-wide shortcuts are checked
37 | 3. If delegate allows application menu it checked
38 |
39 | @see SRValidatorDelegate
40 | */
41 | - (BOOL)isKeyCode:(unsigned short)aKeyCode andFlagsTaken:(NSEventModifierFlags)aFlags error:(NSError **)outError;
42 |
43 | /*!
44 | Determines whether shortcut is taken in delegate.
45 |
46 | @discussion If delegate does not implement appropriate method, returns immediately.
47 | */
48 | - (BOOL)isKeyCode:(unsigned short)aKeyCode andFlagTakenInDelegate:(NSEventModifierFlags)aFlags error:(NSError **)outError;
49 |
50 | /*!
51 | Determines whether shortcut is taken by system-wide shortcuts.
52 |
53 | @discussion Does not check whether delegate allows or disallows checking in system shortcuts.
54 | */
55 | - (BOOL)isKeyCode:(unsigned short)aKeyCode andFlagsTakenInSystemShortcuts:(NSEventModifierFlags)aFlags error:(NSError **)outError;
56 |
57 | /*!
58 | Determines whether shortcut is taken by application menu item.
59 |
60 | @discussion Does not check whether delegate allows or disallows checking in application menu.
61 | */
62 | - (BOOL)isKeyCode:(unsigned short)aKeyCode andFlags:(NSEventModifierFlags)aFlags takenInMenu:(NSMenu *)aMenu error:(NSError **)outError;
63 |
64 | @end
65 |
66 |
67 | @protocol SRValidatorDelegate
68 |
69 | @optional
70 |
71 | /*!
72 | Asks the delegate if aKeyCode and aFlags are valid.
73 |
74 | @param aValidator The validator that validates key code and flags.
75 |
76 | @param aKeyCode Key code to validate.
77 |
78 | @param aFlags Flags to validate.
79 |
80 | @param outReason If delegate decides that shortcut is invalid, it may pass here an error message.
81 |
82 | @result YES if shortcut is valid. Otherwise NO.
83 |
84 | @discussion Implementation of this method by the delegate is optional. If it is not present, checking proceeds as if this method had returned YES.
85 | */
86 | - (BOOL)shortcutValidator:(SRValidator *)aValidator isKeyCode:(unsigned short)aKeyCode andFlagsTaken:(NSEventModifierFlags)aFlags reason:(NSString **)outReason;
87 |
88 | /*!
89 | Asks the delegate whether validator should check key equivalents of app's menu items.
90 |
91 | @param aValidator The validator that going to check app's menu items.
92 |
93 | @result YES if validator should check key equivalents of app's menu items. Otherwise NO.
94 |
95 | @discussion Implementation of this method by the delegate is optional. If it is not present, checking proceeds as if this method had returned YES.
96 | */
97 | - (BOOL)shortcutValidatorShouldCheckMenu:(SRValidator *)aValidator;
98 |
99 | /*!
100 | Asks the delegate whether it should check system shortcuts.
101 |
102 | @param aValidator The validator that going to check system shortcuts.
103 |
104 | @result YES if validator should check system shortcuts. Otherwise NO.
105 |
106 | @discussion Implementation of this method by the delegate is optional. If it is not present, checking proceeds as if this method had returned YES.
107 | */
108 | - (BOOL)shortcutValidatorShouldCheckSystemShortcuts:(SRValidator *)aValidator;
109 |
110 | /*!
111 | Asks the delegate whether it should use ASCII representation of key code when making error messages.
112 |
113 | @param aValidator The validator that is about to make an error message.
114 |
115 | @result YES if validator should use ASCII representation. Otherwise NO.
116 |
117 | @discussion Implementation of this method by the delegate is optional. If it is not present, ASCII representation of key code is used.
118 | */
119 | - (BOOL)shortcutValidatorShouldUseASCIIStringForKeyCodes:(SRValidator *)aValidator;
120 |
121 | @end
122 |
123 |
124 | @interface NSMenuItem (SRValidator)
125 |
126 | /*!
127 | Returns full path to the menu item. E.g. "Window ➝ Zoom"
128 | */
129 | - (NSString *)SR_path;
130 |
131 | @end
132 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Library/ShortcutRecorder.h:
--------------------------------------------------------------------------------
1 | //
2 | // ShortcutRecorder.h
3 | // ShortcutRecorder
4 | // Copyright 2012 Contributors. All rights reserved.
5 | //
6 | // License: BSD
7 | //
8 | // Contributors to this file:
9 | // Jesper
10 | // Ilya Kulakov
11 |
12 | #import
13 | #import
14 | #import
15 | #import
16 | #import
17 | #import
18 | #import
19 | #import
20 |
21 |
22 | #ifndef IBInspectable
23 | #define IBInspectable
24 | #endif
25 |
26 | #ifndef IB_DESIGNABLE
27 | #define IB_DESIGNABLE
28 | #endif
29 |
30 | #ifndef NSAppKitVersionNumber10_6
31 | #define NSAppKitVersionNumber10_6 1038
32 | #endif
33 |
34 | #ifndef NSAppKitVersionNumber10_9
35 | #define NSAppKitVersionNumber10_9 1265
36 | #endif
37 |
38 | #ifndef NSEDGEINSETS_DEFINED
39 | typedef struct NSEdgeInsets {
40 | CGFloat top;
41 | CGFloat left;
42 | CGFloat bottom;
43 | CGFloat right;
44 | } NSEdgeInsets;
45 |
46 | NS_INLINE NSEdgeInsets NSEdgeInsetsMake(CGFloat top, CGFloat left, CGFloat bottom, CGFloat right) {
47 | NSEdgeInsets e;
48 | e.top = top;
49 | e.left = left;
50 | e.bottom = bottom;
51 | e.right = right;
52 | return e;
53 | }
54 | #endif
55 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTHotKey+ShortcutRecorder.h:
--------------------------------------------------------------------------------
1 | //
2 | // PTHotKey+ShortcutRecorder.h
3 | // ShortcutRecorder
4 | //
5 | // Created by Ilya Kulakov on 27.02.11.
6 | // Copyright 2011 Wireload. All rights reserved.
7 | //
8 |
9 | #import
10 | #import "PTHotKey.h"
11 |
12 |
13 | @interface PTHotKey (ShortcutRecorder)
14 |
15 | + (PTHotKey *)hotKeyWithIdentifier:(id)anIdentifier
16 | keyCombo:(NSDictionary *)aKeyCombo
17 | target:(id)aTarget
18 | action:(SEL)anAction;
19 |
20 | + (PTHotKey *)hotKeyWithIdentifier:(id)anIdentifier
21 | keyCombo:(NSDictionary *)aKeyCombo
22 | target:(id)aTarget
23 | action:(SEL)anAction
24 | keyUpAction:(SEL)aKeyUpAction;
25 |
26 | + (PTHotKey *)hotKeyWithIdentifier:(id)anIdentifier
27 | keyCombo:(NSDictionary *)aKeyCombo
28 | target:(id)aTarget
29 | action:(SEL)anAction
30 | withObject:(id)anObject;
31 | @end
32 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTHotKey+ShortcutRecorder.m:
--------------------------------------------------------------------------------
1 | //
2 | // PTHotKey+ShortcutRecorder.m
3 | // ShortcutRecorder
4 | //
5 | // Created by Ilya Kulakov on 27.02.11.
6 | // Copyright 2011 Wireload. All rights reserved.
7 | //
8 |
9 | #import "PTHotKey+ShortcutRecorder.h"
10 | #import "SRRecorderControl.h"
11 |
12 |
13 | @implementation PTHotKey (ShortcutRecorder)
14 |
15 | + (PTHotKey *)hotKeyWithIdentifier:(id)anIdentifier
16 | keyCombo:(NSDictionary *)aKeyCombo
17 | target:(id)aTarget
18 | action:(SEL)anAction
19 | {
20 | return [PTHotKey hotKeyWithIdentifier:anIdentifier keyCombo:aKeyCombo target:aTarget action:anAction withObject:nil];
21 | }
22 |
23 | + (PTHotKey *)hotKeyWithIdentifier:(id)anIdentifier
24 | keyCombo:(NSDictionary *)aKeyCombo
25 | target:(id)aTarget
26 | action:(SEL)anAction
27 | withObject:(id)anObject
28 | {
29 | NSInteger keyCode = [[aKeyCombo objectForKey:@"keyCode"] integerValue];
30 | NSUInteger modifiers = SRCocoaToCarbonFlags([[aKeyCombo objectForKey:@"modifierFlags"] unsignedIntegerValue]);
31 | PTKeyCombo *newKeyCombo = [[PTKeyCombo alloc] initWithKeyCode:keyCode modifiers:modifiers];
32 | PTHotKey *newHotKey = [[PTHotKey alloc] initWithIdentifier:anIdentifier keyCombo:newKeyCombo];
33 | [newHotKey setTarget:aTarget];
34 | [newHotKey setAction:anAction];
35 | [newHotKey setObject:anObject];
36 | return newHotKey;
37 | }
38 |
39 | + (PTHotKey *)hotKeyWithIdentifier:(id)anIdentifier
40 | keyCombo:(NSDictionary *)aKeyCombo
41 | target:(id)aTarget
42 | action:(SEL)anAction
43 | keyUpAction:(SEL)aKeyUpAction
44 | {
45 | PTHotKey *newHotKey = [PTHotKey hotKeyWithIdentifier:anIdentifier
46 | keyCombo:aKeyCombo
47 | target:aTarget
48 | action:anAction];
49 | [newHotKey setKeyUpAction:aKeyUpAction];
50 | return newHotKey;
51 | }
52 |
53 | @end
54 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTHotKey.h:
--------------------------------------------------------------------------------
1 | //
2 | // PTHotKey.h
3 | // Protein
4 | //
5 | // Created by Quentin Carnicelli on Sat Aug 02 2003.
6 | // Copyright (c) 2003 Quentin D. Carnicelli. All rights reserved.
7 | //
8 | // Contributors:
9 | // Andy Kim
10 |
11 | #import
12 | #import
13 | #import "PTKeyCombo.h"
14 |
15 | @interface PTHotKey : NSObject
16 | {
17 | NSString* mIdentifier;
18 | NSString* mName;
19 | PTKeyCombo* mKeyCombo;
20 | id mTarget;
21 | id mObject;
22 | SEL mAction;
23 | SEL mKeyUpAction;
24 |
25 | UInt32 mCarbonHotKeyID;
26 | EventHotKeyRef mCarbonEventHotKeyRef;
27 | }
28 |
29 | - (id)initWithIdentifier: (id)identifier keyCombo: (PTKeyCombo*)combo;
30 | - (id)initWithIdentifier: (id)identifier keyCombo: (PTKeyCombo*)combo withObject: (id)object;
31 | - (id)init;
32 |
33 | - (void)setIdentifier: (id)ident;
34 | - (id)identifier;
35 |
36 | - (void)setName: (NSString*)name;
37 | - (NSString*)name;
38 |
39 | - (void)setKeyCombo: (PTKeyCombo*)combo;
40 | - (PTKeyCombo*)keyCombo;
41 |
42 | - (void)setTarget: (id)target;
43 | - (id)target;
44 | - (void)setObject: (id)object;
45 | - (id)object;
46 | - (void)setAction: (SEL)action;
47 | - (SEL)action;
48 | - (void)setKeyUpAction: (SEL)action;
49 | - (SEL)keyUpAction;
50 |
51 | - (UInt32)carbonHotKeyID;
52 | - (void)setCarbonHotKeyID: (UInt32)hotKeyID;
53 |
54 | - (EventHotKeyRef)carbonEventHotKeyRef;
55 | - (void)setCarbonEventHotKeyRef:(EventHotKeyRef)hotKeyRef;
56 |
57 | - (void)invoke;
58 | - (void)uninvoke;
59 |
60 | @end
61 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTHotKey.m:
--------------------------------------------------------------------------------
1 | //
2 | // PTHotKey.m
3 | // Protein
4 | //
5 | // Created by Quentin Carnicelli on Sat Aug 02 2003.
6 | // Copyright (c) 2003 Quentin D. Carnicelli. All rights reserved.
7 | //
8 |
9 | #import "PTHotKey.h"
10 |
11 | #import "PTHotKeyCenter.h"
12 | #import "PTKeyCombo.h"
13 |
14 | @implementation PTHotKey
15 |
16 | - (id)init
17 | {
18 | return [self initWithIdentifier: nil keyCombo: nil withObject:nil];
19 | }
20 |
21 | - (id)initWithIdentifier: (id)identifier keyCombo: (PTKeyCombo*)combo
22 | {
23 | return [self initWithIdentifier: identifier keyCombo: combo withObject:nil];
24 |
25 | }
26 |
27 | - (id)initWithIdentifier: (id)identifier keyCombo: (PTKeyCombo*)combo withObject: (id)object
28 | {
29 | self = [super init];
30 |
31 | if( self )
32 | {
33 | [self setIdentifier: identifier];
34 | [self setKeyCombo: combo];
35 | [self setObject: object];
36 | }
37 |
38 | return self;
39 | }
40 |
41 |
42 | - (NSString*)description
43 | {
44 | return [NSString stringWithFormat: @"<%@: %@, %@>", NSStringFromClass( [self class] ), [self identifier], [self keyCombo]];
45 | }
46 |
47 | #pragma mark -
48 |
49 | - (void)setIdentifier: (id)ident
50 | {
51 | mIdentifier = ident;
52 | }
53 |
54 | - (id)identifier
55 | {
56 | return mIdentifier;
57 | }
58 |
59 | - (void)setKeyCombo: (PTKeyCombo*)combo
60 | {
61 | if( combo == nil )
62 | combo = [PTKeyCombo clearKeyCombo];
63 |
64 | mKeyCombo = combo;
65 | }
66 |
67 | - (PTKeyCombo*)keyCombo
68 | {
69 | return mKeyCombo;
70 | }
71 |
72 | - (void)setName: (NSString*)name
73 | {
74 | mName = name;
75 | }
76 |
77 | - (NSString*)name
78 | {
79 | return mName;
80 | }
81 |
82 | - (void)setTarget: (id)target
83 | {
84 | mTarget = target;
85 | }
86 |
87 | - (id)target
88 | {
89 | return mTarget;
90 | }
91 |
92 | - (void)setObject:(id)object
93 | {
94 | mObject = object;
95 | }
96 |
97 | - (id)object
98 | {
99 | return mObject;
100 | }
101 |
102 | - (void)setAction: (SEL)action
103 | {
104 | mAction = action;
105 | }
106 |
107 | - (SEL)action
108 | {
109 | return mAction;
110 | }
111 |
112 | - (void)setKeyUpAction: (SEL)action
113 | {
114 | mKeyUpAction = action;
115 | }
116 |
117 | - (SEL)keyUpAction
118 | {
119 | return mKeyUpAction;
120 | }
121 |
122 | - (UInt32)carbonHotKeyID
123 | {
124 | return mCarbonHotKeyID;
125 | }
126 |
127 | - (void)setCarbonHotKeyID: (UInt32)hotKeyID;
128 | {
129 | mCarbonHotKeyID = hotKeyID;
130 | }
131 |
132 | - (EventHotKeyRef)carbonEventHotKeyRef
133 | {
134 | return mCarbonEventHotKeyRef;
135 | }
136 |
137 | - (void)setCarbonEventHotKeyRef: (EventHotKeyRef)hotKeyRef
138 | {
139 | mCarbonEventHotKeyRef = hotKeyRef;
140 | }
141 |
142 | #pragma mark -
143 |
144 | - (void)invoke
145 | {
146 | if(mAction)
147 | [NSApp sendAction:mAction to:mTarget from:self];
148 | }
149 |
150 | - (void)uninvoke
151 | {
152 | if(mKeyUpAction)
153 | [NSApp sendAction:mKeyUpAction to:mTarget from:self];
154 | }
155 |
156 | @end
157 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTHotKeyCenter.h:
--------------------------------------------------------------------------------
1 | //
2 | // PTHotKeyCenter.h
3 | // Protein
4 | //
5 | // Created by Quentin Carnicelli on Sat Aug 02 2003.
6 | // Copyright (c) 2003 Quentin D. Carnicelli. All rights reserved.
7 | //
8 | // Contributors:
9 | // Quentin D. Carnicelli
10 | // Finlay Dobbie
11 | // Vincent Pottier
12 | // Andy Kim
13 |
14 | #import
15 | #import
16 |
17 | @class PTHotKey;
18 |
19 | @interface PTHotKeyCenter : NSObject
20 | {
21 | NSMutableDictionary* mHotKeys; //Keys are carbon hot key IDs
22 | BOOL mEventHandlerInstalled;
23 | UInt32 mHotKeyCount; // Used to assign new hot key ID
24 | BOOL mIsPaused;
25 | EventHandlerRef mEventHandler;
26 | }
27 |
28 | + (PTHotKeyCenter *)sharedCenter;
29 |
30 | - (BOOL)registerHotKey: (PTHotKey*)hotKey;
31 | - (void)unregisterHotKey: (PTHotKey*)hotKey;
32 |
33 | - (NSArray*)allHotKeys;
34 | - (PTHotKey*)hotKeyWithIdentifier: (id)ident;
35 |
36 | - (void)sendEvent: (NSEvent*)event;
37 |
38 | - (void)pause;
39 |
40 | - (void)resume;
41 |
42 | - (BOOL)isPaused;
43 |
44 | @end
45 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTKeyCodeTranslator.h:
--------------------------------------------------------------------------------
1 | //
2 | // PTKeyCodeTranslator.h
3 | // Chercher
4 | //
5 | // Created by Finlay Dobbie on Sat Oct 11 2003.
6 | // Copyright (c) 2003 Cliché Software. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface PTKeyCodeTranslator : NSObject
12 | {
13 | TISInputSourceRef keyboardLayout;
14 | const UCKeyboardLayout *uchrData;
15 | UInt32 keyTranslateState;
16 | UInt32 deadKeyState;
17 | }
18 |
19 | + (id)currentTranslator;
20 |
21 | - (id)initWithKeyboardLayout:(TISInputSourceRef)aLayout;
22 | - (NSString *)translateKeyCode:(short)keyCode;
23 |
24 | - (TISInputSourceRef)keyboardLayout;
25 |
26 | @end
27 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTKeyCodeTranslator.m:
--------------------------------------------------------------------------------
1 | //
2 | // PTKeyCodeTranslator.m
3 | // Chercher
4 | //
5 | // Created by Finlay Dobbie on Sat Oct 11 2003.
6 | // Copyright (c) 2003 Cliché Software. All rights reserved.
7 | //
8 |
9 | #import "PTKeyCodeTranslator.h"
10 |
11 |
12 | @implementation PTKeyCodeTranslator
13 |
14 | + (id)currentTranslator
15 | {
16 | static PTKeyCodeTranslator *current = nil;
17 | TISInputSourceRef currentLayout = TISCopyCurrentKeyboardLayoutInputSource();
18 |
19 | if (current == nil) {
20 | current = [[PTKeyCodeTranslator alloc] initWithKeyboardLayout:currentLayout];
21 | } else if ([current keyboardLayout] != currentLayout) {
22 | current = [[PTKeyCodeTranslator alloc] initWithKeyboardLayout:currentLayout];
23 | }
24 |
25 | CFRelease(currentLayout);
26 |
27 | return current;
28 | }
29 |
30 | - (id)initWithKeyboardLayout:(TISInputSourceRef)aLayout
31 | {
32 | if ((self = [super init]) != nil) {
33 | keyboardLayout = aLayout;
34 |
35 | CFRetain(keyboardLayout);
36 |
37 | CFDataRef uchr = TISGetInputSourceProperty( keyboardLayout , kTISPropertyUnicodeKeyLayoutData );
38 | uchrData = ( const UCKeyboardLayout* )CFDataGetBytePtr(uchr);
39 | }
40 |
41 | return self;
42 | }
43 |
44 | - (void)dealloc
45 | {
46 | CFRelease(keyboardLayout);
47 | }
48 |
49 | - (NSString *)translateKeyCode:(short)keyCode {
50 | UniCharCount maxStringLength = 4, actualStringLength;
51 | UniChar unicodeString[4];
52 | UCKeyTranslate( uchrData, keyCode, kUCKeyActionDisplay, 0, LMGetKbdType(), kUCKeyTranslateNoDeadKeysBit, &deadKeyState, maxStringLength, &actualStringLength, unicodeString );
53 | return [NSString stringWithCharacters:unicodeString length:1];
54 | }
55 |
56 | - (TISInputSourceRef)keyboardLayout {
57 | return keyboardLayout;
58 | }
59 |
60 | - (NSString *)description {
61 | NSString *kind;
62 | kind = @"uchr";
63 |
64 | NSString *layoutName;
65 | layoutName = (__bridge NSString *)(TISGetInputSourceProperty( keyboardLayout, kTISPropertyLocalizedName ));
66 | return [NSString stringWithFormat:@"PTKeyCodeTranslator layout=%@ (%@)", layoutName, kind];
67 | }
68 |
69 | @end
70 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTKeyCombo.h:
--------------------------------------------------------------------------------
1 | //
2 | // PTKeyCombo.h
3 | // Protein
4 | //
5 | // Created by Quentin Carnicelli on Sat Aug 02 2003.
6 | // Copyright (c) 2003 Quentin D. Carnicelli. All rights reserved.
7 | //
8 |
9 | #import
10 |
11 | @interface PTKeyCombo : NSObject
12 | {
13 | NSInteger mKeyCode;
14 | NSUInteger mModifiers;
15 | }
16 |
17 | + (id)clearKeyCombo;
18 | + (id)keyComboWithKeyCode: (NSInteger)keyCode modifiers: (NSUInteger)modifiers;
19 | - (id)initWithKeyCode: (NSInteger)keyCode modifiers: (NSUInteger)modifiers;
20 |
21 | - (id)initWithPlistRepresentation: (id)plist;
22 | - (id)plistRepresentation;
23 |
24 | - (BOOL)isEqual: (PTKeyCombo*)combo;
25 |
26 | - (NSInteger)keyCode;
27 | - (NSUInteger)modifiers;
28 |
29 | - (BOOL)isClearCombo;
30 | - (BOOL)isValidHotKeyCombo;
31 |
32 | @end
33 |
34 |
35 | @interface PTKeyCombo (UserDisplayAdditions)
36 | - (NSString*)keyCodeString;
37 | - (NSUInteger)modifierMask;
38 | @end
39 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/PTHotKey/PTKeyCombo.m:
--------------------------------------------------------------------------------
1 | //
2 | // PTKeyCombo.m
3 | // Protein
4 | //
5 | // Created by Quentin Carnicelli on Sat Aug 02 2003.
6 | // Copyright (c) 2003 Quentin D. Carnicelli. All rights reserved.
7 | //
8 |
9 | #import "PTKeyCombo.h"
10 | #import "PTKeyCodeTranslator.h"
11 |
12 | @implementation PTKeyCombo
13 |
14 | + (id)clearKeyCombo
15 | {
16 | return [self keyComboWithKeyCode: -1 modifiers: -1];
17 | }
18 |
19 | + (id)keyComboWithKeyCode: (NSInteger)keyCode modifiers: (NSUInteger)modifiers
20 | {
21 | return [[self alloc] initWithKeyCode: keyCode modifiers: modifiers];
22 | }
23 |
24 | - (id)initWithKeyCode: (NSInteger)keyCode modifiers: (NSUInteger)modifiers
25 | {
26 | self = [super init];
27 |
28 | if( self )
29 | {
30 | switch ( keyCode )
31 | {
32 | case kVK_F1:
33 | case kVK_F2:
34 | case kVK_F3:
35 | case kVK_F4:
36 | case kVK_F5:
37 | case kVK_F6:
38 | case kVK_F7:
39 | case kVK_F8:
40 | case kVK_F9:
41 | case kVK_F10:
42 | case kVK_F11:
43 | case kVK_F12:
44 | case kVK_F13:
45 | case kVK_F14:
46 | case kVK_F15:
47 | case kVK_F16:
48 | case kVK_F17:
49 | case kVK_F18:
50 | case kVK_F19:
51 | case kVK_F20:
52 | mModifiers = modifiers | NSFunctionKeyMask;
53 | break;
54 | default:
55 | mModifiers = modifiers;
56 | break;
57 | }
58 |
59 | mKeyCode = keyCode;
60 | }
61 |
62 | return self;
63 | }
64 |
65 | - (id)initWithPlistRepresentation: (id)plist
66 | {
67 | int keyCode, modifiers;
68 |
69 | if( !plist || ![plist count] )
70 | {
71 | keyCode = -1;
72 | modifiers = -1;
73 | }
74 | else
75 | {
76 | keyCode = [[plist objectForKey: @"keyCode"] intValue];
77 | if( keyCode < 0 ) keyCode = -1;
78 |
79 | modifiers = [[plist objectForKey: @"modifiers"] intValue];
80 | if( modifiers <= 0 ) modifiers = -1;
81 | }
82 |
83 | return [self initWithKeyCode: keyCode modifiers: modifiers];
84 | }
85 |
86 | - (id)plistRepresentation
87 | {
88 | return [NSDictionary dictionaryWithObjectsAndKeys:
89 | [NSNumber numberWithInteger: [self keyCode]], @"keyCode",
90 | [NSNumber numberWithInteger: [self modifiers]], @"modifiers",
91 | nil];
92 | }
93 |
94 | - (id)copyWithZone:(NSZone*)zone;
95 | {
96 | return self;
97 | }
98 |
99 | - (BOOL)isEqual: (PTKeyCombo*)combo
100 | {
101 | return [self keyCode] == [combo keyCode] &&
102 | [self modifiers] == [combo modifiers];
103 | }
104 |
105 | #pragma mark -
106 |
107 | - (NSInteger)keyCode
108 | {
109 | return mKeyCode;
110 | }
111 |
112 | - (NSUInteger)modifiers
113 | {
114 | return mModifiers;
115 | }
116 |
117 | - (BOOL)isValidHotKeyCombo
118 | {
119 | return mKeyCode >= 0 && mModifiers > 0;
120 | }
121 |
122 | - (BOOL)isClearCombo
123 | {
124 | return mKeyCode == -1 && mModifiers == 0;
125 | }
126 |
127 | @end
128 |
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/ca.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/ca.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/cs.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/cs.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/de.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/de.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/el.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/el.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/en.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/en.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/es-MX.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/es-MX.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/es.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/es.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/fr.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/fr.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/it.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/it.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/ja.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/ja.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/ko.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/ko.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/nb.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/nb.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/nl.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/nl.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/pl.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/pl.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/pt-BR.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/pt-BR.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/pt.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/pt.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/ro.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/ro.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/ru.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/ru.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-blue-highlighted-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-disabled-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-disabled-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-editing-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-graphite-highlighted-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-bezel-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear-highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear-highlighted.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear-highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear-highlighted@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-clear@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback-highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback-highlighted.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback-highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback-highlighted@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-snapback@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-blue-highlighted-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-disabled-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-disabled-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-editing-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-graphite-highlighted-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-left.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-left.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-left@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-left@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-middle.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-middle.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-middle@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-middle@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-right.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-right.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-right@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-bezel-right@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear-highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear-highlighted.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear-highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear-highlighted@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-clear@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback-highlighted.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback-highlighted.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback-highlighted@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback-highlighted@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/shortcut-recorder-yosemite-snapback@2x.png
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/sk.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/sk.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/sv.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/sv.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/th.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/th.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/zh-Hans.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/zh-Hans.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/ShortcutRecorder/Resources/zh-Hant.lproj/ShortcutRecorder.strings:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/thecatalinstan/Funky/a6f740e86b54e5a70804b71b4913dee81fae7277/Pods/ShortcutRecorder/Resources/zh-Hant.lproj/ShortcutRecorder.strings
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/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-Funky/Pods-Funky-acknowledgements.markdown:
--------------------------------------------------------------------------------
1 | # Acknowledgements
2 | This application makes use of the following third party libraries:
3 |
4 | ## Crashlytics
5 |
6 | Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2018 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt
7 |
8 | ## Fabric
9 |
10 | Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt
11 |
12 | ## ShortcutRecorder
13 |
14 | # ShortcutRecorder
15 |
16 | Copyright (c) 2006, Contributors
17 | All rights reserved.
18 |
19 | Redistribution and use in source and binary forms, with or without
20 | modification, are permitted provided that the following conditions are met:
21 | * Redistributions of source code must retain the above copyright
22 | notice, this list of conditions and the following disclaimer.
23 | * Redistributions in binary form must reproduce the above copyright
24 | notice, this list of conditions and the following disclaimer in the
25 | documentation and/or other materials provided with the distribution.
26 | * Neither the name of the organization nor the
27 | names of its contributors may be used to endorse or promote products
28 | derived from this software without specific prior written permission.
29 |
30 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
31 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
32 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
33 | DISCLAIMED. IN NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY
34 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
35 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
36 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
37 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
38 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
39 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
40 |
41 | # PTHotKey
42 |
43 | Copyright (c) 2003 Quentin D. Carnicelli.
44 | All rights reserved.
45 |
46 | Generated by CocoaPods - https://cocoapods.org
47 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky-acknowledgements.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | PreferenceSpecifiers
6 |
7 |
8 | FooterText
9 | This application makes use of the following third party libraries:
10 | Title
11 | Acknowledgements
12 | Type
13 | PSGroupSpecifier
14 |
15 |
16 | FooterText
17 | Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. Crashlytics Kit: Copyright 2018 Crashlytics, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Crashlytics Terms of Service located at http://try.crashlytics.com/terms/terms-of-service.pdf and the Crashlytics Privacy Policy located at http://try.crashlytics.com/terms/privacy-policy.pdf. OSS: http://get.fabric.io/terms/opensource.txt
18 | License
19 | Commercial
20 | Title
21 | Crashlytics
22 | Type
23 | PSGroupSpecifier
24 |
25 |
26 | FooterText
27 | Fabric: Copyright 2018 Google, Inc. All Rights Reserved. Use of this software is subject to the terms and conditions of the Fabric Software and Services Agreement located at https://fabric.io/terms. OSS: http://get.fabric.io/terms/opensource.txt
28 | License
29 | Commercial
30 | Title
31 | Fabric
32 | Type
33 | PSGroupSpecifier
34 |
35 |
36 | FooterText
37 | # ShortcutRecorder
38 |
39 | Copyright (c) 2006, Contributors
40 | All rights reserved.
41 |
42 | Redistribution and use in source and binary forms, with or without
43 | modification, are permitted provided that the following conditions are met:
44 | * Redistributions of source code must retain the above copyright
45 | notice, this list of conditions and the following disclaimer.
46 | * Redistributions in binary form must reproduce the above copyright
47 | notice, this list of conditions and the following disclaimer in the
48 | documentation and/or other materials provided with the distribution.
49 | * Neither the name of the organization nor the
50 | names of its contributors may be used to endorse or promote products
51 | derived from this software without specific prior written permission.
52 |
53 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
54 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
55 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
56 | DISCLAIMED. IN NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY
57 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
58 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
59 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
60 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
61 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
62 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
63 |
64 | # PTHotKey
65 |
66 | Copyright (c) 2003 Quentin D. Carnicelli.
67 | All rights reserved.
68 |
69 | Title
70 | ShortcutRecorder
71 | Type
72 | PSGroupSpecifier
73 |
74 |
75 | FooterText
76 | Generated by CocoaPods - https://cocoapods.org
77 | Title
78 |
79 | Type
80 | PSGroupSpecifier
81 |
82 |
83 | StringsTable
84 | Acknowledgements
85 | Title
86 | Acknowledgements
87 |
88 |
89 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_Pods_Funky : NSObject
3 | @end
4 | @implementation PodsDummy_Pods_Funky
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky-frameworks.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | set -u
4 | set -o pipefail
5 |
6 | if [ -z ${FRAMEWORKS_FOLDER_PATH+x} ]; then
7 | # If FRAMEWORKS_FOLDER_PATH is not set, then there's nowhere for us to copy
8 | # frameworks to, so exit 0 (signalling the script phase was successful).
9 | exit 0
10 | fi
11 |
12 | echo "mkdir -p ${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
13 | mkdir -p "${CONFIGURATION_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
14 |
15 | COCOAPODS_PARALLEL_CODE_SIGN="${COCOAPODS_PARALLEL_CODE_SIGN:-false}"
16 | SWIFT_STDLIB_PATH="${DT_TOOLCHAIN_DIR}/usr/lib/swift/${PLATFORM_NAME}"
17 |
18 | # Used as a return value for each invocation of `strip_invalid_archs` function.
19 | STRIP_BINARY_RETVAL=0
20 |
21 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
22 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
23 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
24 |
25 | # Copies and strips a vendored framework
26 | install_framework()
27 | {
28 | if [ -r "${BUILT_PRODUCTS_DIR}/$1" ]; then
29 | local source="${BUILT_PRODUCTS_DIR}/$1"
30 | elif [ -r "${BUILT_PRODUCTS_DIR}/$(basename "$1")" ]; then
31 | local source="${BUILT_PRODUCTS_DIR}/$(basename "$1")"
32 | elif [ -r "$1" ]; then
33 | local source="$1"
34 | fi
35 |
36 | local destination="${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
37 |
38 | if [ -L "${source}" ]; then
39 | echo "Symlinked..."
40 | source="$(readlink "${source}")"
41 | fi
42 |
43 | # Use filter instead of exclude so missing patterns don't throw errors.
44 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${destination}\""
45 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${destination}"
46 |
47 | local basename
48 | basename="$(basename -s .framework "$1")"
49 | binary="${destination}/${basename}.framework/${basename}"
50 | if ! [ -r "$binary" ]; then
51 | binary="${destination}/${basename}"
52 | fi
53 |
54 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
55 | if [[ "$(file "$binary")" == *"dynamically linked shared library"* ]]; then
56 | strip_invalid_archs "$binary"
57 | fi
58 |
59 | # Resign the code if required by the build settings to avoid unstable apps
60 | code_sign_if_enabled "${destination}/$(basename "$1")"
61 |
62 | # Embed linked Swift runtime libraries. No longer necessary as of Xcode 7.
63 | if [ "${XCODE_VERSION_MAJOR}" -lt 7 ]; then
64 | local swift_runtime_libs
65 | swift_runtime_libs=$(xcrun otool -LX "$binary" | grep --color=never @rpath/libswift | sed -E s/@rpath\\/\(.+dylib\).*/\\1/g | uniq -u && exit ${PIPESTATUS[0]})
66 | for lib in $swift_runtime_libs; do
67 | echo "rsync -auv \"${SWIFT_STDLIB_PATH}/${lib}\" \"${destination}\""
68 | rsync -auv "${SWIFT_STDLIB_PATH}/${lib}" "${destination}"
69 | code_sign_if_enabled "${destination}/${lib}"
70 | done
71 | fi
72 | }
73 |
74 | # Copies and strips a vendored dSYM
75 | install_dsym() {
76 | local source="$1"
77 | if [ -r "$source" ]; then
78 | # Copy the dSYM into a the targets temp dir.
79 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${source}\" \"${DERIVED_FILES_DIR}\""
80 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${source}" "${DERIVED_FILES_DIR}"
81 |
82 | local basename
83 | basename="$(basename -s .framework.dSYM "$source")"
84 | binary="${DERIVED_FILES_DIR}/${basename}.framework.dSYM/Contents/Resources/DWARF/${basename}"
85 |
86 | # Strip invalid architectures so "fat" simulator / device frameworks work on device
87 | if [[ "$(file "$binary")" == *"Mach-O dSYM companion"* ]]; then
88 | strip_invalid_archs "$binary"
89 | fi
90 |
91 | if [[ $STRIP_BINARY_RETVAL == 1 ]]; then
92 | # Move the stripped file into its final destination.
93 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter \"- CVS/\" --filter \"- .svn/\" --filter \"- .git/\" --filter \"- .hg/\" --filter \"- Headers\" --filter \"- PrivateHeaders\" --filter \"- Modules\" \"${DERIVED_FILES_DIR}/${basename}.framework.dSYM\" \"${DWARF_DSYM_FOLDER_PATH}\""
94 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" --filter "- CVS/" --filter "- .svn/" --filter "- .git/" --filter "- .hg/" --filter "- Headers" --filter "- PrivateHeaders" --filter "- Modules" "${DERIVED_FILES_DIR}/${basename}.framework.dSYM" "${DWARF_DSYM_FOLDER_PATH}"
95 | else
96 | # The dSYM was not stripped at all, in this case touch a fake folder so the input/output paths from Xcode do not reexecute this script because the file is missing.
97 | touch "${DWARF_DSYM_FOLDER_PATH}/${basename}.framework.dSYM"
98 | fi
99 | fi
100 | }
101 |
102 | # Signs a framework with the provided identity
103 | code_sign_if_enabled() {
104 | if [ -n "${EXPANDED_CODE_SIGN_IDENTITY}" -a "${CODE_SIGNING_REQUIRED:-}" != "NO" -a "${CODE_SIGNING_ALLOWED}" != "NO" ]; then
105 | # Use the current code_sign_identitiy
106 | echo "Code Signing $1 with Identity ${EXPANDED_CODE_SIGN_IDENTITY_NAME}"
107 | local code_sign_cmd="/usr/bin/codesign --force --sign ${EXPANDED_CODE_SIGN_IDENTITY} ${OTHER_CODE_SIGN_FLAGS:-} --preserve-metadata=identifier,entitlements '$1'"
108 |
109 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
110 | code_sign_cmd="$code_sign_cmd &"
111 | fi
112 | echo "$code_sign_cmd"
113 | eval "$code_sign_cmd"
114 | fi
115 | }
116 |
117 | # Strip invalid architectures
118 | strip_invalid_archs() {
119 | binary="$1"
120 | # Get architectures for current target binary
121 | binary_archs="$(lipo -info "$binary" | rev | cut -d ':' -f1 | awk '{$1=$1;print}' | rev)"
122 | # Intersect them with the architectures we are building for
123 | intersected_archs="$(echo ${ARCHS[@]} ${binary_archs[@]} | tr ' ' '\n' | sort | uniq -d)"
124 | # If there are no archs supported by this binary then warn the user
125 | if [[ -z "$intersected_archs" ]]; then
126 | echo "warning: [CP] Vendored binary '$binary' contains architectures ($binary_archs) none of which match the current build architectures ($ARCHS)."
127 | STRIP_BINARY_RETVAL=0
128 | return
129 | fi
130 | stripped=""
131 | for arch in $binary_archs; do
132 | if ! [[ "${ARCHS}" == *"$arch"* ]]; then
133 | # Strip non-valid architectures in-place
134 | lipo -remove "$arch" -output "$binary" "$binary" || exit 1
135 | stripped="$stripped $arch"
136 | fi
137 | done
138 | if [[ "$stripped" ]]; then
139 | echo "Stripped $binary of architectures:$stripped"
140 | fi
141 | STRIP_BINARY_RETVAL=1
142 | }
143 |
144 |
145 | if [[ "$CONFIGURATION" == "Debug" ]]; then
146 | install_framework "${BUILT_PRODUCTS_DIR}/ShortcutRecorder/ShortcutRecorder.framework"
147 | fi
148 | if [[ "$CONFIGURATION" == "Release" ]]; then
149 | install_framework "${BUILT_PRODUCTS_DIR}/ShortcutRecorder/ShortcutRecorder.framework"
150 | fi
151 | if [ "${COCOAPODS_PARALLEL_CODE_SIGN}" == "true" ]; then
152 | wait
153 | fi
154 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky-resources.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | set -e
3 | set -u
4 | set -o pipefail
5 |
6 | if [ -z ${UNLOCALIZED_RESOURCES_FOLDER_PATH+x} ]; then
7 | # If UNLOCALIZED_RESOURCES_FOLDER_PATH is not set, then there's nowhere for us to copy
8 | # resources to, so exit 0 (signalling the script phase was successful).
9 | exit 0
10 | fi
11 |
12 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
13 |
14 | RESOURCES_TO_COPY=${PODS_ROOT}/resources-to-copy-${TARGETNAME}.txt
15 | > "$RESOURCES_TO_COPY"
16 |
17 | XCASSET_FILES=()
18 |
19 | # This protects against multiple targets copying the same framework dependency at the same time. The solution
20 | # was originally proposed here: https://lists.samba.org/archive/rsync/2008-February/020158.html
21 | RSYNC_PROTECT_TMP_FILES=(--filter "P .*.??????")
22 |
23 | case "${TARGETED_DEVICE_FAMILY:-}" in
24 | 1,2)
25 | TARGET_DEVICE_ARGS="--target-device ipad --target-device iphone"
26 | ;;
27 | 1)
28 | TARGET_DEVICE_ARGS="--target-device iphone"
29 | ;;
30 | 2)
31 | TARGET_DEVICE_ARGS="--target-device ipad"
32 | ;;
33 | 3)
34 | TARGET_DEVICE_ARGS="--target-device tv"
35 | ;;
36 | 4)
37 | TARGET_DEVICE_ARGS="--target-device watch"
38 | ;;
39 | *)
40 | TARGET_DEVICE_ARGS="--target-device mac"
41 | ;;
42 | esac
43 |
44 | install_resource()
45 | {
46 | if [[ "$1" = /* ]] ; then
47 | RESOURCE_PATH="$1"
48 | else
49 | RESOURCE_PATH="${PODS_ROOT}/$1"
50 | fi
51 | if [[ ! -e "$RESOURCE_PATH" ]] ; then
52 | cat << EOM
53 | error: Resource "$RESOURCE_PATH" not found. Run 'pod install' to update the copy resources script.
54 | EOM
55 | exit 1
56 | fi
57 | case $RESOURCE_PATH in
58 | *.storyboard)
59 | 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}" || true
60 | 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}
61 | ;;
62 | *.xib)
63 | 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}" || true
64 | 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}
65 | ;;
66 | *.framework)
67 | echo "mkdir -p ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
68 | mkdir -p "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
69 | echo "rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" $RESOURCE_PATH ${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}" || true
70 | rsync --delete -av "${RSYNC_PROTECT_TMP_FILES[@]}" "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}"
71 | ;;
72 | *.xcdatamodel)
73 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH"`.mom\"" || true
74 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodel`.mom"
75 | ;;
76 | *.xcdatamodeld)
77 | echo "xcrun momc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd\"" || true
78 | xcrun momc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcdatamodeld`.momd"
79 | ;;
80 | *.xcmappingmodel)
81 | echo "xcrun mapc \"$RESOURCE_PATH\" \"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm\"" || true
82 | xcrun mapc "$RESOURCE_PATH" "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/`basename "$RESOURCE_PATH" .xcmappingmodel`.cdm"
83 | ;;
84 | *.xcassets)
85 | ABSOLUTE_XCASSET_FILE="$RESOURCE_PATH"
86 | XCASSET_FILES+=("$ABSOLUTE_XCASSET_FILE")
87 | ;;
88 | *)
89 | echo "$RESOURCE_PATH" || true
90 | echo "$RESOURCE_PATH" >> "$RESOURCES_TO_COPY"
91 | ;;
92 | esac
93 | }
94 |
95 | mkdir -p "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
96 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
97 | if [[ "${ACTION}" == "install" ]] && [[ "${SKIP_INSTALL}" == "NO" ]]; then
98 | mkdir -p "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
99 | rsync -avr --copy-links --no-relative --exclude '*/.svn/*' --files-from="$RESOURCES_TO_COPY" / "${INSTALL_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}"
100 | fi
101 | rm -f "$RESOURCES_TO_COPY"
102 |
103 | if [[ -n "${WRAPPER_EXTENSION}" ]] && [ "`xcrun --find actool`" ] && [ -n "${XCASSET_FILES:-}" ]
104 | then
105 | # Find all other xcassets (this unfortunately includes those of path pods and other targets).
106 | OTHER_XCASSETS=$(find "$PWD" -iname "*.xcassets" -type d)
107 | while read line; do
108 | if [[ $line != "${PODS_ROOT}*" ]]; then
109 | XCASSET_FILES+=("$line")
110 | fi
111 | done <<<"$OTHER_XCASSETS"
112 |
113 | if [ -z ${ASSETCATALOG_COMPILER_APPICON_NAME+x} ]; then
114 | 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}"
115 | else
116 | 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}" --app-icon "${ASSETCATALOG_COMPILER_APPICON_NAME}" --output-partial-info-plist "${TARGET_TEMP_DIR}/assetcatalog_generated_info_cocoapods.plist"
117 | fi
118 | fi
119 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 |
14 | FOUNDATION_EXPORT double Pods_FunkyVersionNumber;
15 | FOUNDATION_EXPORT const unsigned char Pods_FunkyVersionString[];
16 |
17 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky.debug.xcconfig:
--------------------------------------------------------------------------------
1 | CODE_SIGN_IDENTITY =
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "${PODS_ROOT}/Crashlytics/OSX" "${PODS_ROOT}/Fabric/OSX"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks'
5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers"
6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "Security" -framework "ShortcutRecorder" -framework "SystemConfiguration"
7 | PODS_BUILD_DIR = ${BUILD_DIR}
8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
10 | PODS_ROOT = ${SRCROOT}/Pods
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky.modulemap:
--------------------------------------------------------------------------------
1 | framework module Pods_Funky {
2 | umbrella header "Pods-Funky-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/Pods-Funky/Pods-Funky.release.xcconfig:
--------------------------------------------------------------------------------
1 | CODE_SIGN_IDENTITY =
2 | FRAMEWORK_SEARCH_PATHS = $(inherited) "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder" "${PODS_ROOT}/Crashlytics/OSX" "${PODS_ROOT}/Fabric/OSX"
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | LD_RUNPATH_SEARCH_PATHS = $(inherited) '@executable_path/../Frameworks' '@loader_path/Frameworks'
5 | OTHER_CFLAGS = $(inherited) -iquote "${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder/ShortcutRecorder.framework/Headers"
6 | OTHER_LDFLAGS = $(inherited) -ObjC -l"c++" -l"z" -framework "Crashlytics" -framework "Fabric" -framework "Security" -framework "ShortcutRecorder" -framework "SystemConfiguration"
7 | PODS_BUILD_DIR = ${BUILD_DIR}
8 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
9 | PODS_PODFILE_DIR_PATH = ${SRCROOT}/.
10 | PODS_ROOT = ${SRCROOT}/Pods
11 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/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.17.0
19 | CFBundleSignature
20 | ????
21 | CFBundleVersion
22 | ${CURRENT_PROJECT_VERSION}
23 | NSPrincipalClass
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/ResourceBundle-ShortcutRecorder-Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleIdentifier
8 | ${PRODUCT_BUNDLE_IDENTIFIER}
9 | CFBundleInfoDictionaryVersion
10 | 6.0
11 | CFBundleName
12 | ${PRODUCT_NAME}
13 | CFBundlePackageType
14 | BNDL
15 | CFBundleShortVersionString
16 | 2.17.0
17 | CFBundleSignature
18 | ????
19 | CFBundleVersion
20 | 1
21 | NSPrincipalClass
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/ShortcutRecorder-dummy.m:
--------------------------------------------------------------------------------
1 | #import
2 | @interface PodsDummy_ShortcutRecorder : NSObject
3 | @end
4 | @implementation PodsDummy_ShortcutRecorder
5 | @end
6 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/ShortcutRecorder-prefix.pch:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | //
14 | // Prefix header for all source files of the 'ShortcutRecorder' target in the 'ShortcutRecorder' project
15 | //
16 |
17 | #ifdef __OBJC__
18 | #import
19 | #import
20 | #endif
21 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/ShortcutRecorder-umbrella.h:
--------------------------------------------------------------------------------
1 | #ifdef __OBJC__
2 | #import
3 | #else
4 | #ifndef FOUNDATION_EXPORT
5 | #if defined(__cplusplus)
6 | #define FOUNDATION_EXPORT extern "C"
7 | #else
8 | #define FOUNDATION_EXPORT extern
9 | #endif
10 | #endif
11 | #endif
12 |
13 | #import "ShortcutRecorder.h"
14 | #import "SRCommon.h"
15 | #import "SRKeyCodeTransformer.h"
16 | #import "SRKeyEquivalentModifierMaskTransformer.h"
17 | #import "SRKeyEquivalentTransformer.h"
18 | #import "SRModifierFlagsTransformer.h"
19 | #import "SRRecorderControl.h"
20 | #import "SRValidator.h"
21 | #import "PTHotKey+ShortcutRecorder.h"
22 | #import "PTHotKey.h"
23 | #import "PTHotKeyCenter.h"
24 | #import "PTKeyCodeTranslator.h"
25 | #import "PTKeyCombo.h"
26 |
27 | FOUNDATION_EXPORT double ShortcutRecorderVersionNumber;
28 | FOUNDATION_EXPORT const unsigned char ShortcutRecorderVersionString[];
29 |
30 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/ShortcutRecorder.modulemap:
--------------------------------------------------------------------------------
1 | framework module ShortcutRecorder {
2 | umbrella header "ShortcutRecorder-umbrella.h"
3 |
4 | export *
5 | module * { export * }
6 | }
7 |
--------------------------------------------------------------------------------
/Pods/Target Support Files/ShortcutRecorder/ShortcutRecorder.xcconfig:
--------------------------------------------------------------------------------
1 | CODE_SIGN_IDENTITY =
2 | CONFIGURATION_BUILD_DIR = ${PODS_CONFIGURATION_BUILD_DIR}/ShortcutRecorder
3 | GCC_PREPROCESSOR_DEFINITIONS = $(inherited) COCOAPODS=1
4 | OTHER_LDFLAGS = -framework "Carbon" -framework "Cocoa"
5 | PODS_BUILD_DIR = ${BUILD_DIR}
6 | PODS_CONFIGURATION_BUILD_DIR = ${PODS_BUILD_DIR}/$(CONFIGURATION)$(EFFECTIVE_PLATFORM_NAME)
7 | PODS_ROOT = ${SRCROOT}
8 | PODS_TARGET_SRCROOT = ${PODS_ROOT}/ShortcutRecorder
9 | PRODUCT_BUNDLE_IDENTIFIER = org.cocoapods.${PRODUCT_NAME:rfc1034identifier}
10 | SKIP_INSTALL = YES
11 |
--------------------------------------------------------------------------------
/Privacy.md:
--------------------------------------------------------------------------------
1 | # Privacy Policy
2 |
3 | Effective date: December 27, 2018
4 |
5 | Funky ("us", "we", or "our") operates the Funky macOS application (the "Service").
6 |
7 | This page informs you of our policies regarding the collection, use, and disclosure of personal data when you use our Service and the choices you have associated with that data. Our Privacy Policy for Funky is based on the Free Privacy Policy Template Website.
8 |
9 | We use your data to provide and improve the Service. By using the Service, you agree to the collection and use of information in accordance with this policy. Unless otherwise defined in this Privacy Policy, terms used in this Privacy Policy have the same meanings as in our Terms and Conditions.
10 |
11 | ## Information Collection And Use
12 |
13 | We collect several different types of information for various purposes to provide and improve our Service to you.
14 |
15 | ### Types of Data Collected
16 |
17 | - Anonymous Cookies and Usage Data
18 |
19 | #### Usage Data
20 |
21 | When you access the Service, we may collect certain information automatically, including, but not limited to, the type of device you use, your operating system, unique device identifiers and other diagnostic data ("Usage Data").
22 |
23 | #### Tracking & Cookies Data
24 |
25 | We use cookies and similar tracking technologies to track the activity on our Service and hold certain information.
26 |
27 | Cookies are files with small amount of data which may include an anonymous unique identifier. Cookies are sent to your browser from a website and stored on your device. Tracking technologies also used are beacons, tags, and scripts to collect and track information and to improve and analyze our Service.
28 |
29 | ### Use of Data
30 |
31 | Funky uses the collected data for various purposes:
32 |
33 | - To provide and maintain the Service
34 | - To provide analysis or valuable information so that we can improve the Service
35 | - To monitor the usage of the Service
36 | - To detect, prevent and address technical issues
37 |
38 | # Transfer Of Data
39 |
40 | Your information, may be transferred to — and maintained on — computers located outside of your state, province, country or other governmental jurisdiction where the data protection laws may differ than those from your jurisdiction.
41 |
42 | If you are located outside Denmark, please note that we transfer the data to Denmark and process it there.
43 |
44 | Your consent to this Privacy Policy followed by your submission of such information represents your agreement to that transfer.
45 |
46 | Funky will take all steps reasonably necessary to ensure that your data is treated securely and in accordance with this Privacy Policy and no transfer of your data will take place to an organization or a country unless there are adequate controls in place including the security of your data and other personal information.
47 |
48 | ## Disclosure Of Data
49 |
50 | ### Legal Requirements
51 |
52 | Funky may disclose collected data in the good faith belief that such action is necessary to:
53 |
54 | - To comply with a legal obligation
55 | - To protect and defend the rights or property of Funky
56 | - To prevent or investigate possible wrongdoing in connection with the Service
57 | - To protect the personal safety of users of the Service or the public
58 | - To protect against legal liability
59 |
60 | ### Security Of Data
61 |
62 | The security of your data is important to us, but remember that no method of transmission over the Internet, or method of electronic storage is 100% secure. While we strive to use commercially acceptable means to protect your Personal Data, we cannot guarantee its absolute security.
63 |
64 | ## Service Providers
65 |
66 | We may employ third party companies and individuals to facilitate our Service ("Service Providers"), to provide the Service on our behalf, to perform Service-related services or to assist us in analyzing how our Service is used.
67 |
68 | These third parties have access to your Personal Data only to perform these tasks on our behalf and are obligated not to disclose or use it for any other purpose.
69 |
70 | ### Analytics & Crash Reporting
71 |
72 | We may use third-party Service Providers to monitor and analyze the use of our Service as well as to track crashes in the Service.
73 |
74 | #### Fabric / Crashlytics
75 |
76 | Fabric is a web analytics and crash tracking service offered by Twitter that tracks and reports website traffic. Fabric uses the data collected to track and monitor the use of our Service. This data is shared with other Twitter services. Twitter may use the collected data to contextualize and personalize the ads of its own advertising network.
77 |
78 | For more information on the privacy practices of Fabric, please visit the Fabric Terms of Service web page: https://fabric.io/terms
79 |
80 | #### Links To Other Sites
81 |
82 | Our Service may contain links to other sites that are not operated by us. If you click on a third party link, you will be directed to that third party's site. We strongly advise you to review the Privacy Policy of every site you visit.
83 |
84 | We have no control over and assume no responsibility for the content, privacy policies or practices of any third party sites or services.
85 |
86 | ## Children's Privacy
87 |
88 | Our Service does not address anyone under the age of 18 ("Children").
89 |
90 | We do not knowingly collect personally identifiable information from anyone under the age of 18. If you are a parent or guardian and you are aware that your Children has provided us with Personal Data, please contact us. If we become aware that we have collected Personal Data from children without verification of parental consent, we take steps to remove that information from our servers.
91 |
92 | ## Changes To This Privacy Policy
93 |
94 | We may update our Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page.
95 |
96 | We will let you know via email and/or a prominent notice on our Service, prior to the change becoming effective and update the "effective date" at the top of this Privacy Policy.
97 |
98 | You are advised to review this Privacy Policy periodically for any changes. Changes to this Privacy Policy are effective when they are posted on this page.
99 |
100 | ## Contact Us
101 |
102 | If you have any questions about this Privacy Policy, please contact us:
103 |
104 | By email: catalin.stan@me.com
105 | By visiting this page on our website: https://github.com/thecatalinstan/Funky/issues
106 |
--------------------------------------------------------------------------------
/Readme.md:
--------------------------------------------------------------------------------
1 | # Funky
2 |
3 | Funky is a status bar utility which allows you to easily toggle the function key on your Mac on a per app basis.
4 |
5 | ## Usage
6 |
7 | Funky maintains a list of apps for which it will set the function key to standard F1, F2, etc. In order to edit the list, follow the steps below:
8 |
9 | 1. From the status bar icon trigger the *Preferences* dialog and navigate to *Apps*.
10 | 2. Use the `+` sign to add a new app bundle.
11 |
12 | ## Bugs / Feature Requests
13 |
14 | Use GitHub's [issue tracker](https://github.com/thecatalinstan/Funky/issues) to submit bug reports feature requests, or just to say hi.
15 |
16 | ## Pre-Built Binaries
17 |
18 | You can download pre-built binaries of Funky from two sources:
19 |
20 | - **GitHub:** see the [Releases](https://github.com/thecatalinstan/Funky/releases) section. [https://github.com/thecatalinstan/Funky/releases](https://github.com/thecatalinstan/Funky/releases)
21 | - **Mac AppStore:** free to download from the [Mac AppStore](https://itunes.apple.com/app/funky/id1210707379) at [https://itunes.apple.com/app/funky/id1210707379](https://itunes.apple.com/app/funky/id1210707379).
22 |
23 | ## Building
24 |
25 | Building should be straightforward, except for one little caveat: Funky is also distributed through the Mac AppStore, therefore it performs a [MAS receipt validation](https://developer.apple.com/library/archive/releasenotes/General/ValidateAppStoreReceipt/Introduction.html#//apple_ref/doc/uid/TP40010573-CH105-SW1).
26 |
27 | This means that if you try to run a *release* build, it will fail to start as there is no actual Mac AppStore receipt present.
28 |
29 | In order to disable the check, simply set the `DEVELOPMENT` variable to `1`, either in the `main.m` file or through a compile-time define.
30 |
31 | ---
32 |
33 | ## Contributors Welcome
34 |
35 | Since my time is fairly limited, contributions are more than welcome to, well, *contribute*. If you think Funky is a useful tool and your macOS kung-fu is strong, feel free to fork and submit a pull request.
36 |
37 | ## Privacy Policy
38 |
39 | Please carefully read the [Privacy Policy](https://github.com/thecatalinstan/Funky/blob/master/Privacy.md).
40 |
--------------------------------------------------------------------------------