├── .gitignore ├── Iro.xcodeproj ├── project.pbxproj └── project.xcworkspace │ └── contents.xcworkspacedata ├── Iro.xcworkspace └── contents.xcworkspacedata ├── Iro ├── AppDelegate.h ├── AppDelegate.m ├── Base.lproj │ └── MainMenu.xib ├── Images.xcassets │ └── AppIcon.appiconset │ │ ├── 16.png │ │ ├── 16@2x.png │ │ ├── 256.png │ │ ├── 256@2x.png │ │ ├── 32.png │ │ ├── 32@2x.png │ │ ├── 512.png │ │ ├── 512@2x.png │ │ └── Contents.json ├── Iro-Info.plist ├── Iro-Prefix.pch ├── Iro.entitlements ├── NSColor+Hex.h ├── NSColor+Hex.m ├── Status.png ├── Status@2x.png ├── StatusHighlighted.png ├── StatusHighlighted@2x.png ├── en.lproj │ ├── Credits.rtf │ └── InfoPlist.strings └── main.m ├── IroTests ├── IroTests-Info.plist ├── IroTests.m └── en.lproj │ └── InfoPlist.strings ├── LICENSE ├── Podfile ├── Podfile.lock ├── Preview.png └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # OS X 2 | .DS_Store 3 | 4 | # Xcode 5 | build/ 6 | *.pbxuser 7 | !default.pbxuser 8 | *.mode1v3 9 | !default.mode1v3 10 | *.mode2v3 11 | !default.mode2v3 12 | *.perspectivev3 13 | !default.perspectivev3 14 | xcuserdata 15 | *.xccheckout 16 | profile 17 | *.moved-aside 18 | DerivedData 19 | *.hmap 20 | *.ipa 21 | 22 | # CocoaPods 23 | Pods 24 | -------------------------------------------------------------------------------- /Iro.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 46; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | A33C490618A8F78C00A5B4F8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A33C490518A8F78C00A5B4F8 /* Cocoa.framework */; }; 11 | A33C491018A8F78C00A5B4F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A33C490E18A8F78C00A5B4F8 /* InfoPlist.strings */; }; 12 | A33C491218A8F78C00A5B4F8 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = A33C491118A8F78C00A5B4F8 /* main.m */; }; 13 | A33C491618A8F78C00A5B4F8 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = A33C491418A8F78C00A5B4F8 /* Credits.rtf */; }; 14 | A33C491918A8F78C00A5B4F8 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = A33C491818A8F78C00A5B4F8 /* AppDelegate.m */; }; 15 | A33C491E18A8F78C00A5B4F8 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = A33C491D18A8F78C00A5B4F8 /* Images.xcassets */; }; 16 | A33C492518A8F78C00A5B4F8 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A33C492418A8F78C00A5B4F8 /* XCTest.framework */; }; 17 | A33C492618A8F78C00A5B4F8 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A33C490518A8F78C00A5B4F8 /* Cocoa.framework */; }; 18 | A33C492E18A8F78C00A5B4F8 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = A33C492C18A8F78C00A5B4F8 /* InfoPlist.strings */; }; 19 | A33C493018A8F78C00A5B4F8 /* IroTests.m in Sources */ = {isa = PBXBuildFile; fileRef = A33C492F18A8F78C00A5B4F8 /* IroTests.m */; }; 20 | A345F61218AED46C0056D312 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = A345F61018AED46C0056D312 /* MainMenu.xib */; }; 21 | A39C73DA18A910A80069929E /* Status.png in Resources */ = {isa = PBXBuildFile; fileRef = A39C73D818A910A80069929E /* Status.png */; }; 22 | A39C73DB18A910A80069929E /* Status@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A39C73D918A910A80069929E /* Status@2x.png */; }; 23 | A39C73DE18A911E20069929E /* StatusHighlighted.png in Resources */ = {isa = PBXBuildFile; fileRef = A39C73DC18A911E20069929E /* StatusHighlighted.png */; }; 24 | A39C73DF18A911E20069929E /* StatusHighlighted@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = A39C73DD18A911E20069929E /* StatusHighlighted@2x.png */; }; 25 | A39C742F18AA4B190069929E /* ServiceManagement.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = A39C742C18AA46C80069929E /* ServiceManagement.framework */; }; 26 | A39C743318AA4D690069929E /* NSColor+Hex.m in Sources */ = {isa = PBXBuildFile; fileRef = A39C743218AA4D690069929E /* NSColor+Hex.m */; }; 27 | EF463F8017054B4DB571543C /* libPods-Iro.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1F1563D05B8B4B95A389C392 /* libPods-Iro.a */; }; 28 | /* End PBXBuildFile section */ 29 | 30 | /* Begin PBXContainerItemProxy section */ 31 | A33C492718A8F78C00A5B4F8 /* PBXContainerItemProxy */ = { 32 | isa = PBXContainerItemProxy; 33 | containerPortal = A33C48FA18A8F78C00A5B4F8 /* Project object */; 34 | proxyType = 1; 35 | remoteGlobalIDString = A33C490118A8F78C00A5B4F8; 36 | remoteInfo = Iro; 37 | }; 38 | /* End PBXContainerItemProxy section */ 39 | 40 | /* Begin PBXFileReference section */ 41 | 1F1563D05B8B4B95A389C392 /* libPods-Iro.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Iro.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 42 | 34D8B085B92372A39DC9FB89 /* Pods-Iro.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Iro.release.xcconfig"; path = "Pods/Target Support Files/Pods-Iro/Pods-Iro.release.xcconfig"; sourceTree = ""; }; 43 | A33C490218A8F78C00A5B4F8 /* Iro.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Iro.app; sourceTree = BUILT_PRODUCTS_DIR; }; 44 | A33C490518A8F78C00A5B4F8 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; 45 | A33C490818A8F78C00A5B4F8 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; 46 | A33C490918A8F78C00A5B4F8 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; 47 | A33C490A18A8F78C00A5B4F8 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; 48 | A33C490D18A8F78C00A5B4F8 /* Iro-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Iro-Info.plist"; sourceTree = ""; }; 49 | A33C490F18A8F78C00A5B4F8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 50 | A33C491118A8F78C00A5B4F8 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; 51 | A33C491318A8F78C00A5B4F8 /* Iro-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Iro-Prefix.pch"; sourceTree = ""; }; 52 | A33C491518A8F78C00A5B4F8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; 53 | A33C491718A8F78C00A5B4F8 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; 54 | A33C491818A8F78C00A5B4F8 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; 55 | A33C491D18A8F78C00A5B4F8 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; 56 | A33C492318A8F78C00A5B4F8 /* IroTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = IroTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; 57 | A33C492418A8F78C00A5B4F8 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; 58 | A33C492B18A8F78C00A5B4F8 /* IroTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "IroTests-Info.plist"; sourceTree = ""; }; 59 | A33C492D18A8F78C00A5B4F8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; 60 | A33C492F18A8F78C00A5B4F8 /* IroTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = IroTests.m; sourceTree = ""; }; 61 | A345F61118AED46C0056D312 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; 62 | A39C73D818A910A80069929E /* Status.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = Status.png; sourceTree = ""; }; 63 | A39C73D918A910A80069929E /* Status@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "Status@2x.png"; sourceTree = ""; }; 64 | A39C73DC18A911E20069929E /* StatusHighlighted.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = StatusHighlighted.png; sourceTree = ""; }; 65 | A39C73DD18A911E20069929E /* StatusHighlighted@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "StatusHighlighted@2x.png"; sourceTree = ""; }; 66 | A39C742C18AA46C80069929E /* ServiceManagement.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ServiceManagement.framework; path = System/Library/Frameworks/ServiceManagement.framework; sourceTree = SDKROOT; }; 67 | A39C743018AA4B240069929E /* Iro.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.xml; path = Iro.entitlements; sourceTree = ""; }; 68 | A39C743118AA4D690069929E /* NSColor+Hex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "NSColor+Hex.h"; sourceTree = ""; }; 69 | A39C743218AA4D690069929E /* NSColor+Hex.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "NSColor+Hex.m"; sourceTree = ""; }; 70 | B95A6D9B7801B63CE588E160 /* Pods-Iro.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Iro.debug.xcconfig"; path = "Pods/Target Support Files/Pods-Iro/Pods-Iro.debug.xcconfig"; sourceTree = ""; }; 71 | /* End PBXFileReference section */ 72 | 73 | /* Begin PBXFrameworksBuildPhase section */ 74 | A33C48FF18A8F78C00A5B4F8 /* Frameworks */ = { 75 | isa = PBXFrameworksBuildPhase; 76 | buildActionMask = 2147483647; 77 | files = ( 78 | A39C742F18AA4B190069929E /* ServiceManagement.framework in Frameworks */, 79 | A33C490618A8F78C00A5B4F8 /* Cocoa.framework in Frameworks */, 80 | EF463F8017054B4DB571543C /* libPods-Iro.a in Frameworks */, 81 | ); 82 | runOnlyForDeploymentPostprocessing = 0; 83 | }; 84 | A33C492018A8F78C00A5B4F8 /* Frameworks */ = { 85 | isa = PBXFrameworksBuildPhase; 86 | buildActionMask = 2147483647; 87 | files = ( 88 | A33C492618A8F78C00A5B4F8 /* Cocoa.framework in Frameworks */, 89 | A33C492518A8F78C00A5B4F8 /* XCTest.framework in Frameworks */, 90 | ); 91 | runOnlyForDeploymentPostprocessing = 0; 92 | }; 93 | /* End PBXFrameworksBuildPhase section */ 94 | 95 | /* Begin PBXGroup section */ 96 | 17DCA9FE59224A3DB13AA930 /* Pods */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | B95A6D9B7801B63CE588E160 /* Pods-Iro.debug.xcconfig */, 100 | 34D8B085B92372A39DC9FB89 /* Pods-Iro.release.xcconfig */, 101 | ); 102 | name = Pods; 103 | sourceTree = ""; 104 | }; 105 | A33C48F918A8F78C00A5B4F8 = { 106 | isa = PBXGroup; 107 | children = ( 108 | A33C490B18A8F78C00A5B4F8 /* Iro */, 109 | A33C492918A8F78C00A5B4F8 /* IroTests */, 110 | A33C490418A8F78C00A5B4F8 /* Frameworks */, 111 | A33C490318A8F78C00A5B4F8 /* Products */, 112 | 17DCA9FE59224A3DB13AA930 /* Pods */, 113 | ); 114 | sourceTree = ""; 115 | }; 116 | A33C490318A8F78C00A5B4F8 /* Products */ = { 117 | isa = PBXGroup; 118 | children = ( 119 | A33C490218A8F78C00A5B4F8 /* Iro.app */, 120 | A33C492318A8F78C00A5B4F8 /* IroTests.xctest */, 121 | ); 122 | name = Products; 123 | sourceTree = ""; 124 | }; 125 | A33C490418A8F78C00A5B4F8 /* Frameworks */ = { 126 | isa = PBXGroup; 127 | children = ( 128 | A39C742C18AA46C80069929E /* ServiceManagement.framework */, 129 | A33C490518A8F78C00A5B4F8 /* Cocoa.framework */, 130 | A33C492418A8F78C00A5B4F8 /* XCTest.framework */, 131 | A33C490718A8F78C00A5B4F8 /* Other Frameworks */, 132 | 1F1563D05B8B4B95A389C392 /* libPods-Iro.a */, 133 | ); 134 | name = Frameworks; 135 | sourceTree = ""; 136 | }; 137 | A33C490718A8F78C00A5B4F8 /* Other Frameworks */ = { 138 | isa = PBXGroup; 139 | children = ( 140 | A33C490818A8F78C00A5B4F8 /* AppKit.framework */, 141 | A33C490918A8F78C00A5B4F8 /* CoreData.framework */, 142 | A33C490A18A8F78C00A5B4F8 /* Foundation.framework */, 143 | ); 144 | name = "Other Frameworks"; 145 | sourceTree = ""; 146 | }; 147 | A33C490B18A8F78C00A5B4F8 /* Iro */ = { 148 | isa = PBXGroup; 149 | children = ( 150 | A345F61018AED46C0056D312 /* MainMenu.xib */, 151 | A39C743018AA4B240069929E /* Iro.entitlements */, 152 | A33C491718A8F78C00A5B4F8 /* AppDelegate.h */, 153 | A33C491818A8F78C00A5B4F8 /* AppDelegate.m */, 154 | A39C743118AA4D690069929E /* NSColor+Hex.h */, 155 | A39C743218AA4D690069929E /* NSColor+Hex.m */, 156 | A39C73D818A910A80069929E /* Status.png */, 157 | A39C73D918A910A80069929E /* Status@2x.png */, 158 | A39C73DC18A911E20069929E /* StatusHighlighted.png */, 159 | A39C73DD18A911E20069929E /* StatusHighlighted@2x.png */, 160 | A33C491D18A8F78C00A5B4F8 /* Images.xcassets */, 161 | A33C490C18A8F78C00A5B4F8 /* Supporting Files */, 162 | ); 163 | path = Iro; 164 | sourceTree = ""; 165 | }; 166 | A33C490C18A8F78C00A5B4F8 /* Supporting Files */ = { 167 | isa = PBXGroup; 168 | children = ( 169 | A33C490D18A8F78C00A5B4F8 /* Iro-Info.plist */, 170 | A33C490E18A8F78C00A5B4F8 /* InfoPlist.strings */, 171 | A33C491118A8F78C00A5B4F8 /* main.m */, 172 | A33C491318A8F78C00A5B4F8 /* Iro-Prefix.pch */, 173 | A33C491418A8F78C00A5B4F8 /* Credits.rtf */, 174 | ); 175 | name = "Supporting Files"; 176 | sourceTree = ""; 177 | }; 178 | A33C492918A8F78C00A5B4F8 /* IroTests */ = { 179 | isa = PBXGroup; 180 | children = ( 181 | A33C492F18A8F78C00A5B4F8 /* IroTests.m */, 182 | A33C492A18A8F78C00A5B4F8 /* Supporting Files */, 183 | ); 184 | path = IroTests; 185 | sourceTree = ""; 186 | }; 187 | A33C492A18A8F78C00A5B4F8 /* Supporting Files */ = { 188 | isa = PBXGroup; 189 | children = ( 190 | A33C492B18A8F78C00A5B4F8 /* IroTests-Info.plist */, 191 | A33C492C18A8F78C00A5B4F8 /* InfoPlist.strings */, 192 | ); 193 | name = "Supporting Files"; 194 | sourceTree = ""; 195 | }; 196 | /* End PBXGroup section */ 197 | 198 | /* Begin PBXNativeTarget section */ 199 | A33C490118A8F78C00A5B4F8 /* Iro */ = { 200 | isa = PBXNativeTarget; 201 | buildConfigurationList = A33C493318A8F78C00A5B4F8 /* Build configuration list for PBXNativeTarget "Iro" */; 202 | buildPhases = ( 203 | EC920F544DF140E9A6209EC6 /* Check Pods Manifest.lock */, 204 | A33C48FE18A8F78C00A5B4F8 /* Sources */, 205 | A33C48FF18A8F78C00A5B4F8 /* Frameworks */, 206 | A33C490018A8F78C00A5B4F8 /* Resources */, 207 | 2D2A65CB29B24D9995CB05D5 /* Copy Pods Resources */, 208 | ); 209 | buildRules = ( 210 | ); 211 | dependencies = ( 212 | ); 213 | name = Iro; 214 | productName = Iro; 215 | productReference = A33C490218A8F78C00A5B4F8 /* Iro.app */; 216 | productType = "com.apple.product-type.application"; 217 | }; 218 | A33C492218A8F78C00A5B4F8 /* IroTests */ = { 219 | isa = PBXNativeTarget; 220 | buildConfigurationList = A33C493618A8F78C00A5B4F8 /* Build configuration list for PBXNativeTarget "IroTests" */; 221 | buildPhases = ( 222 | A33C491F18A8F78C00A5B4F8 /* Sources */, 223 | A33C492018A8F78C00A5B4F8 /* Frameworks */, 224 | A33C492118A8F78C00A5B4F8 /* Resources */, 225 | ); 226 | buildRules = ( 227 | ); 228 | dependencies = ( 229 | A33C492818A8F78C00A5B4F8 /* PBXTargetDependency */, 230 | ); 231 | name = IroTests; 232 | productName = IroTests; 233 | productReference = A33C492318A8F78C00A5B4F8 /* IroTests.xctest */; 234 | productType = "com.apple.product-type.bundle.unit-test"; 235 | }; 236 | /* End PBXNativeTarget section */ 237 | 238 | /* Begin PBXProject section */ 239 | A33C48FA18A8F78C00A5B4F8 /* Project object */ = { 240 | isa = PBXProject; 241 | attributes = { 242 | LastUpgradeCheck = 0500; 243 | ORGANIZATIONNAME = Ripeworks; 244 | TargetAttributes = { 245 | A33C490118A8F78C00A5B4F8 = { 246 | SystemCapabilities = { 247 | com.apple.Sandbox = { 248 | enabled = 1; 249 | }; 250 | }; 251 | }; 252 | A33C492218A8F78C00A5B4F8 = { 253 | TestTargetID = A33C490118A8F78C00A5B4F8; 254 | }; 255 | }; 256 | }; 257 | buildConfigurationList = A33C48FD18A8F78C00A5B4F8 /* Build configuration list for PBXProject "Iro" */; 258 | compatibilityVersion = "Xcode 3.2"; 259 | developmentRegion = English; 260 | hasScannedForEncodings = 0; 261 | knownRegions = ( 262 | en, 263 | Base, 264 | ); 265 | mainGroup = A33C48F918A8F78C00A5B4F8; 266 | productRefGroup = A33C490318A8F78C00A5B4F8 /* Products */; 267 | projectDirPath = ""; 268 | projectRoot = ""; 269 | targets = ( 270 | A33C490118A8F78C00A5B4F8 /* Iro */, 271 | A33C492218A8F78C00A5B4F8 /* IroTests */, 272 | ); 273 | }; 274 | /* End PBXProject section */ 275 | 276 | /* Begin PBXResourcesBuildPhase section */ 277 | A33C490018A8F78C00A5B4F8 /* Resources */ = { 278 | isa = PBXResourcesBuildPhase; 279 | buildActionMask = 2147483647; 280 | files = ( 281 | A33C491018A8F78C00A5B4F8 /* InfoPlist.strings in Resources */, 282 | A33C491E18A8F78C00A5B4F8 /* Images.xcassets in Resources */, 283 | A39C73DF18A911E20069929E /* StatusHighlighted@2x.png in Resources */, 284 | A39C73DB18A910A80069929E /* Status@2x.png in Resources */, 285 | A33C491618A8F78C00A5B4F8 /* Credits.rtf in Resources */, 286 | A39C73DA18A910A80069929E /* Status.png in Resources */, 287 | A39C73DE18A911E20069929E /* StatusHighlighted.png in Resources */, 288 | A345F61218AED46C0056D312 /* MainMenu.xib in Resources */, 289 | ); 290 | runOnlyForDeploymentPostprocessing = 0; 291 | }; 292 | A33C492118A8F78C00A5B4F8 /* Resources */ = { 293 | isa = PBXResourcesBuildPhase; 294 | buildActionMask = 2147483647; 295 | files = ( 296 | A33C492E18A8F78C00A5B4F8 /* InfoPlist.strings in Resources */, 297 | ); 298 | runOnlyForDeploymentPostprocessing = 0; 299 | }; 300 | /* End PBXResourcesBuildPhase section */ 301 | 302 | /* Begin PBXShellScriptBuildPhase section */ 303 | 2D2A65CB29B24D9995CB05D5 /* Copy Pods Resources */ = { 304 | isa = PBXShellScriptBuildPhase; 305 | buildActionMask = 2147483647; 306 | files = ( 307 | ); 308 | inputPaths = ( 309 | ); 310 | name = "Copy Pods Resources"; 311 | outputPaths = ( 312 | ); 313 | runOnlyForDeploymentPostprocessing = 0; 314 | shellPath = /bin/sh; 315 | shellScript = "\"${SRCROOT}/Pods/Target Support Files/Pods-Iro/Pods-Iro-resources.sh\"\n"; 316 | showEnvVarsInLog = 0; 317 | }; 318 | EC920F544DF140E9A6209EC6 /* Check Pods Manifest.lock */ = { 319 | isa = PBXShellScriptBuildPhase; 320 | buildActionMask = 2147483647; 321 | files = ( 322 | ); 323 | inputPaths = ( 324 | ); 325 | name = "Check Pods Manifest.lock"; 326 | outputPaths = ( 327 | ); 328 | runOnlyForDeploymentPostprocessing = 0; 329 | shellPath = /bin/sh; 330 | shellScript = "diff \"${PODS_ROOT}/../Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [[ $? != 0 ]] ; then\n cat << EOM\nerror: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\nEOM\n exit 1\nfi\n"; 331 | showEnvVarsInLog = 0; 332 | }; 333 | /* End PBXShellScriptBuildPhase section */ 334 | 335 | /* Begin PBXSourcesBuildPhase section */ 336 | A33C48FE18A8F78C00A5B4F8 /* Sources */ = { 337 | isa = PBXSourcesBuildPhase; 338 | buildActionMask = 2147483647; 339 | files = ( 340 | A39C743318AA4D690069929E /* NSColor+Hex.m in Sources */, 341 | A33C491918A8F78C00A5B4F8 /* AppDelegate.m in Sources */, 342 | A33C491218A8F78C00A5B4F8 /* main.m in Sources */, 343 | ); 344 | runOnlyForDeploymentPostprocessing = 0; 345 | }; 346 | A33C491F18A8F78C00A5B4F8 /* Sources */ = { 347 | isa = PBXSourcesBuildPhase; 348 | buildActionMask = 2147483647; 349 | files = ( 350 | A33C493018A8F78C00A5B4F8 /* IroTests.m in Sources */, 351 | ); 352 | runOnlyForDeploymentPostprocessing = 0; 353 | }; 354 | /* End PBXSourcesBuildPhase section */ 355 | 356 | /* Begin PBXTargetDependency section */ 357 | A33C492818A8F78C00A5B4F8 /* PBXTargetDependency */ = { 358 | isa = PBXTargetDependency; 359 | target = A33C490118A8F78C00A5B4F8 /* Iro */; 360 | targetProxy = A33C492718A8F78C00A5B4F8 /* PBXContainerItemProxy */; 361 | }; 362 | /* End PBXTargetDependency section */ 363 | 364 | /* Begin PBXVariantGroup section */ 365 | A33C490E18A8F78C00A5B4F8 /* InfoPlist.strings */ = { 366 | isa = PBXVariantGroup; 367 | children = ( 368 | A33C490F18A8F78C00A5B4F8 /* en */, 369 | ); 370 | name = InfoPlist.strings; 371 | sourceTree = ""; 372 | }; 373 | A33C491418A8F78C00A5B4F8 /* Credits.rtf */ = { 374 | isa = PBXVariantGroup; 375 | children = ( 376 | A33C491518A8F78C00A5B4F8 /* en */, 377 | ); 378 | name = Credits.rtf; 379 | sourceTree = ""; 380 | }; 381 | A33C492C18A8F78C00A5B4F8 /* InfoPlist.strings */ = { 382 | isa = PBXVariantGroup; 383 | children = ( 384 | A33C492D18A8F78C00A5B4F8 /* en */, 385 | ); 386 | name = InfoPlist.strings; 387 | sourceTree = ""; 388 | }; 389 | A345F61018AED46C0056D312 /* MainMenu.xib */ = { 390 | isa = PBXVariantGroup; 391 | children = ( 392 | A345F61118AED46C0056D312 /* Base */, 393 | ); 394 | name = MainMenu.xib; 395 | sourceTree = ""; 396 | }; 397 | /* End PBXVariantGroup section */ 398 | 399 | /* Begin XCBuildConfiguration section */ 400 | A33C493118A8F78C00A5B4F8 /* Debug */ = { 401 | isa = XCBuildConfiguration; 402 | buildSettings = { 403 | ALWAYS_SEARCH_USER_PATHS = NO; 404 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 405 | CLANG_CXX_LIBRARY = "libc++"; 406 | CLANG_ENABLE_OBJC_ARC = YES; 407 | CLANG_WARN_BOOL_CONVERSION = YES; 408 | CLANG_WARN_CONSTANT_CONVERSION = YES; 409 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 410 | CLANG_WARN_EMPTY_BODY = YES; 411 | CLANG_WARN_ENUM_CONVERSION = YES; 412 | CLANG_WARN_INT_CONVERSION = YES; 413 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 414 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 415 | COPY_PHASE_STRIP = NO; 416 | GCC_C_LANGUAGE_STANDARD = gnu99; 417 | GCC_DYNAMIC_NO_PIC = NO; 418 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 419 | GCC_OPTIMIZATION_LEVEL = 0; 420 | GCC_PREPROCESSOR_DEFINITIONS = ( 421 | "DEBUG=1", 422 | "$(inherited)", 423 | ); 424 | GCC_SYMBOLS_PRIVATE_EXTERN = NO; 425 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 426 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 427 | GCC_WARN_UNDECLARED_SELECTOR = YES; 428 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 429 | GCC_WARN_UNUSED_FUNCTION = YES; 430 | GCC_WARN_UNUSED_VARIABLE = YES; 431 | MACOSX_DEPLOYMENT_TARGET = 10.9; 432 | ONLY_ACTIVE_ARCH = YES; 433 | SDKROOT = macosx; 434 | }; 435 | name = Debug; 436 | }; 437 | A33C493218A8F78C00A5B4F8 /* Release */ = { 438 | isa = XCBuildConfiguration; 439 | buildSettings = { 440 | ALWAYS_SEARCH_USER_PATHS = NO; 441 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; 442 | CLANG_CXX_LIBRARY = "libc++"; 443 | CLANG_ENABLE_OBJC_ARC = YES; 444 | CLANG_WARN_BOOL_CONVERSION = YES; 445 | CLANG_WARN_CONSTANT_CONVERSION = YES; 446 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 447 | CLANG_WARN_EMPTY_BODY = YES; 448 | CLANG_WARN_ENUM_CONVERSION = YES; 449 | CLANG_WARN_INT_CONVERSION = YES; 450 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 451 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 452 | COPY_PHASE_STRIP = YES; 453 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 454 | ENABLE_NS_ASSERTIONS = NO; 455 | GCC_C_LANGUAGE_STANDARD = gnu99; 456 | GCC_ENABLE_OBJC_EXCEPTIONS = YES; 457 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 458 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 459 | GCC_WARN_UNDECLARED_SELECTOR = YES; 460 | GCC_WARN_UNINITIALIZED_AUTOS = YES; 461 | GCC_WARN_UNUSED_FUNCTION = YES; 462 | GCC_WARN_UNUSED_VARIABLE = YES; 463 | MACOSX_DEPLOYMENT_TARGET = 10.9; 464 | SDKROOT = macosx; 465 | }; 466 | name = Release; 467 | }; 468 | A33C493418A8F78C00A5B4F8 /* Debug */ = { 469 | isa = XCBuildConfiguration; 470 | baseConfigurationReference = B95A6D9B7801B63CE588E160 /* Pods-Iro.debug.xcconfig */; 471 | buildSettings = { 472 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 473 | CODE_SIGN_ENTITLEMENTS = Iro/Iro.entitlements; 474 | CODE_SIGN_IDENTITY = "-"; 475 | COMBINE_HIDPI_IMAGES = YES; 476 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 477 | GCC_PREFIX_HEADER = "Iro/Iro-Prefix.pch"; 478 | INFOPLIST_FILE = "Iro/Iro-Info.plist"; 479 | MACOSX_DEPLOYMENT_TARGET = 10.8; 480 | PRODUCT_NAME = "$(TARGET_NAME)"; 481 | WRAPPER_EXTENSION = app; 482 | }; 483 | name = Debug; 484 | }; 485 | A33C493518A8F78C00A5B4F8 /* Release */ = { 486 | isa = XCBuildConfiguration; 487 | baseConfigurationReference = 34D8B085B92372A39DC9FB89 /* Pods-Iro.release.xcconfig */; 488 | buildSettings = { 489 | ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; 490 | CODE_SIGN_ENTITLEMENTS = Iro/Iro.entitlements; 491 | CODE_SIGN_IDENTITY = "-"; 492 | COMBINE_HIDPI_IMAGES = YES; 493 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 494 | GCC_PREFIX_HEADER = "Iro/Iro-Prefix.pch"; 495 | INFOPLIST_FILE = "Iro/Iro-Info.plist"; 496 | MACOSX_DEPLOYMENT_TARGET = 10.8; 497 | PRODUCT_NAME = "$(TARGET_NAME)"; 498 | WRAPPER_EXTENSION = app; 499 | }; 500 | name = Release; 501 | }; 502 | A33C493718A8F78C00A5B4F8 /* Debug */ = { 503 | isa = XCBuildConfiguration; 504 | buildSettings = { 505 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Iro.app/Contents/MacOS/Iro"; 506 | COMBINE_HIDPI_IMAGES = YES; 507 | FRAMEWORK_SEARCH_PATHS = ( 508 | "$(DEVELOPER_FRAMEWORKS_DIR)", 509 | "$(inherited)", 510 | ); 511 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 512 | GCC_PREFIX_HEADER = "Iro/Iro-Prefix.pch"; 513 | GCC_PREPROCESSOR_DEFINITIONS = ( 514 | "DEBUG=1", 515 | "$(inherited)", 516 | ); 517 | INFOPLIST_FILE = "IroTests/IroTests-Info.plist"; 518 | PRODUCT_NAME = "$(TARGET_NAME)"; 519 | TEST_HOST = "$(BUNDLE_LOADER)"; 520 | WRAPPER_EXTENSION = xctest; 521 | }; 522 | name = Debug; 523 | }; 524 | A33C493818A8F78C00A5B4F8 /* Release */ = { 525 | isa = XCBuildConfiguration; 526 | buildSettings = { 527 | BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Iro.app/Contents/MacOS/Iro"; 528 | COMBINE_HIDPI_IMAGES = YES; 529 | FRAMEWORK_SEARCH_PATHS = ( 530 | "$(DEVELOPER_FRAMEWORKS_DIR)", 531 | "$(inherited)", 532 | ); 533 | GCC_PRECOMPILE_PREFIX_HEADER = YES; 534 | GCC_PREFIX_HEADER = "Iro/Iro-Prefix.pch"; 535 | INFOPLIST_FILE = "IroTests/IroTests-Info.plist"; 536 | PRODUCT_NAME = "$(TARGET_NAME)"; 537 | TEST_HOST = "$(BUNDLE_LOADER)"; 538 | WRAPPER_EXTENSION = xctest; 539 | }; 540 | name = Release; 541 | }; 542 | /* End XCBuildConfiguration section */ 543 | 544 | /* Begin XCConfigurationList section */ 545 | A33C48FD18A8F78C00A5B4F8 /* Build configuration list for PBXProject "Iro" */ = { 546 | isa = XCConfigurationList; 547 | buildConfigurations = ( 548 | A33C493118A8F78C00A5B4F8 /* Debug */, 549 | A33C493218A8F78C00A5B4F8 /* Release */, 550 | ); 551 | defaultConfigurationIsVisible = 0; 552 | defaultConfigurationName = Release; 553 | }; 554 | A33C493318A8F78C00A5B4F8 /* Build configuration list for PBXNativeTarget "Iro" */ = { 555 | isa = XCConfigurationList; 556 | buildConfigurations = ( 557 | A33C493418A8F78C00A5B4F8 /* Debug */, 558 | A33C493518A8F78C00A5B4F8 /* Release */, 559 | ); 560 | defaultConfigurationIsVisible = 0; 561 | defaultConfigurationName = Release; 562 | }; 563 | A33C493618A8F78C00A5B4F8 /* Build configuration list for PBXNativeTarget "IroTests" */ = { 564 | isa = XCConfigurationList; 565 | buildConfigurations = ( 566 | A33C493718A8F78C00A5B4F8 /* Debug */, 567 | A33C493818A8F78C00A5B4F8 /* Release */, 568 | ); 569 | defaultConfigurationIsVisible = 0; 570 | defaultConfigurationName = Release; 571 | }; 572 | /* End XCConfigurationList section */ 573 | }; 574 | rootObject = A33C48FA18A8F78C00A5B4F8 /* Project object */; 575 | } 576 | -------------------------------------------------------------------------------- /Iro.xcodeproj/project.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | 2 | 4 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /Iro.xcworkspace/contents.xcworkspacedata: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /Iro/AppDelegate.h: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.h 3 | // Iro 4 | // 5 | // Created by Mike Kruk on 2/10/14. 6 | // Copyright (c) 2014 Ripeworks. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface AppDelegate : NSObject 12 | { 13 | NSPopUpButton *menuButton; 14 | NSMenu *settings; 15 | NSMenuItem *settingHexValue; 16 | id popoverActiveMonitor; 17 | } 18 | 19 | @property (assign) IBOutlet NSWindow *window; 20 | @property (strong, nonatomic) NSStatusItem *statusItem; 21 | 22 | @end 23 | -------------------------------------------------------------------------------- /Iro/AppDelegate.m: -------------------------------------------------------------------------------- 1 | // 2 | // AppDelegate.m 3 | // Iro 4 | // 5 | // Created by Mike Kruk on 2/10/14. 6 | // Copyright (c) 2014 Ripeworks. All rights reserved. 7 | // 8 | 9 | #import "AppDelegate.h" 10 | #import "BFColorPickerPopover.h" 11 | #import "NSColor+Hex.h" 12 | 13 | @implementation AppDelegate 14 | 15 | @synthesize statusItem; 16 | 17 | - (void)applicationDidFinishLaunching:(NSNotification *)aNotification 18 | { 19 | // init status bar 20 | statusItem = [[NSStatusBar systemStatusBar] statusItemWithLength:NSVariableStatusItemLength]; 21 | NSImage *statusIcon = [NSImage imageNamed:@"Status"]; 22 | statusIcon.template = YES; 23 | 24 | statusItem.button.image = statusIcon; 25 | [statusItem setAction:@selector(didClickStatusItem)]; 26 | 27 | // cog menu 28 | settings = [[NSMenu alloc] initWithTitle:@""]; 29 | [settings setAutoenablesItems:NO]; 30 | // add image'd item for PopUpButton 31 | NSMenuItem *selectedItem = [[NSMenuItem alloc] initWithTitle:@"" action:nil keyEquivalent:@""]; 32 | [selectedItem setImage:[NSImage imageNamed:NSImageNameActionTemplate]]; 33 | [settings addItem:selectedItem]; 34 | 35 | settingHexValue = [[NSMenuItem alloc] initWithTitle:@"Copy color" action:@selector(copyHexColor) keyEquivalent:@""]; 36 | [settings addItem:settingHexValue]; 37 | // TODO: Option to start app at login 38 | //[settings addItemWithTitle:@"Start at login" action:@selector(toggleStartAtLogin:) keyEquivalent:@""]; 39 | 40 | [settings addItem:[NSMenuItem separatorItem]]; 41 | [settings addItemWithTitle:@"Quit Iro" action:@selector(quit) keyEquivalent:@"q"]; 42 | [settings setDelegate:self]; 43 | 44 | menuButton = [[NSPopUpButton alloc] initWithFrame:CGRectMake(208, 360, 40, 50) pullsDown:YES]; 45 | [menuButton setPreferredEdge:NSMaxYEdge]; 46 | [menuButton setBordered:NO]; 47 | [menuButton setMenu:settings]; 48 | } 49 | 50 | - (void)didClickStatusItem 51 | { 52 | [[BFColorPickerPopover sharedPopover] showRelativeToRect:statusItem.button.frame ofView:statusItem.button preferredEdge:NSMinYEdge]; 53 | [[BFColorPickerPopover sharedPopover] setTarget:self]; 54 | 55 | // add settings button to color picker viewController 56 | [[[[BFColorPickerPopover sharedPopover] contentViewController] view] addSubview:menuButton]; 57 | 58 | // watch for mouse events outside of view 59 | if(popoverActiveMonitor == nil) 60 | { 61 | popoverActiveMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSLeftMouseUp|NSRightMouseDownMask handler:^(NSEvent* event) 62 | { 63 | [self dismissPopover:event]; 64 | }]; 65 | } 66 | } 67 | 68 | - (void)dismissPopover:(NSEvent *)event 69 | { 70 | // remove click monitor 71 | if(popoverActiveMonitor) 72 | { 73 | [NSEvent removeMonitor:popoverActiveMonitor]; 74 | popoverActiveMonitor = nil; 75 | } 76 | 77 | // close popover 78 | [[BFColorPickerPopover sharedPopover] close]; 79 | } 80 | 81 | - (void)copyHexColor 82 | { 83 | NSString *hex = [[[BFColorPickerPopover sharedPopover] color] hexValue]; 84 | [[NSPasteboard generalPasteboard] clearContents]; 85 | [[NSPasteboard generalPasteboard] setString:hex forType:NSStringPboardType]; 86 | } 87 | 88 | - (void)quit 89 | { 90 | [NSApp terminate:self]; 91 | } 92 | 93 | - (void)toggleStartAtLogin:(id)sender 94 | { 95 | NSMenuItem *item = sender; 96 | item.state = item.state == NSOnState ? NSOffState : NSOnState; 97 | 98 | if (item.state == NSOnState) { 99 | // enable start at login 100 | } else { 101 | // disable start at login 102 | } 103 | } 104 | 105 | # pragma mark NSMenuDelegate 106 | 107 | - (void)menuWillOpen:(NSMenu *)menu 108 | { 109 | NSString *hex = [[[BFColorPickerPopover sharedPopover] color] hexValue]; 110 | if (!hex) { 111 | [settingHexValue setEnabled:NO]; 112 | return; 113 | } 114 | [settingHexValue setEnabled:YES]; 115 | [settingHexValue setTitle:[NSString stringWithFormat:@"Copy \"%@\"", hex]]; 116 | } 117 | 118 | @end 119 | -------------------------------------------------------------------------------- /Iro/Base.lproj/MainMenu.xib: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 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 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | Default 522 | 523 | 524 | 525 | 526 | 527 | 528 | Left to Right 529 | 530 | 531 | 532 | 533 | 534 | 535 | Right to Left 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | Default 547 | 548 | 549 | 550 | 551 | 552 | 553 | Left to Right 554 | 555 | 556 | 557 | 558 | 559 | 560 | Right to Left 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/16.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/16@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/16@2x.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/256.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/256.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/256@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/256@2x.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/32.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/32@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/32@2x.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/512.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/512@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Images.xcassets/AppIcon.appiconset/512@2x.png -------------------------------------------------------------------------------- /Iro/Images.xcassets/AppIcon.appiconset/Contents.json: -------------------------------------------------------------------------------- 1 | { 2 | "images" : [ 3 | { 4 | "size" : "16x16", 5 | "idiom" : "mac", 6 | "filename" : "16.png", 7 | "scale" : "1x" 8 | }, 9 | { 10 | "size" : "16x16", 11 | "idiom" : "mac", 12 | "filename" : "16@2x.png", 13 | "scale" : "2x" 14 | }, 15 | { 16 | "size" : "32x32", 17 | "idiom" : "mac", 18 | "filename" : "32.png", 19 | "scale" : "1x" 20 | }, 21 | { 22 | "size" : "32x32", 23 | "idiom" : "mac", 24 | "filename" : "32@2x.png", 25 | "scale" : "2x" 26 | }, 27 | { 28 | "idiom" : "mac", 29 | "size" : "128x128", 30 | "scale" : "1x" 31 | }, 32 | { 33 | "idiom" : "mac", 34 | "size" : "128x128", 35 | "scale" : "2x" 36 | }, 37 | { 38 | "size" : "256x256", 39 | "idiom" : "mac", 40 | "filename" : "256.png", 41 | "scale" : "1x" 42 | }, 43 | { 44 | "size" : "256x256", 45 | "idiom" : "mac", 46 | "filename" : "256@2x.png", 47 | "scale" : "2x" 48 | }, 49 | { 50 | "size" : "512x512", 51 | "idiom" : "mac", 52 | "filename" : "512.png", 53 | "scale" : "1x" 54 | }, 55 | { 56 | "size" : "512x512", 57 | "idiom" : "mac", 58 | "filename" : "512@2x.png", 59 | "scale" : "2x" 60 | } 61 | ], 62 | "info" : { 63 | "version" : 1, 64 | "author" : "xcode" 65 | } 66 | } -------------------------------------------------------------------------------- /Iro/Iro-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIconFile 10 | 11 | CFBundleIdentifier 12 | com.ripeworks.${PRODUCT_NAME:rfc1034identifier} 13 | CFBundleInfoDictionaryVersion 14 | 6.0 15 | CFBundleName 16 | ${PRODUCT_NAME} 17 | CFBundlePackageType 18 | APPL 19 | CFBundleShortVersionString 20 | 0.3 21 | CFBundleSignature 22 | ???? 23 | CFBundleVersion 24 | 1 25 | LSApplicationCategoryType 26 | public.app-category.developer-tools 27 | LSMinimumSystemVersion 28 | ${MACOSX_DEPLOYMENT_TARGET} 29 | NSHumanReadableCopyright 30 | Copyright © 2014 Ripeworks. All rights reserved. 31 | NSMainNibFile 32 | MainMenu 33 | NSPrincipalClass 34 | NSApplication 35 | NSUIElement 36 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /Iro/Iro-Prefix.pch: -------------------------------------------------------------------------------- 1 | // 2 | // Prefix header 3 | // 4 | // The contents of this file are implicitly included at the beginning of every source file. 5 | // 6 | 7 | #ifdef __OBJC__ 8 | #import 9 | #endif 10 | -------------------------------------------------------------------------------- /Iro/Iro.entitlements: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | com.apple.security.app-sandbox 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /Iro/NSColor+Hex.h: -------------------------------------------------------------------------------- 1 | // 2 | // NSColor+Hex.h 3 | // Iro 4 | // 5 | // Created by Mike Kruk on 2/11/14. 6 | // Copyright (c) 2014 Ripeworks. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface NSColor (Hex) 12 | 13 | - (NSString *)hexValue; 14 | 15 | @end 16 | -------------------------------------------------------------------------------- /Iro/NSColor+Hex.m: -------------------------------------------------------------------------------- 1 | // 2 | // NSColor+Hex.m 3 | // Iro 4 | // 5 | // Created by Mike Kruk on 2/11/14. 6 | // Copyright (c) 2014 Ripeworks. All rights reserved. 7 | // 8 | 9 | #import "NSColor+Hex.h" 10 | 11 | @implementation NSColor (Hex) 12 | 13 | - (NSString *)hexValue 14 | { 15 | NSColor *rgbColor = [self colorUsingColorSpaceName:NSDeviceRGBColorSpace]; 16 | if (!rgbColor) return nil; 17 | 18 | NSString* hex = [NSString stringWithFormat:@"%02x%02x%02x", 19 | (int) (rgbColor.redComponent * 0xFF), (int) (rgbColor.greenComponent * 0xFF), 20 | (int) (rgbColor.blueComponent * 0xFF)]; 21 | return hex; 22 | } 23 | 24 | @end 25 | -------------------------------------------------------------------------------- /Iro/Status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Status.png -------------------------------------------------------------------------------- /Iro/Status@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/Status@2x.png -------------------------------------------------------------------------------- /Iro/StatusHighlighted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/StatusHighlighted.png -------------------------------------------------------------------------------- /Iro/StatusHighlighted@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Iro/StatusHighlighted@2x.png -------------------------------------------------------------------------------- /Iro/en.lproj/Credits.rtf: -------------------------------------------------------------------------------- 1 | {\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} 2 | {\colortbl;\red255\green255\blue255;} 3 | \paperw9840\paperh8400 4 | \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural 5 | 6 | \f0\b\fs24 \cf0 Engineering: 7 | \b0 \ 8 | Some people\ 9 | \ 10 | 11 | \b Human Interface Design: 12 | \b0 \ 13 | Some other people\ 14 | \ 15 | 16 | \b Testing: 17 | \b0 \ 18 | Hopefully not nobody\ 19 | \ 20 | 21 | \b Documentation: 22 | \b0 \ 23 | Whoever\ 24 | \ 25 | 26 | \b With special thanks to: 27 | \b0 \ 28 | Mom\ 29 | } 30 | -------------------------------------------------------------------------------- /Iro/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /Iro/main.m: -------------------------------------------------------------------------------- 1 | // 2 | // main.m 3 | // Iro 4 | // 5 | // Created by Mike Kruk on 2/10/14. 6 | // Copyright (c) 2014 Ripeworks. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | int main(int argc, const char * argv[]) 12 | { 13 | return NSApplicationMain(argc, argv); 14 | } 15 | -------------------------------------------------------------------------------- /IroTests/IroTests-Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | en 7 | CFBundleExecutable 8 | ${EXECUTABLE_NAME} 9 | CFBundleIdentifier 10 | com.ripeworks.${PRODUCT_NAME:rfc1034identifier} 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundlePackageType 14 | BNDL 15 | CFBundleShortVersionString 16 | 1.0 17 | CFBundleSignature 18 | ???? 19 | CFBundleVersion 20 | 1 21 | 22 | 23 | -------------------------------------------------------------------------------- /IroTests/IroTests.m: -------------------------------------------------------------------------------- 1 | // 2 | // IroTests.m 3 | // IroTests 4 | // 5 | // Created by Mike Kruk on 2/10/14. 6 | // Copyright (c) 2014 Ripeworks. All rights reserved. 7 | // 8 | 9 | #import 10 | 11 | @interface IroTests : XCTestCase 12 | 13 | @end 14 | 15 | @implementation IroTests 16 | 17 | - (void)setUp 18 | { 19 | [super setUp]; 20 | // Put setup code here. This method is called before the invocation of each test method in the class. 21 | } 22 | 23 | - (void)tearDown 24 | { 25 | // Put teardown code here. This method is called after the invocation of each test method in the class. 26 | [super tearDown]; 27 | } 28 | 29 | - (void)testExample 30 | { 31 | XCTFail(@"No implementation for \"%s\"", __PRETTY_FUNCTION__); 32 | } 33 | 34 | @end 35 | -------------------------------------------------------------------------------- /IroTests/en.lproj/InfoPlist.strings: -------------------------------------------------------------------------------- 1 | /* Localized versions of Info.plist keys */ 2 | 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2014 Ripeworks LLC 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /Podfile: -------------------------------------------------------------------------------- 1 | source 'https://github.com/CocoaPods/Specs.git' 2 | # Uncomment this line to define a global platform for your project 3 | # platform :ios, "6.0" 4 | 5 | target "Iro" do 6 | 7 | pod 'BFColorPickerPopover' 8 | 9 | end 10 | 11 | target "IroTests" do 12 | 13 | end 14 | 15 | -------------------------------------------------------------------------------- /Podfile.lock: -------------------------------------------------------------------------------- 1 | PODS: 2 | - BFColorPickerPopover (1.0.0) 3 | 4 | DEPENDENCIES: 5 | - BFColorPickerPopover 6 | 7 | SPEC CHECKSUMS: 8 | BFColorPickerPopover: 1d98bc847ffbd4d2f65060516f34cfaebdb4d0ab 9 | 10 | COCOAPODS: 0.34.4 11 | -------------------------------------------------------------------------------- /Preview.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ripeworks/iro/9bcfcb4b33b96659597edb0d02f5e86c9ce41443/Preview.png -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Iro (色) 2 | 3 | Tired of OSX color picker apps either totally sucking or costing money. This one is open source and _hopefully_ doesn't suck. 4 | 5 | __[Download](https://github.com/ripeworks/iro/releases)__ 6 | 7 | ![Screenshot](Preview.png) 8 | 9 | ## Features 10 | 11 | * Displays native color picker (as well as custom color pickers). 12 | * Copy current color HEX value to clipboard. 13 | * No item in dock, yay! 14 | 15 | ## Color Pickers you should have 16 | 17 | * [Bjango - Skala Color](http://download.bjango.com/skalacolor/) 18 | * [Panic - Developer Color Picker](https://panic.com/~wade/picker/) 19 | 20 | __Installing Color Pickers__ 21 | 22 | ```bash 23 | $ mv DeveloperColorPicker.colorPicker ~/Library/ColorPickers/DeveloperColorPicker.colorPicker 24 | ``` 25 | 26 | ## Contributing 27 | 28 | This was built to serve one purpose: make it super easy to pick a color from the screen and grab the HEX value. While I won't be adding more features myself, I will certainly be open to merging any pull requests! 29 | 30 | ## Credits 31 | 32 | * [BFColorPickerPopover](https://github.com/DrummerB/BFColorPickerPopover) for displaying native color picker. 33 | * [Batch](https://github.com/AdamWhitcroft/Batch) for droplet menu bar icon. 34 | --------------------------------------------------------------------------------