├── .github
└── FUNDING.yml
├── screenshots
├── app-icon.png
├── menubar-disabled.png
└── menubar-enabled.png
├── noTunes
├── Assets.xcassets
│ ├── Contents.json
│ ├── AppIcon.appiconset
│ │ ├── AppIcon-128.png
│ │ ├── AppIcon-16.png
│ │ ├── AppIcon-256.png
│ │ ├── AppIcon-32.png
│ │ ├── AppIcon-512.png
│ │ ├── AppIcon-16@2x.png
│ │ ├── AppIcon-32@2x.png
│ │ ├── AppIcon-128@2x.png
│ │ ├── AppIcon-256@2x.png
│ │ ├── AppIcon-512@2x.png
│ │ └── Contents.json
│ ├── StatusBarButtonImage.imageset
│ │ ├── StatusBarButtonImage.png
│ │ ├── StatusBarButtonImage@2x.png
│ │ └── Contents.json
│ └── StatusBarButtonImageActive.imageset
│ │ ├── StatusBarButtonImageActive.png
│ │ ├── StatusBarButtonImageActive@2x.png
│ │ └── Contents.json
├── Info.plist
├── Base.lproj
│ └── MainMenu.xib
└── AppDelegate.swift
├── noTunes.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
└── project.pbxproj
├── .gitignore
├── LICENSE
└── README.md
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | github: tombonez
2 |
--------------------------------------------------------------------------------
/screenshots/app-icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/screenshots/app-icon.png
--------------------------------------------------------------------------------
/screenshots/menubar-disabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/screenshots/menubar-disabled.png
--------------------------------------------------------------------------------
/screenshots/menubar-enabled.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/screenshots/menubar-enabled.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-128.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-16.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-256.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-32.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-512.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-16@2x.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-32@2x.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-128@2x.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-256@2x.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/AppIcon.appiconset/AppIcon-512@2x.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/StatusBarButtonImage.imageset/StatusBarButtonImage@2x.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/StatusBarButtonImageActive.imageset/StatusBarButtonImageActive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/StatusBarButtonImageActive.imageset/StatusBarButtonImageActive.png
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/StatusBarButtonImageActive.imageset/StatusBarButtonImageActive@2x.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/tombonez/noTunes/HEAD/noTunes/Assets.xcassets/StatusBarButtonImageActive.imageset/StatusBarButtonImageActive@2x.png
--------------------------------------------------------------------------------
/noTunes.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/noTunes.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | ## Build generated
2 | build/
3 | DerivedData/
4 |
5 | ## Various settings
6 | *.pbxuser
7 | !default.pbxuser
8 | *.mode1v3
9 | !default.mode1v3
10 | *.mode2v3
11 | !default.mode2v3
12 | *.perspectivev3
13 | !default.perspectivev3
14 | xcuserdata/
15 |
16 | ## Other
17 | *.moved-aside
18 | *.xcuserstate
19 | .DS_Store
20 |
21 | ## Obj-C/Swift specific
22 | *.hmap
23 | *.ipa
24 | *.dSYM.zip
25 | *.dSYM
26 |
27 | ## Playgrounds
28 | timeline.xctimeline
29 | playground.xcworkspace
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/StatusBarButtonImage.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "filename" : "StatusBarButtonImage.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "filename" : "StatusBarButtonImage@2x.png",
11 | "scale" : "2x"
12 | }
13 | ],
14 | "info" : {
15 | "version" : 1,
16 | "author" : "xcode"
17 | },
18 | "properties" : {
19 | "template-rendering-intent" : "template"
20 | }
21 | }
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/StatusBarButtonImageActive.imageset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "filename" : "StatusBarButtonImageActive.png",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "filename" : "StatusBarButtonImageActive@2x.png",
11 | "scale" : "2x"
12 | }
13 | ],
14 | "info" : {
15 | "version" : 1,
16 | "author" : "xcode"
17 | },
18 | "properties" : {
19 | "template-rendering-intent" : "template"
20 | }
21 | }
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 Tom Taylor
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 |
--------------------------------------------------------------------------------
/noTunes/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | en
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | $(MARKETING_VERSION)
21 | CFBundleVersion
22 | 1
23 | LSApplicationCategoryType
24 | public.app-category.utilities
25 | LSMinimumSystemVersion
26 | $(MACOSX_DEPLOYMENT_TARGET)
27 | LSUIElement
28 |
29 | NSHumanReadableCopyright
30 | Copyright © 2021 Twisted Digital Ltd. All rights reserved.
31 | NSMainNibFile
32 | MainMenu
33 | NSPrincipalClass
34 | NSApplication
35 |
36 |
37 |
--------------------------------------------------------------------------------
/noTunes/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "filename" : "AppIcon-16.png",
5 | "idiom" : "mac",
6 | "scale" : "1x",
7 | "size" : "16x16"
8 | },
9 | {
10 | "filename" : "AppIcon-16@2x.png",
11 | "idiom" : "mac",
12 | "scale" : "2x",
13 | "size" : "16x16"
14 | },
15 | {
16 | "filename" : "AppIcon-32.png",
17 | "idiom" : "mac",
18 | "scale" : "1x",
19 | "size" : "32x32"
20 | },
21 | {
22 | "filename" : "AppIcon-32@2x.png",
23 | "idiom" : "mac",
24 | "scale" : "2x",
25 | "size" : "32x32"
26 | },
27 | {
28 | "filename" : "AppIcon-128.png",
29 | "idiom" : "mac",
30 | "scale" : "1x",
31 | "size" : "128x128"
32 | },
33 | {
34 | "filename" : "AppIcon-128@2x.png",
35 | "idiom" : "mac",
36 | "scale" : "2x",
37 | "size" : "128x128"
38 | },
39 | {
40 | "filename" : "AppIcon-256.png",
41 | "idiom" : "mac",
42 | "scale" : "1x",
43 | "size" : "256x256"
44 | },
45 | {
46 | "filename" : "AppIcon-256@2x.png",
47 | "idiom" : "mac",
48 | "scale" : "2x",
49 | "size" : "256x256"
50 | },
51 | {
52 | "filename" : "AppIcon-512.png",
53 | "idiom" : "mac",
54 | "scale" : "1x",
55 | "size" : "512x512"
56 | },
57 | {
58 | "filename" : "AppIcon-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 |
--------------------------------------------------------------------------------
/noTunes/Base.lproj/MainMenu.xib:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [](https://github.com/tombonez/noTunes)
2 |
3 | [](https://github.com/tombonez/noTunes/releases/latest)
4 | [](https://github.com/tombonez/noTunes/releases)
5 | [](https://github.com/tombonez/noTunes/blob/master/LICENSE)
6 | [](https://github.com/sponsors/tombonez)
7 |
8 | # noTunes
9 |
10 | noTunes is a macOS application that will prevent iTunes _or_ Apple Music from launching.
11 |
12 | Simply launch the noTunes app and iTunes/Music will no longer be able to launch. For example, when bluetooth headphones reconnect.
13 |
14 | You can toggle the apps functionality via the menu bar icon with a simple left click.
15 |
16 | ## Installation
17 |
18 | ### Direct Download
19 |
20 | [noTunes-3.5.zip](https://github.com/tombonez/noTunes/releases/download/v3.5/noTunes-3.5.zip)
21 |
22 | ### Homebrew
23 |
24 | ```bash
25 | brew install --cask notunes
26 | ```
27 |
28 | ## Usage
29 |
30 | ### Set noTunes to launch at startup
31 |
32 | #### Ventura and later:
33 |
34 | 1. Navigate to System Settings
35 | 2. Select General
36 | 3. Select Login Items
37 | 4. Click the + under Open at Login and select noTunes
38 |
39 | #### Before Ventura:
40 |
41 | Navigate to System Preferences -> Users & Groups. Under your user, select "Login Items", click the lock on the bottom left and enter your login password to make changes. Click the plus sign (+) in the main panel and search for noTunes. Select it and click "Add".
42 |
43 | ### Toggle noTunes Functionality
44 |
45 | Left click the menu bar icon to toggle between its active states.
46 |
47 | **Enabled (prevents iTunes/Music from opening)**
48 |
49 | 
50 |
51 | **Disabled (allows iTunes/Music to open)**
52 |
53 | 
54 |
55 | ### Hide Menu Bar Icon
56 |
57 | Right click or control-click the menu bar icon and click `Hide Icon`.
58 |
59 | ### Restore Menu Bar Icon
60 |
61 | [Quit noTunes](#quit-notunes), run the following command in Terminal and re-open the app:
62 |
63 | ```bash
64 | defaults delete digital.twisted.noTunes
65 | ```
66 |
67 | ### Quit noTunes
68 |
69 | To quit the app either:
70 |
71 | **With menu bar icon visible**
72 |
73 | Right click or control-click the menu bar icon and click quit.
74 |
75 | **With menu bar icon hidden**
76 |
77 | Quit the app via Activity Monitor or run the following command in Terminal:
78 |
79 | ```bash
80 | osascript -e 'quit app "noTunes"'
81 | ```
82 |
83 | ### Set replacement for iTunes / Apple Music
84 |
85 | Replace `YOUR_MUSIC_APP` with the name of your music app in the following command.
86 |
87 | ```bash
88 | defaults write digital.twisted.noTunes replacement /Applications/YOUR_MUSIC_APP.app
89 | ```
90 |
91 | Then `/Applications/YOUR_MUSIC_APP.app` will launch when iTunes/Music attempts to launch.
92 |
93 | This can be used to open a website too, for example, YouTube Music.
94 |
95 | ```bash
96 | defaults write digital.twisted.noTunes replacement https://music.youtube.com/
97 | ```
98 |
99 | The following command will disable the replacement.
100 |
101 | ```bash
102 | defaults delete digital.twisted.noTunes replacement
103 | ```
104 |
105 | ## Support
106 |
107 | If you like my work, consider supporting me through [GitHub Sponsors](https://github.com/sponsors/tombonez) 🩷
108 |
109 | ## License
110 |
111 | The code is available under the [MIT License](https://github.com/tombonez/notunes/blob/master/LICENSE).
112 |
--------------------------------------------------------------------------------
/noTunes/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // noTunes
4 | //
5 | // Created by Tom Taylor on 04/01/2017.
6 | // Copyright © 2017 Twisted Digital Ltd. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 | import ServiceManagement
11 |
12 | @NSApplicationMain
13 | class AppDelegate: NSObject, NSApplicationDelegate {
14 |
15 | let defaults = UserDefaults.standard
16 |
17 | let statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength)
18 |
19 | @IBOutlet weak var statusMenu: NSMenu!
20 |
21 | @IBAction func hideIconClicked(_ sender: NSMenuItem) {
22 | defaults.set(true, forKey: "hideIcon")
23 | NSStatusBar.system.removeStatusItem(statusItem)
24 | self.appIsLaunched()
25 | }
26 |
27 | @IBAction func quitClicked(_ sender: NSMenuItem) {
28 | NSApplication.shared.terminate(self)
29 | }
30 |
31 | @objc func statusBarButtonClicked(sender: NSStatusBarButton) {
32 | let event = NSApp.currentEvent!
33 |
34 | if event.type == NSEvent.EventType.rightMouseUp ||
35 | (event.type == NSEvent.EventType.leftMouseUp && event.modifierFlags.contains(NSEvent.ModifierFlags.control)) {
36 | statusItem.menu = statusMenu
37 | if let menu = statusItem.menu {
38 | menu.popUp(positioning: menu.items.first, at: NSEvent.mouseLocation, in: nil)
39 | }
40 | statusItem.menu = nil
41 | } else {
42 | if statusItem.button?.image == NSImage(named: "StatusBarButtonImage") {
43 | self.appIsLaunched()
44 | statusItem.button?.image = NSImage(named: "StatusBarButtonImageActive")
45 | } else {
46 | statusItem.button?.image = NSImage(named: "StatusBarButtonImage")
47 | }
48 | }
49 | }
50 |
51 | func applicationDidFinishLaunching(_ aNotification: Notification) {
52 | statusItem.button?.image = NSImage(named: "StatusBarButtonImageActive")
53 |
54 | if let button = statusItem.button {
55 | button.action = #selector(self.statusBarButtonClicked(sender:))
56 | button.sendAction(on: [.leftMouseUp, .rightMouseUp])
57 | }
58 |
59 | if defaults.bool(forKey: "hideIcon") {
60 | NSStatusBar.system.removeStatusItem(statusItem)
61 | }
62 |
63 | self.appIsLaunched()
64 | self.createListener()
65 | }
66 |
67 | func createListener() {
68 | let workspaceNotificationCenter = NSWorkspace.shared.notificationCenter
69 | workspaceNotificationCenter.addObserver(self, selector: #selector(self.appWillLaunch(note:)), name: NSWorkspace.willLaunchApplicationNotification, object: nil)
70 | }
71 |
72 | func appIsLaunched() {
73 | let apps = NSWorkspace.shared.runningApplications
74 | for currentApp in apps.enumerated() {
75 | let runningApp = apps[currentApp.offset]
76 |
77 | if(runningApp.activationPolicy == .regular) {
78 | if(runningApp.bundleIdentifier == "com.apple.iTunes") {
79 | runningApp.forceTerminate()
80 | }
81 | if(runningApp.bundleIdentifier == "com.apple.Music") {
82 | runningApp.forceTerminate()
83 | }
84 | }
85 | }
86 | }
87 |
88 | @objc func appWillLaunch(note:Notification) {
89 | if statusItem.button?.image == NSImage(named: "StatusBarButtonImageActive") || defaults.bool(forKey: "hideIcon") {
90 | if let app = note.userInfo?[NSWorkspace.applicationUserInfoKey] as? NSRunningApplication {
91 | if app.bundleIdentifier == "com.apple.Music" {
92 | app.forceTerminate()
93 | self.launchReplacement()
94 | }
95 | else if app.bundleIdentifier == "com.apple.iTunes" {
96 | app.forceTerminate()
97 | self.launchReplacement()
98 | }
99 | }
100 | }
101 | }
102 |
103 | func launchReplacement() {
104 | let replacement = defaults.string(forKey: "replacement");
105 | if (replacement != nil) {
106 | let task = Process()
107 |
108 | task.arguments = [replacement!];
109 | task.launchPath = "/usr/bin/open"
110 | task.launch()
111 | }
112 | }
113 |
114 | func terminateProcessWith(_ processId:Int,_ processName:String) {
115 | let process = NSRunningApplication.init(processIdentifier: pid_t(processId))
116 | process?.forceTerminate()
117 | }
118 |
119 | }
120 |
--------------------------------------------------------------------------------
/noTunes.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 54;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | E29B3C731E1D97CF00CB67E3 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = E29B3C721E1D97CF00CB67E3 /* AppDelegate.swift */; };
11 | E29B3C751E1D97CF00CB67E3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E29B3C741E1D97CF00CB67E3 /* Assets.xcassets */; };
12 | E29B3C781E1D97CF00CB67E3 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = E29B3C761E1D97CF00CB67E3 /* MainMenu.xib */; };
13 | /* End PBXBuildFile section */
14 |
15 | /* Begin PBXCopyFilesBuildPhase section */
16 | E237C9DE1E27C8D20006F607 /* CopyFiles */ = {
17 | isa = PBXCopyFilesBuildPhase;
18 | buildActionMask = 2147483647;
19 | dstPath = Contents/Library/LoginItems;
20 | dstSubfolderSpec = 1;
21 | files = (
22 | );
23 | runOnlyForDeploymentPostprocessing = 0;
24 | };
25 | /* End PBXCopyFilesBuildPhase section */
26 |
27 | /* Begin PBXFileReference section */
28 | E29B3C6F1E1D97CF00CB67E3 /* noTunes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = noTunes.app; sourceTree = BUILT_PRODUCTS_DIR; };
29 | E29B3C721E1D97CF00CB67E3 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
30 | E29B3C741E1D97CF00CB67E3 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
31 | E29B3C771E1D97CF00CB67E3 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; };
32 | E29B3C791E1D97CF00CB67E3 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
33 | /* End PBXFileReference section */
34 |
35 | /* Begin PBXFrameworksBuildPhase section */
36 | E29B3C6C1E1D97CF00CB67E3 /* Frameworks */ = {
37 | isa = PBXFrameworksBuildPhase;
38 | buildActionMask = 2147483647;
39 | files = (
40 | );
41 | runOnlyForDeploymentPostprocessing = 0;
42 | };
43 | /* End PBXFrameworksBuildPhase section */
44 |
45 | /* Begin PBXGroup section */
46 | E29B3C661E1D97CF00CB67E3 = {
47 | isa = PBXGroup;
48 | children = (
49 | E29B3C711E1D97CF00CB67E3 /* noTunes */,
50 | E29B3C701E1D97CF00CB67E3 /* Products */,
51 | );
52 | sourceTree = "";
53 | };
54 | E29B3C701E1D97CF00CB67E3 /* Products */ = {
55 | isa = PBXGroup;
56 | children = (
57 | E29B3C6F1E1D97CF00CB67E3 /* noTunes.app */,
58 | );
59 | name = Products;
60 | sourceTree = "";
61 | };
62 | E29B3C711E1D97CF00CB67E3 /* noTunes */ = {
63 | isa = PBXGroup;
64 | children = (
65 | E29B3C721E1D97CF00CB67E3 /* AppDelegate.swift */,
66 | E29B3C741E1D97CF00CB67E3 /* Assets.xcassets */,
67 | E29B3C761E1D97CF00CB67E3 /* MainMenu.xib */,
68 | E29B3C791E1D97CF00CB67E3 /* Info.plist */,
69 | );
70 | path = noTunes;
71 | sourceTree = "";
72 | };
73 | /* End PBXGroup section */
74 |
75 | /* Begin PBXNativeTarget section */
76 | E29B3C6E1E1D97CF00CB67E3 /* noTunes */ = {
77 | isa = PBXNativeTarget;
78 | buildConfigurationList = E29B3C7C1E1D97CF00CB67E3 /* Build configuration list for PBXNativeTarget "noTunes" */;
79 | buildPhases = (
80 | E29B3C6B1E1D97CF00CB67E3 /* Sources */,
81 | E29B3C6C1E1D97CF00CB67E3 /* Frameworks */,
82 | E29B3C6D1E1D97CF00CB67E3 /* Resources */,
83 | E237C9DE1E27C8D20006F607 /* CopyFiles */,
84 | );
85 | buildRules = (
86 | );
87 | dependencies = (
88 | );
89 | name = noTunes;
90 | productName = noTunes;
91 | productReference = E29B3C6F1E1D97CF00CB67E3 /* noTunes.app */;
92 | productType = "com.apple.product-type.application";
93 | };
94 | /* End PBXNativeTarget section */
95 |
96 | /* Begin PBXProject section */
97 | E29B3C671E1D97CF00CB67E3 /* Project object */ = {
98 | isa = PBXProject;
99 | attributes = {
100 | BuildIndependentTargetsInParallel = YES;
101 | LastSwiftUpdateCheck = 0820;
102 | LastUpgradeCheck = 1540;
103 | ORGANIZATIONNAME = "Twisted Digital Ltd.";
104 | TargetAttributes = {
105 | E29B3C6E1E1D97CF00CB67E3 = {
106 | CreatedOnToolsVersion = 8.2.1;
107 | DevelopmentTeam = JP6WW46Y42;
108 | LastSwiftMigration = 1110;
109 | ProvisioningStyle = Automatic;
110 | };
111 | };
112 | };
113 | buildConfigurationList = E29B3C6A1E1D97CF00CB67E3 /* Build configuration list for PBXProject "noTunes" */;
114 | compatibilityVersion = "Xcode 3.2";
115 | developmentRegion = en;
116 | hasScannedForEncodings = 0;
117 | knownRegions = (
118 | en,
119 | Base,
120 | );
121 | mainGroup = E29B3C661E1D97CF00CB67E3;
122 | productRefGroup = E29B3C701E1D97CF00CB67E3 /* Products */;
123 | projectDirPath = "";
124 | projectRoot = "";
125 | targets = (
126 | E29B3C6E1E1D97CF00CB67E3 /* noTunes */,
127 | );
128 | };
129 | /* End PBXProject section */
130 |
131 | /* Begin PBXResourcesBuildPhase section */
132 | E29B3C6D1E1D97CF00CB67E3 /* Resources */ = {
133 | isa = PBXResourcesBuildPhase;
134 | buildActionMask = 2147483647;
135 | files = (
136 | E29B3C751E1D97CF00CB67E3 /* Assets.xcassets in Resources */,
137 | E29B3C781E1D97CF00CB67E3 /* MainMenu.xib in Resources */,
138 | );
139 | runOnlyForDeploymentPostprocessing = 0;
140 | };
141 | /* End PBXResourcesBuildPhase section */
142 |
143 | /* Begin PBXSourcesBuildPhase section */
144 | E29B3C6B1E1D97CF00CB67E3 /* Sources */ = {
145 | isa = PBXSourcesBuildPhase;
146 | buildActionMask = 2147483647;
147 | files = (
148 | E29B3C731E1D97CF00CB67E3 /* AppDelegate.swift in Sources */,
149 | );
150 | runOnlyForDeploymentPostprocessing = 0;
151 | };
152 | /* End PBXSourcesBuildPhase section */
153 |
154 | /* Begin PBXVariantGroup section */
155 | E29B3C761E1D97CF00CB67E3 /* MainMenu.xib */ = {
156 | isa = PBXVariantGroup;
157 | children = (
158 | E29B3C771E1D97CF00CB67E3 /* Base */,
159 | );
160 | name = MainMenu.xib;
161 | sourceTree = "";
162 | };
163 | /* End PBXVariantGroup section */
164 |
165 | /* Begin XCBuildConfiguration section */
166 | E29B3C7A1E1D97CF00CB67E3 /* Debug */ = {
167 | isa = XCBuildConfiguration;
168 | buildSettings = {
169 | ALWAYS_SEARCH_USER_PATHS = NO;
170 | CLANG_ANALYZER_NONNULL = YES;
171 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
172 | CLANG_CXX_LIBRARY = "libc++";
173 | CLANG_ENABLE_MODULES = YES;
174 | CLANG_ENABLE_OBJC_ARC = YES;
175 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
176 | CLANG_WARN_BOOL_CONVERSION = YES;
177 | CLANG_WARN_COMMA = YES;
178 | CLANG_WARN_CONSTANT_CONVERSION = YES;
179 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
180 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
181 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
182 | CLANG_WARN_EMPTY_BODY = YES;
183 | CLANG_WARN_ENUM_CONVERSION = YES;
184 | CLANG_WARN_INFINITE_RECURSION = YES;
185 | CLANG_WARN_INT_CONVERSION = YES;
186 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
187 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
188 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
189 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
190 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
191 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
192 | CLANG_WARN_STRICT_PROTOTYPES = YES;
193 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
194 | CLANG_WARN_UNREACHABLE_CODE = YES;
195 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
196 | CODE_SIGN_IDENTITY = "-";
197 | COPY_PHASE_STRIP = NO;
198 | DEAD_CODE_STRIPPING = YES;
199 | DEBUG_INFORMATION_FORMAT = dwarf;
200 | ENABLE_STRICT_OBJC_MSGSEND = YES;
201 | ENABLE_TESTABILITY = YES;
202 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
203 | GCC_C_LANGUAGE_STANDARD = gnu99;
204 | GCC_DYNAMIC_NO_PIC = NO;
205 | GCC_NO_COMMON_BLOCKS = YES;
206 | GCC_OPTIMIZATION_LEVEL = 0;
207 | GCC_PREPROCESSOR_DEFINITIONS = (
208 | "DEBUG=1",
209 | "$(inherited)",
210 | );
211 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
212 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
213 | GCC_WARN_UNDECLARED_SELECTOR = YES;
214 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
215 | GCC_WARN_UNUSED_FUNCTION = YES;
216 | GCC_WARN_UNUSED_VARIABLE = YES;
217 | MACOSX_DEPLOYMENT_TARGET = 10.12;
218 | MTL_ENABLE_DEBUG_INFO = YES;
219 | ONLY_ACTIVE_ARCH = YES;
220 | SDKROOT = macosx;
221 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
222 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
223 | };
224 | name = Debug;
225 | };
226 | E29B3C7B1E1D97CF00CB67E3 /* Release */ = {
227 | isa = XCBuildConfiguration;
228 | buildSettings = {
229 | ALWAYS_SEARCH_USER_PATHS = NO;
230 | CLANG_ANALYZER_NONNULL = YES;
231 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x";
232 | CLANG_CXX_LIBRARY = "libc++";
233 | CLANG_ENABLE_MODULES = YES;
234 | CLANG_ENABLE_OBJC_ARC = YES;
235 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
236 | CLANG_WARN_BOOL_CONVERSION = YES;
237 | CLANG_WARN_COMMA = YES;
238 | CLANG_WARN_CONSTANT_CONVERSION = YES;
239 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
240 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
241 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
242 | CLANG_WARN_EMPTY_BODY = YES;
243 | CLANG_WARN_ENUM_CONVERSION = YES;
244 | CLANG_WARN_INFINITE_RECURSION = YES;
245 | CLANG_WARN_INT_CONVERSION = YES;
246 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
247 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
248 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
249 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
250 | CLANG_WARN_QUOTED_INCLUDE_IN_FRAMEWORK_HEADER = YES;
251 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
252 | CLANG_WARN_STRICT_PROTOTYPES = YES;
253 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
254 | CLANG_WARN_UNREACHABLE_CODE = YES;
255 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
256 | CODE_SIGN_IDENTITY = "-";
257 | COPY_PHASE_STRIP = NO;
258 | DEAD_CODE_STRIPPING = YES;
259 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
260 | ENABLE_NS_ASSERTIONS = NO;
261 | ENABLE_STRICT_OBJC_MSGSEND = YES;
262 | ENABLE_USER_SCRIPT_SANDBOXING = YES;
263 | GCC_C_LANGUAGE_STANDARD = gnu99;
264 | GCC_NO_COMMON_BLOCKS = YES;
265 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
266 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
267 | GCC_WARN_UNDECLARED_SELECTOR = YES;
268 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
269 | GCC_WARN_UNUSED_FUNCTION = YES;
270 | GCC_WARN_UNUSED_VARIABLE = YES;
271 | MACOSX_DEPLOYMENT_TARGET = 10.12;
272 | MTL_ENABLE_DEBUG_INFO = NO;
273 | SDKROOT = macosx;
274 | SWIFT_COMPILATION_MODE = wholemodule;
275 | SWIFT_OPTIMIZATION_LEVEL = "-O";
276 | };
277 | name = Release;
278 | };
279 | E29B3C7D1E1D97CF00CB67E3 /* Debug */ = {
280 | isa = XCBuildConfiguration;
281 | buildSettings = {
282 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
283 | CODE_SIGN_IDENTITY = "Apple Development";
284 | CODE_SIGN_STYLE = Automatic;
285 | COMBINE_HIDPI_IMAGES = YES;
286 | DEAD_CODE_STRIPPING = YES;
287 | DEVELOPMENT_TEAM = JP6WW46Y42;
288 | ENABLE_HARDENED_RUNTIME = YES;
289 | INFOPLIST_FILE = noTunes/Info.plist;
290 | LD_RUNPATH_SEARCH_PATHS = (
291 | "$(inherited)",
292 | "@executable_path/../Frameworks",
293 | );
294 | MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
295 | MARKETING_VERSION = 3.5;
296 | PRODUCT_BUNDLE_IDENTIFIER = digital.twisted.noTunes;
297 | PRODUCT_NAME = "$(TARGET_NAME)";
298 | PROVISIONING_PROFILE_SPECIFIER = "";
299 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
300 | SWIFT_VERSION = 5.0;
301 | };
302 | name = Debug;
303 | };
304 | E29B3C7E1E1D97CF00CB67E3 /* Release */ = {
305 | isa = XCBuildConfiguration;
306 | buildSettings = {
307 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
308 | CODE_SIGN_IDENTITY = "Apple Development";
309 | CODE_SIGN_STYLE = Automatic;
310 | COMBINE_HIDPI_IMAGES = YES;
311 | DEAD_CODE_STRIPPING = YES;
312 | DEVELOPMENT_TEAM = JP6WW46Y42;
313 | ENABLE_HARDENED_RUNTIME = YES;
314 | INFOPLIST_FILE = noTunes/Info.plist;
315 | LD_RUNPATH_SEARCH_PATHS = (
316 | "$(inherited)",
317 | "@executable_path/../Frameworks",
318 | );
319 | MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)";
320 | MARKETING_VERSION = 3.5;
321 | PRODUCT_BUNDLE_IDENTIFIER = digital.twisted.noTunes;
322 | PRODUCT_NAME = "$(TARGET_NAME)";
323 | PROVISIONING_PROFILE_SPECIFIER = "";
324 | SWIFT_SWIFT3_OBJC_INFERENCE = Default;
325 | SWIFT_VERSION = 5.0;
326 | };
327 | name = Release;
328 | };
329 | /* End XCBuildConfiguration section */
330 |
331 | /* Begin XCConfigurationList section */
332 | E29B3C6A1E1D97CF00CB67E3 /* Build configuration list for PBXProject "noTunes" */ = {
333 | isa = XCConfigurationList;
334 | buildConfigurations = (
335 | E29B3C7A1E1D97CF00CB67E3 /* Debug */,
336 | E29B3C7B1E1D97CF00CB67E3 /* Release */,
337 | );
338 | defaultConfigurationIsVisible = 0;
339 | defaultConfigurationName = Release;
340 | };
341 | E29B3C7C1E1D97CF00CB67E3 /* Build configuration list for PBXNativeTarget "noTunes" */ = {
342 | isa = XCConfigurationList;
343 | buildConfigurations = (
344 | E29B3C7D1E1D97CF00CB67E3 /* Debug */,
345 | E29B3C7E1E1D97CF00CB67E3 /* Release */,
346 | );
347 | defaultConfigurationIsVisible = 0;
348 | defaultConfigurationName = Release;
349 | };
350 | /* End XCConfigurationList section */
351 | };
352 | rootObject = E29B3C671E1D97CF00CB67E3 /* Project object */;
353 | }
354 |
--------------------------------------------------------------------------------