├── CONTRIBUTING.md
├── demo.gif
├── .DS_Store
├── Pomosh
├── Sound
│ ├── done2.mp3
│ ├── start.wav
│ ├── touch.wav
│ └── touch2.wav
├── Assets.xcassets
│ ├── Contents.json
│ ├── Back.imageset
│ │ ├── back.png
│ │ ├── back (1).png
│ │ ├── back (2).png
│ │ ├── back (3)-1.png
│ │ ├── back (3).png
│ │ ├── back (4)-1.png
│ │ ├── back (4).png
│ │ ├── back (5)-1.png
│ │ ├── back (5).png
│ │ └── Contents.json
│ ├── Quit.imageset
│ │ ├── power.png
│ │ ├── power (1).png
│ │ ├── power (2).png
│ │ ├── power (3).png
│ │ ├── power (4).png
│ │ ├── power (5).png
│ │ ├── power (3)-1.png
│ │ ├── power (4)-1.png
│ │ ├── power (5)-1.png
│ │ └── Contents.json
│ ├── Work.imageset
│ │ ├── fire.png
│ │ ├── fire (1).png
│ │ ├── fire (2).png
│ │ ├── fire (3)-1.png
│ │ ├── fire (3).png
│ │ ├── fire (4)-1.png
│ │ ├── fire (4).png
│ │ ├── fire (5)-1.png
│ │ ├── fire (5).png
│ │ └── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── 16@1x.png
│ │ ├── 16@2x.png
│ │ ├── 32@1x.png
│ │ ├── 32@2x.png
│ │ ├── 128@1x.png
│ │ ├── 128@2x.png
│ │ ├── 256@1x.png
│ │ ├── 256@2x.png
│ │ ├── 512@1x.png
│ │ ├── 512@2x.png
│ │ └── Contents.json
│ ├── Break.imageset
│ │ ├── clock (1).png
│ │ ├── clock (2).png
│ │ ├── clock (3).png
│ │ ├── clock (4).png
│ │ ├── clock (5).png
│ │ ├── clock (6).png
│ │ ├── clock (4)-1.png
│ │ ├── clock (5)-1.png
│ │ ├── clock (6)-1.png
│ │ └── Contents.json
│ ├── Play.imageset
│ │ ├── play-dark.png
│ │ ├── play-light.png
│ │ ├── play-light-1.png
│ │ └── Contents.json
│ ├── Settings.imageset
│ │ ├── setup.png
│ │ ├── setup (1).png
│ │ ├── setup (2).png
│ │ ├── setup (3)-1.png
│ │ ├── setup (3).png
│ │ ├── setup (4)-1.png
│ │ ├── setup (4).png
│ │ ├── setup (5)-1.png
│ │ ├── setup (5).png
│ │ └── Contents.json
│ ├── reload.imageset
│ │ ├── reload.png
│ │ ├── reload (1).png
│ │ ├── reload (2).png
│ │ ├── reload (3).png
│ │ ├── reload (4).png
│ │ ├── reload (5).png
│ │ └── Contents.json
│ ├── Pause.imageset
│ │ ├── pause-dark.png
│ │ ├── pause-light.png
│ │ ├── pause-light-1.png
│ │ └── Contents.json
│ ├── skip.imageset
│ │ ├── fast-forward.png
│ │ ├── fast-forward (1).png
│ │ ├── fast-forward (2).png
│ │ ├── fast-forward (3).png
│ │ ├── fast-forward (4).png
│ │ ├── fast-forward (5).png
│ │ └── Contents.json
│ ├── Coffee.imageset
│ │ ├── coffee-dark 2.png
│ │ ├── coffee-dark 3.png
│ │ ├── coffee-dark-1.png
│ │ ├── coffee-dark.png
│ │ ├── coffee-light.png
│ │ ├── coffee-dark 2-1.png
│ │ ├── coffee-dark 3-1.png
│ │ ├── coffee-light 2.png
│ │ ├── coffee-light 3.png
│ │ └── Contents.json
│ ├── menubar-icon.imageset
│ │ ├── vegetarian-1.png
│ │ ├── vegetarian (3).png
│ │ ├── vegetarian (6).png
│ │ ├── vegetarian (7).png
│ │ ├── vegetarian (8).png
│ │ ├── icons8-tomato-30.png
│ │ ├── icons8-tomato-54.png
│ │ ├── icons8-tomato-60.png
│ │ ├── vegetarian (1)-1.png
│ │ └── Contents.json
│ ├── Background.colorset
│ │ └── Contents.json
│ ├── break1.colorset
│ │ └── Contents.json
│ ├── working1.colorset
│ │ └── Contents.json
│ ├── text.colorset
│ │ └── Contents.json
│ ├── Neon.colorset
│ │ └── Contents.json
│ └── Green.colorset
│ │ └── Contents.json
├── Fonts
│ └── SpaceMono-Regular.ttf
├── Preview Content
│ └── Preview Assets.xcassets
│ │ └── Contents.json
├── Pomosh.xcdatamodeld
│ ├── .xccurrentversion
│ └── Pomosh.xcdatamodel
│ │ └── contents
├── Pomosh.entitlements
├── Components
│ ├── Button.swift
│ ├── TooltipComponent.swift
│ └── Timer.swift
├── Views
│ ├── AboutView.swift
│ ├── PagerView.swift
│ └── TimerRing.swift
├── Info.plist
├── Utils.swift
├── AppDelegate.swift
├── ContentView.swift
└── Main.storyboard
├── Pomosh.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ ├── xcuserdata
│ │ ├── fedora.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ │ └── stevenselcuk.xcuserdatad
│ │ │ └── UserInterfaceState.xcuserstate
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ ├── fedora.xcuserdatad
│ │ └── xcschemes
│ │ │ └── xcschememanagement.plist
│ └── stevenselcuk.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── .github
└── ISSUE_TEMPLATE
│ ├── feature_request.md
│ └── bug_report.md
├── LICENSE
├── CODE_OF_CONDUCT.md
└── README.md
/CONTRIBUTING.md:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/demo.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/demo.gif
--------------------------------------------------------------------------------
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/.DS_Store
--------------------------------------------------------------------------------
/Pomosh/Sound/done2.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Sound/done2.mp3
--------------------------------------------------------------------------------
/Pomosh/Sound/start.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Sound/start.wav
--------------------------------------------------------------------------------
/Pomosh/Sound/touch.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Sound/touch.wav
--------------------------------------------------------------------------------
/Pomosh/Sound/touch2.wav:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Sound/touch2.wav
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Pomosh/Fonts/SpaceMono-Regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Fonts/SpaceMono-Regular.ttf
--------------------------------------------------------------------------------
/Pomosh/Preview Content/Preview Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "author" : "xcode",
4 | "version" : 1
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/16@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/16@1x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/16@2x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/32@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/32@1x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/32@2x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (3)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (3)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (4)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (4)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (5)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (5)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/back (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Back.imageset/back (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (6).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (6).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Play.imageset/play-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Play.imageset/play-dark.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Play.imageset/play-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Play.imageset/play-light.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (3)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (3)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (4)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (4)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (5)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (5)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/fire (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Work.imageset/fire (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/reload.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/reload.imageset/reload.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/128@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/128@1x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/128@2x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/256@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/256@1x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/256@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/256@2x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/512@1x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/512@1x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/AppIcon.appiconset/512@2x.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (4)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (4)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (5)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (5)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/clock (6)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Break.imageset/clock (6)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Pause.imageset/pause-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Pause.imageset/pause-dark.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Pause.imageset/pause-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Pause.imageset/pause-light.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Play.imageset/play-light-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Play.imageset/play-light-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (3)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (3)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (4)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (4)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/power (5)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Quit.imageset/power (5)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/reload (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/reload.imageset/reload (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/reload (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/reload.imageset/reload (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/reload (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/reload.imageset/reload (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/reload (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/reload.imageset/reload (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/reload (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/reload.imageset/reload (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/fast-forward.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/skip.imageset/fast-forward.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 2.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 3.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-light.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-light.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Pause.imageset/pause-light-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Pause.imageset/pause-light-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (3)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (3)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (4)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (4)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (5)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (5)-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/setup (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Settings.imageset/setup (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 2-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 2-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 3-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-dark 3-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-light 2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-light 2.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/coffee-light 3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/Coffee.imageset/coffee-light 3.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/fast-forward (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/skip.imageset/fast-forward (1).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/fast-forward (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/skip.imageset/fast-forward (2).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/fast-forward (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/skip.imageset/fast-forward (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/fast-forward (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/skip.imageset/fast-forward (4).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/fast-forward (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/skip.imageset/fast-forward (5).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian-1.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (3).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (6).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (6).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (7).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (7).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (8).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (8).png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/icons8-tomato-30.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/icons8-tomato-30.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/icons8-tomato-54.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/icons8-tomato-54.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/icons8-tomato-60.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/icons8-tomato-60.png
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (1)-1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh/Assets.xcassets/menubar-icon.imageset/vegetarian (1)-1.png
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/Pomosh/Pomosh.xcdatamodeld/.xccurrentversion:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/project.xcworkspace/xcuserdata/fedora.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh.xcodeproj/project.xcworkspace/xcuserdata/fedora.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/project.xcworkspace/xcuserdata/stevenselcuk.xcuserdatad/UserInterfaceState.xcuserstate:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/stevenselcuk/Pomosh-macOS/HEAD/Pomosh.xcodeproj/project.xcworkspace/xcuserdata/stevenselcuk.xcuserdatad/UserInterfaceState.xcuserstate
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/Pomosh/Pomosh.xcdatamodeld/Pomosh.xcdatamodel/contents:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/Pomosh/Pomosh.entitlements:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | com.apple.security.app-sandbox
6 |
7 | com.apple.security.files.user-selected.read-only
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Background.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x3F",
9 | "green" : "0x29",
10 | "red" : "0x27"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/break1.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x75",
9 | "green" : "0x01",
10 | "red" : "0xFF"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/working1.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0xD2",
9 | "green" : "0xC8",
10 | "red" : "0x13"
11 | }
12 | },
13 | "idiom" : "universal"
14 | }
15 | ],
16 | "info" : {
17 | "author" : "xcode",
18 | "version" : 1
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/xcuserdata/fedora.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Pomosh.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/xcuserdata/stevenselcuk.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | Pomosh.xcscheme_^#shared#^_
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/Pomosh/Components/Button.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Button.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct PomoshButtonStyle: ButtonStyle {
12 | func makeBody(configuration: Self.Configuration) -> some View {
13 | configuration.label
14 | .foregroundColor(.white)
15 | .background(Color.gray.opacity(0))
16 | .frame(minWidth: 100, minHeight: 40, alignment: .center)
17 | .padding(5)
18 | .scaleEffect(configuration.isPressed ? 0.9 : 1.0)
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/Pomosh/Components/TooltipComponent.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TooltipComponent.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct Tooltip: NSViewRepresentable {
12 | let tooltip: String
13 |
14 | func makeNSView(context: NSViewRepresentableContext) -> NSView {
15 | let view = NSView()
16 | view.toolTip = tooltip
17 | return view
18 | }
19 |
20 | func updateNSView(_ nsView: NSView, context: NSViewRepresentableContext) {
21 | nsView.toolTip = tooltip
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/feature_request.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Feature request
3 | about: Suggest an idea for this project
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Is your feature request related to a problem? Please describe.**
11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]
12 |
13 | **Describe the solution you'd like**
14 | A clear and concise description of what you want to happen.
15 |
16 | **Describe alternatives you've considered**
17 | A clear and concise description of any alternative solutions or features you've considered.
18 |
19 | **Additional context**
20 | Add any other context or screenshots about the feature request here.
21 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/text.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0.000",
9 | "green" : "0.000",
10 | "red" : "0.000"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "dark"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "1.000",
27 | "green" : "1.000",
28 | "red" : "1.000"
29 | }
30 | },
31 | "idiom" : "universal"
32 | }
33 | ],
34 | "info" : {
35 | "author" : "xcode",
36 | "version" : 1
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/bug_report.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Bug report
3 | about: Create a report to help us improve
4 | title: ''
5 | labels: ''
6 | assignees: ''
7 |
8 | ---
9 |
10 | **Describe the bug**
11 | A clear and concise description of what the bug is.
12 |
13 | **To Reproduce**
14 | Steps to reproduce the behavior:
15 | 1. Go to '...'
16 | 2. Click on '....'
17 | 3. Scroll down to '....'
18 | 4. See error
19 |
20 | **Expected behavior**
21 | A clear and concise description of what you expected to happen.
22 |
23 | **Screenshots**
24 | If applicable, add screenshots to help explain your problem.
25 |
26 | **Desktop (please complete the following information):**
27 | - OS: [e.g. iOS]
28 | - Browser [e.g. chrome, safari]
29 | - Version [e.g. 22]
30 |
31 | **Smartphone (please complete the following information):**
32 | - Device: [e.g. iPhone6]
33 | - OS: [e.g. iOS8.1]
34 | - Browser [e.g. stock browser, safari]
35 | - Version [e.g. 22]
36 |
37 | **Additional context**
38 | Add any other context about the problem here.
39 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 Steven J. Selcuk
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/Pomosh/Views/AboutView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AboutView.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct AboutView: View {
12 | var body: some View {
13 | VStack {
14 | Text("About pomosh")
15 | }
16 | .padding()
17 | .frame(width: 340, height: 340, alignment: Alignment.topLeading)
18 |
19 | }
20 | }
21 |
22 |
23 | final class AboutWindowController: NSWindowController {
24 | convenience init() {
25 | let window = SwiftUIWindowForMenuBarApp()
26 | self.init(window: window)
27 |
28 | let view = AboutView()
29 |
30 | window.title = "About"
31 | window.styleMask = [
32 | .titled,
33 | .closable
34 | ]
35 | window.level = .modalPanel
36 | window.contentView = NSHostingView(rootView: view)
37 | window.center()
38 | }
39 |
40 | func showWindow() {
41 | NSApp.activate(ignoringOtherApps: true)
42 | window?.makeKeyAndOrderFront(nil)
43 | }
44 | }
45 |
46 |
47 | struct AboutView_Previews: PreviewProvider {
48 | static var previews: some View {
49 | AboutView()
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/reload.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "reload.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "dark"
13 | }
14 | ],
15 | "filename" : "reload (3).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "filename" : "reload (1).png",
21 | "idiom" : "universal",
22 | "scale" : "2x"
23 | },
24 | {
25 | "appearances" : [
26 | {
27 | "appearance" : "luminosity",
28 | "value" : "dark"
29 | }
30 | ],
31 | "filename" : "reload (4).png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "filename" : "reload (2).png",
37 | "idiom" : "universal",
38 | "scale" : "3x"
39 | },
40 | {
41 | "appearances" : [
42 | {
43 | "appearance" : "luminosity",
44 | "value" : "dark"
45 | }
46 | ],
47 | "filename" : "reload (5).png",
48 | "idiom" : "universal",
49 | "scale" : "3x"
50 | }
51 | ],
52 | "info" : {
53 | "author" : "xcode",
54 | "version" : 1
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Neon.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x87",
9 | "green" : "0xFE",
10 | "red" : "0x07"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "light"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "srgb",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.180",
27 | "green" : "0.180",
28 | "red" : "0.180"
29 | }
30 | },
31 | "idiom" : "universal"
32 | },
33 | {
34 | "appearances" : [
35 | {
36 | "appearance" : "luminosity",
37 | "value" : "dark"
38 | }
39 | ],
40 | "color" : {
41 | "color-space" : "srgb",
42 | "components" : {
43 | "alpha" : "1.000",
44 | "blue" : "0.529",
45 | "green" : "0.996",
46 | "red" : "0.027"
47 | }
48 | },
49 | "idiom" : "universal"
50 | }
51 | ],
52 | "info" : {
53 | "author" : "xcode",
54 | "version" : 1
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Green.colorset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "colors" : [
3 | {
4 | "color" : {
5 | "color-space" : "srgb",
6 | "components" : {
7 | "alpha" : "1.000",
8 | "blue" : "0x2E",
9 | "green" : "0x2E",
10 | "red" : "0x2E"
11 | }
12 | },
13 | "idiom" : "universal"
14 | },
15 | {
16 | "appearances" : [
17 | {
18 | "appearance" : "luminosity",
19 | "value" : "light"
20 | }
21 | ],
22 | "color" : {
23 | "color-space" : "display-p3",
24 | "components" : {
25 | "alpha" : "1.000",
26 | "blue" : "0.180",
27 | "green" : "0.180",
28 | "red" : "0.180"
29 | }
30 | },
31 | "idiom" : "universal"
32 | },
33 | {
34 | "appearances" : [
35 | {
36 | "appearance" : "luminosity",
37 | "value" : "dark"
38 | }
39 | ],
40 | "color" : {
41 | "color-space" : "srgb",
42 | "components" : {
43 | "alpha" : "1.000",
44 | "blue" : "0.698",
45 | "green" : "0.945",
46 | "red" : "0.000"
47 | }
48 | },
49 | "idiom" : "universal"
50 | }
51 | ],
52 | "info" : {
53 | "author" : "xcode",
54 | "version" : 1
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/skip.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "fast-forward.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "dark"
13 | }
14 | ],
15 | "filename" : "fast-forward (3).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "filename" : "fast-forward (1).png",
21 | "idiom" : "universal",
22 | "scale" : "2x"
23 | },
24 | {
25 | "appearances" : [
26 | {
27 | "appearance" : "luminosity",
28 | "value" : "dark"
29 | }
30 | ],
31 | "filename" : "fast-forward (4).png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "filename" : "fast-forward (2).png",
37 | "idiom" : "universal",
38 | "scale" : "3x"
39 | },
40 | {
41 | "appearances" : [
42 | {
43 | "appearance" : "luminosity",
44 | "value" : "dark"
45 | }
46 | ],
47 | "filename" : "fast-forward (5).png",
48 | "idiom" : "universal",
49 | "scale" : "3x"
50 | }
51 | ],
52 | "info" : {
53 | "author" : "xcode",
54 | "version" : 1
55 | }
56 | }
57 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "16@1x.png",
5 | "idiom" : "mac",
6 | "scale" : "1x",
7 | "size" : "16x16"
8 | },
9 | {
10 | "filename" : "16@2x.png",
11 | "idiom" : "mac",
12 | "scale" : "2x",
13 | "size" : "16x16"
14 | },
15 | {
16 | "filename" : "32@1x.png",
17 | "idiom" : "mac",
18 | "scale" : "1x",
19 | "size" : "32x32"
20 | },
21 | {
22 | "filename" : "32@2x.png",
23 | "idiom" : "mac",
24 | "scale" : "2x",
25 | "size" : "32x32"
26 | },
27 | {
28 | "filename" : "128@1x.png",
29 | "idiom" : "mac",
30 | "scale" : "1x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "filename" : "128@2x.png",
35 | "idiom" : "mac",
36 | "scale" : "2x",
37 | "size" : "128x128"
38 | },
39 | {
40 | "filename" : "256@1x.png",
41 | "idiom" : "mac",
42 | "scale" : "1x",
43 | "size" : "256x256"
44 | },
45 | {
46 | "filename" : "256@2x.png",
47 | "idiom" : "mac",
48 | "scale" : "2x",
49 | "size" : "256x256"
50 | },
51 | {
52 | "filename" : "512@1x.png",
53 | "idiom" : "mac",
54 | "scale" : "1x",
55 | "size" : "512x512"
56 | },
57 | {
58 | "filename" : "512@2x.png",
59 | "idiom" : "mac",
60 | "scale" : "2x",
61 | "size" : "512x512"
62 | }
63 | ],
64 | "info" : {
65 | "author" : "xcode",
66 | "version" : 1
67 | }
68 | }
69 |
--------------------------------------------------------------------------------
/Pomosh/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ATSApplicationFontsPath
6 | Fonts
7 | CFBundleDevelopmentRegion
8 | $(DEVELOPMENT_LANGUAGE)
9 | CFBundleExecutable
10 | $(EXECUTABLE_NAME)
11 | CFBundleIconFile
12 |
13 | CFBundleIdentifier
14 | $(PRODUCT_BUNDLE_IDENTIFIER)
15 | CFBundleInfoDictionaryVersion
16 | 6.0
17 | CFBundleName
18 | $(PRODUCT_NAME)
19 | CFBundlePackageType
20 | $(PRODUCT_BUNDLE_PACKAGE_TYPE)
21 | CFBundleShortVersionString
22 | $(MARKETING_VERSION)
23 | CFBundleVersion
24 | $(CURRENT_PROJECT_VERSION)
25 | LSApplicationCategoryType
26 | public.app-category.productivity
27 | LSMinimumSystemVersion
28 | $(MACOSX_DEPLOYMENT_TARGET)
29 | LSUIElement
30 |
31 | NSHumanReadableCopyright
32 | Copyright © 2021 Steven J. Selcuk. All rights reserved.
33 | NSMainStoryboardFile
34 | Main
35 | NSPrincipalClass
36 | NSApplication
37 | NSSupportsAutomaticTermination
38 |
39 | NSSupportsSuddenTermination
40 |
41 | UIAppFonts
42 |
43 | Fonts/SpaceMono-Regular.ttf
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/Pomosh/Views/PagerView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // PagerView.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct PagerView: View {
12 | let pageCount: Int
13 | @Binding var currentIndex: Int
14 | let content: Content
15 |
16 | @GestureState private var translation: CGFloat = 0
17 |
18 | init(pageCount: Int, currentIndex: Binding, @ViewBuilder content: () -> Content) {
19 | self.pageCount = pageCount
20 | self._currentIndex = currentIndex
21 | self.content = content()
22 | }
23 |
24 | var body: some View {
25 | GeometryReader { geometry in
26 | HStack(spacing: 0) {
27 | self.content.frame(width: geometry.size.width)
28 | }
29 | .frame(width: geometry.size.width, alignment: .leading)
30 | .offset(x: -CGFloat(self.currentIndex) * geometry.size.width)
31 | .offset(x: self.translation)
32 | .animation(.interactiveSpring(response: 0.6, dampingFraction: 0.6, blendDuration: 0))
33 | .gesture(
34 |
35 | DragGesture().updating(self.$translation) { value, state, _ in
36 | state = value.translation.width
37 | }.onEnded { value in
38 | let offset = value.translation.width / geometry.size.width
39 | let newIndex = (CGFloat(self.currentIndex) - offset).rounded()
40 | self.currentIndex = min(max(Int(newIndex), 0), self.pageCount - 1)
41 | }
42 | )
43 | }
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Pause.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "pause-light-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "pause-dark.png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "pause-light.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "idiom" : "universal",
32 | "scale" : "2x"
33 | },
34 | {
35 | "appearances" : [
36 | {
37 | "appearance" : "luminosity",
38 | "value" : "light"
39 | }
40 | ],
41 | "idiom" : "universal",
42 | "scale" : "2x"
43 | },
44 | {
45 | "appearances" : [
46 | {
47 | "appearance" : "luminosity",
48 | "value" : "dark"
49 | }
50 | ],
51 | "idiom" : "universal",
52 | "scale" : "2x"
53 | },
54 | {
55 | "idiom" : "universal",
56 | "scale" : "3x"
57 | },
58 | {
59 | "appearances" : [
60 | {
61 | "appearance" : "luminosity",
62 | "value" : "light"
63 | }
64 | ],
65 | "idiom" : "universal",
66 | "scale" : "3x"
67 | },
68 | {
69 | "appearances" : [
70 | {
71 | "appearance" : "luminosity",
72 | "value" : "dark"
73 | }
74 | ],
75 | "idiom" : "universal",
76 | "scale" : "3x"
77 | }
78 | ],
79 | "info" : {
80 | "author" : "xcode",
81 | "version" : 1
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Play.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "play-light-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "play-dark.png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "play-light.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "idiom" : "universal",
32 | "scale" : "2x"
33 | },
34 | {
35 | "appearances" : [
36 | {
37 | "appearance" : "luminosity",
38 | "value" : "light"
39 | }
40 | ],
41 | "idiom" : "universal",
42 | "scale" : "2x"
43 | },
44 | {
45 | "appearances" : [
46 | {
47 | "appearance" : "luminosity",
48 | "value" : "dark"
49 | }
50 | ],
51 | "idiom" : "universal",
52 | "scale" : "2x"
53 | },
54 | {
55 | "idiom" : "universal",
56 | "scale" : "3x"
57 | },
58 | {
59 | "appearances" : [
60 | {
61 | "appearance" : "luminosity",
62 | "value" : "light"
63 | }
64 | ],
65 | "idiom" : "universal",
66 | "scale" : "3x"
67 | },
68 | {
69 | "appearances" : [
70 | {
71 | "appearance" : "luminosity",
72 | "value" : "dark"
73 | }
74 | ],
75 | "idiom" : "universal",
76 | "scale" : "3x"
77 | }
78 | ],
79 | "info" : {
80 | "author" : "xcode",
81 | "version" : 1
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Back.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "back (3)-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "back (3).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "back.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "back (4)-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "back (4).png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "back (1).png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "back (5)-1.png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "back (5).png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "back (2).png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Work.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "fire (3)-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "fire (3).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "fire.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "fire (4)-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "fire (4).png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "fire (1).png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "fire (5)-1.png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "fire (5).png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "fire (2).png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Quit.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "power (3)-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "power (3).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "power.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "power (4)-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "power (4).png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "power (1).png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "power (5)-1.png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "power (5).png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "power (2).png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Break.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "clock (4)-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "clock (4).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "clock (1).png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "clock (5)-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "clock (5).png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "clock (2).png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "clock (6)-1.png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "clock (6).png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "clock (3).png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Settings.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "setup (3)-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "setup (3).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "setup.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "setup (4)-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "setup (4).png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "setup (1).png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "setup (5)-1.png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "setup (5).png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "setup (2).png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/Coffee.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "coffee-dark-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "coffee-dark.png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "coffee-light 3.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "coffee-dark 2-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "coffee-dark 2.png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "coffee-light 2.png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "coffee-dark 3-1.png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "coffee-dark 3.png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "coffee-light.png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Assets.xcassets/menubar-icon.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "vegetarian-1.png",
5 | "idiom" : "universal",
6 | "scale" : "1x"
7 | },
8 | {
9 | "appearances" : [
10 | {
11 | "appearance" : "luminosity",
12 | "value" : "light"
13 | }
14 | ],
15 | "filename" : "vegetarian (6).png",
16 | "idiom" : "universal",
17 | "scale" : "1x"
18 | },
19 | {
20 | "appearances" : [
21 | {
22 | "appearance" : "luminosity",
23 | "value" : "dark"
24 | }
25 | ],
26 | "filename" : "icons8-tomato-30.png",
27 | "idiom" : "universal",
28 | "scale" : "1x"
29 | },
30 | {
31 | "filename" : "vegetarian (1)-1.png",
32 | "idiom" : "universal",
33 | "scale" : "2x"
34 | },
35 | {
36 | "appearances" : [
37 | {
38 | "appearance" : "luminosity",
39 | "value" : "light"
40 | }
41 | ],
42 | "filename" : "vegetarian (7).png",
43 | "idiom" : "universal",
44 | "scale" : "2x"
45 | },
46 | {
47 | "appearances" : [
48 | {
49 | "appearance" : "luminosity",
50 | "value" : "dark"
51 | }
52 | ],
53 | "filename" : "icons8-tomato-60.png",
54 | "idiom" : "universal",
55 | "scale" : "2x"
56 | },
57 | {
58 | "filename" : "vegetarian (3).png",
59 | "idiom" : "universal",
60 | "scale" : "3x"
61 | },
62 | {
63 | "appearances" : [
64 | {
65 | "appearance" : "luminosity",
66 | "value" : "light"
67 | }
68 | ],
69 | "filename" : "vegetarian (8).png",
70 | "idiom" : "universal",
71 | "scale" : "3x"
72 | },
73 | {
74 | "appearances" : [
75 | {
76 | "appearance" : "luminosity",
77 | "value" : "dark"
78 | }
79 | ],
80 | "filename" : "icons8-tomato-54.png",
81 | "idiom" : "universal",
82 | "scale" : "3x"
83 | }
84 | ],
85 | "info" : {
86 | "author" : "xcode",
87 | "version" : 1
88 | }
89 | }
90 |
--------------------------------------------------------------------------------
/Pomosh/Utils.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Utils.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import Cocoa
11 | import IOKit.ps
12 | import IOKit.pwr_mgt
13 | import WebKit
14 | import SwiftUI
15 | import Combine
16 | import Network
17 | import SystemConfiguration
18 |
19 | extension UserDefaults {
20 |
21 | public func optionalInt(forKey defaultName: String) -> Int? {
22 | let defaults = self
23 | if let value = defaults.value(forKey: defaultName) {
24 | return value as? Int
25 | }
26 | return nil
27 | }
28 |
29 | public func optionalBool(forKey defaultName: String) -> Bool? {
30 | let defaults = self
31 | if let value = defaults.value(forKey: defaultName) {
32 | return value as? Bool
33 | }
34 | return nil
35 | }
36 | }
37 |
38 |
39 | class TimeHelper {
40 | private init() {
41 | }
42 |
43 | static func toTimeString(count: Int) -> String {
44 | let minutes = count / 60;
45 | let seconds = count - (minutes * 60)
46 | var minutesString: String;
47 | var secondsString: String;
48 |
49 | if (minutes < 10) {
50 | minutesString = "0\(minutes)"
51 | } else {
52 | minutesString = "\(minutes)"
53 | }
54 |
55 | if (seconds < 10) {
56 | secondsString = "0\(seconds)"
57 | } else {
58 | secondsString = "\(seconds)"
59 | }
60 |
61 | return minutesString + ":" + secondsString
62 | }
63 | }
64 |
65 | final class SwiftUIWindowForMenuBarApp: NSWindow {
66 | override var canBecomeMain: Bool { true }
67 | override var canBecomeKey: Bool { true }
68 | override var acceptsFirstResponder: Bool { true }
69 |
70 | var shouldCloseOnEscapePress = false
71 |
72 | convenience init() {
73 | self.init(
74 | contentRect: .zero,
75 | styleMask: [
76 | .titled,
77 | .closable,
78 | .miniaturizable,
79 | .resizable
80 | ],
81 | backing: .buffered,
82 | defer: true
83 | )
84 | }
85 |
86 | override func cancelOperation(_ sender: Any?) {
87 | guard shouldCloseOnEscapePress else {
88 | return
89 | }
90 |
91 | performClose(self)
92 | }
93 |
94 | }
95 |
96 |
--------------------------------------------------------------------------------
/Pomosh/Components/Timer.swift:
--------------------------------------------------------------------------------
1 | //
2 | // Timer.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import Foundation
10 | import SwiftUI
11 | class PomoshTimer: ObservableObject {
12 | // MARK: - Default Variables
13 |
14 | @Published var fulltime = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
15 | @Published var fullBreakTime = UserDefaults.standard.optionalInt(forKey: "fullBreakTime") ?? 600
16 | @Published var fullround = UserDefaults.standard.optionalInt(forKey: "fullround") ?? 5 {
17 | didSet {
18 | settings.set(fullround, forKey: "fullround")
19 | }
20 | }
21 |
22 | // MARK: - Active Variables
23 |
24 | @Published var timeRemaining = 0
25 | @Published var breakTime = 0
26 | @Published var round = 0
27 |
28 | // MARK: - Mechanic Variables
29 |
30 | @Published var isActive = true
31 | @Published var isBreakActive = false
32 |
33 | // MARK: - Settings
34 |
35 | @Published var playSound: Bool = UserDefaults.standard.optionalBool(forKey: "playsound") ?? true {
36 | didSet {
37 | settings.set(playSound, forKey: "playsound")
38 | }
39 | }
40 |
41 | @Published var showNotifications: Bool = UserDefaults.standard.optionalBool(forKey: "shownotifications") ?? true {
42 | didSet {
43 | settings.set(showNotifications, forKey: "shownotifications")
44 | }
45 | }
46 |
47 | @Published var showMenubarTimer: Bool = UserDefaults.standard.optionalBool(forKey: "showMenubarTimer") ?? true {
48 | didSet {
49 | settings.set(showMenubarTimer, forKey: "showMenubarTimer")
50 | (NSApp.delegate as! AppDelegate).updateIcon(iconName: String("menubar-icon"))
51 | (NSApp.delegate as! AppDelegate).updateTitle(newTitle: String(""))
52 | }
53 | }
54 |
55 | // MARK: - Initializer
56 |
57 | init() {
58 | // Operate registered shortcut Control + Command + P is toggles timer
59 | //toggleTimerHotkey.keyDownHandler = { [weak self] in
60 | // self!.isActive.toggle()
61 | //}
62 | }
63 |
64 | // MARK: - Int to Human Readable Time String
65 |
66 | func textForPlaybackTime(time: TimeInterval) -> String {
67 | if !time.isNormal {
68 | return "00:00"
69 | }
70 | let hours = Int(floor(time / 3600))
71 | let minutes = Int(floor((time / 60).truncatingRemainder(dividingBy: 60)))
72 | let seconds = Int(floor(time.truncatingRemainder(dividingBy: 60)))
73 | let minutesAndSeconds = NSString(format: "%02d:%02d", minutes, seconds) as String
74 | if hours > 0 {
75 | return NSString(format: "%02d:%@", hours, minutesAndSeconds) as String
76 | } else {
77 | return minutesAndSeconds
78 | }
79 | }
80 | }
81 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | In the interest of fostering an open and welcoming environment, we as
6 | contributors and maintainers pledge to making participation in our project and
7 | our community a harassment-free experience for everyone, regardless of age, body
8 | size, disability, ethnicity, sex characteristics, gender identity and expression,
9 | level of experience, education, socio-economic status, nationality, personal
10 | appearance, race, religion, or sexual identity and orientation.
11 |
12 | ## Our Standards
13 |
14 | Examples of behavior that contributes to creating a positive environment
15 | include:
16 |
17 | * Using welcoming and inclusive language
18 | * Being respectful of differing viewpoints and experiences
19 | * Gracefully accepting constructive criticism
20 | * Focusing on what is best for the community
21 | * Showing empathy towards other community members
22 |
23 | Examples of unacceptable behavior by participants include:
24 |
25 | * The use of sexualized language or imagery and unwelcome sexual attention or
26 | advances
27 | * Trolling, insulting/derogatory comments, and personal or political attacks
28 | * Public or private harassment
29 | * Publishing others' private information, such as a physical or electronic
30 | address, without explicit permission
31 | * Other conduct which could reasonably be considered inappropriate in a
32 | professional setting
33 |
34 | ## Our Responsibilities
35 |
36 | Project maintainers are responsible for clarifying the standards of acceptable
37 | behavior and are expected to take appropriate and fair corrective action in
38 | response to any instances of unacceptable behavior.
39 |
40 | Project maintainers have the right and responsibility to remove, edit, or
41 | reject comments, commits, code, wiki edits, issues, and other contributions
42 | that are not aligned to this Code of Conduct, or to ban temporarily or
43 | permanently any contributor for other behaviors that they deem inappropriate,
44 | threatening, offensive, or harmful.
45 |
46 | ## Scope
47 |
48 | This Code of Conduct applies both within project spaces and in public spaces
49 | when an individual is representing the project or its community. Examples of
50 | representing a project or community include using an official project e-mail
51 | address, posting via an official social media account, or acting as an appointed
52 | representative at an online or offline event. Representation of a project may be
53 | further defined and clarified by project maintainers.
54 |
55 | ## Enforcement
56 |
57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
58 | reported by contacting the project team at stevenjselcuk@gmail.com. All
59 | complaints will be reviewed and investigated and will result in a response that
60 | is deemed necessary and appropriate to the circumstances. The project team is
61 | obligated to maintain confidentiality with regard to the reporter of an incident.
62 | Further details of specific enforcement policies may be posted separately.
63 |
64 | Project maintainers who do not follow or enforce the Code of Conduct in good
65 | faith may face temporary or permanent repercussions as determined by other
66 | members of the project's leadership.
67 |
68 | ## Attribution
69 |
70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72 |
73 | [homepage]: https://www.contributor-covenant.org
74 |
75 | For answers to common questions about this code of conduct, see
76 | https://www.contributor-covenant.org/faq
77 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |

7 |
🍅 Pomosh • Pomodoro technique asistant •
8 |
9 |
10 |
11 |
12 |
13 |
14 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | Looking for iOS version repo? [stevenselcuk/Pomosh-iOS-watchOS](https://github.com/stevenselcuk/Pomosh-iOS-watchOS)
29 |
30 | ## About 🍅 Pomosh
31 |
32 | Is it the first time remote working? Or are you tired of distraction at home in these COVID-19 days? Pomosh can help you fight against procrastination and distraction.
33 |
34 | Is it the first time remote working? Or are you tired of distraction at home in these COVID-19 days? Pomosh can help you fight against procrastination and distraction.
35 |
36 | ### How to:
37 |
38 | A working block and a break count as a cycle. A Cycle with a 25-minute working & 5-minute break is a good starting point for newbies. How many cycles do you need in a day? It depends on your workload. It's time hustle. Create a new session and follow working/break cycles while working. Pomosh will help you focus.
39 |
40 | ### Main Features:
41 |
42 | - Timer: Helps you to follow Pomodoro Technique practices. It shows remaining working/break time with remaining cycles in your session. You can start/pause with clicking. The first click on the timer creates a session. You can think session = your typical working day. The timer automatically continues between work/break cycles. You cannot skip a period. But, yes, you can pause the timer.
43 |
44 | - Skip Button: You can skip current round if you failed your task.
45 |
46 | - Reload Button: You can restart your round instead of skipping it if you failed your task.
47 |
48 | - Settings: Pomosh is flexible. You can easily change the working & break duration. Also, you can set total cycles in a session, which depends on your workload and rhythm.
49 |
50 | - Menubar Countdown: There is no need to click the app every time to check the remaining time. It shows working & break time. The flame icon means it's working time. Coffee cup with a clock says it's break time. Just enjoy your time. If countdown makes you worry a lot, remember that you can disable the menu bar timer at any time. 😌
51 |
52 | - Notifications: Pomosh shows notifications when working time & break time ends. Do notifications annoy you? Just turn them off settings pane.
53 |
54 | - Sound effects: A chime effect indicates time is up. You can turn off it off course.
55 |
56 | - Global hotkeys: You can easily pause/start the timer with Control + Cmd + P
57 |
58 | - Written with Swift & SwiftUI
59 |
60 |
61 | [See website for details](https://pomosh.netlify.app/)
62 |
63 | ## Requirements 🤔
64 |
65 | `MacOS 10.15`
66 |
67 | ## Download 🚀
68 |
69 | [](https://apps.apple.com/us/app/pomosh/id1515791898?ls=1)
70 |
71 |
72 | ## Roadmap 🗺
73 |
74 | - [x] Submit to Apple Store!
75 | - [x] Launch on Producthunt
76 |
77 | ## Change log 🧠
78 |
79 | ### 🏷 v1.0.6 : Improve the performance.
80 |
81 | - Processor load optimization
82 |
83 | ### 🏷 v1.0.5 : Option for disabling menubar timer
84 |
85 | - UI&UX related fixes
86 |
87 | ### 🏷 v1.0.4 : Option for disabling menubar timer
88 |
89 | - New feature: Option for disabling menubar timer to decrease worries
90 |
91 | ### 🏷 v1.0.3 : New functions & more Big Sur
92 |
93 | - Skip round feature
94 | - Reload round feature
95 | - Big Sur icons
96 | - Menubar timer styling fix for Big Sur
97 |
98 | ### 🏷 v1.0.2
99 |
100 | - Bugfix: Settings set issue on Big Sur has been fixed.
101 |
102 | ### 🏷 v1.0.1
103 |
104 | - Improvements
105 | Pomodoro coverage: Long break duration for every 4th rounds (Github issue #1)
106 | Some UI enhancements: Settings and back buttons location arrangement
107 |
108 | - New feature: New sound effects for timer start/stop & creating new session action & Settings and back button clicks
109 |
110 | - Bugfix: Notification badge now resets when the app launched.
111 |
112 | ### 🏷 v1.0 : Initial Release
113 |
114 |
115 | ## Notes and Credits 🍍
116 |
117 | Special thanks for her feedback to [Heval Hazal Kurt](https://github.com/hevalhazalkurt) 🙌
118 |
119 | Some of icons made by Freepik from www.flaticon.com
120 |
121 |
--------------------------------------------------------------------------------
/Pomosh/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import AppKit
10 | import Cocoa
11 | // import HotKey
12 | import SwiftUI
13 | import UserNotifications
14 |
15 | // let toggleTimerHotkey = HotKey(key: .p, modifiers: [.command, .control])
16 | // let pauseHotkey = HotKey(key: .s, modifiers: [.command, .control])
17 |
18 | @NSApplicationMain
19 | class AppDelegate: NSObject, NSApplicationDelegate {
20 | @ObservedObject var PoTimer = PomoshTimer()
21 | var popover: NSPopover!
22 | let invisibleWindow = NSWindow(contentRect: NSMakeRect(0, 0, 20, 5), styleMask: .borderless, backing: .buffered, defer: false)
23 |
24 | var statusBarItem: NSStatusItem! = NSStatusBar.system.statusItem(withLength: CGFloat(NSStatusItem.variableLength + (PomoshTimer().showMenubarTimer ? 70 : 0)))
25 |
26 | // Init default variables for first launch
27 | let userDefaultsDefaults = [
28 | "time": 1200,
29 | "fullBreakTime": 600,
30 | "fullround": 5,
31 | "playsound": true,
32 | "shownotifications": true,
33 | "showMenubarTimer": true] as [String: Any]
34 |
35 | func applicationDidFinishLaunching(_ aNotification: Notification) {
36 | // UserDefaults.standard.register(defaults: userDefaultsDefaults)
37 | // Create the SwiftUI view that provides the window contents.
38 |
39 | invisibleWindow.backgroundColor = .red
40 | invisibleWindow.alphaValue = 0
41 | let contentView = ContentView()
42 |
43 | let popover = NSPopover()
44 | popover.contentSize = NSSize(width: 400, height: 400)
45 | popover.behavior = .transient
46 | popover.contentViewController = NSHostingController(rootView: contentView)
47 | // It will override users mode preferences: Now it is dark.
48 | // popover.appearance = NSAppearance(named: .vibrantDark)
49 |
50 | self.popover = popover
51 | self.popover.contentViewController?.view.window?.becomeKey()
52 |
53 | if let button = statusBarItem.button {
54 | button.image = NSImage(named: "menubar-icon")
55 | button.imagePosition = NSControl.ImagePosition.imageLeft
56 | if PoTimer.showMenubarTimer == true {
57 | button.title = String(PoTimer.textForPlaybackTime(time: TimeInterval(PoTimer.timeRemaining)))
58 | button.font = NSFont.monospacedDigitSystemFont(ofSize: 12.0, weight: NSFont.Weight.medium)
59 | }
60 |
61 | button.action = #selector(togglePopover(_:))
62 | button.sendAction(on: [.leftMouseUp, .rightMouseUp])
63 | }
64 | }
65 |
66 | func updateTitle(newTitle: String) {
67 | statusBarItem.button?.title = newTitle
68 | }
69 |
70 | func updateIcon(iconName: String) {
71 | statusBarItem.button?.image = NSImage(named: iconName)
72 | }
73 |
74 | @objc func togglePopover(_ sender: AnyObject?) {
75 | let event = NSApp.currentEvent!
76 |
77 | if event.type == NSEvent.EventType.leftMouseUp {
78 | if let sbutton = statusBarItem.button {
79 | if popover.isShown {
80 | popover.performClose(sender)
81 | } else {
82 | // find the coordinates of the statusBarItem in screen space
83 | let buttonRect: NSRect = sbutton.convert(sbutton.bounds, to: nil)
84 | let screenRect: NSRect = sbutton.window!.convertToScreen(buttonRect)
85 |
86 | // calculate the bottom center position (10 is the half of the window width)
87 | let posX = screenRect.origin.x + (screenRect.width / 2) - 10
88 | let posY = screenRect.origin.y
89 |
90 | // position and show the window
91 | invisibleWindow.setFrameOrigin(NSPoint(x: posX, y: posY))
92 | invisibleWindow.makeKeyAndOrderFront(self)
93 | NSApplication.shared.presentationOptions = []
94 | // position and show the NSPopover
95 | popover.show(relativeTo: invisibleWindow.contentView!.frame, of: invisibleWindow.contentView!, preferredEdge: NSRectEdge.minY)
96 | NSApp.activate(ignoringOtherApps: true)
97 | // popover.show(relativeTo: sbutton.bounds, of: sbutton, preferredEdge: NSRectEdge.minY)
98 | }
99 | }
100 |
101 | } else if event.type == NSEvent.EventType.rightMouseUp {
102 | let menu = NSMenu()
103 | menu.addItem(NSMenuItem(title: "Pomosh v1.0.6", action: nil, keyEquivalent: ""))
104 | menu.addItem(NSMenuItem.separator())
105 | menu.addItem(NSMenuItem(title: "Give ⭐️", action: #selector(giveStar), keyEquivalent: "s"))
106 | menu.addItem(withTitle: "About", action: #selector(about), keyEquivalent: "a")
107 | menu.addItem(withTitle: "Bug Report", action: #selector(issues), keyEquivalent: "b")
108 | menu.addItem(NSMenuItem.separator())
109 | menu.addItem(withTitle: "Quit App", action: #selector(quit), keyEquivalent: "q")
110 |
111 | statusBarItem.menu = menu
112 | statusBarItem.button?.performClick(nil)
113 | statusBarItem.menu = nil
114 | }
115 | }
116 |
117 | @objc func giveStar() {
118 | let url = URL(string: "https://apps.apple.com/app/id1515791898?action=write-review")!
119 | NSWorkspace.shared.open(url)
120 | }
121 |
122 | @objc func quit() {
123 | NSApp.terminate(self)
124 | }
125 |
126 | @objc func about() {
127 | let url = URL(string: "https://pomosh.netlify.app/")!
128 | NSWorkspace.shared.open(url)
129 | }
130 |
131 | @objc func issues() {
132 | let url = URL(string: "https://github.com/stevenselcuk/Pomosh-macOS/issues")!
133 | NSWorkspace.shared.open(url)
134 | }
135 | }
136 |
--------------------------------------------------------------------------------
/Pomosh/Views/TimerRing.swift:
--------------------------------------------------------------------------------
1 | //
2 | // TimerRing.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | import SwiftUI
10 |
11 | struct TimerRing: View {
12 | var color1 = #colorLiteral(red: 0.2588235438, green: 0.7568627596, blue: 0.9686274529, alpha: 1)
13 | var color2 = #colorLiteral(red: 0.09019608051, green: 0, blue: 0.3019607961, alpha: 1)
14 | var color3 = #colorLiteral(red: 1, green: 0.003921568627, blue: 0.4588235294, alpha: 1)
15 | var color4 = #colorLiteral(red: 0.9921568627, green: 0.9294117647, blue: 0.1333333333, alpha: 1)
16 | var width: CGFloat = 300
17 | var height: CGFloat = 300
18 | var percent: CGFloat = 10
19 |
20 | @State private var morphing = false
21 | var Timer: PomoshTimer
22 |
23 | var currentRound: Int
24 |
25 | var body: some View {
26 | let multiplier = width / 1000
27 | let progress = 0 + (percent / 100)
28 |
29 |
30 | return HStack {
31 |
32 | ZStack {
33 | Circle()
34 | .stroke(Color.black.opacity(0.1), style: StrokeStyle(lineWidth: 3 * multiplier))
35 | .frame(width: width, height: height)
36 |
37 |
38 | Circle()
39 | .trim(from: true ? progress : 1, to: 1)
40 | .stroke(
41 | LinearGradient(gradient: Gradient(colors: [Color(self.Timer.isBreakActive ? color3 : color1), Color(self.Timer.isBreakActive ? color4 : color2)]), startPoint: .topLeading, endPoint: .bottomLeading),
42 | style: StrokeStyle(lineWidth: 5 * multiplier, lineCap: .round, lineJoin: .round, miterLimit: .infinity, dash: [20, 0], dashPhase: 0)
43 | )
44 | .frame(width: width, height: width)
45 | //.animation(.linear)
46 | .rotationEffect(Angle(degrees: 90))
47 | .rotation3DEffect(Angle(degrees: 180), axis: (x: 1, y: 0, z: 0))
48 | .shadow(color: Color(#colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)).opacity(0.1), radius: 5 * multiplier, x: 0, y: 5 * multiplier)
49 |
50 | VStack(alignment: .center, spacing: 15) {
51 | if self.Timer.isActive {
52 | Text(self.Timer.isBreakActive ? self.currentRound == 4 || self.currentRound == 8 ? "Long break 🎉" : "Break time 🙌" : "🔥 X \(self.Timer.round)")
53 | .font(.custom("Space Mono Regular", size: 12))
54 | .animation(nil)
55 | } else {
56 | Text(self.Timer.round > 0 ? self.Timer.isBreakActive ? "Break stopped" : "Start" : "Create New Session")
57 | .font(.custom("Space Mono Regular", size: 12))
58 | .onTapGesture {
59 | if self.Timer.round == 0 {
60 | if self.Timer.playSound {
61 | NSSound(named: "start")?.play()
62 | }
63 | self.Timer.round = UserDefaults.standard.optionalInt(forKey: "fullround") ?? 5
64 | self.Timer.timeRemaining = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
65 | }
66 | }
67 | }
68 |
69 | Button(action: {
70 | self.Timer.isActive.toggle()
71 |
72 | }) {
73 | if self.Timer.isActive && self.Timer.round > 0 {
74 | Image("Pause")
75 | .antialiased(/*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/)
76 | .resizable()
77 | .aspectRatio(contentMode: .fit)
78 | .frame(maxWidth: 64, maxHeight: 64, alignment: .center)
79 |
80 | } else if self.Timer.isActive == false && self.Timer.round > 0 {
81 | Image("Play")
82 | .antialiased(/*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/)
83 | .resizable()
84 | .aspectRatio(contentMode: .fit)
85 | .frame(maxWidth: 64, maxHeight: 64, alignment: .center)
86 | .offset(x: 2, y: 0)
87 | }
88 | }
89 |
90 | .buttonStyle(PomoshButtonStyle())
91 | .offset(x: 0, y: 5)
92 |
93 | if self.Timer.round > 0 {
94 | Text("\(self.Timer.textForPlaybackTime(time: TimeInterval(self.Timer.timeRemaining)))")
95 | .font(.custom("Space Mono Regular", size: 28))
96 | .shadow(color: Color("Green").opacity(0.1), radius: 5 * multiplier, x: 0, y: 5 * multiplier)
97 | .lineLimit(1)
98 | .foregroundColor(Color("Neon"))
99 | .offset(x: 0, y: 5)
100 | }
101 | }
102 | }
103 |
104 | .scaleEffect(morphing ? 1.06 : 1)
105 | .onHover { _ in
106 | withAnimation(.spring(response: 0.5, dampingFraction: 0.6, blendDuration: 0)) {
107 | self.morphing.toggle()
108 | }
109 | }
110 | }
111 | .contentShape(Circle())
112 | .overlay(Tooltip(tooltip: self.Timer.isActive ? "Pause" : "Start"))
113 | .onTapGesture {
114 | if self.Timer.round == 0 {
115 | if self.Timer.playSound {
116 | NSSound(named: "start")?.play()
117 | }
118 | self.Timer.round = UserDefaults.standard.optionalInt(forKey: "fullround") ?? 5
119 | self.Timer.timeRemaining = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
120 | } else {
121 | if self.Timer.playSound {
122 | NSSound(named: "touch2")?.play()
123 | }
124 | }
125 | self.Timer.isActive.toggle()
126 | }
127 | }
128 | }
129 |
--------------------------------------------------------------------------------
/Pomosh/ContentView.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ContentView.swift
3 | // Pomosh
4 | //
5 | // Created by Steven J. Selcuk on 28.05.2020.
6 | // Copyright © 2020 Steven J. Selcuk. All rights reserved.
7 | //
8 |
9 | // import HotKey
10 | import SwiftUI
11 | import UserNotifications
12 |
13 | let settings = UserDefaults.standard
14 |
15 | struct ContentView: View {
16 | @State private var currentPage = 0
17 | @State private var runnedRounds = 0
18 | @ObservedObject var ThePomoshTimer = PomoshTimer()
19 |
20 | let timer = Timer.publish(every: 1, tolerance: 1, on: .main, in: .common)
21 | .autoconnect()
22 | let notificationCenter = UNUserNotificationCenter.current()
23 |
24 | init() {
25 | if ThePomoshTimer.showNotifications {
26 | notificationCenter.requestAuthorization(options: [.alert, .badge, .sound]) { granted, _ in
27 | if granted {
28 | settings.set(true, forKey: "didNotificationsAllowed")
29 | } else {
30 | settings.set(false, forKey: "didNotificationsAllowed")
31 | }
32 | }
33 | }
34 | }
35 |
36 | // MARK: - Main Component
37 |
38 | var body: some View {
39 | PagerView(pageCount: 2, currentIndex: $currentPage) {
40 | ZStack(alignment: .bottom) {
41 | HStack(alignment: .bottom, spacing: 5.0) {
42 | Button(action: {
43 | if self.ThePomoshTimer.round > 0 {
44 | self.ThePomoshTimer.round -= 1
45 | self.runnedRounds += 1
46 | self.ThePomoshTimer.fulltime = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
47 | self.ThePomoshTimer.timeRemaining = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
48 | } else {
49 | (NSApp.delegate as! AppDelegate).updateIcon(iconName: String("menubar-icon"))
50 | (NSApp.delegate as! AppDelegate).updateTitle(newTitle: String("00:00"))
51 | }
52 |
53 | self.ThePomoshTimer.isActive = false
54 |
55 | }) {
56 | Image("skip")
57 | .antialiased(true)
58 | .resizable()
59 | .aspectRatio(contentMode: .fit)
60 | .frame(maxWidth: 28, maxHeight: 28, alignment: .center)
61 | .overlay(Tooltip(tooltip: "Skip this round"))
62 | }
63 |
64 | .buttonStyle(PomoshButtonStyle())
65 | .padding(.bottom, 0)
66 |
67 | Spacer()
68 |
69 | Button(action: {
70 | self.ThePomoshTimer.fulltime = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
71 | self.ThePomoshTimer.timeRemaining = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
72 | self.ThePomoshTimer.isActive = false
73 | }) {
74 | Image("reload")
75 | .antialiased(/*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/)
76 | .resizable()
77 | .aspectRatio(contentMode: .fit)
78 | .frame(maxWidth: 28, maxHeight: 28, alignment: .center)
79 | .overlay(Tooltip(tooltip: "Reload this round"))
80 | }
81 |
82 | .buttonStyle(PomoshButtonStyle())
83 | .padding(.bottom, 0)
84 | }
85 | .offset(x: 0, y: -340)
86 |
87 | HStack(alignment: .bottom, spacing: 5.0) {
88 | Button(action: {
89 | self.currentPage = 1
90 | if self.ThePomoshTimer.playSound {
91 | NSSound(named: "touch")?.play()
92 | }
93 | }) {
94 | Image("Settings")
95 | .antialiased(/*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/)
96 | .resizable()
97 | .aspectRatio(contentMode: .fit)
98 | .frame(maxWidth: 28, maxHeight: 28, alignment: .center)
99 | .overlay(Tooltip(tooltip: "Settings"))
100 | }
101 |
102 | .buttonStyle(PomoshButtonStyle())
103 | .padding(.bottom, 10)
104 |
105 | Spacer()
106 |
107 | Button(action: { NSApp.terminate(self) }) {
108 | Image("Quit")
109 | .antialiased(/*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/)
110 | .resizable()
111 | .aspectRatio(contentMode: .fit)
112 | .frame(maxWidth: 28, maxHeight: 28, alignment: .center)
113 | .overlay(Tooltip(tooltip: "Quit App"))
114 | }
115 |
116 | .buttonStyle(PomoshButtonStyle())
117 | .padding(.bottom, 10)
118 | }
119 | VStack {
120 | TimerRing(color1: #colorLiteral(red: 0.2588235438, green: 0.7568627596, blue: 0.9686274529, alpha: 1), color2: #colorLiteral(red: 0.3647058904, green: 0.06666667014, blue: 0.9686274529, alpha: 1), width: 300, height: 300, percent: CGFloat(((Float(ThePomoshTimer.fulltime) - Float(ThePomoshTimer.timeRemaining)) / Float(ThePomoshTimer.fulltime)) * 100), Timer: ThePomoshTimer, currentRound: self.runnedRounds)
121 | .padding()
122 | .scaledToFit()
123 | .frame(maxWidth: 600, maxHeight: 600, alignment: .center)
124 |
125 | Spacer()
126 | }
127 | }
128 | .onAppear {
129 | self.notificationCenter.removeAllDeliveredNotifications()
130 | }
131 | .onReceive(timer) { _ in
132 | guard self.ThePomoshTimer.isActive else { return }
133 | if self.ThePomoshTimer.timeRemaining > 0 {
134 | self.ThePomoshTimer.timeRemaining -= 1
135 |
136 | if self.ThePomoshTimer.isBreakActive == true {
137 | if self.ThePomoshTimer.showMenubarTimer == true {
138 | (NSApp.delegate as! AppDelegate).updateIcon(iconName: String("Coffee"))
139 | (NSApp.delegate as! AppDelegate).updateTitle(newTitle: String(self.ThePomoshTimer.textForPlaybackTime(time: TimeInterval(self.ThePomoshTimer.timeRemaining))))
140 | }
141 |
142 | } else {
143 | if self.ThePomoshTimer.showMenubarTimer == true {
144 | (NSApp.delegate as! AppDelegate).updateIcon(iconName: String("Work"))
145 | (NSApp.delegate as! AppDelegate).updateTitle(newTitle: String(self.ThePomoshTimer.textForPlaybackTime(time: TimeInterval(self.ThePomoshTimer.timeRemaining))))
146 | }
147 | }
148 | }
149 |
150 | // if self.ThePomoshTimer.playSound && self.ThePomoshTimer.timeRemaining == 7 && self.ThePomoshTimer.round > 0 {
151 | // NSSound(named: "before")?.play()
152 | // }
153 | if self.ThePomoshTimer.timeRemaining == 1 && self.ThePomoshTimer.round > 0 {
154 | if self.ThePomoshTimer.playSound {
155 | NSSound(named: "done2")?.play()
156 | }
157 |
158 | if self.ThePomoshTimer.showNotifications {
159 | self.scheduleAlarmNotification()
160 | }
161 | // Break time or working time switcher 🎛
162 | self.ThePomoshTimer.isBreakActive.toggle()
163 |
164 | if self.ThePomoshTimer.isBreakActive == true {
165 | if self.ThePomoshTimer.round == 1 {
166 | self.ThePomoshTimer.timeRemaining = 0
167 | self.ThePomoshTimer.isBreakActive = false
168 | } else {
169 | // Adds time for break
170 | // print("It's break time 😴"
171 | if self.runnedRounds == 3 || self.runnedRounds == 7 {
172 | self.ThePomoshTimer.timeRemaining = 1200
173 | self.ThePomoshTimer.fulltime = 1200
174 | } else {
175 | self.ThePomoshTimer.timeRemaining = UserDefaults.standard.optionalInt(forKey: "fullBreakTime") ?? 600
176 | self.ThePomoshTimer.fulltime = UserDefaults.standard.optionalInt(forKey: "fullBreakTime") ?? 600
177 | }
178 | }
179 | // Removes 1 from total remaining round
180 |
181 | self.ThePomoshTimer.round -= 1
182 | self.runnedRounds += 1
183 | // print("🔥Remaining round: \(self.ThePomoshTimer.round)")
184 | } else {
185 | // print("It's working time 💪")
186 | self.ThePomoshTimer.fulltime = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
187 | self.ThePomoshTimer.timeRemaining = UserDefaults.standard.optionalInt(forKey: "time") ?? 1200
188 | }
189 |
190 | } else if self.ThePomoshTimer.timeRemaining == 0 {
191 | // print("Streak! 🔥 Session has ended.")
192 |
193 | if self.ThePomoshTimer.showMenubarTimer == true {
194 | (NSApp.delegate as! AppDelegate).updateIcon(iconName: String("menubar-icon"))
195 | (NSApp.delegate as! AppDelegate).updateTitle(newTitle: String("00:00"))
196 | }
197 |
198 | self.ThePomoshTimer.isActive = false
199 | }
200 | }
201 | .frame(minWidth: 0, maxWidth: .infinity, minHeight: 0, maxHeight: .infinity, alignment: .center)
202 | .contentShape(Rectangle())
203 |
204 | VStack(alignment: .leading, spacing: 5.0) {
205 | Text("Preferences")
206 | .font(.custom("Space Mono Regular", size: 22))
207 | .padding(.bottom, 10.0)
208 |
209 | VStack(alignment: .leading, spacing: 10.0) {
210 | Text("Working Time: \(self.ThePomoshTimer.fulltime / 60) minute")
211 | .font(.custom("Space Mono Regular", size: 12))
212 |
213 | Slider(value: Binding(
214 | get: {
215 | Double(UserDefaults.standard.integer(forKey: "time"))
216 | },
217 | set: { newValue in
218 | settings.set(newValue, forKey: "time")
219 | self.ThePomoshTimer.fulltime = Int(newValue)
220 | }
221 | ), in: 1200 ... 3600, step: 300)
222 |
223 | Text("Break Time: \(self.ThePomoshTimer.fullBreakTime / 60) minute")
224 | .font(.custom("Space Mono Regular", size: 12))
225 |
226 | Slider(value: Binding(
227 | get: {
228 | Double(self.ThePomoshTimer.fullBreakTime)
229 | },
230 | set: { newValue in
231 | settings.set(newValue, forKey: "fullBreakTime")
232 | self.ThePomoshTimer.fullBreakTime = Int(newValue)
233 | }
234 | ), in: 300 ... 600, step: 60)
235 |
236 | Text("Total cycles in a session")
237 | .font(.custom("Space Mono Regular", size: 12))
238 | HStack {
239 | ForEach(0 ..< self.ThePomoshTimer.fullround, id: \.self) { _ in
240 |
241 | Text("🔥")
242 | }
243 | }
244 | Slider(value: Binding(
245 | get: {
246 | Double(UserDefaults.standard.integer(forKey: "fullround"))
247 | },
248 | set: { newValue in
249 | settings.set(newValue, forKey: "fullround")
250 | self.ThePomoshTimer.fullround = Int(newValue)
251 | }
252 | ), in: 1 ... 8)
253 |
254 | HStack {
255 | Toggle(isOn: $ThePomoshTimer.playSound) {
256 | Text("Sound")
257 | .font(.custom("Space Mono Regular", size: 12))
258 | }.padding(.vertical, 5.0)
259 |
260 | Toggle(isOn: $ThePomoshTimer.showNotifications) {
261 | Text("Notifications")
262 | .font(.custom("Space Mono Regular", size: 12))
263 | }
264 | .padding(.vertical, 5.0)
265 |
266 | Toggle(isOn: $ThePomoshTimer.showMenubarTimer) {
267 | Text("Menubar Timer")
268 | .font(.custom("Space Mono Regular", size: 12))
269 | }
270 | .padding(.vertical, 5.0)
271 |
272 | // Toggle(isOn: $startUp) {
273 | // Text("Launch at startup")
274 | // .font(.custom("Space Mono Regular", size: 12))
275 | // }
276 | // .padding(.vertical, 5.0)
277 | }
278 |
279 | Button(action: {
280 | self.currentPage = 0
281 | if self.ThePomoshTimer.playSound {
282 | NSSound(named: "touch")?.play()
283 | }
284 | }) {
285 | HStack {
286 | Image("Back")
287 | .antialiased(/*@START_MENU_TOKEN@*/true/*@END_MENU_TOKEN@*/)
288 | .resizable()
289 | .aspectRatio(contentMode: .fit)
290 | .frame(maxWidth: 28, maxHeight: 28, alignment: .center)
291 | .overlay(Tooltip(tooltip: "Go back"))
292 |
293 | Text("Back")
294 | .font(.custom("Space Mono Regular", size: 12))
295 | }
296 | }
297 |
298 | .buttonStyle(PomoshButtonStyle())
299 | .offset(x: -18, y: 10)
300 | }
301 | }.padding(.horizontal, 30.0)
302 | }
303 | }
304 |
305 | // MARK: - Local Notifications
306 |
307 | func scheduleAlarmNotification() {
308 | let content = UNMutableNotificationContent()
309 | var bodyString: String {
310 | var string = ""
311 | if self.ThePomoshTimer.isBreakActive == true {
312 | string = "Now, It's working time 🔥"
313 | } else {
314 | string = "It's break time ☕️"
315 | }
316 | return string
317 | }
318 | content.title = "Time is up 🙌"
319 | content.body = bodyString
320 | content.sound = UNNotificationSound(named: UNNotificationSoundName("done.wav"))
321 |
322 | let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 0.1, repeats: false)
323 | let identifier = "localNotification"
324 | let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger)
325 |
326 | notificationCenter.getNotificationSettings { settings in
327 | if settings.authorizationStatus == .authorized {
328 | self.notificationCenter.add(request) { error in
329 | if let error = error {
330 | print("Error: \(error.localizedDescription)")
331 | }
332 | }
333 | }
334 | }
335 | }
336 |
337 | func openAbout() {
338 | AboutWindowController().showWindow()
339 | }
340 | }
341 |
--------------------------------------------------------------------------------
/Pomosh.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | 0ABCDE042695C726002EBE16 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 0ABCDE032695C726002EBE16 /* Main.storyboard */; };
11 | 0AC221A524A8F564007E3BE9 /* start.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0AC221A324A8F564007E3BE9 /* start.wav */; };
12 | 0AC221A624A8F564007E3BE9 /* touch.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0AC221A424A8F564007E3BE9 /* touch.wav */; };
13 | 0AC221A824A8F615007E3BE9 /* touch2.wav in Resources */ = {isa = PBXBuildFile; fileRef = 0AC221A724A8F615007E3BE9 /* touch2.wav */; };
14 | 0AC4C3702480398800125806 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C36F2480398800125806 /* AppDelegate.swift */; };
15 | 0AC4C3722480398800125806 /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C3712480398800125806 /* ContentView.swift */; };
16 | 0AC4C3772480398900125806 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0AC4C3762480398900125806 /* Assets.xcassets */; };
17 | 0AC4C37A2480398900125806 /* Preview Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 0AC4C3792480398900125806 /* Preview Assets.xcassets */; };
18 | 0AC4C387248039CF00125806 /* TimerRing.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C386248039CF00125806 /* TimerRing.swift */; };
19 | 0AC4C389248039E800125806 /* Utils.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C388248039E800125806 /* Utils.swift */; };
20 | 0AC4C38B248039FF00125806 /* Button.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C38A248039FF00125806 /* Button.swift */; };
21 | 0AC4C38D24803A1200125806 /* Timer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C38C24803A1200125806 /* Timer.swift */; };
22 | 0AC4C38F24803A3400125806 /* PagerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C38E24803A3400125806 /* PagerView.swift */; };
23 | 0AC4C39124803A4500125806 /* AboutView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C39024803A4500125806 /* AboutView.swift */; };
24 | 0AC4C39324803A5C00125806 /* TooltipComponent.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0AC4C39224803A5C00125806 /* TooltipComponent.swift */; };
25 | 0AC4C39624803A7A00125806 /* SpaceMono-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 0AC4C39524803A7A00125806 /* SpaceMono-Regular.ttf */; };
26 | 0AC4C39824803B8900125806 /* done2.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = 0AC4C39724803B8900125806 /* done2.mp3 */; };
27 | 0AC4C39A24803BB500125806 /* SpaceMono-Regular.ttf in CopyFiles */ = {isa = PBXBuildFile; fileRef = 0AC4C39524803A7A00125806 /* SpaceMono-Regular.ttf */; };
28 | /* End PBXBuildFile section */
29 |
30 | /* Begin PBXCopyFilesBuildPhase section */
31 | 0AC4C39924803BA900125806 /* CopyFiles */ = {
32 | isa = PBXCopyFilesBuildPhase;
33 | buildActionMask = 2147483647;
34 | dstPath = Fonts;
35 | dstSubfolderSpec = 7;
36 | files = (
37 | 0AC4C39A24803BB500125806 /* SpaceMono-Regular.ttf in CopyFiles */,
38 | );
39 | runOnlyForDeploymentPostprocessing = 0;
40 | };
41 | /* End PBXCopyFilesBuildPhase section */
42 |
43 | /* Begin PBXFileReference section */
44 | 0ABCDE032695C726002EBE16 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; };
45 | 0AC221A324A8F564007E3BE9 /* start.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = start.wav; sourceTree = ""; };
46 | 0AC221A424A8F564007E3BE9 /* touch.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = touch.wav; sourceTree = ""; };
47 | 0AC221A724A8F615007E3BE9 /* touch2.wav */ = {isa = PBXFileReference; lastKnownFileType = audio.wav; path = touch2.wav; sourceTree = ""; };
48 | 0AC4C36C2480398800125806 /* Pomosh.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pomosh.app; sourceTree = BUILT_PRODUCTS_DIR; };
49 | 0AC4C36F2480398800125806 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
50 | 0AC4C3712480398800125806 /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; };
51 | 0AC4C3762480398900125806 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
52 | 0AC4C3792480398900125806 /* Preview Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = "Preview Assets.xcassets"; sourceTree = ""; };
53 | 0AC4C37E2480398900125806 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
54 | 0AC4C37F2480398900125806 /* Pomosh.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = Pomosh.entitlements; sourceTree = ""; };
55 | 0AC4C386248039CF00125806 /* TimerRing.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TimerRing.swift; sourceTree = ""; };
56 | 0AC4C388248039E800125806 /* Utils.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Utils.swift; sourceTree = ""; };
57 | 0AC4C38A248039FF00125806 /* Button.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Button.swift; sourceTree = ""; };
58 | 0AC4C38C24803A1200125806 /* Timer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Timer.swift; sourceTree = ""; };
59 | 0AC4C38E24803A3400125806 /* PagerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PagerView.swift; sourceTree = ""; };
60 | 0AC4C39024803A4500125806 /* AboutView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AboutView.swift; sourceTree = ""; };
61 | 0AC4C39224803A5C00125806 /* TooltipComponent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TooltipComponent.swift; sourceTree = ""; };
62 | 0AC4C39524803A7A00125806 /* SpaceMono-Regular.ttf */ = {isa = PBXFileReference; lastKnownFileType = file; path = "SpaceMono-Regular.ttf"; sourceTree = ""; };
63 | 0AC4C39724803B8900125806 /* done2.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = done2.mp3; sourceTree = ""; };
64 | /* End PBXFileReference section */
65 |
66 | /* Begin PBXFrameworksBuildPhase section */
67 | 0AC4C3692480398800125806 /* Frameworks */ = {
68 | isa = PBXFrameworksBuildPhase;
69 | buildActionMask = 2147483647;
70 | files = (
71 | );
72 | runOnlyForDeploymentPostprocessing = 0;
73 | };
74 | /* End PBXFrameworksBuildPhase section */
75 |
76 | /* Begin PBXGroup section */
77 | 0A8E33832695C5C800ED9ADB /* Sound */ = {
78 | isa = PBXGroup;
79 | children = (
80 | 0AC4C39724803B8900125806 /* done2.mp3 */,
81 | 0AC221A324A8F564007E3BE9 /* start.wav */,
82 | 0AC221A724A8F615007E3BE9 /* touch2.wav */,
83 | 0AC221A424A8F564007E3BE9 /* touch.wav */,
84 | );
85 | path = Sound;
86 | sourceTree = "";
87 | };
88 | 0A8E33842695C5EE00ED9ADB /* Views */ = {
89 | isa = PBXGroup;
90 | children = (
91 | 0AC4C386248039CF00125806 /* TimerRing.swift */,
92 | 0AC4C38E24803A3400125806 /* PagerView.swift */,
93 | 0AC4C39024803A4500125806 /* AboutView.swift */,
94 | );
95 | path = Views;
96 | sourceTree = "";
97 | };
98 | 0A8E33852695C5FE00ED9ADB /* Components */ = {
99 | isa = PBXGroup;
100 | children = (
101 | 0AC4C38A248039FF00125806 /* Button.swift */,
102 | 0AC4C38C24803A1200125806 /* Timer.swift */,
103 | 0AC4C39224803A5C00125806 /* TooltipComponent.swift */,
104 | );
105 | path = Components;
106 | sourceTree = "";
107 | };
108 | 0AC4C3632480398800125806 = {
109 | isa = PBXGroup;
110 | children = (
111 | 0AC4C36E2480398800125806 /* Pomosh */,
112 | 0AC4C36D2480398800125806 /* Products */,
113 | A57E8F441FB871414D85212F /* Frameworks */,
114 | );
115 | sourceTree = "";
116 | };
117 | 0AC4C36D2480398800125806 /* Products */ = {
118 | isa = PBXGroup;
119 | children = (
120 | 0AC4C36C2480398800125806 /* Pomosh.app */,
121 | );
122 | name = Products;
123 | sourceTree = "";
124 | };
125 | 0AC4C36E2480398800125806 /* Pomosh */ = {
126 | isa = PBXGroup;
127 | children = (
128 | 0ABCDE032695C726002EBE16 /* Main.storyboard */,
129 | 0A8E33852695C5FE00ED9ADB /* Components */,
130 | 0A8E33842695C5EE00ED9ADB /* Views */,
131 | 0A8E33832695C5C800ED9ADB /* Sound */,
132 | 0AC4C39424803A6D00125806 /* Fonts */,
133 | 0AC4C36F2480398800125806 /* AppDelegate.swift */,
134 | 0AC4C3712480398800125806 /* ContentView.swift */,
135 | 0AC4C3762480398900125806 /* Assets.xcassets */,
136 | 0AC4C37E2480398900125806 /* Info.plist */,
137 | 0AC4C37F2480398900125806 /* Pomosh.entitlements */,
138 | 0AC4C3782480398900125806 /* Preview Content */,
139 | 0AC4C388248039E800125806 /* Utils.swift */,
140 | );
141 | path = Pomosh;
142 | sourceTree = "";
143 | };
144 | 0AC4C3782480398900125806 /* Preview Content */ = {
145 | isa = PBXGroup;
146 | children = (
147 | 0AC4C3792480398900125806 /* Preview Assets.xcassets */,
148 | );
149 | path = "Preview Content";
150 | sourceTree = "";
151 | };
152 | 0AC4C39424803A6D00125806 /* Fonts */ = {
153 | isa = PBXGroup;
154 | children = (
155 | 0AC4C39524803A7A00125806 /* SpaceMono-Regular.ttf */,
156 | );
157 | path = Fonts;
158 | sourceTree = "";
159 | };
160 | A57E8F441FB871414D85212F /* Frameworks */ = {
161 | isa = PBXGroup;
162 | children = (
163 | );
164 | name = Frameworks;
165 | sourceTree = "";
166 | };
167 | /* End PBXGroup section */
168 |
169 | /* Begin PBXNativeTarget section */
170 | 0AC4C36B2480398800125806 /* Pomosh */ = {
171 | isa = PBXNativeTarget;
172 | buildConfigurationList = 0AC4C3822480398900125806 /* Build configuration list for PBXNativeTarget "Pomosh" */;
173 | buildPhases = (
174 | 0AC4C3682480398800125806 /* Sources */,
175 | 0AC4C3692480398800125806 /* Frameworks */,
176 | 0AC4C36A2480398800125806 /* Resources */,
177 | 0AC4C39924803BA900125806 /* CopyFiles */,
178 | );
179 | buildRules = (
180 | );
181 | dependencies = (
182 | );
183 | name = Pomosh;
184 | productName = Pomosh;
185 | productReference = 0AC4C36C2480398800125806 /* Pomosh.app */;
186 | productType = "com.apple.product-type.application";
187 | };
188 | /* End PBXNativeTarget section */
189 |
190 | /* Begin PBXProject section */
191 | 0AC4C3642480398800125806 /* Project object */ = {
192 | isa = PBXProject;
193 | attributes = {
194 | LastSwiftUpdateCheck = 1140;
195 | LastUpgradeCheck = 1220;
196 | ORGANIZATIONNAME = "Steven J. Selcuk";
197 | TargetAttributes = {
198 | 0AC4C36B2480398800125806 = {
199 | CreatedOnToolsVersion = 11.4.1;
200 | };
201 | };
202 | };
203 | buildConfigurationList = 0AC4C3672480398800125806 /* Build configuration list for PBXProject "Pomosh" */;
204 | compatibilityVersion = "Xcode 12.0";
205 | developmentRegion = en;
206 | hasScannedForEncodings = 0;
207 | knownRegions = (
208 | en,
209 | Base,
210 | );
211 | mainGroup = 0AC4C3632480398800125806;
212 | productRefGroup = 0AC4C36D2480398800125806 /* Products */;
213 | projectDirPath = "";
214 | projectRoot = "";
215 | targets = (
216 | 0AC4C36B2480398800125806 /* Pomosh */,
217 | );
218 | };
219 | /* End PBXProject section */
220 |
221 | /* Begin PBXResourcesBuildPhase section */
222 | 0AC4C36A2480398800125806 /* Resources */ = {
223 | isa = PBXResourcesBuildPhase;
224 | buildActionMask = 2147483647;
225 | files = (
226 | 0AC221A524A8F564007E3BE9 /* start.wav in Resources */,
227 | 0AC4C39624803A7A00125806 /* SpaceMono-Regular.ttf in Resources */,
228 | 0AC221A824A8F615007E3BE9 /* touch2.wav in Resources */,
229 | 0ABCDE042695C726002EBE16 /* Main.storyboard in Resources */,
230 | 0AC4C39824803B8900125806 /* done2.mp3 in Resources */,
231 | 0AC221A624A8F564007E3BE9 /* touch.wav in Resources */,
232 | 0AC4C37A2480398900125806 /* Preview Assets.xcassets in Resources */,
233 | 0AC4C3772480398900125806 /* Assets.xcassets in Resources */,
234 | );
235 | runOnlyForDeploymentPostprocessing = 0;
236 | };
237 | /* End PBXResourcesBuildPhase section */
238 |
239 | /* Begin PBXSourcesBuildPhase section */
240 | 0AC4C3682480398800125806 /* Sources */ = {
241 | isa = PBXSourcesBuildPhase;
242 | buildActionMask = 2147483647;
243 | files = (
244 | 0AC4C389248039E800125806 /* Utils.swift in Sources */,
245 | 0AC4C38B248039FF00125806 /* Button.swift in Sources */,
246 | 0AC4C38D24803A1200125806 /* Timer.swift in Sources */,
247 | 0AC4C39124803A4500125806 /* AboutView.swift in Sources */,
248 | 0AC4C38F24803A3400125806 /* PagerView.swift in Sources */,
249 | 0AC4C3722480398800125806 /* ContentView.swift in Sources */,
250 | 0AC4C39324803A5C00125806 /* TooltipComponent.swift in Sources */,
251 | 0AC4C3702480398800125806 /* AppDelegate.swift in Sources */,
252 | 0AC4C387248039CF00125806 /* TimerRing.swift in Sources */,
253 | );
254 | runOnlyForDeploymentPostprocessing = 0;
255 | };
256 | /* End PBXSourcesBuildPhase section */
257 |
258 | /* Begin XCBuildConfiguration section */
259 | 0AC4C3802480398900125806 /* Debug */ = {
260 | isa = XCBuildConfiguration;
261 | buildSettings = {
262 | ALWAYS_SEARCH_USER_PATHS = NO;
263 | CLANG_ANALYZER_NONNULL = YES;
264 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
265 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
266 | CLANG_CXX_LIBRARY = "libc++";
267 | CLANG_ENABLE_MODULES = YES;
268 | CLANG_ENABLE_OBJC_ARC = YES;
269 | CLANG_ENABLE_OBJC_WEAK = YES;
270 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
271 | CLANG_WARN_BOOL_CONVERSION = YES;
272 | CLANG_WARN_COMMA = YES;
273 | CLANG_WARN_CONSTANT_CONVERSION = YES;
274 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
275 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
276 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
277 | CLANG_WARN_EMPTY_BODY = YES;
278 | CLANG_WARN_ENUM_CONVERSION = YES;
279 | CLANG_WARN_INFINITE_RECURSION = YES;
280 | CLANG_WARN_INT_CONVERSION = YES;
281 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
282 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
283 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
284 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
285 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
286 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
287 | CLANG_WARN_STRICT_PROTOTYPES = YES;
288 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
289 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
290 | CLANG_WARN_UNREACHABLE_CODE = YES;
291 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
292 | COPY_PHASE_STRIP = NO;
293 | DEBUG_INFORMATION_FORMAT = dwarf;
294 | ENABLE_STRICT_OBJC_MSGSEND = YES;
295 | ENABLE_TESTABILITY = YES;
296 | GCC_C_LANGUAGE_STANDARD = gnu11;
297 | GCC_DYNAMIC_NO_PIC = NO;
298 | GCC_NO_COMMON_BLOCKS = YES;
299 | GCC_OPTIMIZATION_LEVEL = 0;
300 | GCC_PREPROCESSOR_DEFINITIONS = (
301 | "DEBUG=1",
302 | "$(inherited)",
303 | );
304 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
305 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
306 | GCC_WARN_UNDECLARED_SELECTOR = YES;
307 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
308 | GCC_WARN_UNUSED_FUNCTION = YES;
309 | GCC_WARN_UNUSED_VARIABLE = YES;
310 | MACOSX_DEPLOYMENT_TARGET = 11.0;
311 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
312 | MTL_FAST_MATH = YES;
313 | ONLY_ACTIVE_ARCH = YES;
314 | SDKROOT = macosx;
315 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
316 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
317 | };
318 | name = Debug;
319 | };
320 | 0AC4C3812480398900125806 /* Release */ = {
321 | isa = XCBuildConfiguration;
322 | buildSettings = {
323 | ALWAYS_SEARCH_USER_PATHS = NO;
324 | CLANG_ANALYZER_NONNULL = YES;
325 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
326 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
327 | CLANG_CXX_LIBRARY = "libc++";
328 | CLANG_ENABLE_MODULES = YES;
329 | CLANG_ENABLE_OBJC_ARC = YES;
330 | CLANG_ENABLE_OBJC_WEAK = YES;
331 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
332 | CLANG_WARN_BOOL_CONVERSION = YES;
333 | CLANG_WARN_COMMA = YES;
334 | CLANG_WARN_CONSTANT_CONVERSION = YES;
335 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
336 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
337 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
338 | CLANG_WARN_EMPTY_BODY = YES;
339 | CLANG_WARN_ENUM_CONVERSION = YES;
340 | CLANG_WARN_INFINITE_RECURSION = YES;
341 | CLANG_WARN_INT_CONVERSION = YES;
342 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
343 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
344 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
345 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
346 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
347 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
348 | CLANG_WARN_STRICT_PROTOTYPES = YES;
349 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
350 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
351 | CLANG_WARN_UNREACHABLE_CODE = YES;
352 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
353 | COPY_PHASE_STRIP = NO;
354 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
355 | ENABLE_NS_ASSERTIONS = NO;
356 | ENABLE_STRICT_OBJC_MSGSEND = YES;
357 | GCC_C_LANGUAGE_STANDARD = gnu11;
358 | GCC_NO_COMMON_BLOCKS = YES;
359 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
360 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
361 | GCC_WARN_UNDECLARED_SELECTOR = YES;
362 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
363 | GCC_WARN_UNUSED_FUNCTION = YES;
364 | GCC_WARN_UNUSED_VARIABLE = YES;
365 | MACOSX_DEPLOYMENT_TARGET = 11.0;
366 | MTL_ENABLE_DEBUG_INFO = NO;
367 | MTL_FAST_MATH = YES;
368 | SDKROOT = macosx;
369 | SWIFT_COMPILATION_MODE = wholemodule;
370 | SWIFT_OPTIMIZATION_LEVEL = "-O";
371 | };
372 | name = Release;
373 | };
374 | 0AC4C3832480398900125806 /* Debug */ = {
375 | isa = XCBuildConfiguration;
376 | buildSettings = {
377 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
378 | CODE_SIGN_ENTITLEMENTS = Pomosh/Pomosh.entitlements;
379 | CODE_SIGN_IDENTITY = "-";
380 | CODE_SIGN_STYLE = Automatic;
381 | COMBINE_HIDPI_IMAGES = YES;
382 | CURRENT_PROJECT_VERSION = 6;
383 | DEVELOPMENT_ASSET_PATHS = "\"Pomosh/Preview Content\"";
384 | DEVELOPMENT_TEAM = 9937MYTBBA;
385 | ENABLE_HARDENED_RUNTIME = YES;
386 | ENABLE_PREVIEWS = YES;
387 | FRAMEWORK_SEARCH_PATHS = "";
388 | HEADER_SEARCH_PATHS = "";
389 | INFOPLIST_FILE = Pomosh/Info.plist;
390 | LD_RUNPATH_SEARCH_PATHS = (
391 | "$(inherited)",
392 | "@executable_path/../Frameworks",
393 | );
394 | MACOSX_DEPLOYMENT_TARGET = 10.15;
395 | MARKETING_VERSION = 1.0.6;
396 | PRODUCT_BUNDLE_IDENTIFIER = org.tabbycat.PomoshProductiviyTimer;
397 | PRODUCT_NAME = "$(TARGET_NAME)";
398 | SWIFT_VERSION = 5.0;
399 | };
400 | name = Debug;
401 | };
402 | 0AC4C3842480398900125806 /* Release */ = {
403 | isa = XCBuildConfiguration;
404 | buildSettings = {
405 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
406 | CODE_SIGN_ENTITLEMENTS = Pomosh/Pomosh.entitlements;
407 | CODE_SIGN_IDENTITY = "-";
408 | CODE_SIGN_STYLE = Automatic;
409 | COMBINE_HIDPI_IMAGES = YES;
410 | CURRENT_PROJECT_VERSION = 6;
411 | DEVELOPMENT_ASSET_PATHS = "\"Pomosh/Preview Content\"";
412 | DEVELOPMENT_TEAM = 9937MYTBBA;
413 | ENABLE_HARDENED_RUNTIME = YES;
414 | ENABLE_PREVIEWS = YES;
415 | FRAMEWORK_SEARCH_PATHS = "";
416 | HEADER_SEARCH_PATHS = "";
417 | INFOPLIST_FILE = Pomosh/Info.plist;
418 | LD_RUNPATH_SEARCH_PATHS = (
419 | "$(inherited)",
420 | "@executable_path/../Frameworks",
421 | );
422 | MACOSX_DEPLOYMENT_TARGET = 10.15;
423 | MARKETING_VERSION = 1.0.6;
424 | PRODUCT_BUNDLE_IDENTIFIER = org.tabbycat.PomoshProductiviyTimer;
425 | PRODUCT_NAME = "$(TARGET_NAME)";
426 | SWIFT_VERSION = 5.0;
427 | };
428 | name = Release;
429 | };
430 | /* End XCBuildConfiguration section */
431 |
432 | /* Begin XCConfigurationList section */
433 | 0AC4C3672480398800125806 /* Build configuration list for PBXProject "Pomosh" */ = {
434 | isa = XCConfigurationList;
435 | buildConfigurations = (
436 | 0AC4C3802480398900125806 /* Debug */,
437 | 0AC4C3812480398900125806 /* Release */,
438 | );
439 | defaultConfigurationIsVisible = 0;
440 | defaultConfigurationName = Release;
441 | };
442 | 0AC4C3822480398900125806 /* Build configuration list for PBXNativeTarget "Pomosh" */ = {
443 | isa = XCConfigurationList;
444 | buildConfigurations = (
445 | 0AC4C3832480398900125806 /* Debug */,
446 | 0AC4C3842480398900125806 /* Release */,
447 | );
448 | defaultConfigurationIsVisible = 0;
449 | defaultConfigurationName = Release;
450 | };
451 | /* End XCConfigurationList section */
452 | };
453 | rootObject = 0AC4C3642480398800125806 /* Project object */;
454 | }
455 |
--------------------------------------------------------------------------------
/Pomosh/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
--------------------------------------------------------------------------------