// !$*UTF8*$! { archiveVersion = 1; classes = { }; objectVersion = 46; objects = { /* Begin PBXBuildFile section */ C90EE50D189A2C03004DA5BA /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = C90EE50C189A2C03004DA5BA /* MainMenu.xib */; }; C91CC3C918B1DD2C002E09A1 /* P4Message.m in Sources */ = {isa = PBXBuildFile; fileRef = C91CC3C818B1DD2C002E09A1 /* P4Message.m */; }; C934186618B72854007E6FE5 /* perforce_angry.png in Resources */ = {isa = PBXBuildFile; fileRef = C934186518B72854007E6FE5 /* perforce_angry.png */; }; C934186918BB198D007E6FE5 /* perforce_sad.png in Resources */ = {isa = PBXBuildFile; fileRef = C934186818BB198D007E6FE5 /* perforce_sad.png */; }; C959416418C59F0700DCD7E8 /* Connections.xib in Resources */ = {isa = PBXBuildFile; fileRef = C959416318C59F0700DCD7E8 /* Connections.xib */; }; C959416718C59F2500DCD7E8 /* PLSConnectionController.m in Sources */ = {isa = PBXBuildFile; fileRef = C959416618C59F2500DCD7E8 /* PLSConnectionController.m */; }; C968A03518B5CAF900E0DED3 /* PLSLoginController.m in Sources */ = {isa = PBXBuildFile; fileRef = C968A03418B5CAF900E0DED3 /* PLSLoginController.m */; }; C968A03718B5CB0800E0DED3 /* Login.xib in Resources */ = {isa = PBXBuildFile; fileRef = C968A03618B5CB0800E0DED3 /* Login.xib */; }; C9BE0C4F188BA1210042AC7B /* perforce.png in Resources */ = {isa = PBXBuildFile; fileRef = C9BE0C4E188BA1210042AC7B /* perforce.png */; }; C9D6BB8518865A0200FF838D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D6BB8418865A0200FF838D /* Cocoa.framework */; }; C9D6BB8F18865A0200FF838D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C9D6BB8D18865A0200FF838D /* InfoPlist.strings */; }; C9D6BB9118865A0200FF838D /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D6BB9018865A0200FF838D /* main.m */; }; C9D6BB9518865A0200FF838D /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = C9D6BB9318865A0200FF838D /* Credits.rtf */; }; C9D6BB9818865A0200FF838D /* PLSAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D6BB9718865A0200FF838D /* PLSAppDelegate.m */; }; C9D6BB9D18865A0300FF838D /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = C9D6BB9C18865A0300FF838D /* Images.xcassets */; }; C9D6BBA418865A0300FF838D /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D6BBA318865A0300FF838D /* XCTest.framework */; }; C9D6BBA518865A0300FF838D /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9D6BB8418865A0200FF838D /* Cocoa.framework */; }; C9D6BBAD18865A0300FF838D /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = C9D6BBAB18865A0300FF838D /* InfoPlist.strings */; }; C9D6BBAF18865A0300FF838D /* PulseTests.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D6BBAE18865A0300FF838D /* PulseTests.m */; }; C9D6BBBA18865A2B00FF838D /* FileSystemWatcher.m in Sources */ = {isa = PBXBuildFile; fileRef = C9D6BBB918865A2B00FF838D /* FileSystemWatcher.m */; }; C9EAD488189E1E1A0012AD44 /* P4Connection.m in Sources */ = {isa = PBXBuildFile; fileRef = C9EAD487189E1E1A0012AD44 /* P4Connection.m */; }; C9EB2C10188E4913007FDD4F /* PLSOverseer.m in Sources */ = {isa = PBXBuildFile; fileRef = C9EB2C0F188E4913007FDD4F /* PLSOverseer.m */; }; C9F4220618D18E0000990B06 /* PLSFileEvent.m in Sources */ = {isa = PBXBuildFile; fileRef = C9F4220518D18E0000990B06 /* PLSFileEvent.m */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ C9D6BBA618865A0300FF838D /* PBXContainerItemProxy */ = { isa = PBXContainerItemProxy; containerPortal = C9D6BB7918865A0200FF838D /* Project object */; proxyType = 1; remoteGlobalIDString = C9D6BB8018865A0200FF838D; remoteInfo = Pulse; }; /* End PBXContainerItemProxy section */ /* Begin PBXFileReference section */ C90EE50C189A2C03004DA5BA /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = "<group>"; }; C91CC3C718B1DD2C002E09A1 /* P4Message.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P4Message.h; sourceTree = "<group>"; }; C91CC3C818B1DD2C002E09A1 /* P4Message.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P4Message.m; sourceTree = "<group>"; }; C934186518B72854007E6FE5 /* perforce_angry.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = perforce_angry.png; sourceTree = "<group>"; }; C934186818BB198D007E6FE5 /* perforce_sad.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = perforce_sad.png; sourceTree = "<group>"; }; C959416318C59F0700DCD7E8 /* Connections.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Connections.xib; sourceTree = "<group>"; }; C959416518C59F2500DCD7E8 /* PLSConnectionController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PLSConnectionController.h; sourceTree = "<group>"; }; C959416618C59F2500DCD7E8 /* PLSConnectionController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PLSConnectionController.m; sourceTree = "<group>"; }; C968A03318B5CAF900E0DED3 /* PLSLoginController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PLSLoginController.h; sourceTree = "<group>"; }; C968A03418B5CAF900E0DED3 /* PLSLoginController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PLSLoginController.m; sourceTree = "<group>"; }; C968A03618B5CB0800E0DED3 /* Login.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = Login.xib; sourceTree = "<group>"; }; C9BE0C4E188BA1210042AC7B /* perforce.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = perforce.png; sourceTree = "<group>"; }; C9D6BB8118865A0200FF838D /* Pulse.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Pulse.app; sourceTree = BUILT_PRODUCTS_DIR; }; C9D6BB8418865A0200FF838D /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; C9D6BB8718865A0200FF838D /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; C9D6BB8818865A0200FF838D /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; C9D6BB8918865A0200FF838D /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; C9D6BB8C18865A0200FF838D /* Pulse-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Pulse-Info.plist"; sourceTree = "<group>"; }; C9D6BB8E18865A0200FF838D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; C9D6BB9018865A0200FF838D /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = "<group>"; }; C9D6BB9218865A0200FF838D /* Pulse-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Pulse-Prefix.pch"; sourceTree = "<group>"; }; C9D6BB9418865A0200FF838D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = "<group>"; }; C9D6BB9618865A0200FF838D /* PLSAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = PLSAppDelegate.h; sourceTree = "<group>"; }; C9D6BB9718865A0200FF838D /* PLSAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PLSAppDelegate.m; sourceTree = "<group>"; }; C9D6BB9C18865A0300FF838D /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = "<group>"; }; C9D6BBA218865A0300FF838D /* PulseTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = PulseTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; C9D6BBA318865A0300FF838D /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; C9D6BBAA18865A0300FF838D /* PulseTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "PulseTests-Info.plist"; sourceTree = "<group>"; }; C9D6BBAC18865A0300FF838D /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = "<group>"; }; C9D6BBAE18865A0300FF838D /* PulseTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = PulseTests.m; sourceTree = "<group>"; }; C9D6BBB818865A2B00FF838D /* FileSystemWatcher.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FileSystemWatcher.h; sourceTree = "<group>"; }; C9D6BBB918865A2B00FF838D /* FileSystemWatcher.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = FileSystemWatcher.m; sourceTree = "<group>"; }; C9EAD486189E1E1A0012AD44 /* P4Connection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = P4Connection.h; sourceTree = "<group>"; }; C9EAD487189E1E1A0012AD44 /* P4Connection.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = P4Connection.m; sourceTree = "<group>"; }; C9EB2C0E188E4913007FDD4F /* PLSOverseer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PLSOverseer.h; sourceTree = "<group>"; }; C9EB2C0F188E4913007FDD4F /* PLSOverseer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PLSOverseer.m; sourceTree = "<group>"; }; C9F4220418D18E0000990B06 /* PLSFileEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PLSFileEvent.h; sourceTree = "<group>"; }; C9F4220518D18E0000990B06 /* PLSFileEvent.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = PLSFileEvent.m; sourceTree = "<group>"; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ C9D6BB7E18865A0200FF838D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( C9D6BB8518865A0200FF838D /* Cocoa.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; C9D6BB9F18865A0300FF838D /* Frameworks */ = { isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( C9D6BBA518865A0300FF838D /* Cocoa.framework in Frameworks */, C9D6BBA418865A0300FF838D /* XCTest.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ C90D3A10189A306200912393 /* Connections Window */ = { isa = PBXGroup; children = ( C959416318C59F0700DCD7E8 /* Connections.xib */, C959416518C59F2500DCD7E8 /* PLSConnectionController.h */, C959416618C59F2500DCD7E8 /* PLSConnectionController.m */, ); name = "Connections Window"; sourceTree = "<group>"; }; C91CC3C618B1DD09002E09A1 /* P4 */ = { isa = PBXGroup; children = ( C9EAD486189E1E1A0012AD44 /* P4Connection.h */, C9EAD487189E1E1A0012AD44 /* P4Connection.m */, C91CC3C718B1DD2C002E09A1 /* P4Message.h */, C91CC3C818B1DD2C002E09A1 /* P4Message.m */, ); name = P4; sourceTree = "<group>"; }; C934186418B71C09007E6FE5 /* Windows */ = { isa = PBXGroup; children = ( C90D3A10189A306200912393 /* Connections Window */, C968A02B18B5CA2300E0DED3 /* Login Window */, ); name = Windows; sourceTree = "<group>"; }; C968A02B18B5CA2300E0DED3 /* Login Window */ = { isa = PBXGroup; children = ( C968A03318B5CAF900E0DED3 /* PLSLoginController.h */, C968A03418B5CAF900E0DED3 /* PLSLoginController.m */, C968A03618B5CB0800E0DED3 /* Login.xib */, ); name = "Login Window"; sourceTree = "<group>"; }; C9D6BB7818865A0200FF838D = { isa = PBXGroup; children = ( C934186818BB198D007E6FE5 /* perforce_sad.png */, C934186518B72854007E6FE5 /* perforce_angry.png */, C9BE0C4E188BA1210042AC7B /* perforce.png */, C9D6BB8A18865A0200FF838D /* Pulse */, C9D6BBA818865A0300FF838D /* PulseTests */, C9D6BB8318865A0200FF838D /* Frameworks */, C9D6BB8218865A0200FF838D /* Products */, ); sourceTree = "<group>"; }; C9D6BB8218865A0200FF838D /* Products */ = { isa = PBXGroup; children = ( C9D6BB8118865A0200FF838D /* Pulse.app */, C9D6BBA218865A0300FF838D /* PulseTests.xctest */, ); name = Products; sourceTree = "<group>"; }; C9D6BB8318865A0200FF838D /* Frameworks */ = { isa = PBXGroup; children = ( C9D6BB8418865A0200FF838D /* Cocoa.framework */, C9D6BBA318865A0300FF838D /* XCTest.framework */, C9D6BB8618865A0200FF838D /* Other Frameworks */, ); name = Frameworks; sourceTree = "<group>"; }; C9D6BB8618865A0200FF838D /* Other Frameworks */ = { isa = PBXGroup; children = ( C9D6BB8718865A0200FF838D /* AppKit.framework */, C9D6BB8818865A0200FF838D /* CoreData.framework */, C9D6BB8918865A0200FF838D /* Foundation.framework */, ); name = "Other Frameworks"; sourceTree = "<group>"; }; C9D6BB8A18865A0200FF838D /* Pulse */ = { isa = PBXGroup; children = ( C934186418B71C09007E6FE5 /* Windows */, C91CC3C618B1DD09002E09A1 /* P4 */, C90EE50C189A2C03004DA5BA /* MainMenu.xib */, C9D6BB9618865A0200FF838D /* PLSAppDelegate.h */, C9D6BB9718865A0200FF838D /* PLSAppDelegate.m */, C9D6BBB818865A2B00FF838D /* FileSystemWatcher.h */, C9D6BBB918865A2B00FF838D /* FileSystemWatcher.m */, C9EB2C0E188E4913007FDD4F /* PLSOverseer.h */, C9EB2C0F188E4913007FDD4F /* PLSOverseer.m */, C9D6BB9C18865A0300FF838D /* Images.xcassets */, C9D6BB8B18865A0200FF838D /* Supporting Files */, C9F4220418D18E0000990B06 /* PLSFileEvent.h */, C9F4220518D18E0000990B06 /* PLSFileEvent.m */, ); path = Pulse; sourceTree = "<group>"; }; C9D6BB8B18865A0200FF838D /* Supporting Files */ = { isa = PBXGroup; children = ( C9D6BB8C18865A0200FF838D /* Pulse-Info.plist */, C9D6BB8D18865A0200FF838D /* InfoPlist.strings */, C9D6BB9018865A0200FF838D /* main.m */, C9D6BB9218865A0200FF838D /* Pulse-Prefix.pch */, C9D6BB9318865A0200FF838D /* Credits.rtf */, ); name = "Supporting Files"; sourceTree = "<group>"; }; C9D6BBA818865A0300FF838D /* PulseTests */ = { isa = PBXGroup; children = ( C9D6BBAE18865A0300FF838D /* PulseTests.m */, C9D6BBA918865A0300FF838D /* Supporting Files */, ); path = PulseTests; sourceTree = "<group>"; }; C9D6BBA918865A0300FF838D /* Supporting Files */ = { isa = PBXGroup; children = ( C9D6BBAA18865A0300FF838D /* PulseTests-Info.plist */, C9D6BBAB18865A0300FF838D /* InfoPlist.strings */, ); name = "Supporting Files"; sourceTree = "<group>"; }; /* End PBXGroup section */ /* Begin PBXNativeTarget section */ C9D6BB8018865A0200FF838D /* Pulse */ = { isa = PBXNativeTarget; buildConfigurationList = C9D6BBB218865A0300FF838D /* Build configuration list for PBXNativeTarget "Pulse" */; buildPhases = ( C9D6BB7D18865A0200FF838D /* Sources */, C9D6BB7E18865A0200FF838D /* Frameworks */, C9D6BB7F18865A0200FF838D /* Resources */, ); buildRules = ( ); dependencies = ( ); name = Pulse; productName = Pulse; productReference = C9D6BB8118865A0200FF838D /* Pulse.app */; productType = "com.apple.product-type.application"; }; C9D6BBA118865A0300FF838D /* PulseTests */ = { isa = PBXNativeTarget; buildConfigurationList = C9D6BBB518865A0300FF838D /* Build configuration list for PBXNativeTarget "PulseTests" */; buildPhases = ( C9D6BB9E18865A0300FF838D /* Sources */, C9D6BB9F18865A0300FF838D /* Frameworks */, C9D6BBA018865A0300FF838D /* Resources */, ); buildRules = ( ); dependencies = ( C9D6BBA718865A0300FF838D /* PBXTargetDependency */, ); name = PulseTests; productName = PulseTests; productReference = C9D6BBA218865A0300FF838D /* PulseTests.xctest */; productType = "com.apple.product-type.bundle.unit-test"; }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ C9D6BB7918865A0200FF838D /* Project object */ = { isa = PBXProject; attributes = { CLASSPREFIX = PLS; LastUpgradeCheck = 0500; ORGANIZATIONNAME = "Zen of the Monkey"; TargetAttributes = { C9D6BBA118865A0300FF838D = { TestTargetID = C9D6BB8018865A0200FF838D; }; }; }; buildConfigurationList = C9D6BB7C18865A0200FF838D /* Build configuration list for PBXProject "Pulse" */; compatibilityVersion = "Xcode 3.2"; developmentRegion = English; hasScannedForEncodings = 0; knownRegions = ( en, Base, ); mainGroup = C9D6BB7818865A0200FF838D; productRefGroup = C9D6BB8218865A0200FF838D /* Products */; projectDirPath = ""; projectRoot = ""; targets = ( C9D6BB8018865A0200FF838D /* Pulse */, C9D6BBA118865A0300FF838D /* PulseTests */, ); }; /* End PBXProject section */ /* Begin PBXResourcesBuildPhase section */ C9D6BB7F18865A0200FF838D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( C959416418C59F0700DCD7E8 /* Connections.xib in Resources */, C9D6BB8F18865A0200FF838D /* InfoPlist.strings in Resources */, C9D6BB9D18865A0300FF838D /* Images.xcassets in Resources */, C934186918BB198D007E6FE5 /* perforce_sad.png in Resources */, C9BE0C4F188BA1210042AC7B /* perforce.png in Resources */, C934186618B72854007E6FE5 /* perforce_angry.png in Resources */, C9D6BB9518865A0200FF838D /* Credits.rtf in Resources */, C90EE50D189A2C03004DA5BA /* MainMenu.xib in Resources */, C968A03718B5CB0800E0DED3 /* Login.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; C9D6BBA018865A0300FF838D /* Resources */ = { isa = PBXResourcesBuildPhase; buildActionMask = 2147483647; files = ( C9D6BBAD18865A0300FF838D /* InfoPlist.strings in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXResourcesBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ C9D6BB7D18865A0200FF838D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( C9F4220618D18E0000990B06 /* PLSFileEvent.m in Sources */, C9D6BB9818865A0200FF838D /* PLSAppDelegate.m in Sources */, C91CC3C918B1DD2C002E09A1 /* P4Message.m in Sources */, C959416718C59F2500DCD7E8 /* PLSConnectionController.m in Sources */, C968A03518B5CAF900E0DED3 /* PLSLoginController.m in Sources */, C9D6BBBA18865A2B00FF838D /* FileSystemWatcher.m in Sources */, C9EAD488189E1E1A0012AD44 /* P4Connection.m in Sources */, C9EB2C10188E4913007FDD4F /* PLSOverseer.m in Sources */, C9D6BB9118865A0200FF838D /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; C9D6BB9E18865A0300FF838D /* Sources */ = { isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( C9D6BBAF18865A0300FF838D /* PulseTests.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ C9D6BBA718865A0300FF838D /* PBXTargetDependency */ = { isa = PBXTargetDependency; target = C9D6BB8018865A0200FF838D /* Pulse */; targetProxy = C9D6BBA618865A0300FF838D /* PBXContainerItemProxy */; }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ C9D6BB8D18865A0200FF838D /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( C9D6BB8E18865A0200FF838D /* en */, ); name = InfoPlist.strings; sourceTree = "<group>"; }; C9D6BB9318865A0200FF838D /* Credits.rtf */ = { isa = PBXVariantGroup; children = ( C9D6BB9418865A0200FF838D /* en */, ); name = Credits.rtf; sourceTree = "<group>"; }; C9D6BBAB18865A0300FF838D /* InfoPlist.strings */ = { isa = PBXVariantGroup; children = ( C9D6BBAC18865A0300FF838D /* en */, ); name = InfoPlist.strings; sourceTree = "<group>"; }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ C9D6BBB018865A0300FF838D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = 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_ERROR; 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; }; name = Debug; }; C9D6BBB118865A0300FF838D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_OBJC_ARC = YES; CLANG_WARN_BOOL_CONVERSION = YES; CLANG_WARN_CONSTANT_CONVERSION = YES; CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; CLANG_WARN_EMPTY_BODY = YES; CLANG_WARN_ENUM_CONVERSION = YES; CLANG_WARN_INT_CONVERSION = YES; CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; ENABLE_NS_ASSERTIONS = NO; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 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; }; name = Release; }; C9D6BBB318865A0300FF838D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Pulse/Pulse-Prefix.pch"; INFOPLIST_FILE = "Pulse/Pulse-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Debug; }; C9D6BBB418865A0300FF838D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; COMBINE_HIDPI_IMAGES = YES; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Pulse/Pulse-Prefix.pch"; INFOPLIST_FILE = "Pulse/Pulse-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; }; name = Release; }; C9D6BBB618865A0300FF838D /* Debug */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Pulse.app/Contents/MacOS/Pulse"; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Pulse/Pulse-Prefix.pch"; GCC_PREPROCESSOR_DEFINITIONS = ( "DEBUG=1", "$(inherited)", ); INFOPLIST_FILE = "PulseTests/PulseTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; }; name = Debug; }; C9D6BBB718865A0300FF838D /* Release */ = { isa = XCBuildConfiguration; buildSettings = { BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Pulse.app/Contents/MacOS/Pulse"; COMBINE_HIDPI_IMAGES = YES; FRAMEWORK_SEARCH_PATHS = ( "$(DEVELOPER_FRAMEWORKS_DIR)", "$(inherited)", ); GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Pulse/Pulse-Prefix.pch"; INFOPLIST_FILE = "PulseTests/PulseTests-Info.plist"; PRODUCT_NAME = "$(TARGET_NAME)"; TEST_HOST = "$(BUNDLE_LOADER)"; WRAPPER_EXTENSION = xctest; }; name = Release; }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ C9D6BB7C18865A0200FF838D /* Build configuration list for PBXProject "Pulse" */ = { isa = XCConfigurationList; buildConfigurations = ( C9D6BBB018865A0300FF838D /* Debug */, C9D6BBB118865A0300FF838D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C9D6BBB218865A0300FF838D /* Build configuration list for PBXNativeTarget "Pulse" */ = { isa = XCConfigurationList; buildConfigurations = ( C9D6BBB318865A0300FF838D /* Debug */, C9D6BBB418865A0300FF838D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; C9D6BBB518865A0300FF838D /* Build configuration list for PBXNativeTarget "PulseTests" */ = { isa = XCConfigurationList; buildConfigurations = ( C9D6BBB618865A0300FF838D /* Debug */, C9D6BBB718865A0300FF838D /* Release */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; /* End XCConfigurationList section */ }; rootObject = C9D6BB7918865A0200FF838D /* Project object */; }
# | Change | User | Description | Committed | |
---|---|---|---|---|---|
#12 | 8706 | Matt Attaway |
Infrastructure work to more intelligently handle FSEvents Prior to this change all file system events were equal; chown-ing a file was considered the same as changing the content. With this change we: 1) bundle all of the file events into one operation instead or doing it one file at a time 2) ignore any file events that are not create/delete/modify/rename The interfaces are all in place, but the Overseers are still not taking advantage of this information, so there’s no user visible change at this time. (hopefully) Infrastructure only change |
||
#11 | 8686 | Matt Attaway |
Swap in new connection dialog There’s still a fair amount of polish to do, but it’s good enough to replace the old connection dialog. User visible change |
||
#10 | 8684 | Matt Attaway |
First steps on the new connection dialog At this point it’s effectively a read only dialog. Changes made in the text fields are currently ignored. It does look much nicer though. To view it use the appropriately named ‘??????’ menu entry. User visible change |
||
#9 | 8595 | Matt Attaway |
WIP on handling connection errors With this change we report the errors to our delegate, but we don’t attempt to recover. That will come with the next checkin. This change does add in the protocol for handling these errors. User visible change |
||
#8 | 8592 | Matt Attaway |
Add less aggressive notification when background processes detect need to login Instead of popping a dialog up right in your face we use a standard notification and change the status icon to indicate Pulse is unhappy. Using the login menu item will log the user is and restart the background processes. User visible change. |
||
#7 | 8590 | Matt Attaway |
Add crude login capabilities This is the first step toward getting the login behavior I want. Right now anytime a Peforce command gets a login error the Overseer ion charge notifies its delegate, which is currently the AppDelegate. The AppDelegate then kicks off the requisite login dialog which gets the password and does the login. There’s no error handling or feedback and the dialog pops up even when it is a background process that hit the error. The next step is to implement the Login menu item and the ‘need login’ tool tip and status icon. User visible (and possibly user annoying) change |
||
#6 | 8569 | Matt Attaway |
Rejigger P4Connection to use a standard return type The previous mechanism made it hard to return anything but error messages. With the P4Message object we can return dictionaries, lists, and messages with a single object. I can use the new object more intelligently, but that’s for another change. I also reorganized the code to separate the ‘p4’ layer off into its own potentially reusable bucket. No functional change. |
||
#5 | 8525 | Matt Attaway |
Refactor the Perforce interaction out of the Overseer into a separate class No functional change, hopefully. This should just simplify the Overseer code and set me up to have a proper place to run Perforce commands. |
||
#4 | 8519 | Matt Attaway |
Finally add a connections dialog to manage connections It’s taken a week to figure out how to manage windows and tabelviews, but this change adds a crude connection dialog to add and remove connections as well as save them out to the preferences file. More to do to make it more sane, but it works for now! |
||
#3 | 8506 | Matt Attaway |
Pull model out of controller; disable dock icon No functional change, but the code is moderately more sane. This change introduces an Overseer object that is responsible for maintaining one path/Port/User/Client combination. All of the delegation responsibilities move to the Overseer, as does FileSystemWatcher configuration. Overall this just sets me up to actually monitor multiple paths. |
||
#2 | 8504 | Matt Attaway |
Add all the APIs!!! This adds in a status bar icon with a pointless menu as well as needless notifications when a file changes in the watched path. While essentially useless, I think I’ve found the APIs for all the major pieces. Now I just need to make them do something useful… |
||
#1 | 8502 | Matt Attaway |
Initial checkin of Pulse, a lightweight Perforce client for the Mac This is a sketch of what a Perforce client inspired by the UX of cloud synchronization software would look like. I’m not trying to build something production worthy yet; at this point I’m just trying to get something up and running as fast as possible so I can play with the UX. At this point I can monitor a directory and kick off ‘p4 info’ calls anytime a file changes. It is the polar opposite of useful. Do note I’ve never written code in Objective-C before. Here be ugly, malformed dragons. |