diff --git a/.gitignore b/.gitignore index 7956dee..a96f3fe 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,9 @@ .bundle .monitor node_modules + +Tractor/build/* +*.pbxuser +*.mode1v3 +xcuserdata +project.xcworkspace/ diff --git a/Tractor/Tractor.xcodeproj/project.pbxproj b/Tractor/Tractor.xcodeproj/project.pbxproj new file mode 100644 index 0000000..651c016 --- /dev/null +++ b/Tractor/Tractor.xcodeproj/project.pbxproj @@ -0,0 +1,470 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + F2A0B49C14207CA000F07F32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2A0B49B14207CA000F07F32 /* Cocoa.framework */; }; + F2A0B4A614207CA000F07F32 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F2A0B4A414207CA000F07F32 /* InfoPlist.strings */; }; + F2A0B4A814207CA000F07F32 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = F2A0B4A714207CA000F07F32 /* main.m */; }; + F2A0B4AC14207CA000F07F32 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = F2A0B4AA14207CA000F07F32 /* Credits.rtf */; }; + F2A0B4AF14207CA000F07F32 /* TractorAppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = F2A0B4AE14207CA000F07F32 /* TractorAppDelegate.m */; }; + F2A0B4B214207CA000F07F32 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = F2A0B4B014207CA000F07F32 /* MainMenu.xib */; }; + F2A0B4B514207CA000F07F32 /* Tractor.xcdatamodeld in Sources */ = {isa = PBXBuildFile; fileRef = F2A0B4B314207CA000F07F32 /* Tractor.xcdatamodeld */; }; + F2A0B4BD14207CA000F07F32 /* SenTestingKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2A0B4BC14207CA000F07F32 /* SenTestingKit.framework */; }; + F2A0B4BE14207CA000F07F32 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F2A0B49B14207CA000F07F32 /* Cocoa.framework */; }; + F2A0B4C614207CA000F07F32 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = F2A0B4C414207CA000F07F32 /* InfoPlist.strings */; }; + F2A0B4C814207CA000F07F32 /* TractorTests.h in Resources */ = {isa = PBXBuildFile; fileRef = F2A0B4C714207CA000F07F32 /* TractorTests.h */; }; + F2A0B4CA14207CA000F07F32 /* TractorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = F2A0B4C914207CA000F07F32 /* TractorTests.m */; }; + F2A0B4D41420845200F07F32 /* tractor.tiff in Resources */ = {isa = PBXBuildFile; fileRef = F2A0B4D31420845200F07F32 /* tractor.tiff */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + F2A0B4BF14207CA000F07F32 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = F2A0B48E14207CA000F07F32 /* Project object */; + proxyType = 1; + remoteGlobalIDString = F2A0B49614207CA000F07F32; + remoteInfo = Tractor; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXFileReference section */ + F2A0B49714207CA000F07F32 /* Tractor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Tractor.app; sourceTree = BUILT_PRODUCTS_DIR; }; + F2A0B49B14207CA000F07F32 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; + F2A0B49E14207CA000F07F32 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; + F2A0B49F14207CA000F07F32 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; + F2A0B4A014207CA000F07F32 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; + F2A0B4A314207CA000F07F32 /* Tractor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "Tractor-Info.plist"; sourceTree = ""; }; + F2A0B4A514207CA000F07F32 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + F2A0B4A714207CA000F07F32 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; + F2A0B4A914207CA000F07F32 /* Tractor-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Tractor-Prefix.pch"; sourceTree = ""; }; + F2A0B4AB14207CA000F07F32 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; + F2A0B4AD14207CA000F07F32 /* TractorAppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TractorAppDelegate.h; sourceTree = ""; }; + F2A0B4AE14207CA000F07F32 /* TractorAppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TractorAppDelegate.m; sourceTree = ""; }; + F2A0B4B114207CA000F07F32 /* en */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = en; path = en.lproj/MainMenu.xib; sourceTree = ""; }; + F2A0B4B414207CA000F07F32 /* Tractor.xcdatamodel */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcdatamodel; path = Tractor.xcdatamodel; sourceTree = ""; }; + F2A0B4BB14207CA000F07F32 /* TractorTests.octest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = TractorTests.octest; sourceTree = BUILT_PRODUCTS_DIR; }; + F2A0B4BC14207CA000F07F32 /* SenTestingKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SenTestingKit.framework; path = Library/Frameworks/SenTestingKit.framework; sourceTree = DEVELOPER_DIR; }; + F2A0B4C314207CA000F07F32 /* TractorTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "TractorTests-Info.plist"; sourceTree = ""; }; + F2A0B4C514207CA000F07F32 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; + F2A0B4C714207CA000F07F32 /* TractorTests.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = TractorTests.h; sourceTree = ""; }; + F2A0B4C914207CA000F07F32 /* TractorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = TractorTests.m; sourceTree = ""; }; + F2A0B4D31420845200F07F32 /* tractor.tiff */ = {isa = PBXFileReference; lastKnownFileType = image.tiff; path = tractor.tiff; sourceTree = ""; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + F2A0B49414207CA000F07F32 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A0B49C14207CA000F07F32 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F2A0B4B714207CA000F07F32 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A0B4BD14207CA000F07F32 /* SenTestingKit.framework in Frameworks */, + F2A0B4BE14207CA000F07F32 /* Cocoa.framework in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + F2A0B48C14207CA000F07F32 = { + isa = PBXGroup; + children = ( + F2A0B4A114207CA000F07F32 /* Tractor */, + F2A0B4C114207CA000F07F32 /* TractorTests */, + F2A0B49A14207CA000F07F32 /* Frameworks */, + F2A0B49814207CA000F07F32 /* Products */, + ); + sourceTree = ""; + }; + F2A0B49814207CA000F07F32 /* Products */ = { + isa = PBXGroup; + children = ( + F2A0B49714207CA000F07F32 /* Tractor.app */, + F2A0B4BB14207CA000F07F32 /* TractorTests.octest */, + ); + name = Products; + sourceTree = ""; + }; + F2A0B49A14207CA000F07F32 /* Frameworks */ = { + isa = PBXGroup; + children = ( + F2A0B49B14207CA000F07F32 /* Cocoa.framework */, + F2A0B4BC14207CA000F07F32 /* SenTestingKit.framework */, + F2A0B49D14207CA000F07F32 /* Other Frameworks */, + ); + name = Frameworks; + sourceTree = ""; + }; + F2A0B49D14207CA000F07F32 /* Other Frameworks */ = { + isa = PBXGroup; + children = ( + F2A0B49E14207CA000F07F32 /* AppKit.framework */, + F2A0B49F14207CA000F07F32 /* CoreData.framework */, + F2A0B4A014207CA000F07F32 /* Foundation.framework */, + ); + name = "Other Frameworks"; + sourceTree = ""; + }; + F2A0B4A114207CA000F07F32 /* Tractor */ = { + isa = PBXGroup; + children = ( + F2A0B4AD14207CA000F07F32 /* TractorAppDelegate.h */, + F2A0B4AE14207CA000F07F32 /* TractorAppDelegate.m */, + F2A0B4D31420845200F07F32 /* tractor.tiff */, + F2A0B4B014207CA000F07F32 /* MainMenu.xib */, + F2A0B4B314207CA000F07F32 /* Tractor.xcdatamodeld */, + F2A0B4A214207CA000F07F32 /* Supporting Files */, + ); + path = Tractor; + sourceTree = ""; + }; + F2A0B4A214207CA000F07F32 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F2A0B4A314207CA000F07F32 /* Tractor-Info.plist */, + F2A0B4A414207CA000F07F32 /* InfoPlist.strings */, + F2A0B4A714207CA000F07F32 /* main.m */, + F2A0B4A914207CA000F07F32 /* Tractor-Prefix.pch */, + F2A0B4AA14207CA000F07F32 /* Credits.rtf */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; + F2A0B4C114207CA000F07F32 /* TractorTests */ = { + isa = PBXGroup; + children = ( + F2A0B4C714207CA000F07F32 /* TractorTests.h */, + F2A0B4C914207CA000F07F32 /* TractorTests.m */, + F2A0B4C214207CA000F07F32 /* Supporting Files */, + ); + path = TractorTests; + sourceTree = ""; + }; + F2A0B4C214207CA000F07F32 /* Supporting Files */ = { + isa = PBXGroup; + children = ( + F2A0B4C314207CA000F07F32 /* TractorTests-Info.plist */, + F2A0B4C414207CA000F07F32 /* InfoPlist.strings */, + ); + name = "Supporting Files"; + sourceTree = ""; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + F2A0B49614207CA000F07F32 /* Tractor */ = { + isa = PBXNativeTarget; + buildConfigurationList = F2A0B4CD14207CA000F07F32 /* Build configuration list for PBXNativeTarget "Tractor" */; + buildPhases = ( + F2A0B49314207CA000F07F32 /* Sources */, + F2A0B49414207CA000F07F32 /* Frameworks */, + F2A0B49514207CA000F07F32 /* Resources */, + ); + buildRules = ( + ); + dependencies = ( + ); + name = Tractor; + productName = Tractor; + productReference = F2A0B49714207CA000F07F32 /* Tractor.app */; + productType = "com.apple.product-type.application"; + }; + F2A0B4BA14207CA000F07F32 /* TractorTests */ = { + isa = PBXNativeTarget; + buildConfigurationList = F2A0B4D014207CA000F07F32 /* Build configuration list for PBXNativeTarget "TractorTests" */; + buildPhases = ( + F2A0B4B614207CA000F07F32 /* Sources */, + F2A0B4B714207CA000F07F32 /* Frameworks */, + F2A0B4B814207CA000F07F32 /* Resources */, + F2A0B4B914207CA000F07F32 /* ShellScript */, + ); + buildRules = ( + ); + dependencies = ( + F2A0B4C014207CA000F07F32 /* PBXTargetDependency */, + ); + name = TractorTests; + productName = TractorTests; + productReference = F2A0B4BB14207CA000F07F32 /* TractorTests.octest */; + productType = "com.apple.product-type.bundle"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + F2A0B48E14207CA000F07F32 /* Project object */ = { + isa = PBXProject; + buildConfigurationList = F2A0B49114207CA000F07F32 /* Build configuration list for PBXProject "Tractor" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + en, + ); + mainGroup = F2A0B48C14207CA000F07F32; + productRefGroup = F2A0B49814207CA000F07F32 /* Products */; + projectDirPath = ""; + projectRoot = ""; + targets = ( + F2A0B49614207CA000F07F32 /* Tractor */, + F2A0B4BA14207CA000F07F32 /* TractorTests */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXResourcesBuildPhase section */ + F2A0B49514207CA000F07F32 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A0B4A614207CA000F07F32 /* InfoPlist.strings in Resources */, + F2A0B4AC14207CA000F07F32 /* Credits.rtf in Resources */, + F2A0B4B214207CA000F07F32 /* MainMenu.xib in Resources */, + F2A0B4D41420845200F07F32 /* tractor.tiff in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F2A0B4B814207CA000F07F32 /* Resources */ = { + isa = PBXResourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A0B4C614207CA000F07F32 /* InfoPlist.strings in Resources */, + F2A0B4C814207CA000F07F32 /* TractorTests.h in Resources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXResourcesBuildPhase section */ + +/* Begin PBXShellScriptBuildPhase section */ + F2A0B4B914207CA000F07F32 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "# Run the unit tests in this test bundle.\n\"${SYSTEM_DEVELOPER_DIR}/Tools/RunUnitTests\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + F2A0B49314207CA000F07F32 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A0B4A814207CA000F07F32 /* main.m in Sources */, + F2A0B4AF14207CA000F07F32 /* TractorAppDelegate.m in Sources */, + F2A0B4B514207CA000F07F32 /* Tractor.xcdatamodeld in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; + F2A0B4B614207CA000F07F32 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + F2A0B4CA14207CA000F07F32 /* TractorTests.m in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + F2A0B4C014207CA000F07F32 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + target = F2A0B49614207CA000F07F32 /* Tractor */; + targetProxy = F2A0B4BF14207CA000F07F32 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin PBXVariantGroup section */ + F2A0B4A414207CA000F07F32 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + F2A0B4A514207CA000F07F32 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; + F2A0B4AA14207CA000F07F32 /* Credits.rtf */ = { + isa = PBXVariantGroup; + children = ( + F2A0B4AB14207CA000F07F32 /* en */, + ); + name = Credits.rtf; + sourceTree = ""; + }; + F2A0B4B014207CA000F07F32 /* MainMenu.xib */ = { + isa = PBXVariantGroup; + children = ( + F2A0B4B114207CA000F07F32 /* en */, + ); + name = MainMenu.xib; + sourceTree = ""; + }; + F2A0B4C414207CA000F07F32 /* InfoPlist.strings */ = { + isa = PBXVariantGroup; + children = ( + F2A0B4C514207CA000F07F32 /* en */, + ); + name = InfoPlist.strings; + sourceTree = ""; + }; +/* End PBXVariantGroup section */ + +/* Begin XCBuildConfiguration section */ + F2A0B4CB14207CA000F07F32 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + 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_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + }; + name = Debug; + }; + F2A0B4CC14207CA000F07F32 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + ARCHS = "$(ARCHS_STANDARD_64_BIT)"; + COPY_PHASE_STRIP = YES; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + GCC_C_LANGUAGE_STANDARD = gnu99; + GCC_ENABLE_OBJC_EXCEPTIONS = YES; + GCC_VERSION = com.apple.compilers.llvm.clang.1_0; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_MISSING_PROTOTYPES = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 10.6; + SDKROOT = macosx; + }; + name = Release; + }; + F2A0B4CE14207CA000F07F32 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tractor/Tractor-Prefix.pch"; + INFOPLIST_FILE = "Tractor/Tractor-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + F2A0B4CF14207CA000F07F32 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tractor/Tractor-Prefix.pch"; + INFOPLIST_FILE = "Tractor/Tractor-Info.plist"; + MACOSX_DEPLOYMENT_TARGET = 10.6; + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + }; + name = Release; + }; + F2A0B4D114207CA000F07F32 /* Debug */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Tractor.app/Contents/MacOS/Tractor"; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tractor/Tractor-Prefix.pch"; + INFOPLIST_FILE = "TractorTests/TractorTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Debug; + }; + F2A0B4D214207CA000F07F32 /* Release */ = { + isa = XCBuildConfiguration; + buildSettings = { + BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/Tractor.app/Contents/MacOS/Tractor"; + FRAMEWORK_SEARCH_PATHS = "$(DEVELOPER_LIBRARY_DIR)/Frameworks"; + GCC_PRECOMPILE_PREFIX_HEADER = YES; + GCC_PREFIX_HEADER = "Tractor/Tractor-Prefix.pch"; + INFOPLIST_FILE = "TractorTests/TractorTests-Info.plist"; + PRODUCT_NAME = "$(TARGET_NAME)"; + TEST_HOST = "$(BUNDLE_LOADER)"; + WRAPPER_EXTENSION = octest; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + F2A0B49114207CA000F07F32 /* Build configuration list for PBXProject "Tractor" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F2A0B4CB14207CA000F07F32 /* Debug */, + F2A0B4CC14207CA000F07F32 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + F2A0B4CD14207CA000F07F32 /* Build configuration list for PBXNativeTarget "Tractor" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F2A0B4CE14207CA000F07F32 /* Debug */, + F2A0B4CF14207CA000F07F32 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; + F2A0B4D014207CA000F07F32 /* Build configuration list for PBXNativeTarget "TractorTests" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + F2A0B4D114207CA000F07F32 /* Debug */, + F2A0B4D214207CA000F07F32 /* Release */, + ); + defaultConfigurationIsVisible = 0; + }; +/* End XCConfigurationList section */ + +/* Begin XCVersionGroup section */ + F2A0B4B314207CA000F07F32 /* Tractor.xcdatamodeld */ = { + isa = XCVersionGroup; + children = ( + F2A0B4B414207CA000F07F32 /* Tractor.xcdatamodel */, + ); + currentVersion = F2A0B4B414207CA000F07F32 /* Tractor.xcdatamodel */; + path = Tractor.xcdatamodeld; + sourceTree = ""; + versionGroupType = wrapper.xcdatamodel; + }; +/* End XCVersionGroup section */ + }; + rootObject = F2A0B48E14207CA000F07F32 /* Project object */; +} diff --git a/Tractor/Tractor/Tractor-Info.plist b/Tractor/Tractor/Tractor-Info.plist new file mode 100644 index 0000000..da1bfdb --- /dev/null +++ b/Tractor/Tractor/Tractor-Info.plist @@ -0,0 +1,38 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIconFile + + CFBundleIdentifier + com.fortnightlabs.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + ${PRODUCT_NAME} + CFBundlePackageType + APPL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + LSApplicationCategoryType + public.app-category.productivity + LSMinimumSystemVersion + ${MACOSX_DEPLOYMENT_TARGET} + NSHumanReadableCopyright + Copyright © 2011 Fortnight Labs. All rights reserved. + NSMainNibFile + MainMenu + NSPrincipalClass + NSApplication + LSUIElement + + + diff --git a/Tractor/Tractor/Tractor-Prefix.pch b/Tractor/Tractor/Tractor-Prefix.pch new file mode 100644 index 0000000..9a560c1 --- /dev/null +++ b/Tractor/Tractor/Tractor-Prefix.pch @@ -0,0 +1,7 @@ +// +// Prefix header for all source files of the 'Tractor' target in the 'Tractor' project +// + +#ifdef __OBJC__ + #import +#endif diff --git a/Tractor/Tractor/Tractor.xcdatamodeld/.xccurrentversion b/Tractor/Tractor/Tractor.xcdatamodeld/.xccurrentversion new file mode 100644 index 0000000..dbd1af0 --- /dev/null +++ b/Tractor/Tractor/Tractor.xcdatamodeld/.xccurrentversion @@ -0,0 +1,8 @@ + + + + + _XCCurrentVersionName + Tractor.xcdatamodel + + diff --git a/Tractor/Tractor/Tractor.xcdatamodeld/Tractor.xcdatamodel/contents b/Tractor/Tractor/Tractor.xcdatamodeld/Tractor.xcdatamodel/contents new file mode 100644 index 0000000..fd3d23f --- /dev/null +++ b/Tractor/Tractor/Tractor.xcdatamodeld/Tractor.xcdatamodel/contents @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Tractor/Tractor/TractorAppDelegate.h b/Tractor/Tractor/TractorAppDelegate.h new file mode 100644 index 0000000..3d5561d --- /dev/null +++ b/Tractor/Tractor/TractorAppDelegate.h @@ -0,0 +1,20 @@ +#import + +@interface TractorAppDelegate : NSObject { + NSStatusItem *statusItem; + IBOutlet NSMenu *statusMenu; + NSWindow *window; + NSPersistentStoreCoordinator *__persistentStoreCoordinator; + NSManagedObjectModel *__managedObjectModel; + NSManagedObjectContext *__managedObjectContext; +} + +@property (assign) IBOutlet NSWindow *window; + +@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator; +@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel; +@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext; + +- (IBAction)saveAction:(id)sender; + +@end diff --git a/Tractor/Tractor/TractorAppDelegate.m b/Tractor/Tractor/TractorAppDelegate.m new file mode 100644 index 0000000..4ff4e3e --- /dev/null +++ b/Tractor/Tractor/TractorAppDelegate.m @@ -0,0 +1,195 @@ +#import "TractorAppDelegate.h" + +@implementation TractorAppDelegate + +@synthesize window; + +- (void)applicationDidFinishLaunching:(NSNotification *)aNotification +{ + statusItem = [[[NSStatusBar systemStatusBar] statusItemWithLength:NSSquareStatusItemLength] retain]; + [statusItem setImage:[NSImage imageNamed:@"tractor.tiff"]]; + [statusItem setMenu:statusMenu]; + [statusItem setHighlightMode:YES]; +} + +/** + Returns the directory the application uses to store the Core Data store file. This code uses a directory named "Tractor" in the user's Library directory. + */ +- (NSURL *)applicationFilesDirectory { + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSURL *libraryURL = [[fileManager URLsForDirectory:NSLibraryDirectory inDomains:NSUserDomainMask] lastObject]; + return [libraryURL URLByAppendingPathComponent:@"Tractor"]; +} + +/** + Creates if necessary and returns the managed object model for the application. + */ +- (NSManagedObjectModel *)managedObjectModel { + if (__managedObjectModel) { + return __managedObjectModel; + } + + NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Tractor" withExtension:@"momd"]; + __managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; + return __managedObjectModel; +} + +/** + Returns the persistent store coordinator for the application. This implementation creates and return a coordinator, having added the store for the application to it. (The directory for the store is created, if necessary.) + */ +- (NSPersistentStoreCoordinator *)persistentStoreCoordinator { + if (__persistentStoreCoordinator) { + return __persistentStoreCoordinator; + } + + NSManagedObjectModel *mom = [self managedObjectModel]; + if (!mom) { + NSLog(@"%@:%@ No model to generate a store from", [self class], NSStringFromSelector(_cmd)); + return nil; + } + + NSFileManager *fileManager = [NSFileManager defaultManager]; + NSURL *applicationFilesDirectory = [self applicationFilesDirectory]; + NSError *error = nil; + + NSDictionary *properties = [applicationFilesDirectory resourceValuesForKeys:[NSArray arrayWithObject:NSURLIsDirectoryKey] error:&error]; + + if (!properties) { + BOOL ok = NO; + if ([error code] == NSFileReadNoSuchFileError) { + ok = [fileManager createDirectoryAtPath:[applicationFilesDirectory path] withIntermediateDirectories:YES attributes:nil error:&error]; + } + if (!ok) { + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + } + else { + if ([[properties objectForKey:NSURLIsDirectoryKey] boolValue] != YES) { + // Customize and localize this error. + NSString *failureDescription = [NSString stringWithFormat:@"Expected a folder to store application data, found a file (%@).", [applicationFilesDirectory path]]; + + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:failureDescription forKey:NSLocalizedDescriptionKey]; + error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:101 userInfo:dict]; + + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + } + + NSURL *url = [applicationFilesDirectory URLByAppendingPathComponent:@"Tractor.storedata"]; + __persistentStoreCoordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:mom]; + if (![__persistentStoreCoordinator addPersistentStoreWithType:NSXMLStoreType configuration:nil URL:url options:nil error:&error]) { + [[NSApplication sharedApplication] presentError:error]; + [__persistentStoreCoordinator release], __persistentStoreCoordinator = nil; + return nil; + } + + return __persistentStoreCoordinator; +} + +/** + Returns the managed object context for the application (which is already + bound to the persistent store coordinator for the application.) + */ +- (NSManagedObjectContext *)managedObjectContext { + if (__managedObjectContext) { + return __managedObjectContext; + } + + NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator]; + if (!coordinator) { + NSMutableDictionary *dict = [NSMutableDictionary dictionary]; + [dict setValue:@"Failed to initialize the store" forKey:NSLocalizedDescriptionKey]; + [dict setValue:@"There was an error building up the data file." forKey:NSLocalizedFailureReasonErrorKey]; + NSError *error = [NSError errorWithDomain:@"YOUR_ERROR_DOMAIN" code:9999 userInfo:dict]; + [[NSApplication sharedApplication] presentError:error]; + return nil; + } + __managedObjectContext = [[NSManagedObjectContext alloc] init]; + [__managedObjectContext setPersistentStoreCoordinator:coordinator]; + + return __managedObjectContext; +} + +/** + Returns the NSUndoManager for the application. In this case, the manager returned is that of the managed object context for the application. + */ +- (NSUndoManager *)windowWillReturnUndoManager:(NSWindow *)window { + return [[self managedObjectContext] undoManager]; +} + +/** + Performs the save action for the application, which is to send the save: message to the application's managed object context. Any encountered errors are presented to the user. + */ +- (IBAction)saveAction:(id)sender { + NSError *error = nil; + + if (![[self managedObjectContext] commitEditing]) { + NSLog(@"%@:%@ unable to commit editing before saving", [self class], NSStringFromSelector(_cmd)); + } + + if (![[self managedObjectContext] save:&error]) { + [[NSApplication sharedApplication] presentError:error]; + } +} + +- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender { + + // Save changes in the application's managed object context before the application terminates. + + if (!__managedObjectContext) { + return NSTerminateNow; + } + + if (![[self managedObjectContext] commitEditing]) { + NSLog(@"%@:%@ unable to commit editing to terminate", [self class], NSStringFromSelector(_cmd)); + return NSTerminateCancel; + } + + if (![[self managedObjectContext] hasChanges]) { + return NSTerminateNow; + } + + NSError *error = nil; + if (![[self managedObjectContext] save:&error]) { + + // Customize this code block to include application-specific recovery steps. + BOOL result = [sender presentError:error]; + if (result) { + return NSTerminateCancel; + } + + NSString *question = NSLocalizedString(@"Could not save changes while quitting. Quit anyway?", @"Quit without saves error question message"); + NSString *info = NSLocalizedString(@"Quitting now will lose any changes you have made since the last successful save", @"Quit without saves error question info"); + NSString *quitButton = NSLocalizedString(@"Quit anyway", @"Quit anyway button title"); + NSString *cancelButton = NSLocalizedString(@"Cancel", @"Cancel button title"); + NSAlert *alert = [[NSAlert alloc] init]; + [alert setMessageText:question]; + [alert setInformativeText:info]; + [alert addButtonWithTitle:quitButton]; + [alert addButtonWithTitle:cancelButton]; + + NSInteger answer = [alert runModal]; + [alert release]; + alert = nil; + + if (answer == NSAlertAlternateReturn) { + return NSTerminateCancel; + } + } + + return NSTerminateNow; +} + +- (void)dealloc +{ + [__managedObjectContext release]; + [__persistentStoreCoordinator release]; + [__managedObjectModel release]; + [super dealloc]; +} + +@end diff --git a/Tractor/Tractor/en.lproj/Credits.rtf b/Tractor/Tractor/en.lproj/Credits.rtf new file mode 100644 index 0000000..46576ef --- /dev/null +++ b/Tractor/Tractor/en.lproj/Credits.rtf @@ -0,0 +1,29 @@ +{\rtf0\ansi{\fonttbl\f0\fswiss Helvetica;} +{\colortbl;\red255\green255\blue255;} +\paperw9840\paperh8400 +\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\ql\qnatural + +\f0\b\fs24 \cf0 Engineering: +\b0 \ + Some people\ +\ + +\b Human Interface Design: +\b0 \ + Some other people\ +\ + +\b Testing: +\b0 \ + Hopefully not nobody\ +\ + +\b Documentation: +\b0 \ + Whoever\ +\ + +\b With special thanks to: +\b0 \ + Mom\ +} diff --git a/Tractor/Tractor/en.lproj/InfoPlist.strings b/Tractor/Tractor/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Tractor/Tractor/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/Tractor/Tractor/en.lproj/MainMenu.xib b/Tractor/Tractor/en.lproj/MainMenu.xib new file mode 100644 index 0000000..570096d --- /dev/null +++ b/Tractor/Tractor/en.lproj/MainMenu.xib @@ -0,0 +1,265 @@ + + + + 1070 + 11B2118 + 1617 + 1138.1 + 566.00 + + com.apple.InterfaceBuilder.CocoaPlugin + 1617 + + + YES + NSMenu + NSMenuItem + NSCustomObject + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + + + YES + + YES + + + + + YES + + NSApplication + + + FirstResponder + + + NSApplication + + + TractorAppDelegate + + + NSFontManager + + + + + YES + + + Quit Tractor + q + 1048576 + 2147483647 + + NSImage + NSMenuCheckmark + + + NSImage + NSMenuMixedState + + + + + + + + YES + + + delegate + + + + 495 + + + + stop: + + + + 542 + + + + statusMenu + + + + 543 + + + + + YES + + 0 + + + + + + -2 + + + File's Owner + + + -1 + + + First Responder + + + -3 + + + Application + + + 420 + + + + + 494 + + + + + 536 + + + YES + + + + + + 537 + + + + + + + YES + + YES + -1.IBPluginDependency + -2.IBPluginDependency + -3.IBPluginDependency + 420.IBPluginDependency + 494.IBPluginDependency + 536.IBPluginDependency + 537.IBPluginDependency + + + YES + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + com.apple.InterfaceBuilder.CocoaPlugin + + + + YES + + + + + + YES + + + + + 543 + + + + YES + + TractorAppDelegate + NSObject + + saveAction: + id + + + saveAction: + + saveAction: + id + + + + YES + + YES + statusMenu + window + + + YES + NSMenu + NSWindow + + + + YES + + YES + statusMenu + window + + + YES + + statusMenu + NSMenu + + + window + NSWindow + + + + + IBProjectSource + ./Classes/TractorAppDelegate.h + + + + + 0 + IBCocoaFramework + + com.apple.InterfaceBuilder.CocoaPlugin.InterfaceBuilder3 + + + YES + 3 + + YES + + YES + NSMenuCheckmark + NSMenuMixedState + + + YES + {9, 8} + {7, 2} + + + + diff --git a/Tractor/Tractor/main.m b/Tractor/Tractor/main.m new file mode 100644 index 0000000..ab09dc7 --- /dev/null +++ b/Tractor/Tractor/main.m @@ -0,0 +1,14 @@ +// +// main.m +// Tractor +// +// Created by Gerad Suyderhoud on 9/13/11. +// Copyright 2011 __MyCompanyName__. All rights reserved. +// + +#import + +int main(int argc, char *argv[]) +{ + return NSApplicationMain(argc, (const char **)argv); +} diff --git a/Tractor/Tractor/tractor.tiff b/Tractor/Tractor/tractor.tiff new file mode 100644 index 0000000..76a6500 Binary files /dev/null and b/Tractor/Tractor/tractor.tiff differ diff --git a/Tractor/TractorTests/TractorTests-Info.plist b/Tractor/TractorTests/TractorTests-Info.plist new file mode 100644 index 0000000..7e28718 --- /dev/null +++ b/Tractor/TractorTests/TractorTests-Info.plist @@ -0,0 +1,22 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + ${EXECUTABLE_NAME} + CFBundleIdentifier + com.fortnightlabs.${PRODUCT_NAME:rfc1034identifier} + CFBundleInfoDictionaryVersion + 6.0 + CFBundlePackageType + BNDL + CFBundleShortVersionString + 1.0 + CFBundleSignature + ???? + CFBundleVersion + 1 + + diff --git a/Tractor/TractorTests/TractorTests.h b/Tractor/TractorTests/TractorTests.h new file mode 100644 index 0000000..6edde80 --- /dev/null +++ b/Tractor/TractorTests/TractorTests.h @@ -0,0 +1,5 @@ +#import + +@interface TractorTests : SenTestCase + +@end diff --git a/Tractor/TractorTests/TractorTests.m b/Tractor/TractorTests/TractorTests.m new file mode 100644 index 0000000..7623976 --- /dev/null +++ b/Tractor/TractorTests/TractorTests.m @@ -0,0 +1,24 @@ +#import "TractorTests.h" + +@implementation TractorTests + +- (void)setUp +{ + [super setUp]; + + // Set-up code here. +} + +- (void)tearDown +{ + // Tear-down code here. + + [super tearDown]; +} + +- (void)testExample +{ + STFail(@"Unit tests are not implemented yet in TractorTests"); +} + +@end diff --git a/Tractor/TractorTests/en.lproj/InfoPlist.strings b/Tractor/TractorTests/en.lproj/InfoPlist.strings new file mode 100644 index 0000000..477b28f --- /dev/null +++ b/Tractor/TractorTests/en.lproj/InfoPlist.strings @@ -0,0 +1,2 @@ +/* Localized versions of Info.plist keys */ + diff --git a/design/tractor.pxm b/design/tractor.pxm new file mode 100644 index 0000000..85657b5 Binary files /dev/null and b/design/tractor.pxm differ