├── Readme.markdown ├── Demo ├── AppDelegate.swift ├── DemoViewController.swift ├── Assets.xcassets │ └── AppIcon.appiconset │ │ └── Contents.json ├── Info.plist └── Base.lproj │ └── Main.storyboard ├── What Color Is It ├── Info.plist └── View.swift ├── LICENSE └── What Color Is It.xcodeproj └── project.pbxproj /Readme.markdown: -------------------------------------------------------------------------------- 1 | # What Color Is It 2 | 3 | Time of day as a color. Insired by [What Colour Is It](http://whatcolourisit.scn9a.org). 4 | 5 | If it's 8:45am, the color is `#084500`. 6 | 7 | 8 | ## Installation 9 | 10 | **[Download the latest release](https://github.com/soffes/WhatColorIsIt/releases).** Unzip and double-click. 11 | 12 | 13 | ## Building 14 | 15 | Xcode 7b3 is required since it's written in Swift 2. There is a Demo target included so you can run without having to archive and install every time. 16 | 17 | Enjoy. 18 | -------------------------------------------------------------------------------- /Demo/AppDelegate.swift: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.swift 3 | // WhatColorIsIt 4 | // 5 | // Created by Sam Soffes on 7/15/14. 6 | // Copyright (c) 2014 Sam Soffes. All rights reserved. 7 | // 8 | 9 | import Cocoa 10 | 11 | @NSApplicationMain 12 | class AppDelegate: NSObject, NSApplicationDelegate { 13 | 14 | // MARK: - Properties 15 | 16 | @IBOutlet var window: NSWindow! 17 | 18 | 19 | // MARK: - Initializers 20 | 21 | deinit { 22 | NSNotificationCenter.defaultCenter().removeObserver(self) 23 | } 24 | } 25 | 26 | 27 | extension AppDelegate: NSWindowDelegate { 28 | func windowWillClose(notification: NSNotification) { 29 | // Quit the app if the main window is closed 30 | NSApplication.sharedApplication().terminate(window) 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /Demo/DemoViewController.swift: -------------------------------------------------------------------------------- 1 | // 2 | // DemoViewController.swift 3 | // What Color Is It 4 | // 5 | // Created by Sam Soffes on 7/19/15. 6 | // Copyright © 2015 Sam Soffes. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | import ScreenSaver 11 | 12 | class DemoViewController: NSViewController { 13 | 14 | // MARK: - Properties 15 | 16 | let screenSaver: ScreenSaverView = { 17 | let view = View() 18 | view.autoresizingMask = [.ViewWidthSizable, .ViewHeightSizable] 19 | return view 20 | }() 21 | 22 | 23 | // MARK: - NSViewController 24 | 25 | override func viewDidLoad() { 26 | // Add the clock view to the window 27 | screenSaver.frame = view.bounds 28 | view.addSubview(screenSaver) 29 | 30 | // Start animating the clock 31 | screenSaver.startAnimation() 32 | NSTimer.scheduledTimerWithTimeInterval(screenSaver.animationTimeInterval, target: screenSaver, selector: "animateOneFrame", userInfo: nil, repeats: true) 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /What Color Is It/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | BNDL 17 | CFBundleShortVersionString 18 | 0.0.1 19 | CFBundleSignature 20 | ???? 21 | CFBundleVersion 22 | 1 23 | NSHumanReadableCopyright 24 | Copyright © 2015 Sam Soffes. All rights reserved. 25 | NSPrincipalClass 26 | WhatColorIsIt.View 27 | 28 | 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2015 Sam Soffes, http://soff.es 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining 4 | a copy of this software and associated documentation files (the 5 | "Software"), to deal in the Software without restriction, including 6 | without limitation the rights to use, copy, modify, merge, publish, 7 | distribute, sublicense, and/or sell copies of the Software, and to 8 | permit persons to whom the Software is furnished to do so, subject to 9 | the following conditions: 10 | 11 | The above copyright notice and this permission notice shall be 12 | included in all copies or substantial portions of the Software. 13 | 14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /Demo/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 | } -------------------------------------------------------------------------------- /Demo/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | $(PRODUCT_BUNDLE_IDENTIFIER) 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | $(PRODUCT_NAME) 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 1.0 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSMinimumSystemVersion 26 | $(MACOSX_DEPLOYMENT_TARGET) 27 | NSHumanReadableCopyright 28 | Copyright © 2015 Sam Soffes. All rights reserved. 29 | NSMainStoryboardFile 30 | Main 31 | NSPrincipalClass 32 | NSApplication 33 | 34 | 35 | -------------------------------------------------------------------------------- /What Color Is It/View.swift: -------------------------------------------------------------------------------- 1 | // 2 | // View.swift 3 | // What Color Is It 4 | // 5 | // Created by Sam Soffes on 7/17/15. 6 | // Copyright © 2015 Sam Soffes. All rights reserved. 7 | // 8 | 9 | import AppKit 10 | import ScreenSaver 11 | 12 | /// What Color Is It screen saver. 13 | public class View: ScreenSaverView { 14 | 15 | // MARK: - Properties 16 | 17 | /// The text font 18 | private var font: NSFont! 19 | 20 | 21 | // MARK: - NSView 22 | 23 | // This is where the drawing happens. It gets called indirectly from `animateOneFrame`. 24 | public override func drawRect(rect: NSRect) { 25 | // Get the current time as a color 26 | let comps = NSCalendar.currentCalendar().components([.Hour, .Minute, .Second], fromDate: NSDate()) 27 | let red = pad(comps.hour) 28 | let green = pad(comps.minute) 29 | let blue = pad(comps.second) 30 | let color = NSColor(SRGBRed: hexValue(red), green: hexValue(green), blue: hexValue(blue), alpha: 1) 31 | 32 | // Draw that color as the background 33 | color.setFill() 34 | NSBezierPath.fillRect(rect) 35 | 36 | // Get the color as text so we can display it 37 | let string = "#\(red)\(green)\(blue)" as NSString 38 | let attributes = [ 39 | NSForegroundColorAttributeName: NSColor.whiteColor(), 40 | NSFontAttributeName: font 41 | ] 42 | 43 | // Calculate where the text will be drawn 44 | let stringSize = string.sizeWithAttributes(attributes) 45 | let stringRect = CGRect( 46 | x: round((bounds.width - stringSize.width) / 2), 47 | y: round((bounds.height - stringSize.height) / 2), 48 | width: stringSize.width, 49 | height: stringSize.height 50 | ) 51 | 52 | // Draw the text 53 | string.drawInRect(stringRect, withAttributes: attributes) 54 | } 55 | 56 | // If the screen saver changes size, update the font 57 | public override func resizeWithOldSuperviewSize(oldSize: NSSize) { 58 | super.resizeWithOldSuperviewSize(oldSize) 59 | updateFont() 60 | } 61 | 62 | 63 | // MARK: - ScreenSaverView 64 | 65 | public override init?(frame: NSRect, isPreview: Bool) { 66 | super.init(frame: frame, isPreview: isPreview) 67 | initialize() 68 | } 69 | 70 | public required init?(coder: NSCoder) { 71 | super.init(coder: coder) 72 | initialize() 73 | } 74 | 75 | /// The screen saver engine calls this whenever it wants to display a new frame. 76 | public override func animateOneFrame() { 77 | setNeedsDisplayInRect(bounds) 78 | } 79 | 80 | 81 | // MARK: - Private 82 | 83 | /// Setup 84 | private func initialize() { 85 | // Set to 15fps 86 | animationTimeInterval = 1.0 / 4.0 87 | updateFont() 88 | } 89 | 90 | /// Turn an integer into a 2 character string. `1` becomes "01". `12` becomes "12". 91 | private func pad(integer: Int) -> String { 92 | var string = String(integer) 93 | if string.lengthOfBytesUsingEncoding(NSUTF8StringEncoding) == 1 { 94 | string = "0" + string 95 | } 96 | return string 97 | } 98 | 99 | /// Get the value of a hex string from 0.0 to 1.0 100 | private func hexValue(string: String) -> CGFloat { 101 | let value = Double(strtoul(string, nil, 16)) 102 | return CGFloat(value / 255.0) 103 | } 104 | 105 | /// Update the font for the current size 106 | private func updateFont() { 107 | font = fontWithSize(bounds.size.width / 6.0) 108 | } 109 | 110 | /// Get a monospaced font 111 | private func fontWithSize(fontSize: CGFloat) -> NSFont { 112 | let font: NSFont 113 | if #available(OSX 10.11, *) { 114 | font = NSFont.systemFontOfSize(fontSize, weight: NSFontWeightThin) 115 | } else { 116 | font = NSFont(name: "HelveticaNeue-Thin", size: fontSize)! 117 | } 118 | 119 | let fontDescriptor = font.fontDescriptor.fontDescriptorByAddingAttributes([ 120 | NSFontFeatureSettingsAttribute: [ 121 | [ 122 | NSFontFeatureTypeIdentifierKey: kNumberSpacingType, 123 | NSFontFeatureSelectorIdentifierKey: kMonospacedNumbersSelector 124 | ] 125 | ] 126 | ]) 127 | return NSFont(descriptor: fontDescriptor, size: fontSize)! 128 | } 129 | } 130 | -------------------------------------------------------------------------------- /Demo/Base.lproj/Main.storyboard: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | 169 | 170 | -------------------------------------------------------------------------------- /What Color Is It.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | 21A6B8D51B5C5F2800D0213E /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A6B8D41B5C5F2800D0213E /* View.swift */; }; 11 | 21A6B8E11B5C5F6B00D0213E /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 21A6B8E01B5C5F6B00D0213E /* Assets.xcassets */; }; 12 | 21A6B8E41B5C5F6C00D0213E /* Main.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 21A6B8E21B5C5F6C00D0213E /* Main.storyboard */; }; 13 | 21A6B8EA1B5C5F8C00D0213E /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A6B8E91B5C5F8C00D0213E /* AppDelegate.swift */; }; 14 | 21A6B8EC1B5C5FEA00D0213E /* DemoViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A6B8EB1B5C5FEA00D0213E /* DemoViewController.swift */; }; 15 | 21A6B8ED1B5C602A00D0213E /* View.swift in Sources */ = {isa = PBXBuildFile; fileRef = 21A6B8D41B5C5F2800D0213E /* View.swift */; }; 16 | 21B0B0331B5C62F6006E9953 /* ScreenSaver.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21B0B0321B5C62F6006E9953 /* ScreenSaver.framework */; }; 17 | 21B0B0351B5C62FA006E9953 /* AppKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 21B0B0341B5C62FA006E9953 /* AppKit.framework */; }; 18 | /* End PBXBuildFile section */ 19 | 20 | /* Begin PBXFileReference section */ 21 | 217058C41B5C5EE40035E3DF /* What Color Is It.saver */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "What Color Is It.saver"; sourceTree = BUILT_PRODUCTS_DIR; }; 22 | 217058CB1B5C5EE40035E3DF /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 23 | 21A6B8D41B5C5F2800D0213E /* View.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = View.swift; sourceTree = ""; }; 24 | 21A6B8DA1B5C5F6B00D0213E /* Demo.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Demo.app; sourceTree = BUILT_PRODUCTS_DIR; }; 25 | 21A6B8E01B5C5F6B00D0213E /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; 26 | 21A6B8E31B5C5F6C00D0213E /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/Main.storyboard; sourceTree = ""; }; 27 | 21A6B8E51B5C5F6C00D0213E /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 28 | 21A6B8E91B5C5F8C00D0213E /* AppDelegate.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 29 | 21A6B8EB1B5C5FEA00D0213E /* DemoViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = DemoViewController.swift; sourceTree = ""; }; 30 | 21B0B0321B5C62F6006E9953 /* ScreenSaver.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ScreenSaver.framework; path = System/Library/Frameworks/ScreenSaver.framework; sourceTree = SDKROOT; }; 31 | 21B0B0341B5C62FA006E9953 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 32 | /* End PBXFileReference section */ 33 | 34 | /* Begin PBXFrameworksBuildPhase section */ 35 | 217058C01B5C5EE40035E3DF /* Frameworks */ = { 36 | isa = PBXFrameworksBuildPhase; 37 | buildActionMask = 2147483647; 38 | files = ( 39 | 21B0B0351B5C62FA006E9953 /* AppKit.framework in Frameworks */, 40 | 21B0B0331B5C62F6006E9953 /* ScreenSaver.framework in Frameworks */, 41 | ); 42 | runOnlyForDeploymentPostprocessing = 0; 43 | }; 44 | 21A6B8D71B5C5F6B00D0213E /* Frameworks */ = { 45 | isa = PBXFrameworksBuildPhase; 46 | buildActionMask = 2147483647; 47 | files = ( 48 | ); 49 | runOnlyForDeploymentPostprocessing = 0; 50 | }; 51 | /* End PBXFrameworksBuildPhase section */ 52 | 53 | /* Begin PBXGroup section */ 54 | 217058BA1B5C5EE40035E3DF = { 55 | isa = PBXGroup; 56 | children = ( 57 | 217058C61B5C5EE40035E3DF /* What Color Is It */, 58 | 21A6B8DB1B5C5F6B00D0213E /* Demo */, 59 | 21B0B0361B5C62FD006E9953 /* Frameworks */, 60 | 217058C51B5C5EE40035E3DF /* Products */, 61 | ); 62 | sourceTree = ""; 63 | }; 64 | 217058C51B5C5EE40035E3DF /* Products */ = { 65 | isa = PBXGroup; 66 | children = ( 67 | 217058C41B5C5EE40035E3DF /* What Color Is It.saver */, 68 | 21A6B8DA1B5C5F6B00D0213E /* Demo.app */, 69 | ); 70 | name = Products; 71 | sourceTree = ""; 72 | }; 73 | 217058C61B5C5EE40035E3DF /* What Color Is It */ = { 74 | isa = PBXGroup; 75 | children = ( 76 | 21A6B8D41B5C5F2800D0213E /* View.swift */, 77 | 217058CB1B5C5EE40035E3DF /* Info.plist */, 78 | ); 79 | path = "What Color Is It"; 80 | sourceTree = ""; 81 | }; 82 | 21A6B8DB1B5C5F6B00D0213E /* Demo */ = { 83 | isa = PBXGroup; 84 | children = ( 85 | 21A6B8E91B5C5F8C00D0213E /* AppDelegate.swift */, 86 | 21A6B8EB1B5C5FEA00D0213E /* DemoViewController.swift */, 87 | 21A6B8E01B5C5F6B00D0213E /* Assets.xcassets */, 88 | 21A6B8E21B5C5F6C00D0213E /* Main.storyboard */, 89 | 21A6B8E51B5C5F6C00D0213E /* Info.plist */, 90 | ); 91 | path = Demo; 92 | sourceTree = ""; 93 | }; 94 | 21B0B0361B5C62FD006E9953 /* Frameworks */ = { 95 | isa = PBXGroup; 96 | children = ( 97 | 21B0B0341B5C62FA006E9953 /* AppKit.framework */, 98 | 21B0B0321B5C62F6006E9953 /* ScreenSaver.framework */, 99 | ); 100 | name = Frameworks; 101 | sourceTree = ""; 102 | }; 103 | /* End PBXGroup section */ 104 | 105 | /* Begin PBXHeadersBuildPhase section */ 106 | 217058C11B5C5EE40035E3DF /* Headers */ = { 107 | isa = PBXHeadersBuildPhase; 108 | buildActionMask = 2147483647; 109 | files = ( 110 | ); 111 | runOnlyForDeploymentPostprocessing = 0; 112 | }; 113 | /* End PBXHeadersBuildPhase section */ 114 | 115 | /* Begin PBXNativeTarget section */ 116 | 217058C31B5C5EE40035E3DF /* What Color Is It */ = { 117 | isa = PBXNativeTarget; 118 | buildConfigurationList = 217058CE1B5C5EE40035E3DF /* Build configuration list for PBXNativeTarget "What Color Is It" */; 119 | buildPhases = ( 120 | 217058BF1B5C5EE40035E3DF /* Sources */, 121 | 217058C01B5C5EE40035E3DF /* Frameworks */, 122 | 217058C11B5C5EE40035E3DF /* Headers */, 123 | 217058C21B5C5EE40035E3DF /* Resources */, 124 | ); 125 | buildRules = ( 126 | ); 127 | dependencies = ( 128 | ); 129 | name = "What Color Is It"; 130 | productName = "What Color Is It"; 131 | productReference = 217058C41B5C5EE40035E3DF /* What Color Is It.saver */; 132 | productType = "com.apple.product-type.bundle"; 133 | }; 134 | 21A6B8D91B5C5F6B00D0213E /* Demo */ = { 135 | isa = PBXNativeTarget; 136 | buildConfigurationList = 21A6B8E61B5C5F6C00D0213E /* Build configuration list for PBXNativeTarget "Demo" */; 137 | buildPhases = ( 138 | 21A6B8D61B5C5F6B00D0213E /* Sources */, 139 | 21A6B8D71B5C5F6B00D0213E /* Frameworks */, 140 | 21A6B8D81B5C5F6B00D0213E /* Resources */, 141 | ); 142 | buildRules = ( 143 | ); 144 | dependencies = ( 145 | ); 146 | name = Demo; 147 | productName = Demo; 148 | productReference = 21A6B8DA1B5C5F6B00D0213E /* Demo.app */; 149 | productType = "com.apple.product-type.application"; 150 | }; 151 | /* End PBXNativeTarget section */ 152 | 153 | /* Begin PBXProject section */ 154 | 217058BB1B5C5EE40035E3DF /* Project object */ = { 155 | isa = PBXProject; 156 | attributes = { 157 | LastSwiftUpdateCheck = 0700; 158 | LastUpgradeCheck = 0700; 159 | ORGANIZATIONNAME = "Sam Soffes"; 160 | TargetAttributes = { 161 | 217058C31B5C5EE40035E3DF = { 162 | CreatedOnToolsVersion = 7.0; 163 | }; 164 | 21A6B8D91B5C5F6B00D0213E = { 165 | CreatedOnToolsVersion = 7.0; 166 | }; 167 | }; 168 | }; 169 | buildConfigurationList = 217058BE1B5C5EE40035E3DF /* Build configuration list for PBXProject "What Color Is It" */; 170 | compatibilityVersion = "Xcode 3.2"; 171 | developmentRegion = English; 172 | hasScannedForEncodings = 0; 173 | knownRegions = ( 174 | en, 175 | Base, 176 | ); 177 | mainGroup = 217058BA1B5C5EE40035E3DF; 178 | productRefGroup = 217058C51B5C5EE40035E3DF /* Products */; 179 | projectDirPath = ""; 180 | projectRoot = ""; 181 | targets = ( 182 | 217058C31B5C5EE40035E3DF /* What Color Is It */, 183 | 21A6B8D91B5C5F6B00D0213E /* Demo */, 184 | ); 185 | }; 186 | /* End PBXProject section */ 187 | 188 | /* Begin PBXResourcesBuildPhase section */ 189 | 217058C21B5C5EE40035E3DF /* Resources */ = { 190 | isa = PBXResourcesBuildPhase; 191 | buildActionMask = 2147483647; 192 | files = ( 193 | ); 194 | runOnlyForDeploymentPostprocessing = 0; 195 | }; 196 | 21A6B8D81B5C5F6B00D0213E /* Resources */ = { 197 | isa = PBXResourcesBuildPhase; 198 | buildActionMask = 2147483647; 199 | files = ( 200 | 21A6B8E11B5C5F6B00D0213E /* Assets.xcassets in Resources */, 201 | 21A6B8E41B5C5F6C00D0213E /* Main.storyboard in Resources */, 202 | ); 203 | runOnlyForDeploymentPostprocessing = 0; 204 | }; 205 | /* End PBXResourcesBuildPhase section */ 206 | 207 | /* Begin PBXSourcesBuildPhase section */ 208 | 217058BF1B5C5EE40035E3DF /* Sources */ = { 209 | isa = PBXSourcesBuildPhase; 210 | buildActionMask = 2147483647; 211 | files = ( 212 | 21A6B8D51B5C5F2800D0213E /* View.swift in Sources */, 213 | ); 214 | runOnlyForDeploymentPostprocessing = 0; 215 | }; 216 | 21A6B8D61B5C5F6B00D0213E /* Sources */ = { 217 | isa = PBXSourcesBuildPhase; 218 | buildActionMask = 2147483647; 219 | files = ( 220 | 21A6B8EA1B5C5F8C00D0213E /* AppDelegate.swift in Sources */, 221 | 21A6B8EC1B5C5FEA00D0213E /* DemoViewController.swift in Sources */, 222 | 21A6B8ED1B5C602A00D0213E /* View.swift in Sources */, 223 | ); 224 | runOnlyForDeploymentPostprocessing = 0; 225 | }; 226 | /* End PBXSourcesBuildPhase section */ 227 | 228 | /* Begin PBXVariantGroup section */ 229 | 21A6B8E21B5C5F6C00D0213E /* Main.storyboard */ = { 230 | isa = PBXVariantGroup; 231 | children = ( 232 | 21A6B8E31B5C5F6C00D0213E /* Base */, 233 | ); 234 | name = Main.storyboard; 235 | sourceTree = ""; 236 | }; 237 | /* End PBXVariantGroup section */ 238 | 239 | /* Begin XCBuildConfiguration section */ 240 | 217058CC1B5C5EE40035E3DF /* Debug */ = { 241 | isa = XCBuildConfiguration; 242 | buildSettings = { 243 | ALWAYS_SEARCH_USER_PATHS = NO; 244 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 245 | CLANG_CXX_LIBRARY = "libc++"; 246 | CLANG_ENABLE_MODULES = YES; 247 | CLANG_ENABLE_OBJC_ARC = YES; 248 | CLANG_WARN_BOOL_CONVERSION = YES; 249 | CLANG_WARN_CONSTANT_CONVERSION = YES; 250 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 251 | CLANG_WARN_EMPTY_BODY = YES; 252 | CLANG_WARN_ENUM_CONVERSION = YES; 253 | CLANG_WARN_INT_CONVERSION = YES; 254 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 255 | CLANG_WARN_UNREACHABLE_CODE = YES; 256 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 257 | COPY_PHASE_STRIP = NO; 258 | DEBUG_INFORMATION_FORMAT = dwarf; 259 | ENABLE_STRICT_OBJC_MSGSEND = YES; 260 | ENABLE_TESTABILITY = YES; 261 | GCC_C_LANGUAGE_STANDARD = gnu99; 262 | GCC_DYNAMIC_NO_PIC = NO; 263 | GCC_NO_COMMON_BLOCKS = YES; 264 | GCC_OPTIMIZATION_LEVEL = 0; 265 | GCC_PREPROCESSOR_DEFINITIONS = ( 266 | "DEBUG=1", 267 | "$(inherited)", 268 | ); 269 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 270 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 271 | GCC_WARN_UNDECLARED_SELECTOR = YES; 272 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 273 | GCC_WARN_UNUSED_FUNCTION = YES; 274 | GCC_WARN_UNUSED_VARIABLE = YES; 275 | MACOSX_DEPLOYMENT_TARGET = 10.9; 276 | MTL_ENABLE_DEBUG_INFO = YES; 277 | ONLY_ACTIVE_ARCH = YES; 278 | SDKROOT = macosx; 279 | }; 280 | name = Debug; 281 | }; 282 | 217058CD1B5C5EE40035E3DF /* Release */ = { 283 | isa = XCBuildConfiguration; 284 | buildSettings = { 285 | ALWAYS_SEARCH_USER_PATHS = NO; 286 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 287 | CLANG_CXX_LIBRARY = "libc++"; 288 | CLANG_ENABLE_MODULES = YES; 289 | CLANG_ENABLE_OBJC_ARC = YES; 290 | CLANG_WARN_BOOL_CONVERSION = YES; 291 | CLANG_WARN_CONSTANT_CONVERSION = YES; 292 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 293 | CLANG_WARN_EMPTY_BODY = YES; 294 | CLANG_WARN_ENUM_CONVERSION = YES; 295 | CLANG_WARN_INT_CONVERSION = YES; 296 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 297 | CLANG_WARN_UNREACHABLE_CODE = YES; 298 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 299 | COPY_PHASE_STRIP = NO; 300 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 301 | ENABLE_NS_ASSERTIONS = NO; 302 | ENABLE_STRICT_OBJC_MSGSEND = YES; 303 | GCC_C_LANGUAGE_STANDARD = gnu99; 304 | GCC_NO_COMMON_BLOCKS = YES; 305 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 306 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 307 | GCC_WARN_UNDECLARED_SELECTOR = YES; 308 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 309 | GCC_WARN_UNUSED_FUNCTION = YES; 310 | GCC_WARN_UNUSED_VARIABLE = YES; 311 | MACOSX_DEPLOYMENT_TARGET = 10.9; 312 | MTL_ENABLE_DEBUG_INFO = NO; 313 | SDKROOT = macosx; 314 | }; 315 | name = Release; 316 | }; 317 | 217058CF1B5C5EE40035E3DF /* Debug */ = { 318 | isa = XCBuildConfiguration; 319 | buildSettings = { 320 | CLANG_ENABLE_MODULES = YES; 321 | CODE_SIGN_IDENTITY = "Developer ID Application"; 322 | COMBINE_HIDPI_IMAGES = YES; 323 | DEFINES_MODULE = YES; 324 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; 325 | INFOPLIST_FILE = "What Color Is It/Info.plist"; 326 | INSTALL_PATH = "$(HOME)/Library/Screen Savers"; 327 | LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks @executable_path/../Frameworks $(inherited)"; 328 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.What-Color-Is-It"; 329 | PRODUCT_MODULE_NAME = WhatColorIsIt; 330 | PRODUCT_NAME = "$(TARGET_NAME)"; 331 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 332 | WRAPPER_EXTENSION = saver; 333 | }; 334 | name = Debug; 335 | }; 336 | 217058D01B5C5EE40035E3DF /* Release */ = { 337 | isa = XCBuildConfiguration; 338 | buildSettings = { 339 | CLANG_ENABLE_MODULES = YES; 340 | CODE_SIGN_IDENTITY = "Developer ID Application"; 341 | COMBINE_HIDPI_IMAGES = YES; 342 | DEFINES_MODULE = YES; 343 | EMBEDDED_CONTENT_CONTAINS_SWIFT = YES; 344 | INFOPLIST_FILE = "What Color Is It/Info.plist"; 345 | INSTALL_PATH = "$(HOME)/Library/Screen Savers"; 346 | LD_RUNPATH_SEARCH_PATHS = "@loader_path/../Frameworks @executable_path/../Frameworks $(inherited)"; 347 | PRODUCT_BUNDLE_IDENTIFIER = "com.samsoffes.What-Color-Is-It"; 348 | PRODUCT_MODULE_NAME = WhatColorIsIt; 349 | PRODUCT_NAME = "$(TARGET_NAME)"; 350 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 351 | WRAPPER_EXTENSION = saver; 352 | }; 353 | name = Release; 354 | }; 355 | 21A6B8E71B5C5F6C00D0213E /* Debug */ = { 356 | isa = XCBuildConfiguration; 357 | buildSettings = { 358 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 359 | CLANG_ENABLE_MODULES = YES; 360 | CODE_SIGN_IDENTITY = "-"; 361 | COMBINE_HIDPI_IMAGES = YES; 362 | INFOPLIST_FILE = Demo/Info.plist; 363 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 364 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.Demo; 365 | PRODUCT_NAME = "$(TARGET_NAME)"; 366 | SWIFT_OPTIMIZATION_LEVEL = "-Onone"; 367 | }; 368 | name = Debug; 369 | }; 370 | 21A6B8E81B5C5F6C00D0213E /* Release */ = { 371 | isa = XCBuildConfiguration; 372 | buildSettings = { 373 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 374 | CLANG_ENABLE_MODULES = YES; 375 | CODE_SIGN_IDENTITY = "-"; 376 | COMBINE_HIDPI_IMAGES = YES; 377 | INFOPLIST_FILE = Demo/Info.plist; 378 | LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/../Frameworks"; 379 | PRODUCT_BUNDLE_IDENTIFIER = com.samsoffes.Demo; 380 | PRODUCT_NAME = "$(TARGET_NAME)"; 381 | }; 382 | name = Release; 383 | }; 384 | /* End XCBuildConfiguration section */ 385 | 386 | /* Begin XCConfigurationList section */ 387 | 217058BE1B5C5EE40035E3DF /* Build configuration list for PBXProject "What Color Is It" */ = { 388 | isa = XCConfigurationList; 389 | buildConfigurations = ( 390 | 217058CC1B5C5EE40035E3DF /* Debug */, 391 | 217058CD1B5C5EE40035E3DF /* Release */, 392 | ); 393 | defaultConfigurationIsVisible = 0; 394 | defaultConfigurationName = Release; 395 | }; 396 | 217058CE1B5C5EE40035E3DF /* Build configuration list for PBXNativeTarget "What Color Is It" */ = { 397 | isa = XCConfigurationList; 398 | buildConfigurations = ( 399 | 217058CF1B5C5EE40035E3DF /* Debug */, 400 | 217058D01B5C5EE40035E3DF /* Release */, 401 | ); 402 | defaultConfigurationIsVisible = 0; 403 | defaultConfigurationName = Release; 404 | }; 405 | 21A6B8E61B5C5F6C00D0213E /* Build configuration list for PBXNativeTarget "Demo" */ = { 406 | isa = XCConfigurationList; 407 | buildConfigurations = ( 408 | 21A6B8E71B5C5F6C00D0213E /* Debug */, 409 | 21A6B8E81B5C5F6C00D0213E /* Release */, 410 | ); 411 | defaultConfigurationIsVisible = 0; 412 | defaultConfigurationName = Release; 413 | }; 414 | /* End XCConfigurationList section */ 415 | }; 416 | rootObject = 217058BB1B5C5EE40035E3DF /* Project object */; 417 | } 418 | --------------------------------------------------------------------------------