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
================================================
# October 30 Screen Saver
[](https://twitter.com/lekevicius)
[](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?