Repository: lekevicius/october30 Branch: master Commit: f4a9b6c9afa0 Files: 19 Total size: 101.2 KB Directory structure: gitextract_76h5qtua/ ├── .gitignore ├── LICENSE.md ├── October30/ │ ├── October30-Info.plist │ ├── October30-Prefix.pch │ ├── October30View.swift │ └── html/ │ ├── css/ │ │ └── main.css │ ├── index.html │ └── js/ │ └── main.js ├── October30.xcodeproj/ │ ├── project.pbxproj │ ├── project.xcworkspace/ │ │ ├── contents.xcworkspacedata │ │ └── xcshareddata/ │ │ ├── DeveloperExcuses.xccheckout │ │ └── IDEWorkspaceChecks.plist │ └── xcshareddata/ │ └── xcschemes/ │ ├── October30.xcscheme │ └── October30Debug.xcscheme ├── October30Debug/ │ ├── AppDelegate.swift │ ├── Assets.xcassets/ │ │ └── AppIcon.appiconset/ │ │ └── Contents.json │ ├── Info.plist │ └── Main.storyboard └── README.md ================================================ FILE CONTENTS ================================================ ================================================ FILE: .gitignore ================================================ xcuserdata *.xcuserstate ================================================ FILE: LICENSE.md ================================================ MIT License Copyright (c) 2018 Jonas Lekevicius Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ================================================ FILE: October30/October30-Info.plist ================================================ CFBundleDevelopmentRegion English CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile thumbnail.png CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName ${PRODUCT_NAME} CFBundlePackageType BNDL CFBundleShortVersionString 1.0.0 CFBundleSignature ???? CFBundleVersion 1.0.0 NSHumanReadableCopyright Copyright © 2018 Jonas Lekevicius. All rights reserved. NSPrincipalClass October30.October30View ================================================ FILE: October30/October30-Prefix.pch ================================================ // // Prefix header for all source files of the 'DeveloperExcuses' target in the 'DeveloperExcuses' project // #ifdef __OBJC__ #import #endif ================================================ FILE: October30/October30View.swift ================================================ import Foundation import ScreenSaver import WebKit import os.log class October30View: ScreenSaverView, WKNavigationDelegate { public var backgroundColor = NSColor(calibratedWhite: 0.97, alpha: 1) var webView = WKWebView(frame: .zero) convenience init() { self.init(frame: .zero, isPreview: false) initialize() } override init!(frame: NSRect, isPreview: Bool) { super.init(frame: frame, isPreview: isPreview) initialize() } required public init?(coder: NSCoder) { super.init(coder: coder) initialize() } override var configureSheet: NSWindow? { return nil } override var hasConfigureSheet: Bool { return false } override func animateOneFrame() { // null } override func draw(_ rect: NSRect) { super.draw(rect) backgroundColor.setFill() rect.fill() } private func initialize() { animationTimeInterval = 0.5 let webConfiguration = WKWebViewConfiguration() webConfiguration.preferences.setValue(true, forKey: "allowFileAccessFromFileURLs") var x: CGFloat = 0 var y: CGFloat = 0 var w: CGFloat = 712 var h: CGFloat = 528 if (frame.width > 800 && frame.height > 600) { x = (frame.width - w) / 2 y = (frame.height - h) / 2 + 24 } else { w = 237 h = 176 x = (frame.width - w) / 2 y = (frame.height - h) / 2 + 2 } webView = WKWebView(frame: NSRect(x: x, y: y, width: w, height: h), configuration: webConfiguration) webView.navigationDelegate = self webView.setValue(false, forKey: "drawsBackground") webView.allowsBackForwardNavigationGestures = false webView.allowsMagnification = false webView.alphaValue = 0 addSubview(webView) webView.layer?.backgroundColor = NSColor(calibratedWhite: 0.97, alpha: 1).cgColor if let htmlPath = Bundle(for: type(of: self)).path(forResource: "html", ofType: nil) { let htmlUrl = URL(fileURLWithPath: htmlPath, isDirectory: true) let indexUrl = URL(fileURLWithPath: htmlPath + "/index.html", isDirectory: false) webView.loadFileURL(indexUrl, allowingReadAccessTo: htmlUrl) } } func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { webView.alphaValue = 1 } } ================================================ FILE: October30/html/css/main.css ================================================ *, *::after, *::before { box-sizing: border-box; } ::selection { background: transparent; } body { margin: 0; position: absolute; top: 0; bottom: 0; left: 0; right: 0; overflow: hidden; user-select: none; } #container { position: relative; width: 100vw; height: 100vh; background: #f8f8f8; overflow: hidden; /* filter: invert(1) hue-rotate(180deg) */ } #container img, #container canvas { display: block; position: absolute; width: 100vw; height: 100vh; top: 0; left: 0; } #container canvas { transition: opacity 0.05s; } #container canvas.away { opacity: 0; } ================================================ FILE: October30/html/index.html ================================================ October 30
================================================ FILE: October30/html/js/main.js ================================================ // @ts-check // var addToGPU = function(t) { // renderer.setTexture2D(t, 0); // }; var vertex = ` varying vec2 vUv; void main() { vUv = uv; gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); } `; var fragment = ` varying vec2 vUv; uniform float mixRatio; uniform float threshold; uniform sampler2D texture1; uniform sampler2D texture2; uniform sampler2D mixTexture; void main() { vec4 texel1 = texture2D( texture1, vUv ); vec4 texel2 = texture2D( texture2, vUv ); vec4 transitionTexel = texture2D( mixTexture, vUv ); float r = mixRatio * (1.0 + threshold * 2.0) - threshold; float mixf = clamp((r - transitionTexel.r) * (1.0 / threshold), 0.0, 1.0); gl_FragColor = mix( texel1, texel2, mixf ); } `; function shuffleArray(array) { for (let i = array.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [array[i], array[j]] = [array[j], array[i]]; } } var started = false; const animationSpeed = 3; const nextDelay = 5 * 1000; function startup() { if (started) return; started = true; const ids = Array(371).fill(0).map((_, idx) => idx + 1) shuffleArray(ids) const $baseImage = document.getElementById('base-image') const $container = document.getElementById('container') var mixTexture = "img/noise3.png" var image1 = 'img/logos/0.png' var image2 = `img/logos/${ids[0]}.jpg` const threshold = 0.3 const scene = new THREE.Scene() const camera = new THREE.OrthographicCamera( $container.offsetWidth / -2, $container.offsetWidth / 2, $container.offsetHeight / 2, $container.offsetHeight / -2, 1, 1000 ) camera.position.z = 1 const renderer = new THREE.WebGLRenderer({ antialias: false }) renderer.setPixelRatio(window.devicePixelRatio) renderer.setClearColor(0xf8f8f8, 0.0) renderer.setSize($container.offsetWidth, $container.offsetHeight) renderer.domElement.setAttribute('class', 'away') $container.appendChild(renderer.domElement) const loader = new THREE.TextureLoader() var texture1 = loader.load(image1) var texture2 = loader.load(image2) var mixTexture = loader.load(mixTexture) mixTexture.wrapS = mixTexture.wrapT = THREE.RepeatWrapping texture1.magFilter = texture2.magFilter = THREE.LinearFilter texture1.minFilter = texture2.minFilter = THREE.LinearFilter texture1.anisotropy = renderer.getMaxAnisotropy() texture2.anisotropy = renderer.getMaxAnisotropy() var mat = new THREE.ShaderMaterial({ uniforms: { threshold: { type: "f", value: threshold }, mixRatio: { type: "f", value: 0.0 }, texture1: { type: "t", value: texture1 }, texture2: { type: "t", value: texture2 }, mixTexture: { type: "t", value: mixTexture } }, vertexShader: vertex, fragmentShader: fragment, transparent: true, opacity: 1.0 }) const geometry = new THREE.PlaneBufferGeometry( $container.offsetWidth, $container.offsetHeight, 1 ) const object = new THREE.Mesh(geometry, mat) scene.add(object) var imageCount = 0 setTimeout(() => { renderer.domElement.setAttribute('class', '') TweenLite.to(mat.uniforms.mixRatio, animationSpeed, { value: 1, onComplete: () => { $baseImage.setAttribute('src', image2); setTimeout(() => { renderer.domElement.setAttribute('class', 'away') }, 100) setTimeout(() => { animateToNextImage() }, nextDelay) } }) }, 100) const animateToNextImage = () => { imageCount += 1 var imageIndex = imageCount % ids.length image1 = image2 image2 = `img/logos/${ids[imageIndex]}.jpg` texture1 = texture2 object.material.uniforms.texture1.value = texture1 texture2 = loader.load(image2) texture2.magFilter = THREE.LinearFilter texture2.minFilter = THREE.LinearFilter texture2.anisotropy = renderer.getMaxAnisotropy() object.material.uniforms.texture2.value = texture2 object.material.uniforms.mixRatio.value = 0.0 setTimeout(() => { renderer.domElement.setAttribute('class', '') TweenLite.to(mat.uniforms.mixRatio, animationSpeed, { value: 1, onComplete: () => { $baseImage.setAttribute('src', image2); setTimeout(() => { renderer.domElement.setAttribute('class', 'away') }, 100) setTimeout(() => { animateToNextImage() }, nextDelay) } }); }, 100) } window.addEventListener("resize", (e) => { renderer.setSize($container.offsetWidth, $container.offsetHeight) }) var animate = function() { requestAnimationFrame(animate); renderer.render(scene, camera); } animate() } ================================================ FILE: October30.xcodeproj/project.pbxproj ================================================ // !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ 076642F11EE92D6D00FE8619 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 076642F01EE92D6D00FE8619 /* AppDelegate.swift */; }; 076642F51EE92D6D00FE8619 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 076642F41EE92D6D00FE8619 /* Assets.xcassets */; }; 076642FD1EE92D9500FE8619 /* October30View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077BC2B01DA22D14007DE060 /* October30View.swift */; }; 076643011EE92E8B00FE8619 /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 076643001EE92E8B00FE8619 /* Main.storyboard */; }; 077BC2B11DA22D14007DE060 /* October30View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 077BC2B01DA22D14007DE060 /* October30View.swift */; }; 098B0F55218B147400AC3F7F /* html in Resources */ = {isa = PBXBuildFile; fileRef = 098B0F52218B04D700AC3F7F /* html */; }; 098B0F56218B147400AC3F7F /* html in Resources */ = {isa = PBXBuildFile; fileRef = 098B0F52218B04D700AC3F7F /* html */; }; 098B0F57218B148400AC3F7F /* WebKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 098B0F50218B037A00AC3F7F /* WebKit.framework */; }; 2A9D0E6817DB87B300DBFFBD /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A9D0E6717DB87B300DBFFBD /* Cocoa.framework */; }; 2A9D0E6A17DB87B300DBFFBD /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 2A9D0E6917DB87B300DBFFBD /* ScreenSaver.framework */; }; 8117802E1D80A79F00127177 /* thumbnail@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 8117802D1D80A79F00127177 /* thumbnail@2x.png */; }; 811780321D80B5DD00127177 /* thumbnail.png in Resources */ = {isa = PBXBuildFile; fileRef = 811780311D80B5DD00127177 /* thumbnail.png */; }; /* End PBXBuildFile section */ /* Begin PBXFileReference section */ 076642EE1EE92D6D00FE8619 /* October30Debug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = October30Debug.app; sourceTree = BUILT_PRODUCTS_DIR; }; 076642F01EE92D6D00FE8619 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 076642F41EE92D6D00FE8619 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 076642F91EE92D6D00FE8619 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 076643001EE92E8B00FE8619 /* Main.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; path = Main.storyboard; sourceTree = ""; }; 077BC2B01DA22D14007DE060 /* October30View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = October30View.swift; sourceTree = ""; }; 098B0F50218B037A00AC3F7F /* WebKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = WebKit.framework; path = System/Library/Frameworks/WebKit.framework; sourceTree = SDKROOT; }; 098B0F52218B04D700AC3F7F /* html */ = {isa = PBXFileReference; lastKnownFileType = folder; path = html; sourceTree = ""; }; 2A9D0E6417DB87B300DBFFBD /* October30.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = October30.saver; sourceTree = BUILT_PRODUCTS_DIR; }; 2A9D0E6717DB87B300DBFFBD /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 2A9D0E6917DB87B300DBFFBD /* ScreenSaver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenSaver.framework; path = System/Library/Frameworks/ScreenSaver.framework; sourceTree = SDKROOT; }; 2A9D0E6C17DB87B300DBFFBD /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 2A9D0E6D17DB87B300DBFFBD /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 2A9D0E6E17DB87B300DBFFBD /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 2A9D0E7117DB87B300DBFFBD /* October30-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "October30-Info.plist"; sourceTree = ""; }; 2A9D0E7517DB87B300DBFFBD /* October30-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "October30-Prefix.pch"; sourceTree = ""; }; 8117802D1D80A79F00127177 /* thumbnail@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "thumbnail@2x.png"; sourceTree = ""; }; 811780311D80B5DD00127177 /* thumbnail.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = thumbnail.png; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ 076642EB1EE92D6D00FE8619 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; 2A9D0E5F17DB87B300DBFFBD /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( 098B0F57218B148400AC3F7F /* WebKit.framework in Frameworks */, 2A9D0E6817DB87B300DBFFBD /* Cocoa.framework in Frameworks */, 2A9D0E6A17DB87B300DBFFBD /* ScreenSaver.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ 076642EF1EE92D6D00FE8619 /* October30Debug */ = { isa = PBXGroup; children = ( 076643001EE92E8B00FE8619 /* Main.storyboard */, 076642F01EE92D6D00FE8619 /* AppDelegate.swift */, 076642F41EE92D6D00FE8619 /* Assets.xcassets */, 076642F91EE92D6D00FE8619 /* Info.plist */, ); path = October30Debug; sourceTree = ""; }; 2A9D0E5917DB87B300DBFFBD = { isa = PBXGroup; children = ( 2A9D0E6F17DB87B300DBFFBD /* October30 */, 076642EF1EE92D6D00FE8619 /* October30Debug */, 2A9D0E6617DB87B300DBFFBD /* Frameworks */, 2A9D0E6517DB87B300DBFFBD /* Products */, ); sourceTree = ""; }; 2A9D0E6517DB87B300DBFFBD /* Products */ = { isa = PBXGroup; children = ( 2A9D0E6417DB87B300DBFFBD /* October30.saver */, 076642EE1EE92D6D00FE8619 /* October30Debug.app */, ); name = Products; sourceTree = ""; }; 2A9D0E6617DB87B300DBFFBD /* Frameworks */ = { isa = PBXGroup; children = ( 098B0F50218B037A00AC3F7F /* WebKit.framework */, 2A9D0E6717DB87B300DBFFBD /* Cocoa.framework */, 2A9D0E6917DB87B300DBFFBD /* ScreenSaver.framework */, 2A9D0E6B17DB87B300DBFFBD /* Other Frameworks */, ); name = Frameworks; sourceTree = ""; }; 2A9D0E6B17DB87B300DBFFBD /* Other Frameworks */ = { isa = PBXGroup; children = ( 2A9D0E6C17DB87B300DBFFBD /* AppKit.framework */, 2A9D0E6D17DB87B300DBFFBD /* CoreData.framework */, 2A9D0E6E17DB87B300DBFFBD /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = ""; }; 2A9D0E6F17DB87B300DBFFBD /* October30 */ = { isa = PBXGroup; children = ( 077BC2B01DA22D14007DE060 /* October30View.swift */, 098B0F52218B04D700AC3F7F /* html */, 2A9D0E7017DB87B300DBFFBD /* Supporting Files */, ); path = October30; sourceTree = ""; }; 2A9D0E7017DB87B300DBFFBD /* Supporting Files */ = { isa = PBXGroup; children = ( 2A9D0E7117DB87B300DBFFBD /* October30-Info.plist */, 2A9D0E7517DB87B300DBFFBD /* October30-Prefix.pch */, 811780311D80B5DD00127177 /* thumbnail.png */, 8117802D1D80A79F00127177 /* thumbnail@2x.png */, ); name = "Supporting Files"; sourceTree = ""; }; /* End PBXGroup section */ /* Begin PBXHeadersBuildPhase section */ 2A9D0E6017DB87B300DBFFBD /* Headers */ = { isa = PBXHeadersBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXHeadersBuildPhase section */ /* Begin PBXNativeTarget section */ 076642ED1EE92D6D00FE8619 /* October30Debug */ = { isa = PBXNativeTarget; buildConfigurationList = 076642FC1EE92D6D00FE8619 /* Build configuration list for PBXNativeTarget "October30Debug" */; buildPhases = ( 076642EA1EE92D6D00FE8619 /* Sources */, 076642EB1EE92D6D00FE8619 /* Frameworks */, 076642EC1EE92D6D00FE8619 /* Resources */, ); buildRules = ( ); dependencies = ( ); name = October30Debug; productName = DeveloperExcusesDebug; productReference = 076642EE1EE92D6D00FE8619 /* October30Debug.app */; productType = "com.apple.product-type.application"; }; 2A9D0E6317DB87B300DBFFBD /* October30 */ = { isa = PBXNativeTarget; buildConfigurationList = 2A9D0E7B17DB87B300DBFFBD /* Build configuration list for PBXNativeTarget "October30" */; buildPhases = ( 2A9D0E5E17DB87B300DBFFBD /* Sources */, 2A9D0E5F17DB87B300DBFFBD /* Frameworks */, 2A9D0E6017DB87B300DBFFBD /* Headers */, 2A9D0E6117DB87B300DBFFBD /* Resources */, 2A9D0E6217DB87B300DBFFBD /* Rez */, ); buildRules = ( ); dependencies = ( ); name = October30; productName = DeveloperExcuses; productReference = 2A9D0E6417DB87B300DBFFBD /* October30.saver */; productType = "com.apple.product-type.bundle"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ 2A9D0E5A17DB87B300DBFFBD /* Project object */ = { isa = PBXProject; attributes = { LastSwiftUpdateCheck = 0830; LastUpgradeCheck = 1000; ORGANIZATIONNAME = "Jonas Lekevicius"; TargetAttributes = { 076642ED1EE92D6D00FE8619 = { CreatedOnToolsVersion = 8.3.2; DevelopmentTeam = N56PMJ99UT; ProvisioningStyle = Automatic; }; 2A9D0E6317DB87B300DBFFBD = { DevelopmentTeam = N56PMJ99UT; LastSwiftMigration = 0910; }; }; }; buildConfigurationList = 2A9D0E5D17DB87B300DBFFBD /* Build configuration list for PBXProject "October30" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = 2A9D0E5917DB87B300DBFFBD; productRefGroup = 2A9D0E6517DB87B300DBFFBD /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( 2A9D0E6317DB87B300DBFFBD /* October30 */, 076642ED1EE92D6D00FE8619 /* October30Debug */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ 076642EC1EE92D6D00FE8619 /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 076642F51EE92D6D00FE8619 /* Assets.xcassets in Resources */, 098B0F56218B147400AC3F7F /* html in Resources */, 076643011EE92E8B00FE8619 /* Main.storyboard in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2A9D0E6117DB87B300DBFFBD /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( 098B0F55218B147400AC3F7F /* html in Resources */, 8117802E1D80A79F00127177 /* thumbnail@2x.png in Resources */, 811780321D80B5DD00127177 /* thumbnail.png in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXRezBuildPhase section */ 2A9D0E6217DB87B300DBFFBD /* Rez */ = { isa = PBXRezBuildPhase; buildActionMask = 2147483647; files = ( ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXRezBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ 076642EA1EE92D6D00FE8619 /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 076642FD1EE92D9500FE8619 /* October30View.swift in Sources */, 076642F11EE92D6D00FE8619 /* AppDelegate.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; 2A9D0E5E17DB87B300DBFFBD /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( 077BC2B11DA22D14007DE060 /* October30View.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin XCBuildConfiguration section */ 076642FA1EE92D6D00FE8619 /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = N56PMJ99UT; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = "$(SRCROOT)/October30Debug/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks ${DT_TOOLCHAIN_DIR}/usr/lib/swift/macosx/"; LIBRARY_SEARCH_PATHS = "${DT_TOOLCHAIN_DIR}/usr/lib/swift/macosx/"; MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = com.lekevicius.October30Debug; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; }; name = Debug; }; 076642FB1EE92D6D00FE8619 /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CLANG_ANALYZER_NONNULL = YES; CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_DOCUMENTATION_COMMENTS = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CODE_SIGN_IDENTITY = "-"; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; DEVELOPMENT_TEAM = N56PMJ99UT; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; FRAMEWORK_SEARCH_PATHS = "$(inherited)"; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; INFOPLIST_FILE = "$(SRCROOT)/October30Debug/Info.plist"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks ${DT_TOOLCHAIN_DIR}/usr/lib/swift/macosx/"; LIBRARY_SEARCH_PATHS = "${DT_TOOLCHAIN_DIR}/usr/lib/swift/macosx/"; MACOSX_DEPLOYMENT_TARGET = 10.12; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = com.lekevicius.October30Debug; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; }; name = Release; }; 2A9D0E7917DB87B300DBFFBD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; GCC_OPTIMIZATION_LEVEL = 0; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SWIFT_INSTALL_OBJC_HEADER = NO; SWIFT_VERSION = 4.2; }; name = Debug; }; 2A9D0E7A17DB87B300DBFFBD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_COMMA = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INFINITE_RECURSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; CLANG_WARN_STRICT_PROTOTYPES = YES; CLANG_WARN_SUSPICIOUS_MOVE = YES; CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COMBINE_HIDPI_IMAGES = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_STRICT_OBJC_MSGSEND = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES; GCC_WARN_UNDECLARED_SELECTOR = YES; GCC_WARN_UNINITIALIZED_AUTOS = YES; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.9; SDKROOT = macosx; SWIFT_INSTALL_OBJC_HEADER = NO; SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; SWIFT_VERSION = 4.2; }; name = Release; }; 2A9D0E7C17DB87B300DBFFBD /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = N56PMJ99UT; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "October30/October30-Prefix.pch"; INFOPLIST_FILE = "$(SRCROOT)/October30/October30-Info.plist"; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.lekevicius.October30; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 4.2; WRAPPER_EXTENSION = saver; }; name = Debug; }; 2A9D0E7D17DB87B300DBFFBD /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; CODE_SIGN_IDENTITY = "Mac Developer"; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = N56PMJ99UT; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "October30/October30-Prefix.pch"; INFOPLIST_FILE = "$(SRCROOT)/October30/October30-Info.plist"; INSTALL_PATH = "$(HOME)/Library/Screen Savers"; LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks @loader_path/../Frameworks"; MACOSX_DEPLOYMENT_TARGET = 10.11; PRODUCT_BUNDLE_IDENTIFIER = com.lekevicius.October30; PRODUCT_NAME = "$(TARGET_NAME)"; SWIFT_VERSION = 4.2; WRAPPER_EXTENSION = saver; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ 076642FC1EE92D6D00FE8619 /* Build configuration list for PBXNativeTarget "October30Debug" */ = { isa = XCConfigurationList; buildConfigurations = ( 076642FA1EE92D6D00FE8619 /* Debug */, 076642FB1EE92D6D00FE8619 /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2A9D0E5D17DB87B300DBFFBD /* Build configuration list for PBXProject "October30" */ = { isa = XCConfigurationList; buildConfigurations = ( 2A9D0E7917DB87B300DBFFBD /* Debug */, 2A9D0E7A17DB87B300DBFFBD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; 2A9D0E7B17DB87B300DBFFBD /* Build configuration list for PBXNativeTarget "October30" */ = { isa = XCConfigurationList; buildConfigurations = ( 2A9D0E7C17DB87B300DBFFBD /* Debug */, 2A9D0E7D17DB87B300DBFFBD /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = 2A9D0E5A17DB87B300DBFFBD /* Project object */; } ================================================ FILE: October30.xcodeproj/project.xcworkspace/contents.xcworkspacedata ================================================ ================================================ FILE: October30.xcodeproj/project.xcworkspace/xcshareddata/DeveloperExcuses.xccheckout ================================================ IDESourceControlProjectFavoriteDictionaryKey IDESourceControlProjectIdentifier 4CC4EB4B-918E-4C47-A3F7-8C18775BABD2 IDESourceControlProjectName DeveloperExcuses IDESourceControlProjectOriginsDictionary 283B2FC7-2770-4804-852B-9FAAAD9A31FD ssh://github.com/kimar/DeveloperExcuses.git IDESourceControlProjectPath DeveloperExcuses.xcodeproj/project.xcworkspace IDESourceControlProjectRelativeInstallPathDictionary 283B2FC7-2770-4804-852B-9FAAAD9A31FD ../.. IDESourceControlProjectURL ssh://github.com/kimar/DeveloperExcuses.git IDESourceControlProjectVersion 110 IDESourceControlProjectWCCIdentifier 283B2FC7-2770-4804-852B-9FAAAD9A31FD IDESourceControlProjectWCConfigurations IDESourceControlRepositoryExtensionIdentifierKey public.vcs.git IDESourceControlWCCIdentifierKey 283B2FC7-2770-4804-852B-9FAAAD9A31FD IDESourceControlWCCName DeveloperExcuses ================================================ FILE: October30.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist ================================================ IDEDidComputeMac32BitWarning ================================================ FILE: October30.xcodeproj/xcshareddata/xcschemes/October30.xcscheme ================================================ ================================================ FILE: October30.xcodeproj/xcshareddata/xcschemes/October30Debug.xcscheme ================================================ ================================================ FILE: October30Debug/AppDelegate.swift ================================================ // // AppDelegate.swift // October30Debug // // Created by Jonas Lekevicius on 2018-10-30 // Copyright © 2018 Jonas Lekevicius. All rights reserved. // import Cocoa @NSApplicationMain class AppDelegate: NSObject, NSApplicationDelegate { // var screenSaverView: October30View func applicationDidFinishLaunching(_ aNotification: Notification) { guard let window = NSApplication.shared.mainWindow else { preconditionFailure() } let screenSaverView = October30View(frame: window.contentView!.bounds, isPreview: false) if let screenSaverView = screenSaverView { screenSaverView.autoresizingMask = [.height, .width] window.contentView!.addSubview(screenSaverView); } } func applicationWillTerminate(_ aNotification: Notification) { // Insert code here to tear down your application } } ================================================ FILE: October30Debug/Assets.xcassets/AppIcon.appiconset/Contents.json ================================================ { "images" : [ { "idiom" : "mac", "size" : "16x16", "scale" : "1x" }, { "idiom" : "mac", "size" : "16x16", "scale" : "2x" }, { "idiom" : "mac", "size" : "32x32", "scale" : "1x" }, { "idiom" : "mac", "size" : "32x32", "scale" : "2x" }, { "idiom" : "mac", "size" : "128x128", "scale" : "1x" }, { "idiom" : "mac", "size" : "128x128", "scale" : "2x" }, { "idiom" : "mac", "size" : "256x256", "scale" : "1x" }, { "idiom" : "mac", "size" : "256x256", "scale" : "2x" }, { "idiom" : "mac", "size" : "512x512", "scale" : "1x" }, { "idiom" : "mac", "size" : "512x512", "scale" : "2x" } ], "info" : { "version" : 1, "author" : "xcode" } } ================================================ FILE: October30Debug/Info.plist ================================================ CFBundleDevelopmentRegion en CFBundleExecutable $(EXECUTABLE_NAME) CFBundleIconFile CFBundleIdentifier $(PRODUCT_BUNDLE_IDENTIFIER) CFBundleInfoDictionaryVersion 6.0 CFBundleName $(PRODUCT_NAME) CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSMinimumSystemVersion $(MACOSX_DEPLOYMENT_TARGET) NSAppTransportSecurity NSAllowsArbitraryLoads NSHumanReadableCopyright Copyright © 2018 Jonas Lekevicius. All rights reserved. NSMainStoryboardFile Main NSPrincipalClass NSApplication ================================================ FILE: October30Debug/Main.storyboard ================================================ Default Left to Right Right to Left Default Left to Right Right to Left ================================================ FILE: README.md ================================================

Screenshot

# October 30 Screen Saver [![Twitter: @lekevicius](https://img.shields.io/badge/contact-@lekevicius-blue.svg)](https://twitter.com/lekevicius) [![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/lekevicius/October30/blob/master/LICENSE.md) On October 30th, 2018 Apple held an [event](https://www.apple.com/apple-events/october-2018/) in New York, announcing new iPad Pros, MacBook Air and Mac mini. For the invites to the press Apple commissioned [hundreds of interesting and creative logos](https://www.macrumors.com/2018/10/24/all-the-apple-logos/). It feels like a waste of amazing creativity to not do anything more permanent with this art. October 30 is a macOS screen saver (requires El Capitan or later) that randomly changes between these 371 Apple logos. _(The GIF above is just for intro. Actually logos change smoothly and more slowly.)_ ### Install * [**Download the Screen Saver**](https://github.com/lekevicius/october30/raw/master/Release/October30.saver.zip) * Right-click October30.saver and choose "Open" (otherwise macOS might not let you install it) * Choose to Install just for your own user or everyone using the Mac * Enjoy 🍎 Created by Jonas Lekevicius. Follow me on [Twitter](https://twitter.com/lekevicius). _Not officially affiliated with Apple in any way._ Probably infringes on a bunch of copyrights. But it’s really cool stuff, so please maybe don’t DMCA C&D me. Anyways, better download this just in case, right?