diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6340ebd --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +_site/ +.sass-cache/ +.jekyll-cache/ +.jekyll-metadata + diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 0000000..30c5992 --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +ruby-2.7.4 diff --git a/BuildSettingExtractor.xcodeproj/project.pbxproj b/BuildSettingExtractor.xcodeproj/project.pbxproj deleted file mode 100644 index cb73577..0000000 --- a/BuildSettingExtractor.xcodeproj/project.pbxproj +++ /dev/null @@ -1,517 +0,0 @@ -// !$*UTF8*$! -{ - archiveVersion = 1; - classes = { - }; - objectVersion = 46; - objects = { - -/* Begin PBXBuildFile section */ - 53719E9319BF4C6D005D3DE0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53719E9219BF4C6D005D3DE0 /* Cocoa.framework */; }; - 53719E9D19BF4C6D005D3DE0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53719E9B19BF4C6D005D3DE0 /* InfoPlist.strings */; }; - 53719E9F19BF4C6D005D3DE0 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 53719E9E19BF4C6D005D3DE0 /* main.m */; }; - 53719EA319BF4C6D005D3DE0 /* Credits.rtf in Resources */ = {isa = PBXBuildFile; fileRef = 53719EA119BF4C6D005D3DE0 /* Credits.rtf */; }; - 53719EA619BF4C6D005D3DE0 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 53719EA519BF4C6D005D3DE0 /* AppDelegate.m */; }; - 53719EA919BF4C6D005D3DE0 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53719EA719BF4C6D005D3DE0 /* MainMenu.xib */; }; - 53719EAB19BF4C6D005D3DE0 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 53719EAA19BF4C6D005D3DE0 /* Images.xcassets */; }; - 53719EB219BF4C6D005D3DE0 /* XCTest.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53719EB119BF4C6D005D3DE0 /* XCTest.framework */; }; - 53719EB319BF4C6D005D3DE0 /* Cocoa.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 53719E9219BF4C6D005D3DE0 /* Cocoa.framework */; }; - 53719EBB19BF4C6D005D3DE0 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 53719EB919BF4C6D005D3DE0 /* InfoPlist.strings */; }; - 53719EBD19BF4C6D005D3DE0 /* BuildSettingExtractorTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 53719EBC19BF4C6D005D3DE0 /* BuildSettingExtractorTests.m */; }; - 53F372ED1A7BC6A7006118CB /* DragFileView.m in Sources */ = {isa = PBXBuildFile; fileRef = 53F372EC1A7BC6A7006118CB /* DragFileView.m */; }; - 53F372F01A7C042F006118CB /* BuildSettingExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 53F372EF1A7C042F006118CB /* BuildSettingExtractor.m */; }; - 53F372F41A7C0CBE006118CB /* ThreeBuildConfigs.plist in Resources */ = {isa = PBXBuildFile; fileRef = 53F372F31A7C0CBE006118CB /* ThreeBuildConfigs.plist */; }; - 53F372F51A7C2F89006118CB /* BuildSettingExtractor.m in Sources */ = {isa = PBXBuildFile; fileRef = 53F372EF1A7C042F006118CB /* BuildSettingExtractor.m */; }; - 53F372FB1A7C5803006118CB /* Constants+Categories.m in Sources */ = {isa = PBXBuildFile; fileRef = 53F372FA1A7C5803006118CB /* Constants+Categories.m */; }; -/* End PBXBuildFile section */ - -/* Begin PBXContainerItemProxy section */ - 53719EB419BF4C6D005D3DE0 /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 53719E8719BF4C6D005D3DE0 /* Project object */; - proxyType = 1; - remoteGlobalIDString = 53719E8E19BF4C6D005D3DE0; - remoteInfo = BuildSettingExtractor; - }; -/* End PBXContainerItemProxy section */ - -/* Begin PBXFileReference section */ - 53719E8F19BF4C6D005D3DE0 /* BuildSettingExtractor.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BuildSettingExtractor.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 53719E9219BF4C6D005D3DE0 /* Cocoa.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Cocoa.framework; path = System/Library/Frameworks/Cocoa.framework; sourceTree = SDKROOT; }; - 53719E9519BF4C6D005D3DE0 /* AppKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = AppKit.framework; path = System/Library/Frameworks/AppKit.framework; sourceTree = SDKROOT; }; - 53719E9619BF4C6D005D3DE0 /* CoreData.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreData.framework; path = System/Library/Frameworks/CoreData.framework; sourceTree = SDKROOT; }; - 53719E9719BF4C6D005D3DE0 /* Foundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = Foundation.framework; path = System/Library/Frameworks/Foundation.framework; sourceTree = SDKROOT; }; - 53719E9A19BF4C6D005D3DE0 /* BuildSettingExtractor-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BuildSettingExtractor-Info.plist"; sourceTree = ""; }; - 53719E9C19BF4C6D005D3DE0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 53719E9E19BF4C6D005D3DE0 /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; }; - 53719EA019BF4C6D005D3DE0 /* BuildSettingExtractor-Prefix.pch */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "BuildSettingExtractor-Prefix.pch"; sourceTree = ""; }; - 53719EA219BF4C6D005D3DE0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.rtf; name = en; path = en.lproj/Credits.rtf; sourceTree = ""; }; - 53719EA419BF4C6D005D3DE0 /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; }; - 53719EA519BF4C6D005D3DE0 /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; }; - 53719EA819BF4C6D005D3DE0 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MainMenu.xib; sourceTree = ""; }; - 53719EAA19BF4C6D005D3DE0 /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Images.xcassets; sourceTree = ""; }; - 53719EB019BF4C6D005D3DE0 /* BuildSettingExtractorTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = BuildSettingExtractorTests.xctest; sourceTree = BUILT_PRODUCTS_DIR; }; - 53719EB119BF4C6D005D3DE0 /* XCTest.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = XCTest.framework; path = Library/Frameworks/XCTest.framework; sourceTree = DEVELOPER_DIR; }; - 53719EB819BF4C6D005D3DE0 /* BuildSettingExtractorTests-Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = "BuildSettingExtractorTests-Info.plist"; sourceTree = ""; }; - 53719EBA19BF4C6D005D3DE0 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/InfoPlist.strings; sourceTree = ""; }; - 53719EBC19BF4C6D005D3DE0 /* BuildSettingExtractorTests.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = BuildSettingExtractorTests.m; sourceTree = ""; }; - 5395AF4D1A7C6BB60028BE88 /* ReadMe.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = ReadMe.md; sourceTree = ""; }; - 53F372EB1A7BC6A7006118CB /* DragFileView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = DragFileView.h; sourceTree = ""; }; - 53F372EC1A7BC6A7006118CB /* DragFileView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = DragFileView.m; sourceTree = ""; }; - 53F372EE1A7C042F006118CB /* BuildSettingExtractor.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BuildSettingExtractor.h; sourceTree = ""; }; - 53F372EF1A7C042F006118CB /* BuildSettingExtractor.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BuildSettingExtractor.m; sourceTree = ""; }; - 53F372F31A7C0CBE006118CB /* ThreeBuildConfigs.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = ThreeBuildConfigs.plist; sourceTree = ""; }; - 53F372F91A7C5803006118CB /* Constants+Categories.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "Constants+Categories.h"; sourceTree = ""; }; - 53F372FA1A7C5803006118CB /* Constants+Categories.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = "Constants+Categories.m"; sourceTree = ""; }; -/* End PBXFileReference section */ - -/* Begin PBXFrameworksBuildPhase section */ - 53719E8C19BF4C6D005D3DE0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53719E9319BF4C6D005D3DE0 /* Cocoa.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53719EAD19BF4C6D005D3DE0 /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - 53719EB319BF4C6D005D3DE0 /* Cocoa.framework in Frameworks */, - 53719EB219BF4C6D005D3DE0 /* XCTest.framework in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXFrameworksBuildPhase section */ - -/* Begin PBXGroup section */ - 53719E8619BF4C6D005D3DE0 = { - isa = PBXGroup; - children = ( - 53719E9819BF4C6D005D3DE0 /* BuildSettingExtractor */, - 53719EB619BF4C6D005D3DE0 /* BuildSettingExtractorTests */, - 53719E9119BF4C6D005D3DE0 /* Frameworks */, - 53719E9019BF4C6D005D3DE0 /* Products */, - 5395AF4D1A7C6BB60028BE88 /* ReadMe.md */, - ); - sourceTree = ""; - }; - 53719E9019BF4C6D005D3DE0 /* Products */ = { - isa = PBXGroup; - children = ( - 53719E8F19BF4C6D005D3DE0 /* BuildSettingExtractor.app */, - 53719EB019BF4C6D005D3DE0 /* BuildSettingExtractorTests.xctest */, - ); - name = Products; - sourceTree = ""; - }; - 53719E9119BF4C6D005D3DE0 /* Frameworks */ = { - isa = PBXGroup; - children = ( - 53719E9219BF4C6D005D3DE0 /* Cocoa.framework */, - 53719EB119BF4C6D005D3DE0 /* XCTest.framework */, - 53719E9419BF4C6D005D3DE0 /* Other Frameworks */, - ); - name = Frameworks; - sourceTree = ""; - }; - 53719E9419BF4C6D005D3DE0 /* Other Frameworks */ = { - isa = PBXGroup; - children = ( - 53719E9519BF4C6D005D3DE0 /* AppKit.framework */, - 53719E9619BF4C6D005D3DE0 /* CoreData.framework */, - 53719E9719BF4C6D005D3DE0 /* Foundation.framework */, - ); - name = "Other Frameworks"; - sourceTree = ""; - }; - 53719E9819BF4C6D005D3DE0 /* BuildSettingExtractor */ = { - isa = PBXGroup; - children = ( - 53719EA419BF4C6D005D3DE0 /* AppDelegate.h */, - 53719EA519BF4C6D005D3DE0 /* AppDelegate.m */, - 53F372EE1A7C042F006118CB /* BuildSettingExtractor.h */, - 53F372EF1A7C042F006118CB /* BuildSettingExtractor.m */, - 53F372EB1A7BC6A7006118CB /* DragFileView.h */, - 53F372EC1A7BC6A7006118CB /* DragFileView.m */, - 53F372F91A7C5803006118CB /* Constants+Categories.h */, - 53F372FA1A7C5803006118CB /* Constants+Categories.m */, - 53719EA719BF4C6D005D3DE0 /* MainMenu.xib */, - 53719EAA19BF4C6D005D3DE0 /* Images.xcassets */, - 53719E9919BF4C6D005D3DE0 /* Supporting Files */, - ); - path = BuildSettingExtractor; - sourceTree = ""; - }; - 53719E9919BF4C6D005D3DE0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 53719E9A19BF4C6D005D3DE0 /* BuildSettingExtractor-Info.plist */, - 53719E9B19BF4C6D005D3DE0 /* InfoPlist.strings */, - 53719E9E19BF4C6D005D3DE0 /* main.m */, - 53719EA019BF4C6D005D3DE0 /* BuildSettingExtractor-Prefix.pch */, - 53719EA119BF4C6D005D3DE0 /* Credits.rtf */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 53719EB619BF4C6D005D3DE0 /* BuildSettingExtractorTests */ = { - isa = PBXGroup; - children = ( - 53719EBC19BF4C6D005D3DE0 /* BuildSettingExtractorTests.m */, - 53F372F61A7C3164006118CB /* TestFiles */, - 53719EB719BF4C6D005D3DE0 /* Supporting Files */, - ); - path = BuildSettingExtractorTests; - sourceTree = ""; - }; - 53719EB719BF4C6D005D3DE0 /* Supporting Files */ = { - isa = PBXGroup; - children = ( - 53719EB819BF4C6D005D3DE0 /* BuildSettingExtractorTests-Info.plist */, - 53719EB919BF4C6D005D3DE0 /* InfoPlist.strings */, - ); - name = "Supporting Files"; - sourceTree = ""; - }; - 53F372F61A7C3164006118CB /* TestFiles */ = { - isa = PBXGroup; - children = ( - 53F372F31A7C0CBE006118CB /* ThreeBuildConfigs.plist */, - ); - path = TestFiles; - sourceTree = ""; - }; -/* End PBXGroup section */ - -/* Begin PBXNativeTarget section */ - 53719E8E19BF4C6D005D3DE0 /* BuildSettingExtractor */ = { - isa = PBXNativeTarget; - buildConfigurationList = 53719EC019BF4C6D005D3DE0 /* Build configuration list for PBXNativeTarget "BuildSettingExtractor" */; - buildPhases = ( - 53719E8B19BF4C6D005D3DE0 /* Sources */, - 53719E8C19BF4C6D005D3DE0 /* Frameworks */, - 53719E8D19BF4C6D005D3DE0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = BuildSettingExtractor; - productName = BuildSettingExtractor; - productReference = 53719E8F19BF4C6D005D3DE0 /* BuildSettingExtractor.app */; - productType = "com.apple.product-type.application"; - }; - 53719EAF19BF4C6D005D3DE0 /* BuildSettingExtractorTests */ = { - isa = PBXNativeTarget; - buildConfigurationList = 53719EC319BF4C6D005D3DE0 /* Build configuration list for PBXNativeTarget "BuildSettingExtractorTests" */; - buildPhases = ( - 53719EAC19BF4C6D005D3DE0 /* Sources */, - 53719EAD19BF4C6D005D3DE0 /* Frameworks */, - 53719EAE19BF4C6D005D3DE0 /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - 53719EB519BF4C6D005D3DE0 /* PBXTargetDependency */, - ); - name = BuildSettingExtractorTests; - productName = BuildSettingExtractorTests; - productReference = 53719EB019BF4C6D005D3DE0 /* BuildSettingExtractorTests.xctest */; - productType = "com.apple.product-type.bundle.unit-test"; - }; -/* End PBXNativeTarget section */ - -/* Begin PBXProject section */ - 53719E8719BF4C6D005D3DE0 /* Project object */ = { - isa = PBXProject; - attributes = { - LastUpgradeCheck = 0510; - ORGANIZATIONNAME = "Tapas Software"; - TargetAttributes = { - 53719EAF19BF4C6D005D3DE0 = { - TestTargetID = 53719E8E19BF4C6D005D3DE0; - }; - }; - }; - buildConfigurationList = 53719E8A19BF4C6D005D3DE0 /* Build configuration list for PBXProject "BuildSettingExtractor" */; - compatibilityVersion = "Xcode 3.2"; - developmentRegion = English; - hasScannedForEncodings = 0; - knownRegions = ( - en, - Base, - ); - mainGroup = 53719E8619BF4C6D005D3DE0; - productRefGroup = 53719E9019BF4C6D005D3DE0 /* Products */; - projectDirPath = ""; - projectRoot = ""; - targets = ( - 53719E8E19BF4C6D005D3DE0 /* BuildSettingExtractor */, - 53719EAF19BF4C6D005D3DE0 /* BuildSettingExtractorTests */, - ); - }; -/* End PBXProject section */ - -/* Begin PBXResourcesBuildPhase section */ - 53719E8D19BF4C6D005D3DE0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53719E9D19BF4C6D005D3DE0 /* InfoPlist.strings in Resources */, - 53719EAB19BF4C6D005D3DE0 /* Images.xcassets in Resources */, - 53719EA319BF4C6D005D3DE0 /* Credits.rtf in Resources */, - 53719EA919BF4C6D005D3DE0 /* MainMenu.xib in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53719EAE19BF4C6D005D3DE0 /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53F372F41A7C0CBE006118CB /* ThreeBuildConfigs.plist in Resources */, - 53719EBB19BF4C6D005D3DE0 /* InfoPlist.strings in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXResourcesBuildPhase section */ - -/* Begin PBXSourcesBuildPhase section */ - 53719E8B19BF4C6D005D3DE0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53F372FB1A7C5803006118CB /* Constants+Categories.m in Sources */, - 53F372F01A7C042F006118CB /* BuildSettingExtractor.m in Sources */, - 53719EA619BF4C6D005D3DE0 /* AppDelegate.m in Sources */, - 53F372ED1A7BC6A7006118CB /* DragFileView.m in Sources */, - 53719E9F19BF4C6D005D3DE0 /* main.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - 53719EAC19BF4C6D005D3DE0 /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - 53F372F51A7C2F89006118CB /* BuildSettingExtractor.m in Sources */, - 53719EBD19BF4C6D005D3DE0 /* BuildSettingExtractorTests.m in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; -/* End PBXSourcesBuildPhase section */ - -/* Begin PBXTargetDependency section */ - 53719EB519BF4C6D005D3DE0 /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = 53719E8E19BF4C6D005D3DE0 /* BuildSettingExtractor */; - targetProxy = 53719EB419BF4C6D005D3DE0 /* PBXContainerItemProxy */; - }; -/* End PBXTargetDependency section */ - -/* Begin PBXVariantGroup section */ - 53719E9B19BF4C6D005D3DE0 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 53719E9C19BF4C6D005D3DE0 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; - 53719EA119BF4C6D005D3DE0 /* Credits.rtf */ = { - isa = PBXVariantGroup; - children = ( - 53719EA219BF4C6D005D3DE0 /* en */, - ); - name = Credits.rtf; - sourceTree = ""; - }; - 53719EA719BF4C6D005D3DE0 /* MainMenu.xib */ = { - isa = PBXVariantGroup; - children = ( - 53719EA819BF4C6D005D3DE0 /* Base */, - ); - name = MainMenu.xib; - sourceTree = ""; - }; - 53719EB919BF4C6D005D3DE0 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - 53719EBA19BF4C6D005D3DE0 /* en */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; -/* End PBXVariantGroup section */ - -/* Begin XCBuildConfiguration section */ - 53719EBE19BF4C6D005D3DE0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - 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_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }; - 53719EBF19BF4C6D005D3DE0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; - CLANG_CXX_LIBRARY = "libc++"; - CLANG_ENABLE_MODULES = YES; - 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_AGGRESSIVE; - GCC_WARN_UNUSED_FUNCTION = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.9; - SDKROOT = macosx; - }; - name = Release; - }; - 53719EC119BF4C6D005D3DE0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "BuildSettingExtractor/BuildSettingExtractor-Prefix.pch"; - INFOPLIST_FILE = "BuildSettingExtractor/BuildSettingExtractor-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Debug; - }; - 53719EC219BF4C6D005D3DE0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; - COMBINE_HIDPI_IMAGES = YES; - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "BuildSettingExtractor/BuildSettingExtractor-Prefix.pch"; - INFOPLIST_FILE = "BuildSettingExtractor/BuildSettingExtractor-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - WRAPPER_EXTENSION = app; - }; - name = Release; - }; - 53719EC419BF4C6D005D3DE0 /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BuildSettingExtractor.app/Contents/MacOS/BuildSettingExtractor"; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "BuildSettingExtractor/BuildSettingExtractor-Prefix.pch"; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); - INFOPLIST_FILE = "BuildSettingExtractorTests/BuildSettingExtractorTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Debug; - }; - 53719EC519BF4C6D005D3DE0 /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - BUNDLE_LOADER = "$(BUILT_PRODUCTS_DIR)/BuildSettingExtractor.app/Contents/MacOS/BuildSettingExtractor"; - COMBINE_HIDPI_IMAGES = YES; - FRAMEWORK_SEARCH_PATHS = ( - "$(DEVELOPER_FRAMEWORKS_DIR)", - "$(inherited)", - ); - GCC_PRECOMPILE_PREFIX_HEADER = YES; - GCC_PREFIX_HEADER = "BuildSettingExtractor/BuildSettingExtractor-Prefix.pch"; - INFOPLIST_FILE = "BuildSettingExtractorTests/BuildSettingExtractorTests-Info.plist"; - PRODUCT_NAME = "$(TARGET_NAME)"; - TEST_HOST = "$(BUNDLE_LOADER)"; - WRAPPER_EXTENSION = xctest; - }; - name = Release; - }; -/* End XCBuildConfiguration section */ - -/* Begin XCConfigurationList section */ - 53719E8A19BF4C6D005D3DE0 /* Build configuration list for PBXProject "BuildSettingExtractor" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53719EBE19BF4C6D005D3DE0 /* Debug */, - 53719EBF19BF4C6D005D3DE0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 53719EC019BF4C6D005D3DE0 /* Build configuration list for PBXNativeTarget "BuildSettingExtractor" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53719EC119BF4C6D005D3DE0 /* Debug */, - 53719EC219BF4C6D005D3DE0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; - 53719EC319BF4C6D005D3DE0 /* Build configuration list for PBXNativeTarget "BuildSettingExtractorTests" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - 53719EC419BF4C6D005D3DE0 /* Debug */, - 53719EC519BF4C6D005D3DE0 /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; -/* End XCConfigurationList section */ - }; - rootObject = 53719E8719BF4C6D005D3DE0 /* Project object */; -} diff --git a/BuildSettingExtractor.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/BuildSettingExtractor.xcodeproj/project.xcworkspace/contents.xcworkspacedata deleted file mode 100644 index 1fbc92d..0000000 --- a/BuildSettingExtractor.xcodeproj/project.xcworkspace/contents.xcworkspacedata +++ /dev/null @@ -1,7 +0,0 @@ - - - - - diff --git a/BuildSettingExtractor/AppDelegate.h b/BuildSettingExtractor/AppDelegate.h deleted file mode 100644 index 9bbd2e5..0000000 --- a/BuildSettingExtractor/AppDelegate.h +++ /dev/null @@ -1,12 +0,0 @@ -// -// AppDelegate.h -// BuildSettingExtractor -// -// Created by James Dempsey on 9/9/14. -// Copyright (c) 2014 Tapas Software. All rights reserved. -// - -#import - -@interface AppDelegate : NSObject -@end diff --git a/BuildSettingExtractor/AppDelegate.m b/BuildSettingExtractor/AppDelegate.m deleted file mode 100644 index 519e339..0000000 --- a/BuildSettingExtractor/AppDelegate.m +++ /dev/null @@ -1,131 +0,0 @@ -// -// AppDelegate.m -// BuildSettingExtractor -// -// Created by James Dempsey on 9/9/14. -// Copyright (c) 2014 Tapas Software. All rights reserved. -// - -#import "AppDelegate.h" -#import "DragFileView.h" -#import "BuildSettingExtractor.h" -#import "Constants+Categories.h" - -// During development it is useful to turn off the overwrite checking -#define OVERWRITE_CHECKING_DISABLED 0 - -@interface AppDelegate () - -@property (assign) IBOutlet NSWindow *window; -@property (weak) IBOutlet DragFileView *dragFileView; - -@property BuildSettingExtractor *buildSettingExtractor; -@property BOOL shouldOverwriteFiles; - - -@property (strong, nonatomic) NSDictionary *buildSettingHelpStringsFile; - -@end - -@implementation AppDelegate - -- (instancetype)init { - self = [super init]; - if (self) { - _buildSettingExtractor = [[BuildSettingExtractor alloc] init]; - - } - return self; -} - -- (void)awakeFromNib { - self.dragFileView.target = self; - self.dragFileView.action = @selector(handleDroppedFile:); -} - - -- (IBAction)handleDroppedFile:(DragFileView *)sender { - NSURL *fileURL = sender.fileURL; - NSString *typeIdentifier = nil; - NSString *fileName = nil; - NSError *error = nil; - [fileURL getResourceValue:&typeIdentifier forKey:NSURLTypeIdentifierKey error:&error]; - [fileURL getResourceValue:&fileName forKey:NSURLLocalizedNameKey error:&error]; - - - if (fileURL && [typeIdentifier isEqualToString:[NSString tps_projectBundleTypeIdentifier]]) { - self.shouldOverwriteFiles = OVERWRITE_CHECKING_DISABLED; - NSOpenPanel *openPanel = [NSOpenPanel openPanel]; - openPanel.delegate = self; - openPanel.canCreateDirectories = YES; - openPanel.allowsMultipleSelection = YES; - openPanel.canChooseDirectories = YES; - openPanel.canChooseFiles = NO; - openPanel.allowedFileTypes = @[(NSString *)kUTTypeFolder]; - openPanel.message = [NSString stringWithFormat:@"Choose location to save configuration files for project ‘%@’.", fileName]; - openPanel.prompt = @"Choose"; - - [openPanel beginSheetModalForWindow:self.window completionHandler:^(NSInteger result) { - if (result == NSModalResponseOK) { - NSURL *destinationURL = openPanel.URL; - [self.buildSettingExtractor extractBuildSettingsFromProject:fileURL toDestinationFolder:destinationURL]; - } - - }]; - } -} - -#pragma mark - NSOpenSavePanelDelegate - -/* We want to protect against overwriting the contents of a folder that already has xcconfig files in it. So validate the contents of the selected folder. - */ -- (BOOL)panel:(id)panel validateURL:(NSURL *)url error:(NSError *__autoreleasing *)outError { - NSError *error = nil; - NSArray *filesInDirectory = [[NSFileManager defaultManager] contentsOfDirectoryAtURL:url includingPropertiesForKeys:@[NSURLTypeIdentifierKey] options:NSDirectoryEnumerationSkipsSubdirectoryDescendants | NSDirectoryEnumerationSkipsHiddenFiles error:&error]; - - __block BOOL foundBuildConfigFile = NO; - - [filesInDirectory enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { - NSString *typeIdentifier = nil; - NSError *resourceError = nil; - [obj getResourceValue:&typeIdentifier forKey:NSURLTypeIdentifierKey error:&resourceError]; - if ([typeIdentifier isEqualToString:[NSString tps_buildConfigurationFileTypeIdentifier]]) { - foundBuildConfigFile = YES; - *stop = YES; - } - - }]; - - BOOL valid = (!foundBuildConfigFile || self.shouldOverwriteFiles); - - if (!valid) { - NSDictionary *errorUserInfo = @{NSLocalizedDescriptionKey:@"Build config files already exist in this folder. Do you want to replace them?", NSLocalizedRecoveryOptionsErrorKey:@[@"Cancel", @"Replace"], NSLocalizedRecoverySuggestionErrorKey:@"Build configuration files already exist in this folder. Replacing will overwrite any files with the same file names.", NSRecoveryAttempterErrorKey: self}; - NSError *error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] code:DirectoryContainsBuildConfigFiles userInfo:errorUserInfo]; - *outError = error; - } - - - return valid; -} - -#pragma mark - NSError Recovery - -/* The user can choose to replace / overwrite the contents of the folder as a recovery option. If so, the open panel goes through validation again. - */ -- (void)attemptRecoveryFromError:(NSError *)error optionIndex:(NSUInteger)recoveryOptionIndex delegate:(id)delegate didRecoverSelector:(SEL)didRecoverSelector contextInfo:(void *)contextInfo { - - BOOL success = NO; - NSInvocation *invoke = [NSInvocation invocationWithMethodSignature:[delegate methodSignatureForSelector:didRecoverSelector]]; - [invoke setSelector:didRecoverSelector]; - - if (recoveryOptionIndex == 1) { // Recovery requested. - self.shouldOverwriteFiles = YES; - success = YES; - } - - [invoke setArgument:(void *)&success atIndex:2]; - [invoke setArgument:(void *)&contextInfo atIndex:3]; - [invoke invokeWithTarget:delegate]; -} - -@end diff --git a/BuildSettingExtractor/Base.lproj/MainMenu.xib b/BuildSettingExtractor/Base.lproj/MainMenu.xib deleted file mode 100644 index f470c38..0000000 --- a/BuildSettingExtractor/Base.lproj/MainMenu.xib +++ /dev/null @@ -1,711 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - Default - - - - - - - Left to Right - - - - - - - Right to Left - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/BuildSettingExtractor/BuildSettingExtractor-Info.plist b/BuildSettingExtractor/BuildSettingExtractor-Info.plist deleted file mode 100644 index 4fdd8aa..0000000 --- a/BuildSettingExtractor/BuildSettingExtractor-Info.plist +++ /dev/null @@ -1,34 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIconFile - - CFBundleIdentifier - net.tapas-software.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - ${PRODUCT_NAME} - CFBundlePackageType - APPL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - LSMinimumSystemVersion - ${MACOSX_DEPLOYMENT_TARGET} - NSHumanReadableCopyright - Copyright © 2014 Tapas Software. All rights reserved. - NSMainNibFile - MainMenu - NSPrincipalClass - NSApplication - - diff --git a/BuildSettingExtractor/BuildSettingExtractor-Prefix.pch b/BuildSettingExtractor/BuildSettingExtractor-Prefix.pch deleted file mode 100644 index 35d7640..0000000 --- a/BuildSettingExtractor/BuildSettingExtractor-Prefix.pch +++ /dev/null @@ -1,9 +0,0 @@ -// -// Prefix header -// -// The contents of this file are implicitly included at the beginning of every source file. -// - -#ifdef __OBJC__ - #import -#endif diff --git a/BuildSettingExtractor/BuildSettingExtractor.h b/BuildSettingExtractor/BuildSettingExtractor.h deleted file mode 100644 index c47843f..0000000 --- a/BuildSettingExtractor/BuildSettingExtractor.h +++ /dev/null @@ -1,22 +0,0 @@ -// -// BuildSettingExtractor.h -// BuildSettingExtractor -// -// Created by James Dempsey on 1/30/15. -// Copyright (c) 2015 Tapas Software. All rights reserved. -// - -#import - - -@interface BuildSettingExtractor : NSObject - -// The name that will be used to name common / shared config files. "Shared" is the default. -@property (copy) NSString *sharedConfigName; - -// The name that will be used to name the project configuration. Default is "Project". -@property (copy) NSString *projectConfigName; - -- (void)extractBuildSettingsFromProject:(NSURL *)projectWrapperURL toDestinationFolder:(NSURL *)folderURL; - -@end diff --git a/BuildSettingExtractor/BuildSettingExtractor.m b/BuildSettingExtractor/BuildSettingExtractor.m deleted file mode 100644 index c245492..0000000 --- a/BuildSettingExtractor/BuildSettingExtractor.m +++ /dev/null @@ -1,232 +0,0 @@ -// -// BuildSettingExtractor.m -// BuildSettingExtractor -// -// Created by James Dempsey on 1/30/15. -// Copyright (c) 2015 Tapas Software. All rights reserved. -// - -#import "BuildSettingExtractor.h" -#import "Constants+Categories.h" - -static NSString * const XcodeCompatibilityVersionString = @"Xcode 3.2"; - -@interface BuildSettingExtractor () -@property (strong) NSMutableDictionary *buildSettingsByTarget; -@property (strong) NSDictionary *objects; -@end - -@implementation BuildSettingExtractor - -- (instancetype)init { - self = [super init]; - if (self) { - _sharedConfigName = @"Shared"; - _projectConfigName = @"Project"; - _buildSettingsByTarget = [[NSMutableDictionary alloc] init]; - } - return self; -} - -/* Given a dictionary and key whose value is an array of object identifiers, return the identified objects in an array */ -- (NSArray *)objectArrayForDictionary:(NSDictionary *)dict key:(NSString *)key { - NSArray *identifiers = dict[key]; - NSMutableArray *objectArray = [[NSMutableArray alloc] init]; - for (NSString *identifier in identifiers) { - id obj = self.objects[identifier]; - [objectArray addObject:obj]; - } - return objectArray; -} - -- (void)extractBuildSettingsFromProject:(NSURL *)projectWrapperURL toDestinationFolder:(NSURL *)folderURL { - NSLog(@"Extract from: %@, put files in: %@", projectWrapperURL, folderURL); - - [self.buildSettingsByTarget removeAllObjects]; - - NSError *error = nil; - - NSURL *projectFileURL = [projectWrapperURL URLByAppendingPathComponent:@"project.pbxproj"]; - - NSData *fileData = [NSData dataWithContentsOfURL:projectFileURL options:0 error:&error]; - if (!fileData) { - [NSApp presentError:error]; - } else { - - NSDictionary *projectPlist = [NSPropertyListSerialization propertyListWithData:fileData options:kCFPropertyListImmutable format:NULL error:&error]; - - if (!projectPlist) { - [NSApp presentError:error]; - } else { - - // Get root object (project) - self.objects = projectPlist[@"objects"]; - NSDictionary *rootObject = self.objects[projectPlist[@"rootObject"]]; - - // Check compatibility version - NSString *compatibilityVersion = rootObject[@"compatibilityVersion"]; - if (![compatibilityVersion isEqualToString:XcodeCompatibilityVersionString]) { - NSDictionary *userInfo = @{NSLocalizedDescriptionKey:[NSString stringWithFormat:@"Unable to extract build settings from project ‘%@’.", [[projectWrapperURL lastPathComponent] stringByDeletingPathExtension]], NSLocalizedRecoverySuggestionErrorKey: [NSString stringWithFormat:@"Project file format version ‘%@’ is not supported.", compatibilityVersion]}; - NSError *error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier] code:UnsupportedXcodeVersion userInfo:userInfo]; - [NSApp presentError:error]; - return; - } - - // Get project settings - NSString *buildConfigurationListID = rootObject[@"buildConfigurationList"]; - NSDictionary *projectSettings = [self buildSettingStringsByConfigurationForBuildConfigurationListID:buildConfigurationListID]; - - self.buildSettingsByTarget[self.projectConfigName] = projectSettings; - - // Get project targets - NSArray *targets = [self objectArrayForDictionary:rootObject key:@"targets"]; - - // Add project targets - for (NSDictionary *target in targets) { - NSString *targetName = target[@"name"]; - buildConfigurationListID = target[@"buildConfigurationList"]; - NSDictionary *targetSettings = [self buildSettingStringsByConfigurationForBuildConfigurationListID:buildConfigurationListID]; - - self.buildSettingsByTarget[targetName] = targetSettings; - - } - - [self writeConfigFilesToDestinationFolder:folderURL]; - } - } -} - - -/* Writes an xcconfig file for each target / configuration combination to the specified directory. - */ -- (void)writeConfigFilesToDestinationFolder:(NSURL *)destinationURL { - - NSString *commonConfigName = self.sharedConfigName; - - [self.buildSettingsByTarget enumerateKeysAndObjectsUsingBlock:^(id targetName, id obj, BOOL *stop) { - [obj enumerateKeysAndObjectsUsingBlock:^(id configName, id settings, BOOL *stop) { - - // If the config name is not the common config, we need to import the common config - if (![configName isEqualToString:commonConfigName]) { - NSString *configFilename = [self configFilenameWithTargetName:targetName configName:commonConfigName]; - NSString *includeDirective = [NSString stringWithFormat:@"#include \"%@\"\n\n", configFilename]; - settings = [includeDirective stringByAppendingString:settings]; - } - - NSString *filename = [self configFilenameWithTargetName:targetName configName:configName]; - - NSURL *fileURL = [destinationURL URLByAppendingPathComponent:filename]; - - BOOL success = [settings writeToURL:fileURL atomically:YES encoding:NSUTF8StringEncoding error:nil]; - if (!success) NSLog(@"No success with %@", fileURL); - }]; - }]; -} - -// Given the target name and config name returns the xcconfig filename to be used. -- (NSString *)configFilenameWithTargetName:(NSString *)targetName configName:(NSString *)configName { - return [NSString stringWithFormat:@"%@-%@.xcconfig", targetName, configName]; -} - - -/* Given a build setting dictionary, returns a string representation of the build settings, suitable for an xcconfig file. */ -- (NSString *)stringRepresentationOfBuildSettings:(NSDictionary *)buildSettings { - NSMutableString *string = [[NSMutableString alloc] init]; - - for (NSString *key in [[buildSettings allKeys] sortedArrayUsingSelector:@selector(localizedStandardCompare:)]) { - id value = buildSettings[key]; - - if ([value isKindOfClass:[NSString class]]) { - [string appendFormat:@"%@ = %@\r", key, value]; - - } else if ([value isKindOfClass:[NSArray class]]) { - [string appendFormat:@"%@ = %@\r", key, [value componentsJoinedByString:@" "]]; - } else { - [NSException raise:@"Should not get here!" format:@"Unexpected class: %@ in %s", [value class], __PRETTY_FUNCTION__]; - } - - } - - return string; -} - -/* Given a build configuration list ID, retrieves the list of build configurations, consolidates shared build settings into a shared configuration and returns a dictionary of build settings configurations as strings, keyed by configuration name. */ -- (NSDictionary *)buildSettingStringsByConfigurationForBuildConfigurationListID:(NSString *)buildConfigurationListID { - - // Get the array of build configuration objects for the build configuration list ID - NSDictionary *buildConfigurationList = self.objects[buildConfigurationListID]; - NSArray *projectBuildConfigurations = [self objectArrayForDictionary:buildConfigurationList key:@"buildConfigurations"]; - - - NSDictionary *buildSettingsByConfiguration = [self buildSettingsByConfigurationForConfigurations:projectBuildConfigurations]; - - // Turn each build setting into a build setting string. Store by configuration name - NSMutableDictionary *buildSettingStringsByConfiguration = [[NSMutableDictionary alloc] init]; - [buildSettingsByConfiguration enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - NSString *buildSettingsString = [self stringRepresentationOfBuildSettings:obj]; - [buildSettingStringsByConfiguration setValue:buildSettingsString forKey:key]; - - }]; - return buildSettingStringsByConfiguration; - -} - - -/* Given an array of build configuration dictionaries, removes common build settings into a shared build configuration and returns a dictionary of build settings dictionaries, keyed by configuration name. - */ -- (NSDictionary *)buildSettingsByConfigurationForConfigurations:(NSArray *)buildConfigurations { - - NSMutableDictionary *buildSettingsByConfiguration = [[NSMutableDictionary alloc] init]; - - NSMutableDictionary *sharedBuildSettings = [[NSMutableDictionary alloc] init]; - NSDictionary *firstBuildSettings = nil; - NSInteger index = 0; - - for (NSDictionary *buildConfiguration in buildConfigurations) { - - NSDictionary *buildSettings = buildConfiguration[@"buildSettings"]; - - // Use first build settings as a starting point, represents all settings after first iteration - if (index == 0) { - firstBuildSettings = buildSettings; - - } - - // Second iteration, compare second against first build settings to come up with common items - else if (index == 1){ - [firstBuildSettings enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - id otherObj = buildSettings[key]; - if ([obj isEqualTo:otherObj]) { - sharedBuildSettings[key] = obj; - } - }]; - } - - // Subsequent iteratons, remove common items that don't match current config settings - else { - [[sharedBuildSettings copy] enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { - id otherObj = buildSettings[key]; - if (![obj isEqualTo:otherObj]) { - [sharedBuildSettings removeObjectForKey:key]; - } - }]; - } - - index++; - } - - [buildSettingsByConfiguration setValue:sharedBuildSettings forKey:self.sharedConfigName]; - - NSArray *sharedKeys = [sharedBuildSettings allKeys]; - for (NSDictionary *projectBuildConfiguration in buildConfigurations) { - NSString *configName = projectBuildConfiguration[@"name"]; - NSMutableDictionary *buildSettings = projectBuildConfiguration[@"buildSettings"]; - [buildSettings removeObjectsForKeys:sharedKeys]; - [buildSettingsByConfiguration setValue:buildSettings forKey:configName]; - - } - - return buildSettingsByConfiguration; -} - -@end diff --git a/BuildSettingExtractor/Constants+Categories.h b/BuildSettingExtractor/Constants+Categories.h deleted file mode 100644 index 97f625a..0000000 --- a/BuildSettingExtractor/Constants+Categories.h +++ /dev/null @@ -1,29 +0,0 @@ -// -// Constants+Categories.h -// BuildSettingExtractor -// -// Created by James Dempsey on 1/30/15. -// Copyright (c) 2015 Tapas Software. All rights reserved. -// - -#import - -typedef NS_ENUM(NSUInteger, AppErrorCodes) { - UnsupportedXcodeVersion = 100, - DirectoryContainsBuildConfigFiles = 101, -}; - -#pragma mark - - -@interface NSPasteboard (TPS_XcodeProjectURLAdditions) -- (BOOL)tps_canReadXcodeProjectFileURL; -- (NSURL *)tps_readXcodeProjectFileURL; -@end - -#pragma mark - - -@interface NSString (TPS_TypeIdentifierAdditions) -+ (NSString *)tps_projectBundleTypeIdentifier; -+ (NSString *)tps_buildConfigurationFileTypeIdentifier; -+ (NSString *)tps_preferredTypeIdentifierForFileExtension:(NSString *)string; -@end \ No newline at end of file diff --git a/BuildSettingExtractor/Constants+Categories.m b/BuildSettingExtractor/Constants+Categories.m deleted file mode 100644 index b857af3..0000000 --- a/BuildSettingExtractor/Constants+Categories.m +++ /dev/null @@ -1,57 +0,0 @@ -// -// NSPasteboard+TPS_XcodeProjectReadingExtensions.m -// BuildSettingExtractor -// -// Created by James Dempsey on 1/30/15. -// Copyright (c) 2015 Tapas Software. All rights reserved. -// - -#import "Constants+Categories.h" - -@implementation NSPasteboard (TPS_XcodeProjectURLAdditions) - -- (NSURL *)tps_readXcodeProjectFileURL { - NSArray *readObjects = [self readObjectsForClasses:@[[NSURL class]] options:[self tps_xcodeProjectReadingOptions]]; - return readObjects.firstObject; -} - -- (BOOL)tps_canReadXcodeProjectFileURL { - return [self canReadObjectForClasses:@[[NSURL class]] options:[self tps_xcodeProjectReadingOptions]]; -} - -- (NSDictionary *)tps_xcodeProjectReadingOptions { - return @{NSPasteboardURLReadingFileURLsOnlyKey: @(YES), NSPasteboardURLReadingContentsConformToTypesKey: @[[NSString tps_projectBundleTypeIdentifier]]}; -} - -@end - - -#pragma mark - - - -@implementation NSString (TPS_TypeIdentifierAdditions) - -+ (NSString *)tps_projectBundleTypeIdentifier { - static NSString *projectBundleTypeIdentifier; - if (!projectBundleTypeIdentifier) { - projectBundleTypeIdentifier = [self tps_preferredTypeIdentifierForFileExtension:@"xcodeproj"]; -// NSLog(@"Xcode UTI: %@", projectBundleTypeIdentifier); - } - return projectBundleTypeIdentifier; -} - -+ (NSString *)tps_buildConfigurationFileTypeIdentifier { - static NSString *buildConfigurationFileTypeIdentifier; - if (!buildConfigurationFileTypeIdentifier) { - buildConfigurationFileTypeIdentifier = [self tps_preferredTypeIdentifierForFileExtension:@"xcconfig"]; -// NSLog(@"xcconfig UTI: %@", buildConfigurationFileTypeIdentifier); - } - return buildConfigurationFileTypeIdentifier; -} - -+ (NSString *)tps_preferredTypeIdentifierForFileExtension:(NSString *)string { - NSString *identifier = CFBridgingRelease(UTTypeCreatePreferredIdentifierForTag(kUTTagClassFilenameExtension, (__bridge CFStringRef)string, NULL)); - return identifier; -} - -@end diff --git a/BuildSettingExtractor/DragFileView.h b/BuildSettingExtractor/DragFileView.h deleted file mode 100644 index a95a345..0000000 --- a/BuildSettingExtractor/DragFileView.h +++ /dev/null @@ -1,19 +0,0 @@ -// -// DragFileView.h -// BuildSettingExtractor -// -// Created by James Dempsey on 1/30/15. -// Copyright (c) 2015 Tapas Software. All rights reserved. -// - -#import - -IB_DESIGNABLE -@interface DragFileView : NSView - -@property (readonly) NSURL *fileURL; - -@property (weak) id target; -@property SEL action; - -@end diff --git a/BuildSettingExtractor/DragFileView.m b/BuildSettingExtractor/DragFileView.m deleted file mode 100644 index 5d8dbb1..0000000 --- a/BuildSettingExtractor/DragFileView.m +++ /dev/null @@ -1,73 +0,0 @@ -// -// DragFileView.m -// BuildSettingExtractor -// -// Created by James Dempsey on 1/30/15. -// Copyright (c) 2015 Tapas Software. All rights reserved. -// - -#import "DragFileView.h" -#import "Constants+Categories.h" - - -@interface DragFileView () -@property NSURL *fileURL; -@property (weak) IBOutlet NSTextField *labelView; -@end - -@implementation DragFileView - -- (void)commonInit { - self.wantsLayer = YES; - [self setHighlight:NO]; - self.layer.cornerRadius = 20.0; - [self registerForDraggedTypes:@[(NSString *)kUTTypeFileURL]]; -} - -- (instancetype)initWithCoder:(NSCoder *)coder { - if (self = [super initWithCoder:coder]) { [self commonInit]; } return self; -} - -- (instancetype)initWithFrame:(NSRect)frameRect { - if (self = [super initWithFrame:frameRect]) { [self commonInit]; } return self; -} - -- (void)setHighlight:(BOOL)flag { - if (flag) { - self.layer.backgroundColor = [[NSColor colorWithCalibratedRed:0.56 green:0.7 blue:0.81 alpha:1.0] CGColor]; - } else { - self.layer.backgroundColor = [[NSColor colorWithCalibratedRed:0.7 green:0.85 blue:1.0 alpha:1.0] CGColor]; - } -} - -- (NSDragOperation)draggingEntered:(id )sender { - - BOOL canRead = [[sender draggingPasteboard] tps_canReadXcodeProjectFileURL]; - - if (canRead) { - [self setHighlight:YES]; - return NSDragOperationGeneric; - } else { - return NSDragOperationNone; - } -} - -- (void)draggingExited:(id )sender { - [self setHighlight:NO]; -} - -- (BOOL)prepareForDragOperation:(id )sender { - return [[sender draggingPasteboard] tps_canReadXcodeProjectFileURL]; -} - -- (BOOL)performDragOperation:(id )sender { - self.fileURL = [[sender draggingPasteboard] tps_readXcodeProjectFileURL]; - return self.fileURL != nil; -} - -- (void)concludeDragOperation:(id )sender { - [self setHighlight:NO]; - [NSApp sendAction:self.action to:self.target from:self]; -} - -@end diff --git a/BuildSettingExtractor/Images.xcassets/AppIcon.appiconset/Contents.json b/BuildSettingExtractor/Images.xcassets/AppIcon.appiconset/Contents.json deleted file mode 100644 index 2db2b1c..0000000 --- a/BuildSettingExtractor/Images.xcassets/AppIcon.appiconset/Contents.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "images" : [ - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "16x16", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "32x32", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "128x128", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "256x256", - "scale" : "2x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "1x" - }, - { - "idiom" : "mac", - "size" : "512x512", - "scale" : "2x" - } - ], - "info" : { - "version" : 1, - "author" : "xcode" - } -} \ No newline at end of file diff --git a/BuildSettingExtractor/en.lproj/Credits.rtf b/BuildSettingExtractor/en.lproj/Credits.rtf deleted file mode 100644 index 46576ef..0000000 --- a/BuildSettingExtractor/en.lproj/Credits.rtf +++ /dev/null @@ -1,29 +0,0 @@ -{\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/BuildSettingExtractor/en.lproj/InfoPlist.strings b/BuildSettingExtractor/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/BuildSettingExtractor/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/BuildSettingExtractor/main.m b/BuildSettingExtractor/main.m deleted file mode 100644 index 7ad1095..0000000 --- a/BuildSettingExtractor/main.m +++ /dev/null @@ -1,14 +0,0 @@ -// -// main.m -// BuildSettingExtractor -// -// Created by James Dempsey on 9/9/14. -// Copyright (c) 2014 Tapas Software. All rights reserved. -// - -#import - -int main(int argc, const char * argv[]) -{ - return NSApplicationMain(argc, argv); -} diff --git a/BuildSettingExtractorTests/BuildSettingExtractorTests-Info.plist b/BuildSettingExtractorTests/BuildSettingExtractorTests-Info.plist deleted file mode 100644 index a1d5df1..0000000 --- a/BuildSettingExtractorTests/BuildSettingExtractorTests-Info.plist +++ /dev/null @@ -1,22 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - ${EXECUTABLE_NAME} - CFBundleIdentifier - net.tapas-software.${PRODUCT_NAME:rfc1034identifier} - CFBundleInfoDictionaryVersion - 6.0 - CFBundlePackageType - BNDL - CFBundleShortVersionString - 1.0 - CFBundleSignature - ???? - CFBundleVersion - 1 - - diff --git a/BuildSettingExtractorTests/BuildSettingExtractorTests.m b/BuildSettingExtractorTests/BuildSettingExtractorTests.m deleted file mode 100644 index 0f293e6..0000000 --- a/BuildSettingExtractorTests/BuildSettingExtractorTests.m +++ /dev/null @@ -1,38 +0,0 @@ -// -// BuildSettingExtractorTests.m -// BuildSettingExtractorTests -// -// Created by James Dempsey on 9/9/14. -// Copyright (c) 2014 Tapas Software. All rights reserved. -// - -#import -#import "BuildSettingExtractor.h" - -@interface NSObject (BuildSettingExtractorMethods) -- (NSDictionary *)buildSettingsByConfigurationForConfigurations:(NSArray *)buildConfigurations; -@end - -@interface BuildSettingExtractorTests : XCTestCase -@end - -@implementation BuildSettingExtractorTests - -- (void)testThreeBuildConfigurations -{ - NSURL *testFileURL = [[NSBundle bundleForClass:[BuildSettingExtractorTests class]] URLForResource:@"ThreeBuildConfigs" withExtension:@"plist"]; - NSDictionary *testPlist = [NSDictionary dictionaryWithContentsOfURL:testFileURL]; - - NSArray *buildConfigurations = testPlist[@"buildConfigurations"]; - NSDictionary *expectedBuildSettings = testPlist[@"expectedBuildSettings"]; - - BuildSettingExtractor *extractor = [[BuildSettingExtractor alloc] init]; - - NSDictionary *buildSettings = [extractor buildSettingsByConfigurationForConfigurations:buildConfigurations]; - - NSDictionary *sharedBuildSettings = buildSettings[extractor.sharedConfigName]; - - XCTAssert([sharedBuildSettings isEqualToDictionary:expectedBuildSettings], @"Build settings should match"); -} - -@end diff --git a/BuildSettingExtractorTests/TestFiles/ThreeBuildConfigs.plist b/BuildSettingExtractorTests/TestFiles/ThreeBuildConfigs.plist deleted file mode 100644 index 4c6d44f..0000000 --- a/BuildSettingExtractorTests/TestFiles/ThreeBuildConfigs.plist +++ /dev/null @@ -1,92 +0,0 @@ -{ - buildConfigurations = ( - { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_ARC = 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_VERSION = com.apple.compilers.llvm.clang.1_0; - GCC_WARN_64_TO_32_BIT_CONVERSION = YES; - GCC_WARN_ABOUT_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - ONLY_ACTIVE_ARCH = YES; - SDKROOT = macosx; - }; - name = Debug; - }, - { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - 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_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - SDKROOT = macosx; - }; - name = Release; - }, - { - isa = XCBuildConfiguration; - buildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - SDKROOT = macosx; - MACOSX_DEPLOYMENT_TARGET = 10.7; - GCC_WARN_UNUSED_VARIABLE = NO; -/* ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - 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_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; -*/ - }; - name = Other; - } -); - -expectedBuildSettings = { - ALWAYS_SEARCH_USER_PATHS = NO; - SDKROOT = macosx; - MACOSX_DEPLOYMENT_TARGET = 10.7; -/* ARCHS = "$(ARCHS_STANDARD_64_BIT)"; - CLANG_ENABLE_OBJC_ARC = YES; - 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_RETURN_TYPE = YES; - GCC_WARN_UNINITIALIZED_AUTOS = YES; - GCC_WARN_UNUSED_VARIABLE = YES; - MACOSX_DEPLOYMENT_TARGET = 10.7; - SDKROOT = macosx; -*/ - }; -} \ No newline at end of file diff --git a/BuildSettingExtractorTests/en.lproj/InfoPlist.strings b/BuildSettingExtractorTests/en.lproj/InfoPlist.strings deleted file mode 100644 index 477b28f..0000000 --- a/BuildSettingExtractorTests/en.lproj/InfoPlist.strings +++ /dev/null @@ -1,2 +0,0 @@ -/* Localized versions of Info.plist keys */ - diff --git a/CNAME b/CNAME new file mode 100644 index 0000000..a8abbbf --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +buildsettingextractor.com \ No newline at end of file diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..92b66bf --- /dev/null +++ b/Gemfile @@ -0,0 +1,11 @@ +source "https://rubygems.org" +# Hello! This is where you manage which Jekyll version is used to run. +# When you want to use a different version, change it below, save the +# file and run `bundle install`. Run Jekyll with `bundle exec`, like so: +# +# bundle exec jekyll serve + + +# If you want to use GitHub Pages, remove the "gem "jekyll"" above and +# uncomment the line below. To upgrade, run `bundle update github-pages`. +gem "github-pages", "~> 228", group: :jekyll_plugins diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..d0d10f2 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,260 @@ +GEM + remote: https://rubygems.org/ + specs: + activesupport (7.0.4.3) + concurrent-ruby (~> 1.0, >= 1.0.2) + i18n (>= 1.6, < 2) + minitest (>= 5.1) + tzinfo (~> 2.0) + addressable (2.8.1) + public_suffix (>= 2.0.2, < 6.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.11.1) + colorator (1.1.0) + commonmarker (0.23.8) + concurrent-ruby (1.2.2) + dnsruby (1.61.9) + simpleidn (~> 0.1) + em-websocket (0.5.3) + eventmachine (>= 0.12.9) + http_parser.rb (~> 0) + ethon (0.16.0) + ffi (>= 1.15.0) + eventmachine (1.2.7) + execjs (2.8.1) + faraday (2.7.4) + faraday-net_http (>= 2.0, < 3.1) + ruby2_keywords (>= 0.0.4) + faraday-net_http (3.0.2) + ffi (1.15.5) + forwardable-extended (2.6.0) + gemoji (3.0.1) + github-pages (228) + github-pages-health-check (= 1.17.9) + jekyll (= 3.9.3) + jekyll-avatar (= 0.7.0) + jekyll-coffeescript (= 1.1.1) + jekyll-commonmark-ghpages (= 0.4.0) + jekyll-default-layout (= 0.1.4) + jekyll-feed (= 0.15.1) + jekyll-gist (= 1.5.0) + jekyll-github-metadata (= 2.13.0) + jekyll-include-cache (= 0.2.1) + jekyll-mentions (= 1.6.0) + jekyll-optional-front-matter (= 0.3.2) + jekyll-paginate (= 1.1.0) + jekyll-readme-index (= 0.3.0) + jekyll-redirect-from (= 0.16.0) + jekyll-relative-links (= 0.6.1) + jekyll-remote-theme (= 0.4.3) + jekyll-sass-converter (= 1.5.2) + jekyll-seo-tag (= 2.8.0) + jekyll-sitemap (= 1.4.0) + jekyll-swiss (= 1.0.0) + jekyll-theme-architect (= 0.2.0) + jekyll-theme-cayman (= 0.2.0) + jekyll-theme-dinky (= 0.2.0) + jekyll-theme-hacker (= 0.2.0) + jekyll-theme-leap-day (= 0.2.0) + jekyll-theme-merlot (= 0.2.0) + jekyll-theme-midnight (= 0.2.0) + jekyll-theme-minimal (= 0.2.0) + jekyll-theme-modernist (= 0.2.0) + jekyll-theme-primer (= 0.6.0) + jekyll-theme-slate (= 0.2.0) + jekyll-theme-tactile (= 0.2.0) + jekyll-theme-time-machine (= 0.2.0) + jekyll-titles-from-headings (= 0.5.3) + jemoji (= 0.12.0) + kramdown (= 2.3.2) + kramdown-parser-gfm (= 1.1.0) + liquid (= 4.0.4) + mercenary (~> 0.3) + minima (= 2.5.1) + nokogiri (>= 1.13.6, < 2.0) + rouge (= 3.26.0) + terminal-table (~> 1.4) + github-pages-health-check (1.17.9) + addressable (~> 2.3) + dnsruby (~> 1.60) + octokit (~> 4.0) + public_suffix (>= 3.0, < 5.0) + typhoeus (~> 1.3) + html-pipeline (2.14.3) + activesupport (>= 2) + nokogiri (>= 1.4) + http_parser.rb (0.8.0) + i18n (1.12.0) + concurrent-ruby (~> 1.0) + jekyll (3.9.3) + addressable (~> 2.4) + colorator (~> 1.0) + em-websocket (~> 0.5) + i18n (>= 0.7, < 2) + jekyll-sass-converter (~> 1.0) + jekyll-watch (~> 2.0) + kramdown (>= 1.17, < 3) + liquid (~> 4.0) + mercenary (~> 0.3.3) + pathutil (~> 0.9) + rouge (>= 1.7, < 4) + safe_yaml (~> 1.0) + jekyll-avatar (0.7.0) + jekyll (>= 3.0, < 5.0) + jekyll-coffeescript (1.1.1) + coffee-script (~> 2.2) + coffee-script-source (~> 1.11.1) + jekyll-commonmark (1.4.0) + commonmarker (~> 0.22) + jekyll-commonmark-ghpages (0.4.0) + commonmarker (~> 0.23.7) + jekyll (~> 3.9.0) + jekyll-commonmark (~> 1.4.0) + rouge (>= 2.0, < 5.0) + jekyll-default-layout (0.1.4) + jekyll (~> 3.0) + jekyll-feed (0.15.1) + jekyll (>= 3.7, < 5.0) + jekyll-gist (1.5.0) + octokit (~> 4.2) + jekyll-github-metadata (2.13.0) + jekyll (>= 3.4, < 5.0) + octokit (~> 4.0, != 4.4.0) + jekyll-include-cache (0.2.1) + jekyll (>= 3.7, < 5.0) + jekyll-mentions (1.6.0) + html-pipeline (~> 2.3) + jekyll (>= 3.7, < 5.0) + jekyll-optional-front-matter (0.3.2) + jekyll (>= 3.0, < 5.0) + jekyll-paginate (1.1.0) + jekyll-readme-index (0.3.0) + jekyll (>= 3.0, < 5.0) + jekyll-redirect-from (0.16.0) + jekyll (>= 3.3, < 5.0) + jekyll-relative-links (0.6.1) + jekyll (>= 3.3, < 5.0) + jekyll-remote-theme (0.4.3) + addressable (~> 2.0) + jekyll (>= 3.5, < 5.0) + jekyll-sass-converter (>= 1.0, <= 3.0.0, != 2.0.0) + rubyzip (>= 1.3.0, < 3.0) + jekyll-sass-converter (1.5.2) + sass (~> 3.4) + jekyll-seo-tag (2.8.0) + jekyll (>= 3.8, < 5.0) + jekyll-sitemap (1.4.0) + jekyll (>= 3.7, < 5.0) + jekyll-swiss (1.0.0) + jekyll-theme-architect (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-cayman (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-dinky (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-hacker (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-leap-day (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-merlot (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-midnight (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-minimal (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-modernist (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-primer (0.6.0) + jekyll (> 3.5, < 5.0) + jekyll-github-metadata (~> 2.9) + jekyll-seo-tag (~> 2.0) + jekyll-theme-slate (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-tactile (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-theme-time-machine (0.2.0) + jekyll (> 3.5, < 5.0) + jekyll-seo-tag (~> 2.0) + jekyll-titles-from-headings (0.5.3) + jekyll (>= 3.3, < 5.0) + jekyll-watch (2.2.1) + listen (~> 3.0) + jemoji (0.12.0) + gemoji (~> 3.0) + html-pipeline (~> 2.2) + jekyll (>= 3.0, < 5.0) + kramdown (2.3.2) + rexml + kramdown-parser-gfm (1.1.0) + kramdown (~> 2.0) + liquid (4.0.4) + listen (3.8.0) + rb-fsevent (~> 0.10, >= 0.10.3) + rb-inotify (~> 0.9, >= 0.9.10) + mercenary (0.3.6) + mini_portile2 (2.8.1) + minima (2.5.1) + jekyll (>= 3.5, < 5.0) + jekyll-feed (~> 0.9) + jekyll-seo-tag (~> 2.1) + minitest (5.18.0) + nokogiri (1.14.2) + mini_portile2 (~> 2.8.0) + racc (~> 1.4) + octokit (4.25.1) + faraday (>= 1, < 3) + sawyer (~> 0.9) + pathutil (0.16.2) + forwardable-extended (~> 2.6) + public_suffix (4.0.7) + racc (1.6.2) + rb-fsevent (0.11.2) + rb-inotify (0.10.1) + ffi (~> 1.0) + rexml (3.2.5) + rouge (3.26.0) + ruby2_keywords (0.0.5) + rubyzip (2.3.2) + safe_yaml (1.0.5) + sass (3.7.4) + sass-listen (~> 4.0.0) + sass-listen (4.0.0) + rb-fsevent (~> 0.9, >= 0.9.4) + rb-inotify (~> 0.9, >= 0.9.7) + sawyer (0.9.2) + addressable (>= 2.3.5) + faraday (>= 0.17.3, < 3) + simpleidn (0.2.1) + unf (~> 0.1.4) + terminal-table (1.8.0) + unicode-display_width (~> 1.1, >= 1.1.1) + typhoeus (1.4.0) + ethon (>= 0.9.0) + tzinfo (2.0.6) + concurrent-ruby (~> 1.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.8.2) + unicode-display_width (1.8.0) + +PLATFORMS + ruby + +DEPENDENCIES + github-pages (~> 228) + +BUNDLED WITH + 2.1.4 diff --git a/ReadMe.md b/ReadMe.md deleted file mode 100644 index a3e479e..0000000 --- a/ReadMe.md +++ /dev/null @@ -1,34 +0,0 @@ -BuildSettingExtractor Read Me -================================= - -This is a utility to extract build configuration settings from an Xcode project into a set of xcconfig files. - -If you decide to move Xcode build settings out of your project file and into xcconfig files, this utility can make that initial move easier. It’s also an easy way for the curious to take a look at the build settings in a project without fear of accidentally changing them. - -For each target and the project itself, BuildSettingExtractor will generate one xcconfig file per build configuration plus a shared xcconfig file with all shared build settings for that target. - -Using the app: - -1. Launch BuildSettingExtractor -2. Drag an Xcode Project file (xcodeproj) to the app window -3. Choose a destination folder - -**Notes** - -- BuildSettingExtractor does not alter the original Xcode project file. -- BuildSettingExtractor does not update existing xcconfig files, it does a one-time extraction. -- BuildSettingExtractor does not hoist common target build settings to the project level. -- Do not taunt BuildSettingExtractor. - -**Version History** - -*Version 1.0* -*January 30, 2015* - -– Initial version of BuildSettingExtractor. -– Generates xcconfig files from the build settings in an Xcode project. - -***** - -*This code is provide as-is with no warranties express or implied. -Please put projects in source control to guard against things going horribly awry.* diff --git a/_config.yml b/_config.yml new file mode 100644 index 0000000..87c4ad7 --- /dev/null +++ b/_config.yml @@ -0,0 +1,19 @@ +title: BuildSettingExtractor +email: info@jamesdempsey.net +description: >- # this means to ignore newlines until "url:" + BuildSettingExtractor: The fastest way to extract Xcode build settings. +url: "https://buildsettingextractor.com" # the base hostname & protocol for your site, e.g. http://example.com + +# Build settings + +# Exclude from processing. +# The following items will not be processed, by default. Create a custom list +# to override the default setting. +# exclude: +# - Gemfile +# - Gemfile.lock +# - node_modules +# - vendor/bundle/ +# - vendor/cache/ +# - vendor/gems/ +# - vendor/ruby/ \ No newline at end of file diff --git a/css/main.css b/css/main.css new file mode 100644 index 0000000..6349992 --- /dev/null +++ b/css/main.css @@ -0,0 +1,232 @@ +:root { + color-scheme: light dark; +} + +body +{ + --text-color: rgba(255, 255, 255, 0.9); + background-color: maroon; + font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", Helvetica, sans-serif; + font-size: 1.25rem; + color: var(--text-color); + /* + --title-box-color: purple; + --icon-box-color: green; + --hero-box-color: teal; + --text-box-color: blue; + */ +} + +.notice-text { color: rgba(255, 255, 140, 0.9); } + +a { color: var(--text-color); } + +.hero +{ + margin: 2.5rem auto; + display: flex; + align-items: center; + justify-items: center; + align-content: center; + flex-wrap: wrap; + height: 80%; + width: 80%; + max-width: 740px; + min-width: 300px; + background-color: var(--hero-box-color); +} + +.icon-box +{ + margin: 0 auto; + background-color: var(--icon-box-color); +} + +.icon +{ + width: 200px; +} + +.title-box +{ + margin: 1rem auto; + padding: 0 1.5rem; + background-color: var(--title-box-color); +} + +.title +{ + font-weight: bold; + text-align: center; + margin: 0 auto; + font-size: 2.75rem; +} + +.subtitle +{ + text-align: center; + margin: 0 auto; + font-size: 1.5rem; +} + +body > p +{ + margin: 0 auto 1.5rem; + width: 80%; + max-width: 740px; + background-color: var(--text-box-color); +} + +h1 +{ + margin: 3rem auto .25em; + width: 80%; + max-width: 740px; + background-color: var(--text-box-color); + font-size: 1.5rem; +} + +h2 +{ + margin: 0 auto .25em; + width: 80%; + max-width: 740px; + background-color: var(--text-box-color); + font-size: 1.25rem; +} + +.text +{ + margin: 0 auto 1.5rem; + width: 80%; + max-width: 740px; + background-color: var(--text-box-color); +} + +.code +{ + margin: 1.5rem; + font-family: SF Mono,Menlo,monospace; + font-size: 1rem; + white-space: pre; + overflow-x: scroll; +} + +.code-box +{ + margin: 0 auto 1.5rem; + width: 80%; + max-width: 740px; + background-color: rgba(255, 255, 255, 0.15); + border: 1px solid #730000; +} + +.download +{ + text-align: center; + background-color: rgba(255, 255, 255, 0.15); + border: 1px solid #730000; + border-radius: 15px; + margin: 2.5rem auto; + width: 60%; + max-width: 600px; + min-width: 256px; + padding: .5rem; +} + +.download a +{ + text-decoration: underline; + font-size: 1.3rem; +} + +.drag-screenshot +{ + display: block; + margin: 2.5rem auto 1rem; + width: 80%; + max-width: 646px; +} + +.screenshot +{ + display: block; + margin: 1.5rem auto; + width: 80%; + max-width: 740px; +} + +footer +{ + background-color: #600000; + padding: 2rem 0; + margin-top: 4rem; + text-align: center; + font-size: 1rem; +} + +footer a +{ + font-size: 1.25rem; + font-weight: bold; + text-decoration: none; + color: #0B82FE; +} + +footer a:hover +{ + text-decoration: underline; +} + +.subtle +{ + font-size: 1rem; + font-weight: normal; +} + +@media (max-width: 680px) +{ + .hero { margin: 2.5rem auto 1rem; } + .icon { width: 150px; } + .title { font-size: 2rem; } + .subtitle { font-size: 1.5rem; } + .code { font-size: 1rem; } + footer { padding: 1.5rem 0; } +} + +@media (max-width: 450px) +{ + .icon { width: 125px; } + .title { font-size: 1.6rem; } + .subtitle { font-size: 1.25rem; } +} + +@media (max-width: 390px) +{ + body { font-size: 1rem; } + + h1 + { + margin: 2rem auto .25em; + font-size: 1.2rem; + } + + .code + { + font-size: .75rem; + margin: .5rem; + } + + .icon { width: 110px; } + .title { font-size: 1.4rem; } + .subtitle { font-size: 1.1rem; } + footer { padding: 1rem 0; } + + .download + { + margin: 1.5rem auto; + padding: 1rem; + } + + .download a { font-size: 1.1rem; } +} diff --git a/css/normalize.css b/css/normalize.css new file mode 100644 index 0000000..b0c1902 --- /dev/null +++ b/css/normalize.css @@ -0,0 +1,349 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ + +/* Document + ========================================================================== */ + +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ + +html { + line-height: 1.15; /* 1 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/* Sections + ========================================================================== */ + +/** + * Remove the margin in all browsers. + */ + +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ + +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ + +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ + +hr { + box-sizing: content-box; /* 1 */ + height: 0; /* 1 */ + overflow: visible; /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +pre { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ + +/** + * Remove the gray background on active links in IE 10. + */ + +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ + +abbr[title] { + border-bottom: none; /* 1 */ + text-decoration: underline; /* 2 */ + text-decoration: underline dotted; /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ + +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ + +code, +kbd, +samp { + font-family: monospace, monospace; /* 1 */ + font-size: 1em; /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ + +/** + * Remove the border on images inside links in IE 10. + */ + +img { + border-style: none; +} + +/* Forms + ========================================================================== */ + +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ + +button, +input, +optgroup, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 1 */ + line-height: 1.15; /* 1 */ + margin: 0; /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ + +button, +input { /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ + +button, +select { /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ + +button, +[type="button"], +[type="reset"], +[type="submit"] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ + +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ + +button:-moz-focusring, +[type="button"]:-moz-focusring, +[type="reset"]:-moz-focusring, +[type="submit"]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ + +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ + +legend { + box-sizing: border-box; /* 1 */ + color: inherit; /* 2 */ + display: table; /* 1 */ + max-width: 100%; /* 1 */ + padding: 0; /* 3 */ + white-space: normal; /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ + +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ + +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ + +[type="checkbox"], +[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ + +[type="number"]::-webkit-inner-spin-button, +[type="number"]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ + +[type="search"] { + -webkit-appearance: textfield; /* 1 */ + outline-offset: -2px; /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ + +[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ + +::-webkit-file-upload-button { + -webkit-appearance: button; /* 1 */ + font: inherit; /* 2 */ +} + +/* Interactive + ========================================================================== */ + +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ + +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ + +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ + +/** + * Add the correct display in IE 10+. + */ + +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ + +[hidden] { + display: none; +} \ No newline at end of file diff --git a/img/bse_icon-256.png b/img/bse_icon-256.png new file mode 100644 index 0000000..5948368 Binary files /dev/null and b/img/bse_icon-256.png differ diff --git a/img/bse_icon-32.png b/img/bse_icon-32.png new file mode 100644 index 0000000..e0fbcf0 Binary files /dev/null and b/img/bse_icon-32.png differ diff --git a/img/bse_prefs_contents_dark.png b/img/bse_prefs_contents_dark.png new file mode 100644 index 0000000..bd55bd3 Binary files /dev/null and b/img/bse_prefs_contents_dark.png differ diff --git a/img/bse_prefs_contents_light.png b/img/bse_prefs_contents_light.png new file mode 100644 index 0000000..9331691 Binary files /dev/null and b/img/bse_prefs_contents_light.png differ diff --git a/img/bse_prefs_files_dark.png b/img/bse_prefs_files_dark.png new file mode 100644 index 0000000..88d2c66 Binary files /dev/null and b/img/bse_prefs_files_dark.png differ diff --git a/img/bse_prefs_files_light.png b/img/bse_prefs_files_light.png new file mode 100644 index 0000000..e283fc4 Binary files /dev/null and b/img/bse_prefs_files_light.png differ diff --git a/img/drag_to_window_dark.png b/img/drag_to_window_dark.png new file mode 100644 index 0000000..6c6ae66 Binary files /dev/null and b/img/drag_to_window_dark.png differ diff --git a/img/drag_to_window_light.png b/img/drag_to_window_light.png new file mode 100644 index 0000000..4d7911a Binary files /dev/null and b/img/drag_to_window_light.png differ diff --git a/img/summary_image.png b/img/summary_image.png new file mode 100644 index 0000000..18c7506 Binary files /dev/null and b/img/summary_image.png differ diff --git a/index.html b/index.html new file mode 100644 index 0000000..09910dd --- /dev/null +++ b/index.html @@ -0,0 +1,178 @@ +--- +--- + + + + + + +BuildSettingExtractor + + + + + + + + + + + + + + + + + + + +{% if jekyll.environment != "development" %} + +{% endif %} + + +
+
+ BuildSettingExtractor icon +
+
+

+ BuildSettingExtractor +

+

+ The fastest way to extract Xcode build settings. +

+
+
+
+

+ BuildSettingExtractor is a free, open-source utility that extracts build settings from an Xcode project into a set of xcconfig files. +

+

+ When you’re moving Xcode build settings out of your project file and into xcconfig files, this handy utility makes that initial move a lot easier. It’s also an easy way for the curious to take a look at the build settings in a project without fear of accidentally changing them. +

+
+
+

+ Download BuildSettingExtractor +

+

It’s Free! Requires macOS 10.14 or later

+

Now Updated for Xcode 16!

+
+

+ Easy +

+

+ Just drag an Xcode project file to the window or right to the app icon itself. +

+

+ Pick a destination and BuildSettingExtractor generates xcconfig files for each target in the project, plus the project itself. +

+ + +Project file dragged to app window + +

+ Safe +

+

+ Nobody wants a corrupted Xcode project file. That’s why BuildSettingExtractor doesn’t make any changes. It reads the project file and extracts the settings, but never edits the project file itself. +

+

+ Informative +

+

+ There are hundreds of build settings and it’s not always obvious what they mean. BuildSettingExtractor annotates each setting with an explanatory comment gleaned directly from Xcode. +

+

+ Information about each build setting is available wherever you are looking at the xcconfig file—in GitHub, text editors, diff tools. You don’t need a trip to a reference webpage or Xcode help. +

+

+ Of course if you prefer, you can turn these comments off in the Settings window for a much more pithy xcconfig file. +

+
+

// Framework Search Paths +// +// This is a list of paths to folders containing frameworks to be +// searched by the compiler for both included or imported header +// files when compiling C, Objective-C, C++, or Objective-C++, and +// by the linker for frameworks used by the product. Paths are +// delimited by whitespace, so any paths with spaces in them need +// to be properly quoted. +// [-F] + +FRAMEWORK_SEARCH_PATHS = $(DEVELOPER_FRAMEWORKS_DIR) $(inherited) + + +// Info.plist File +// +// This is the project-relative path to the plist file that +// contains the Info.plist information used by bundles. + +INFOPLIST_FILE = MyApp/MyApp-Info.plist +

+
+

+ Flexible +

+

+ Every developer has their own way of working. BuildSettingExtractor gives you a lot of options for how you want your xcconfig files generated. +

+

+ Flexible File Layout +

+

+ Customize the file names of the project and shared build setting files. Customize the word separator for camel case, kebab case, snake case, or whatever you’d like. Customize the name of the folder that will contain all the generated files. Customize how you want the files organized. +

+

+ A handy preview displays an example of how files will be organized and named. +

+

+ By default BuildSettingExtractor will open the generated folder in Finder so it’s easy to inspect the files you just generated. +

+

+ You can even have BuildSettingExtractor automatically save the generated files right next to the source project file, where you would typically add a folder of xcconfig files. +

+ + +File layout settings pane of BuildSettingExtractor app + +

+ Flexible Contents +

+

+ Have BuildSettingExtractor generate xcconfig files with rich, informative build setting comments. Or generate a concise file containing just the settings. +

+

+ Adjust the lines between settings to give each setting more or less breathing room for readability. Have the generated files align the setting values. +

+

+ The Contents settings pane shows example output so you don’t have to figure out what you want by trial and error. +

+ + +Contents settings pane of BuildSettingExtractor app + +

+ Open +

+

+ BuildSettingExtractor is a free, open-source utility. The project was created and is maintained by James Dempsey. +

+

You can find the code as well as past releases in the project repository on GitHub. +

+

+ Your feedback is welcome. Please report any issues or feature requests using the project issue tracker.

+ + +