├── .gitignore
├── NoMoreiTunes
├── Assets.xcassets
│ ├── Contents.json
│ └── AppIcon.appiconset
│ │ └── Contents.json
├── NoMoreiTunes.entitlements
├── ViewController.swift
├── AppDelegate.swift
├── Info.plist
└── Base.lproj
│ └── Main.storyboard
├── NoMoreiTunes.safariextension
├── Icon-100.png
├── Icon-32.png
├── Icon-48.png
├── Settings.plist
├── global.html
├── Info.plist
├── NoMoreiTunes.css
└── startScript.js
├── NoMoreiTunes.xcodeproj
├── project.xcworkspace
│ ├── contents.xcworkspacedata
│ └── xcshareddata
│ │ └── IDEWorkspaceChecks.plist
├── xcuserdata
│ └── pichfl.xcuserdatad
│ │ └── xcschemes
│ │ └── xcschememanagement.plist
└── project.pbxproj
├── LICENSE
└── README.markdown
/.gitignore:
--------------------------------------------------------------------------------
1 | .DS_Store
--------------------------------------------------------------------------------
/NoMoreiTunes/Assets.xcassets/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "info" : {
3 | "version" : 1,
4 | "author" : "xcode"
5 | }
6 | }
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/Icon-100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pichfl/NoMoreiTunes/HEAD/NoMoreiTunes.safariextension/Icon-100.png
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/Icon-32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pichfl/NoMoreiTunes/HEAD/NoMoreiTunes.safariextension/Icon-32.png
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/Icon-48.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/pichfl/NoMoreiTunes/HEAD/NoMoreiTunes.safariextension/Icon-48.png
--------------------------------------------------------------------------------
/NoMoreiTunes.xcodeproj/project.xcworkspace/contents.xcworkspacedata:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/NoMoreiTunes.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | IDEDidComputeMac32BitWarning
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/NoMoreiTunes/NoMoreiTunes.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 |
--------------------------------------------------------------------------------
/NoMoreiTunes.xcodeproj/xcuserdata/pichfl.xcuserdatad/xcschemes/xcschememanagement.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | SchemeUserState
6 |
7 | NoMoreiTunes.xcscheme
8 |
9 | orderHint
10 | 0
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/NoMoreiTunes/ViewController.swift:
--------------------------------------------------------------------------------
1 | //
2 | // ViewController.swift
3 | // NoMoreiTunes
4 | //
5 | // Created by Florian Pichler on 18.08.18.
6 | // Copyright © 2018 YLKGD. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | class ViewController: NSViewController {
12 |
13 | override func viewDidLoad() {
14 | super.viewDidLoad()
15 |
16 | // Do any additional setup after loading the view.
17 | }
18 |
19 | override var representedObject: Any? {
20 | didSet {
21 | // Update the view, if already loaded.
22 | }
23 | }
24 |
25 |
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/NoMoreiTunes/AppDelegate.swift:
--------------------------------------------------------------------------------
1 | //
2 | // AppDelegate.swift
3 | // NoMoreiTunes
4 | //
5 | // Created by Florian Pichler on 18.08.18.
6 | // Copyright © 2018 YLKGD. All rights reserved.
7 | //
8 |
9 | import Cocoa
10 |
11 | @NSApplicationMain
12 | class AppDelegate: NSObject, NSApplicationDelegate {
13 |
14 |
15 |
16 | func applicationDidFinishLaunching(_ aNotification: Notification) {
17 | // Insert code here to initialize your application
18 | }
19 |
20 | func applicationWillTerminate(_ aNotification: Notification) {
21 | // Insert code here to tear down your application
22 | }
23 |
24 |
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/Settings.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | DefaultValue
7 |
8 | Key
9 | closeOnLaunch
10 | Title
11 | Close window when using the launch button (if possible)
12 | Type
13 | CheckBox
14 |
15 |
16 | DefaultValue
17 |
18 | Key
19 | hideToolbar
20 | Title
21 | Hide toolbar after 5 seconds
22 | Type
23 | CheckBox
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/global.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2010-2018 Florian Pichler
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 |
--------------------------------------------------------------------------------
/NoMoreiTunes/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | CFBundleDevelopmentRegion
6 | $(DEVELOPMENT_LANGUAGE)
7 | CFBundleExecutable
8 | $(EXECUTABLE_NAME)
9 | CFBundleIconFile
10 |
11 | CFBundleIdentifier
12 | $(PRODUCT_BUNDLE_IDENTIFIER)
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleName
16 | $(PRODUCT_NAME)
17 | CFBundlePackageType
18 | APPL
19 | CFBundleShortVersionString
20 | 1.0
21 | CFBundleVersion
22 | 1
23 | LSMinimumSystemVersion
24 | $(MACOSX_DEPLOYMENT_TARGET)
25 | NSHumanReadableCopyright
26 | Copyright © 2018 YLKGD. All rights reserved.
27 | NSMainStoryboardFile
28 | Main
29 | NSPrincipalClass
30 | NSApplication
31 |
32 |
33 |
--------------------------------------------------------------------------------
/NoMoreiTunes/Assets.xcassets/AppIcon.appiconset/Contents.json:
--------------------------------------------------------------------------------
1 | {
2 | "images" : [
3 | {
4 | "idiom" : "mac",
5 | "size" : "16x16",
6 | "scale" : "1x"
7 | },
8 | {
9 | "idiom" : "mac",
10 | "size" : "16x16",
11 | "scale" : "2x"
12 | },
13 | {
14 | "idiom" : "mac",
15 | "size" : "32x32",
16 | "scale" : "1x"
17 | },
18 | {
19 | "idiom" : "mac",
20 | "size" : "32x32",
21 | "scale" : "2x"
22 | },
23 | {
24 | "idiom" : "mac",
25 | "size" : "128x128",
26 | "scale" : "1x"
27 | },
28 | {
29 | "idiom" : "mac",
30 | "size" : "128x128",
31 | "scale" : "2x"
32 | },
33 | {
34 | "idiom" : "mac",
35 | "size" : "256x256",
36 | "scale" : "1x"
37 | },
38 | {
39 | "idiom" : "mac",
40 | "size" : "256x256",
41 | "scale" : "2x"
42 | },
43 | {
44 | "idiom" : "mac",
45 | "size" : "512x512",
46 | "scale" : "1x"
47 | },
48 | {
49 | "idiom" : "mac",
50 | "size" : "512x512",
51 | "scale" : "2x"
52 | }
53 | ],
54 | "info" : {
55 | "version" : 1,
56 | "author" : "xcode"
57 | }
58 | }
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/Info.plist:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | Author
6 | Florian Pichler
7 | Builder Version
8 | 8536.26.14
9 | CFBundleDisplayName
10 | NoMoreiTunes
11 | CFBundleIdentifier
12 | de.einserver.nomoreitunes
13 | CFBundleInfoDictionaryVersion
14 | 6.0
15 | CFBundleShortVersionString
16 | 2.3.1
17 | CFBundleVersion
18 | 231
19 | Chrome
20 |
21 | Global Page
22 | global.html
23 |
24 | Content
25 |
26 | Blacklist
27 |
28 | http://buy.itunes.apple.com/*
29 | https://buy.itunes.apple.com/*
30 |
31 | Scripts
32 |
33 | Start
34 |
35 | startScript.js
36 |
37 |
38 | Stylesheets
39 |
40 | NoMoreiTunes.css
41 |
42 | Whitelist
43 |
44 | http://itunes.apple.com/*
45 | http://phobos.apple.com/*
46 | http://*.itunes.apple.com/*
47 | http://*.phobos.apple.com/*
48 | https://itunes.apple.com/*
49 | https://phobos.apple.com/*
50 | https://*.itunes.apple.com/*
51 | https://*.phobos.apple.com/*
52 |
53 |
54 | Description
55 | Prevents iTunes Preview and App Store pages from launching iTunes.
56 | ExtensionInfoDictionaryVersion
57 | 1.0
58 | Permissions
59 |
60 | Website Access
61 |
62 | Allowed Domains
63 |
64 | itunes.apple.com
65 | phobos.apple.com
66 | *.itunes.apple.com
67 | *.phobos.apple.com
68 |
69 | Include Secure Pages
70 |
71 | Level
72 | Some
73 |
74 |
75 | Update Manifest URL
76 | http://nomoreitunes.einserver.de/manifest.plist
77 | Website
78 | http://nomoreitunes.einserver.de/
79 |
80 |
81 |
--------------------------------------------------------------------------------
/README.markdown:
--------------------------------------------------------------------------------
1 | # NoMoreiTunes
2 |
3 | **Safari Extensions require a signed macOS app now, which makes it too much effort to continue this extension. It was nice while it lasted. Thanks for droping by.**
4 |
5 |
6 | Prevented iTunes Preview and App Store pages in Safari from launching iTunes from 2010 to 2018.
7 |
8 | ## Changelog
9 |
10 | - 2.3.1 Added support for https-based urls
11 | - 2.3 Removed dependency on MooTools, fixed issue #1 & issue #2 on the way
12 | - 2.2.1 New preference: You can now tell NoMoreiTunes to hide the toolbar after 5 seconds
13 | - 2.2 Started rewrite, removing dependencies on MooTools
14 | - 2.1.5 Fixed mistake in Dutch language file, moved project to GitHub
15 | - 2.1.1 Updated design again. The bar is now an overlay and doesn’t push down the page anymore. If you enable the feature in the Extension Settings, NoMoreiTunes will try to close the window for you when you click on the launch button. This will not work for all links as Safari is very restrictive on this behavior and is turned off by default.
16 | - 2.0 New Design, improved AppStore support: Now with a launch button!
17 | - 1.8 Limited support for links from the AppStore (no launch button in the black bar for now)
18 | - 1.71 Fixed a bug introduced in 1.7 which made the button for launching iTunes fail
19 | - 1.7 Bugfixes and more translations
20 | - 1.6 Translations
21 | - 1.5.1 Small glimpse of the next version: A new action bar informs you that the extension did something to the current page and gives you another simple option to launch iTunes
22 | - 1.1.2 Fixes Certificate Problem
23 | - 1.1 URLs responsible for creating new accounts on iTunes will now launch iTunes and no longer be blocked (I think there is some kind of use in launching iTunes in this special case)
24 | - 1.0 Code cleaned up (only one script now), improved display for TV-Shows
25 | - 0.5 Autoupdate fixed, additional URLs added
26 | - 0.4 Icon added
27 | - 0.3 Better video preview (more similar to iTunes Preview pages), corrected access URLs
28 | - 0.2 Fixed scripts, added video preview
29 | - 0.1 Initial release
30 |
31 | ## Thanks
32 |
33 | - [Wolfgang Klatt](http://twitter.com/woIIe) for the initial idea.
34 | - [Pepi](http://maclemon.at/) for an excellent bug report which lead to v1.1
35 | - [Alfred Brose](mailto:alfred.brose@bcmsolutions.de) for Russian
36 | - [Giancarlo Nicolof](http://web.me.com/giancarlon/) for Italian
37 | - [Amine Benboubker](http://aminebenboubker.com/) for French
38 | - Christoph Theel for Spanish & Portuguese
39 | - [Oscar Palmér](http://oscarismy.name/) for Swedish
40 | - Łukasz Handke for Polish
41 | - Zhusee Zhang for Chinese
42 | - [Daniel Göstenmeier](http://goestenmeier.com/) for Dutch
43 |
44 | _Your name here?_ Help me find bugs or translate NoMoreiTunes, contact me for details.
45 |
46 | ## License
47 |
48 | NoMoreiTunes is licensed under the MIT License. See [LICENSE](./LICENSE) for details.
49 |
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/NoMoreiTunes.css:
--------------------------------------------------------------------------------
1 | .hide .subtitle+center,.hide .footer, .hideloading .title, .hideloading .subtitle{
2 | display: none;}
3 |
4 | body.hide{
5 | text-align: left;
6 | -webkit-font-smoothing: antialiased;}
7 |
8 | html body.remove-border{
9 | margin:0;
10 | padding:0;}
11 |
12 | .hide div.loadingbox{
13 | width: 980px !important;
14 | margin: 7px auto 50px;
15 | padding: 2em 0 1em;
16 | border: 1px solid #dae1e7;
17 | -webkit-border-radius: 7px;
18 | cursor: pointer;
19 | background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#eff5f9), to(#fff));
20 | color: #474747;
21 | font: normal normal normal 12px/18px 'Lucida Grande', 'Lucida Sans Unicode', Arial, Verdana, sans-serif;
22 | -webkit-box-shadow: 0 1px 5px rgba(0,0,0,0.1);
23 | -webkit-transition: -webkit-box-shadow 0.1s;}
24 |
25 | .hide.hidetitle div.loadingbox{
26 | margin-top: 72px;}
27 |
28 | .hide div.loadingbox:hover{
29 | -webkit-box-shadow: 0 1px 10px rgba(0,0,0,0.1);}
30 |
31 | .hide div.loadingbox:active{
32 | -webkit-box-shadow: 0 1px 5px rgba(0,0,0,0.1);}
33 |
34 | .hide div.loadingbox p.title{
35 | font-size: 22px;
36 | line-height: 32px;
37 | color: inherit;
38 | font-weight: bold;
39 | -webkit-font-smoothing: antialiased;}
40 |
41 | .hide div.loadingbox p.title,
42 | .hide div.loadingbox p.subtitle{
43 | padding: 0 40px;}
44 |
45 | .hide div.loadingbox p.subtitle{
46 | margin-top: 0.5em;}
47 |
48 | .hide p.subtitle span{
49 | text-decoration: underline;}
50 |
51 | .hide p{
52 | margin: 0;}
53 |
54 | .hide .loadingbox table.info{
55 | width: 400px !important;
56 | margin: 0 auto 1em;}
57 |
58 | .hide .loadingbox table.info td{
59 | width: 1%;
60 | vertical-align: top;}
61 |
62 | .hide .loadingbox table.info td+td{
63 | width: 99% !important;}
64 |
65 | .hide .loadingbox table.info p{
66 | margin-left: 2em !important;}
67 |
68 | .hide .loadingbox table.info p:last-child{
69 | font-weight: bold !important;
70 | color: #898989;}
71 |
72 | .hide .loadingbox table.info p:first-child{
73 | margin-top: 3em !important;}
74 |
75 | .hide .loadingbox table.info img{
76 | padding: 7px;
77 | background: #fff;
78 | -webkit-box-shadow: rgba(0,0,0,0.296875) 0px 3px 5px;}
79 |
80 | .hide #iTunesDetectorIE{
81 | display: block;
82 | width: 980px !important;
83 | height: 32px !important;
84 | margin: 50px auto 0;
85 | background: #fff url(http://ax.itunes.apple.com/images/web/itunes_preview/itunespreview_en.png) 7px 0 no-repeat !important;}
86 |
87 | body.de-de #iTunesDetectorIE{
88 | background-image: url(http://ax.itunes.apple.com/images/web/itunes_preview/itunespreview_de.png) !important;
89 | }
90 |
91 | body.it-it #iTunesDetectorIE{
92 | background-image: url(http://ax.itunes.apple.com/images/web/itunes_preview/itunespreview_it.png) !important;
93 | }
94 |
95 | .hide.hidetitle #iTunesDetectorIE{
96 | display: none;}
97 |
98 | p.clickhere{
99 | padding-bottom: 1.3em !important;
100 | margin-bottom: 0 !important;
101 | text-align: center;}
102 |
103 | #itunes-detector}{
104 | display: none !important;}
105 |
106 | .shownomoreitunesbar .hide{
107 | margin: 0;
108 | padding: 0;}
109 |
110 | html body div#nomoreitunes.bar,
111 | html body div#nomoreitunes.bar>div,
112 | html body div#nomoreitunes.bar>#launch{
113 | overflow: hidden !important;
114 | height: 22px !important;
115 | margin: 0 !important;
116 | padding: 0 !important;
117 | -webkit-user-select: none !important;
118 | cursor: default !important;}
119 |
120 | html body div#nomoreitunes.bar:active,
121 | html body div#nomoreitunes.bar>div:active,
122 | html body div#nomoreitunes.bar>#launch:active{
123 | cursor: default !important;}
124 |
125 | html body div#nomoreitunes.bar{
126 | position: fixed !important;
127 | top: -23px !important;
128 | right: 0 !important;
129 | left: 0 !important;
130 | padding: 0 202px 0 11px !important;
131 | line-height: 22px !important;
132 | background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ededed), to(#d9d9d9)) !important;
133 | border-top: 0;
134 | border-bottom: 1px solid #bfbfbf !important;
135 | color: #737373 !important;
136 | z-index: 999999;
137 | -webkit-transition: all linear 500ms;
138 | pointer-events:none !important;
139 | -webkit-box-shadow: 0 1px 15px rgba(0,0,0,0.3);
140 | opacity: 0}
141 |
142 | html body div#nomoreitunes.bar>div{
143 | position: relative !important;
144 | width: 100% !important;
145 | font: bold 12px/23px Helvetica, sans-serif !important;
146 | text-overflow: ellipsis !important;
147 | -webkit-text-overflow: ellipsis !important;
148 | white-space: nowrap !important;
149 | text-align: left !important;}
150 |
151 | html body div#nomoreitunes.bar>#launch{
152 | position: absolute !important;
153 | top: 0 !important;
154 | right: 11px !important;
155 | display: block !important;
156 | width: 180px !important;
157 | height: 16px !important;
158 | margin: 2px 0 0 0 !important;
159 | border-radius: 8px !important;
160 | border: 1px solid #a8a8a8 !important;
161 | -webkit-box-shadow: 0 1px 1px #ededed, inset 0 1px 1px #fafafa !important;
162 | background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#f6f6f6), to(#e3e3e3)) !important;
163 | color: #868686 !important;
164 | font: bold 11px/18px Helvetica, sans-serif !important;
165 | text-align: center !important;
166 | vertical-align: middle !important;
167 | text-decoration: none !important;
168 | padding: 0 !important;
169 | pointer-events: auto !important;}
170 |
171 | html body div#nomoreitunes.bar>#launch:active{
172 | -webkit-box-shadow: 0 1px 1px #ededed, inset 0 1px 1px #a8a8a8 !important;
173 | background: #424242 -webkit-gradient(linear, 0% 0%, 0% 100%, from(#c5c5c5), to(#d2d2d2)) !important;
174 | border-color: #8c8c8c !important;
175 | color: #575757 !important;}
176 |
177 | body{
178 | /* border-top: 22px solid #F5F6F7; */
179 | border-top-width: 0;}
180 |
181 | /*
182 | body{
183 | -webkit-transition: border-top-width linear 500ms;}*/
184 |
185 | /*
186 | .shownomoreitunesbar body{
187 | border-top-width: 23px;}*/
188 |
189 | body.oldschool{
190 | -webkit-transition: border-top-width linear 0 !important;
191 | border-top-width: 23px !important;
192 | border-color: #f7f8f9;
193 | background: #f7f8f9;}
194 |
195 | /*
196 | .hide div#nomoreitunes.bar{
197 | -webkit-transition: top linear 0 !important;
198 | top: 0 !important;}*/
199 |
200 | .shownomoreitunesbar div#nomoreitunes.bar{
201 | top: 0 !important;
202 | opacity: 1 !important; }
--------------------------------------------------------------------------------
/NoMoreiTunes.safariextension/startScript.js:
--------------------------------------------------------------------------------
1 | /*
2 |
3 | NoMoreiTunes
4 | ------------
5 |
6 | An extension by Florian Pichler to stop
7 | Apple's Preview websites from launching iTunes.
8 | Developed after an idea from Wolfgang Klatt.
9 |
10 | Online: http://nomoreitunes.einserver.de
11 | Contact: pichfl@einserver.de
12 |
13 | (c)2010-2011, Florian Pichler, All rights reserved
14 | This plugin is provided as is and at no cost.
15 |
16 | If you like the plugin, don't hesitate donate.
17 |
18 | */
19 |
20 | ;(function(win,doc) {
21 |
22 | // Some helpers
23 | function $(sel) {
24 | var ret = doc.querySelectorAll(sel);
25 | return ret[0];
26 | }
27 |
28 | function $$(sel) {
29 | return doc.querySelectorAll(sel);
30 | }
31 |
32 | function stringClean(str) {
33 | return str.replace(/\s+/g, ' ').replace(/^\s+|\s+$/g, '');
34 | }
35 |
36 | function disposeElement(el) {
37 | return (el.parentNode) ? el.parentNode.removeChild(el) : el;
38 | }
39 |
40 | var forEach = Array.prototype.forEach;
41 |
42 | // Start extension code
43 | var NoMoreiTunes = NoMoreiTunes || {};
44 |
45 | Cookie = {
46 | path: '/',
47 | domain: 'false',
48 | duration: false,
49 | secure: false,
50 | document: document,
51 | encode: true
52 | };
53 |
54 | Cookie.write = function(key, value, options) {
55 | value = encodeURIComponent(value);
56 | var d = options.document || this.document;
57 |
58 | var domain = options.domain || this.domain;
59 | if (domain) {
60 | value += '; domain=' + domain;
61 | }
62 |
63 | var path = options.path || this.path;
64 | if (path) {
65 | value += '; path=' + path;
66 | }
67 |
68 | var duration = options.duration || this.duration;
69 | if (duration) {
70 | var date = new Date();
71 | date.setTime(date.getTime() + duration * 24 * 60 * 60 * 1000);
72 | value += '; expires=' + date.toGMTString();
73 | }
74 |
75 | if (options.secure || this.secure) {
76 | value += '; secure';
77 | d.cookie = key + '=' + value;
78 | }
79 | };
80 |
81 | Cookie.read = function(key) {
82 | var escapedKey = key.replace(/(\[-.*\+?^$\{\}()|[\]\/\\])/g, '\\$1');
83 | var value = this.document.cookie.match('(?:^|;)\\s*' + escapedKey + '=([^;]*)');
84 | return (value) ? decodeURIComponent(value[1]) : null;
85 | };
86 |
87 | // language strings
88 | NoMoreiTunes.lang = {
89 | // Defaults
90 | 'en': {
91 | 'itunes': {
92 | 'info': 'NoMoreiTunes prevented this page from launching iTunes',
93 | 'launch': 'Open in iTunes',
94 | 'click': 'Click here to open iTunes.'
95 | },
96 | 'appstore': {
97 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
98 | 'launch': 'Open the AppStore',
99 | 'click': 'Click here to open the AppStore'
100 | }
101 | },
102 | // By Florian Pichler, florianpichler.de
103 | 'de': {
104 | 'itunes': {
105 | 'info': 'NoMoreiTunes hat diese Seite am Öffnen von iTunes gehindert',
106 | 'launch': 'In iTunes öffnen',
107 | 'click': 'Hier klicken um iTunes zu öffnen.'
108 | },
109 | 'appstore': {
110 | 'info': 'NoMoreiTunes hat diese Seite am Öffnen vom AppStore gehindert',
111 | 'launch': 'Im AppStore öffnen',
112 | 'click': 'Hier klicken um den AppStore zu öffnen'
113 | }
114 | },
115 | // By Alfred Brose, alfred.brose@bcmsolutions.de
116 | 'ru': {
117 | 'itunes': {
118 | 'info': 'NoMoreiTunes предотвратило открытие этой страницы',
119 | 'launch': 'Открыть в iTunes',
120 | 'click': 'Нажмите здесь чтобы открыть iTunes'
121 | },
122 | 'appstore': {
123 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
124 | 'launch': 'Open the AppStore',
125 | 'click': 'Click here to open the AppStore'
126 | }
127 | },
128 | // By Giancarlo Nicolof, http://web.me.com/giancarlon/
129 | 'it': {
130 | 'itunes': {
131 | 'info': 'NoMoreiTunes ha impedito a questa pagina di aprire iTunes',
132 | 'launch': 'Apri in iTunes',
133 | 'click': 'Cliccare qui per aprire iTunes.'
134 | },
135 | 'appstore': {
136 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
137 | 'launch': 'Open the AppStore',
138 | 'click': 'Click here to open the AppStore'
139 | }
140 | },
141 | // By Amine Benboubker, http://aminebenboubker.com/
142 | 'fr': {
143 | 'itunes': {
144 | 'info': 'NoMoreiTunes a empêché cette page de lancer iTunes',
145 | 'launch': 'Ouvrir dans iTunes',
146 | 'click': 'Cliquez ici pour ouvrir iTunes.'
147 | },
148 | 'appstore': {
149 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
150 | 'launch': 'Open the AppStore',
151 | 'click': 'Click here to open the AppStore'
152 | }
153 | },
154 | // By Christoph Theel
155 | 'es': {
156 | 'itunes': {
157 | 'info': 'NoMoreiTunes impidió a esta página de lanzar iTunes',
158 | 'launch': 'Abrir en iTunes',
159 | 'click': 'Haga clic aqui para abrir iTunes.'
160 | },
161 | 'appstore': {
162 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
163 | 'launch': 'Open the AppStore',
164 | 'click': 'Click here to open the AppStore'
165 | }
166 | },
167 | 'pt' : {
168 | 'itunes': {
169 | 'info': 'NoMoreiTunes impediu esta página de lançar iTunes',
170 | 'launch': 'Abra o iTunes',
171 | 'click': 'Clique aqui para abrir o iTunes.'
172 | },
173 | 'appstore': {
174 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
175 | 'launch': 'Open the AppStore',
176 | 'click': 'Click here to open the AppStore'
177 | }
178 | },
179 | //By Oscar Palmér, http://oscarismy.name/
180 | 'sv': {
181 | 'itunes': {
182 | 'info': 'NoMoreiTunes hindrade denna sida från att öppna iTunes',
183 | 'launch': 'Öppna i iTunes',
184 | 'click': 'Klicka här för att öppna iTunes.'
185 | },
186 | 'appstore': {
187 | 'info': 'NoMoreiTunes hindrade denna sida från att öppna App Store',
188 | 'launch': 'Öppna i App Store',
189 | 'click': 'Klicka här för att öppna App Store.'
190 | }
191 | },
192 | // By Łukasz Handke, lukasz.handke@gmail.com
193 | 'pl': {
194 | 'itunes': {
195 | 'info': 'NoMoreiTunes uniemożliwił tej stronie automatyczne otwarcie iTunes',
196 | 'launch': 'Otwórz w iTunes',
197 | 'click': 'Kliknij tutaj by otworzyć iTunes.'
198 | },
199 | 'appstore': {
200 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
201 | 'launch': 'Open the AppStore',
202 | 'click': 'Click here to open the AppStore'
203 | }
204 | },
205 | // By Zhusee Zhang
206 | 'zh': {
207 | 'itunes': {
208 | 'info': 'NoMoreiTunes 阻止了這個網頁自動打開 iTunes',
209 | 'launch': '在 iTunes 中開啟',
210 | 'click': '請點這裡來打開 iTunes。'
211 | },
212 | 'appstore': {
213 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
214 | 'launch': 'Open the AppStore',
215 | 'click': 'Click here to open the AppStore'
216 | }
217 | },
218 | // By Daniel Göstenmeier, http://goestenmeier.com/
219 | 'nl': {
220 | 'itunes': {
221 | 'info': 'NoMoreiTunes verhindert deze pagina om iTunes te openen',
222 | 'launch': 'Open in iTunes',
223 | 'click': 'Click hier om iTunes te openen.'
224 | },
225 | 'appstore': {
226 | 'info': 'NoMoreiTunes prevented this page from launching the AppStore',
227 | 'launch': 'Open the AppStore',
228 | 'click': 'Click here to open the AppStore'
229 | }
230 |
231 | },
232 | // By Johan K. Jensen, @Josso000
233 | 'da': {
234 | 'itunes': {
235 | 'info': 'NoMoreiTunes stoppede denne side i at åbne iTunes',
236 | 'launch': 'Åben i iTunes',
237 | 'click': 'Klik her for at åbne iTunes.'
238 | },
239 | 'appstore': {
240 | 'info': 'NoMoreiTunes stoppede denne side i at åbne AppStoren',
241 | 'launch': 'Åben AppStoren',
242 | 'click': 'Klik her for at åbne AppStoren'
243 | }
244 | }
245 | };
246 |
247 | /* ,
248 | '': {
249 | 'itunes': {
250 | 'info': '',
251 | 'launch': '',
252 | 'click': ''
253 | }
254 | 'appstore': {
255 | 'info': '',
256 | 'launch': '',
257 | 'click': ''
258 | }
259 | }
260 | */
261 |
262 | // Get extension settings
263 | NoMoreiTunes.tryClosingWindow = false;
264 | NoMoreiTunes.shouldHideToolbar = false;
265 | safari.self.addEventListener('message', function(event) {
266 | if (event.name === 'setNoMoreItunesCloseOnLaunch') {
267 | NoMoreiTunes.tryClosingWindow = event.message;
268 | }
269 | if (event.name === 'setNoMoreItunesHideToolbar') {
270 | NoMoreiTunes.shouldHideToolbar = event.message;
271 | hideBar();
272 | }
273 | }, false);
274 |
275 | safari.self.tab.dispatchMessage('getNoMoreiTunesSettings');
276 |
277 | if (Cookie.read('disableAutoLaunch') != 1) {
278 | var a = new Date();
279 | a.setTime(a.getTime()+300000);
280 | Cookie.write('disableAutoLaunch', 1, {
281 | 'duration': 0.0034,
282 | 'domain': 'itunes.apple.com'
283 | });
284 | }
285 |
286 | function closeWindow() {
287 | if (NoMoreiTunes.tryClosingWindow) {
288 | setTimeout(function() {
289 | close();
290 | console.log('NoMoreiTunes tried to close this window.');
291 | }, 100);
292 | }
293 | }
294 |
295 | function hideBar() {
296 | if (NoMoreiTunes.shouldHideToolbar) {
297 | setTimeout(function() {
298 | doc.documentElement.classList.remove('shownomoreitunesbar');
299 | }, 5100);
300 | }
301 | }
302 |
303 | function openStore() {
304 | if (url && url !== ''){
305 | doc.body.classList.remove('shownomoreitunesbar');
306 | win.location.replace(url);
307 | closeWindow();
308 | }
309 | }
310 |
311 | var bar,
312 | bodyOnload,
313 | url;
314 |
315 | win.addEventListener('DOMContentLoaded', function() {
316 |
317 | bodyOnload = doc.body.attributes.getNamedItem('onload');
318 |
319 | url = stringClean(bodyOnload.value);
320 |
321 | var bl = navigator.language.substr(0,2),
322 | appStore = (url === 'detectAndOpenMacAppStore();'),
323 | itunesStore = (url === 'detectAndOpenItunes();');
324 |
325 | doc.body.attributes.removeNamedItem('onload');
326 |
327 | var matchedUrl,
328 | launchButton = false,
329 | newUrl;
330 |
331 | if (appStore || itunesStore) {
332 | launchButton = $('#left-stack a.action');
333 |
334 | newUrl = launchButton.attributes.getNamedItem('onclick');
335 | url = newUrl.value;
336 |
337 | matchedUrl = url.match(/(?:return .*\(')(?:http|itms)(.*)(?:'\);)/);
338 | } else {
339 | matchedUrl = url.match(/(?:openItunes\(')(?:http|itms)(.*)(?:'\);)/) || url.match(/(?:itmsOpen\(')(?:http|itms)(.*)(?:','http)/);
340 | }
341 |
342 | if (matchedUrl) {
343 | var prefix = (appStore)?'macappstore':"itms";
344 |
345 | newUrl = prefix + matchedUrl[1];
346 |
347 | var unhashedUrl = newUrl.split('#');
348 |
349 | url = unhashedUrl[0];
350 | }
351 |
352 | // set language
353 | var clientLanguage = 'en',
354 | currentLang;
355 |
356 | for (currentLang in NoMoreiTunes.lang) {
357 | if (currentLang == bl) {
358 | clientLanguage = currentLang;
359 | }
360 | }
361 | doc.body.classList.add(clientLanguage);
362 | var langStrings = NoMoreiTunes.lang[clientLanguage][(appStore)?'appstore':'itunes'];
363 |
364 | if ($('.loadingbox .roundtop')) {
365 | doc.body.classList.add('remove-border');
366 | }
367 |
368 | bar = doc.createElement('div');
369 | bar.id = 'nomoreitunes';
370 | bar.className = 'bar';
371 | bar.innerHTML = '' + langStrings.info + '
' + '' + langStrings.launch + '
';
372 |
373 | doc.body.appendChild(bar);
374 |
375 |
376 | if (!launchButton) {
377 | doc.body.classList.add('oldschool');
378 | }
379 |
380 | $('#nomoreitunes #launch').addEventListener('click', openStore, false);
381 |
382 | win.addEventListener('load', function() {
383 | setTimeout(function() {
384 | doc.documentElement.classList.add('shownomoreitunesbar');
385 | }, 500);
386 | }, false);
387 |
388 | var userOverride = $('#userOverridePanel, .loadingbox .roundtop');
389 |
390 | if (userOverride) {
391 | forEach.call($$('.roundtop, .roundbot, style, center, p.footer'), function(el){
392 | el.parentNode.removeChild(el);
393 | });
394 |
395 | doc.body.classList.add('hide');
396 | if ($('table.info')) {
397 | doc.body.classList.add('hideloading');
398 | } else {
399 | var sub = $('p.subtitle');
400 | if (sub) {
401 | var subHtml = sub.innerHTML;
402 | sub.innerHTML = subHtml+' '+langStrings.click;
403 | doc.body.classList.add('hidetitle');
404 | }
405 | }
406 | var lb = $('.loadingbox');
407 | if (lb) {
408 | lb.addEventListener('click', openStore, false);
409 | }
410 | } else {
411 | var a = $('.intro p:last-child');
412 | if (a) {
413 | disposeElement(a);
414 | }
415 | }
416 | }, false);
417 |
418 | }(window, document));
--------------------------------------------------------------------------------
/NoMoreiTunes.xcodeproj/project.pbxproj:
--------------------------------------------------------------------------------
1 | // !$*UTF8*$!
2 | {
3 | archiveVersion = 1;
4 | classes = {
5 | };
6 | objectVersion = 50;
7 | objects = {
8 |
9 | /* Begin PBXBuildFile section */
10 | C3F4AA02212896750071E1DF /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F4AA01212896750071E1DF /* AppDelegate.swift */; };
11 | C3F4AA04212896750071E1DF /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = C3F4AA03212896750071E1DF /* ViewController.swift */; };
12 | C3F4AA06212896770071E1DF /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C3F4AA05212896770071E1DF /* Assets.xcassets */; };
13 | C3F4AA09212896770071E1DF /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = C3F4AA07212896770071E1DF /* Main.storyboard */; };
14 | /* End PBXBuildFile section */
15 |
16 | /* Begin PBXFileReference section */
17 | C3F4A9FE212896750071E1DF /* NoMoreiTunes.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = NoMoreiTunes.app; sourceTree = BUILT_PRODUCTS_DIR; };
18 | C3F4AA01212896750071E1DF /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; };
19 | C3F4AA03212896750071E1DF /* ViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewController.swift; sourceTree = ""; };
20 | C3F4AA05212896770071E1DF /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
21 | C3F4AA08212896770071E1DF /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; };
22 | C3F4AA0A212896770071E1DF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
23 | C3F4AA0B212896770071E1DF /* NoMoreiTunes.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NoMoreiTunes.entitlements; sourceTree = ""; };
24 | /* End PBXFileReference section */
25 |
26 | /* Begin PBXFrameworksBuildPhase section */
27 | C3F4A9FB212896750071E1DF /* Frameworks */ = {
28 | isa = PBXFrameworksBuildPhase;
29 | buildActionMask = 2147483647;
30 | files = (
31 | );
32 | runOnlyForDeploymentPostprocessing = 0;
33 | };
34 | /* End PBXFrameworksBuildPhase section */
35 |
36 | /* Begin PBXGroup section */
37 | C3F4A9F5212896750071E1DF = {
38 | isa = PBXGroup;
39 | children = (
40 | C3F4AA00212896750071E1DF /* NoMoreiTunes */,
41 | C3F4A9FF212896750071E1DF /* Products */,
42 | );
43 | sourceTree = "";
44 | };
45 | C3F4A9FF212896750071E1DF /* Products */ = {
46 | isa = PBXGroup;
47 | children = (
48 | C3F4A9FE212896750071E1DF /* NoMoreiTunes.app */,
49 | );
50 | name = Products;
51 | sourceTree = "";
52 | };
53 | C3F4AA00212896750071E1DF /* NoMoreiTunes */ = {
54 | isa = PBXGroup;
55 | children = (
56 | C3F4AA01212896750071E1DF /* AppDelegate.swift */,
57 | C3F4AA03212896750071E1DF /* ViewController.swift */,
58 | C3F4AA05212896770071E1DF /* Assets.xcassets */,
59 | C3F4AA07212896770071E1DF /* Main.storyboard */,
60 | C3F4AA0A212896770071E1DF /* Info.plist */,
61 | C3F4AA0B212896770071E1DF /* NoMoreiTunes.entitlements */,
62 | );
63 | path = NoMoreiTunes;
64 | sourceTree = "";
65 | };
66 | /* End PBXGroup section */
67 |
68 | /* Begin PBXNativeTarget section */
69 | C3F4A9FD212896750071E1DF /* NoMoreiTunes */ = {
70 | isa = PBXNativeTarget;
71 | buildConfigurationList = C3F4AA0E212896770071E1DF /* Build configuration list for PBXNativeTarget "NoMoreiTunes" */;
72 | buildPhases = (
73 | C3F4A9FA212896750071E1DF /* Sources */,
74 | C3F4A9FB212896750071E1DF /* Frameworks */,
75 | C3F4A9FC212896750071E1DF /* Resources */,
76 | );
77 | buildRules = (
78 | );
79 | dependencies = (
80 | );
81 | name = NoMoreiTunes;
82 | productName = NoMoreiTunes;
83 | productReference = C3F4A9FE212896750071E1DF /* NoMoreiTunes.app */;
84 | productType = "com.apple.product-type.application";
85 | };
86 | /* End PBXNativeTarget section */
87 |
88 | /* Begin PBXProject section */
89 | C3F4A9F6212896750071E1DF /* Project object */ = {
90 | isa = PBXProject;
91 | attributes = {
92 | LastSwiftUpdateCheck = 0940;
93 | LastUpgradeCheck = 0940;
94 | ORGANIZATIONNAME = YLKGD;
95 | TargetAttributes = {
96 | C3F4A9FD212896750071E1DF = {
97 | CreatedOnToolsVersion = 9.4.1;
98 | };
99 | };
100 | };
101 | buildConfigurationList = C3F4A9F9212896750071E1DF /* Build configuration list for PBXProject "NoMoreiTunes" */;
102 | compatibilityVersion = "Xcode 9.3";
103 | developmentRegion = en;
104 | hasScannedForEncodings = 0;
105 | knownRegions = (
106 | en,
107 | Base,
108 | );
109 | mainGroup = C3F4A9F5212896750071E1DF;
110 | productRefGroup = C3F4A9FF212896750071E1DF /* Products */;
111 | projectDirPath = "";
112 | projectRoot = "";
113 | targets = (
114 | C3F4A9FD212896750071E1DF /* NoMoreiTunes */,
115 | );
116 | };
117 | /* End PBXProject section */
118 |
119 | /* Begin PBXResourcesBuildPhase section */
120 | C3F4A9FC212896750071E1DF /* Resources */ = {
121 | isa = PBXResourcesBuildPhase;
122 | buildActionMask = 2147483647;
123 | files = (
124 | C3F4AA06212896770071E1DF /* Assets.xcassets in Resources */,
125 | C3F4AA09212896770071E1DF /* Main.storyboard in Resources */,
126 | );
127 | runOnlyForDeploymentPostprocessing = 0;
128 | };
129 | /* End PBXResourcesBuildPhase section */
130 |
131 | /* Begin PBXSourcesBuildPhase section */
132 | C3F4A9FA212896750071E1DF /* Sources */ = {
133 | isa = PBXSourcesBuildPhase;
134 | buildActionMask = 2147483647;
135 | files = (
136 | C3F4AA04212896750071E1DF /* ViewController.swift in Sources */,
137 | C3F4AA02212896750071E1DF /* AppDelegate.swift in Sources */,
138 | );
139 | runOnlyForDeploymentPostprocessing = 0;
140 | };
141 | /* End PBXSourcesBuildPhase section */
142 |
143 | /* Begin PBXVariantGroup section */
144 | C3F4AA07212896770071E1DF /* Main.storyboard */ = {
145 | isa = PBXVariantGroup;
146 | children = (
147 | C3F4AA08212896770071E1DF /* Base */,
148 | );
149 | name = Main.storyboard;
150 | sourceTree = "";
151 | };
152 | /* End PBXVariantGroup section */
153 |
154 | /* Begin XCBuildConfiguration section */
155 | C3F4AA0C212896770071E1DF /* Debug */ = {
156 | isa = XCBuildConfiguration;
157 | buildSettings = {
158 | ALWAYS_SEARCH_USER_PATHS = NO;
159 | CLANG_ANALYZER_NONNULL = YES;
160 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
161 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
162 | CLANG_CXX_LIBRARY = "libc++";
163 | CLANG_ENABLE_MODULES = YES;
164 | CLANG_ENABLE_OBJC_ARC = YES;
165 | CLANG_ENABLE_OBJC_WEAK = YES;
166 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
167 | CLANG_WARN_BOOL_CONVERSION = YES;
168 | CLANG_WARN_COMMA = YES;
169 | CLANG_WARN_CONSTANT_CONVERSION = YES;
170 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
171 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
172 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
173 | CLANG_WARN_EMPTY_BODY = YES;
174 | CLANG_WARN_ENUM_CONVERSION = YES;
175 | CLANG_WARN_INFINITE_RECURSION = YES;
176 | CLANG_WARN_INT_CONVERSION = YES;
177 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
178 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
179 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
180 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
181 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
182 | CLANG_WARN_STRICT_PROTOTYPES = YES;
183 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
184 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
185 | CLANG_WARN_UNREACHABLE_CODE = YES;
186 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
187 | CODE_SIGN_IDENTITY = "Mac Developer";
188 | COPY_PHASE_STRIP = NO;
189 | DEBUG_INFORMATION_FORMAT = dwarf;
190 | ENABLE_STRICT_OBJC_MSGSEND = YES;
191 | ENABLE_TESTABILITY = YES;
192 | GCC_C_LANGUAGE_STANDARD = gnu11;
193 | GCC_DYNAMIC_NO_PIC = NO;
194 | GCC_NO_COMMON_BLOCKS = YES;
195 | GCC_OPTIMIZATION_LEVEL = 0;
196 | GCC_PREPROCESSOR_DEFINITIONS = (
197 | "DEBUG=1",
198 | "$(inherited)",
199 | );
200 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
201 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
202 | GCC_WARN_UNDECLARED_SELECTOR = YES;
203 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
204 | GCC_WARN_UNUSED_FUNCTION = YES;
205 | GCC_WARN_UNUSED_VARIABLE = YES;
206 | MACOSX_DEPLOYMENT_TARGET = 10.13;
207 | MTL_ENABLE_DEBUG_INFO = YES;
208 | ONLY_ACTIVE_ARCH = YES;
209 | SDKROOT = macosx;
210 | SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG;
211 | SWIFT_OPTIMIZATION_LEVEL = "-Onone";
212 | };
213 | name = Debug;
214 | };
215 | C3F4AA0D212896770071E1DF /* Release */ = {
216 | isa = XCBuildConfiguration;
217 | buildSettings = {
218 | ALWAYS_SEARCH_USER_PATHS = NO;
219 | CLANG_ANALYZER_NONNULL = YES;
220 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
221 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
222 | CLANG_CXX_LIBRARY = "libc++";
223 | CLANG_ENABLE_MODULES = YES;
224 | CLANG_ENABLE_OBJC_ARC = YES;
225 | CLANG_ENABLE_OBJC_WEAK = YES;
226 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
227 | CLANG_WARN_BOOL_CONVERSION = YES;
228 | CLANG_WARN_COMMA = YES;
229 | CLANG_WARN_CONSTANT_CONVERSION = YES;
230 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
231 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
232 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
233 | CLANG_WARN_EMPTY_BODY = YES;
234 | CLANG_WARN_ENUM_CONVERSION = YES;
235 | CLANG_WARN_INFINITE_RECURSION = YES;
236 | CLANG_WARN_INT_CONVERSION = YES;
237 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
238 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
239 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
240 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
241 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
242 | CLANG_WARN_STRICT_PROTOTYPES = YES;
243 | CLANG_WARN_SUSPICIOUS_MOVE = YES;
244 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
245 | CLANG_WARN_UNREACHABLE_CODE = YES;
246 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
247 | CODE_SIGN_IDENTITY = "Mac Developer";
248 | COPY_PHASE_STRIP = NO;
249 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
250 | ENABLE_NS_ASSERTIONS = NO;
251 | ENABLE_STRICT_OBJC_MSGSEND = YES;
252 | GCC_C_LANGUAGE_STANDARD = gnu11;
253 | GCC_NO_COMMON_BLOCKS = YES;
254 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
255 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
256 | GCC_WARN_UNDECLARED_SELECTOR = YES;
257 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
258 | GCC_WARN_UNUSED_FUNCTION = YES;
259 | GCC_WARN_UNUSED_VARIABLE = YES;
260 | MACOSX_DEPLOYMENT_TARGET = 10.13;
261 | MTL_ENABLE_DEBUG_INFO = NO;
262 | SDKROOT = macosx;
263 | SWIFT_COMPILATION_MODE = wholemodule;
264 | SWIFT_OPTIMIZATION_LEVEL = "-O";
265 | };
266 | name = Release;
267 | };
268 | C3F4AA0F212896770071E1DF /* Debug */ = {
269 | isa = XCBuildConfiguration;
270 | buildSettings = {
271 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
272 | CODE_SIGN_ENTITLEMENTS = NoMoreiTunes/NoMoreiTunes.entitlements;
273 | CODE_SIGN_STYLE = Automatic;
274 | COMBINE_HIDPI_IMAGES = YES;
275 | DEVELOPMENT_TEAM = E7ZXX8R29L;
276 | INFOPLIST_FILE = NoMoreiTunes/Info.plist;
277 | LD_RUNPATH_SEARCH_PATHS = (
278 | "$(inherited)",
279 | "@executable_path/../Frameworks",
280 | );
281 | PRODUCT_BUNDLE_IDENTIFIER = gd.ylk.NoMoreiTunes;
282 | PRODUCT_NAME = "$(TARGET_NAME)";
283 | SWIFT_VERSION = 4.0;
284 | };
285 | name = Debug;
286 | };
287 | C3F4AA10212896770071E1DF /* Release */ = {
288 | isa = XCBuildConfiguration;
289 | buildSettings = {
290 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
291 | CODE_SIGN_ENTITLEMENTS = NoMoreiTunes/NoMoreiTunes.entitlements;
292 | CODE_SIGN_STYLE = Automatic;
293 | COMBINE_HIDPI_IMAGES = YES;
294 | DEVELOPMENT_TEAM = E7ZXX8R29L;
295 | INFOPLIST_FILE = NoMoreiTunes/Info.plist;
296 | LD_RUNPATH_SEARCH_PATHS = (
297 | "$(inherited)",
298 | "@executable_path/../Frameworks",
299 | );
300 | PRODUCT_BUNDLE_IDENTIFIER = gd.ylk.NoMoreiTunes;
301 | PRODUCT_NAME = "$(TARGET_NAME)";
302 | SWIFT_VERSION = 4.0;
303 | };
304 | name = Release;
305 | };
306 | /* End XCBuildConfiguration section */
307 |
308 | /* Begin XCConfigurationList section */
309 | C3F4A9F9212896750071E1DF /* Build configuration list for PBXProject "NoMoreiTunes" */ = {
310 | isa = XCConfigurationList;
311 | buildConfigurations = (
312 | C3F4AA0C212896770071E1DF /* Debug */,
313 | C3F4AA0D212896770071E1DF /* Release */,
314 | );
315 | defaultConfigurationIsVisible = 0;
316 | defaultConfigurationName = Release;
317 | };
318 | C3F4AA0E212896770071E1DF /* Build configuration list for PBXNativeTarget "NoMoreiTunes" */ = {
319 | isa = XCConfigurationList;
320 | buildConfigurations = (
321 | C3F4AA0F212896770071E1DF /* Debug */,
322 | C3F4AA10212896770071E1DF /* Release */,
323 | );
324 | defaultConfigurationIsVisible = 0;
325 | defaultConfigurationName = Release;
326 | };
327 | /* End XCConfigurationList section */
328 | };
329 | rootObject = C3F4A9F6212896750071E1DF /* Project object */;
330 | }
331 |
--------------------------------------------------------------------------------
/NoMoreiTunes/Base.lproj/Main.storyboard:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
672 |
673 |
674 |
675 |
676 |
677 |
678 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 |
700 |
701 |
702 |
703 |
704 |
705 |
706 |
707 |
708 |
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
--------------------------------------------------------------------------------