From 8a169f153632b5d24e36a8414f4340c9bed2c983 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Fri, 31 Jul 2020 15:52:06 -0700 Subject: [PATCH 01/69] Add Xcode 12.0 project file format as a supported version. - Resolves #65 --- BuildSettingExtractor/BuildSettingExtractor.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildSettingExtractor/BuildSettingExtractor.m b/BuildSettingExtractor/BuildSettingExtractor.m index ce15630..586629b 100644 --- a/BuildSettingExtractor/BuildSettingExtractor.m +++ b/BuildSettingExtractor/BuildSettingExtractor.m @@ -15,7 +15,7 @@ static NSSet *_compatibilityVersionStringSet; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _compatibilityVersionStringSet = [NSSet setWithObjects:@"Xcode 3.2", @"Xcode 6.3", @"Xcode 8.0", @"Xcode 9.3", @"Xcode 10.0", @"Xcode 11.0", nil]; + _compatibilityVersionStringSet = [NSSet setWithObjects:@"Xcode 3.2", @"Xcode 6.3", @"Xcode 8.0", @"Xcode 9.3", @"Xcode 10.0", @"Xcode 11.0", @"Xcode 12.0", nil]; }); return _compatibilityVersionStringSet; } From 4b19d08e74318c94d20520f2b36e27abafbffa95 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Fri, 31 Jul 2020 15:55:17 -0700 Subject: [PATCH 02/69] Update setting info subpaths - Add two new subpaths - Move one set of deprecated paths - Add new name for a subpath file --- .../BuildSettingInfoSubpaths.plist | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/BuildSettingExtractor/BuildSettingInfoSubpaths.plist b/BuildSettingExtractor/BuildSettingInfoSubpaths.plist index 3e2a512..fe4428e 100644 --- a/BuildSettingExtractor/BuildSettingInfoSubpaths.plist +++ b/BuildSettingExtractor/BuildSettingInfoSubpaths.plist @@ -35,6 +35,13 @@ deprecatedSubpathsByVersion + 1200 + + + Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/Native Build System.strings + Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/Native Build System.xcspec + + 0900 @@ -67,6 +74,10 @@ Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/Metal Compiler.strings + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalCompiler.strings + + + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalLinker.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Core Data.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.model.coredata.strings @@ -80,6 +91,9 @@ Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Core Data.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.model.persistence.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Core Data.xcplugin/Contents/Resources/English.lproj/com.apple.compilers.model.persistence.strings + + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/IBCompilerPlugin.xcplugin/Contents/Resources/AssetCatalogCompiler.xcspec + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/IBCompilerPlugin.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.assetcatalog.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/IBCompilerPlugin.xcplugin/Contents/Resources/English.lproj/com.apple.compilers.assetcatalog.strings @@ -100,10 +114,6 @@ Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/IBCompilerPlugin.xcplugin/Contents/Resources/en.lproj/Interface Builder Storyboard Postprocessor.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/IBCompilerPlugin.xcplugin/Contents/Resources/English.lproj/Interface Builder Storyboard Postprocessor.strings - - Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/Native Build System.strings - Contents/Developer/Platforms/MacOSX.platform/Developer/Library/Xcode/Specifications/Native Build System.xcspec - Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/en.lproj/OpenCL.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/CoreBuildTasks.xcplugin/Contents/Resources/English.lproj/OpenCL.strings From 6e1a1a27d3df3937fe14516080998ce374749c8b Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 1 Aug 2020 06:28:16 -0700 Subject: [PATCH 03/69] Add mechanism to include newly introduced info subpaths - Add code to include subpaths based on Xcode version - Move new MetalLinker subpath to introduced subpaths in plist - Resolves #69 --- .../BuildSettingCommentGenerator.m | 17 +++++++++++++++++ .../BuildSettingInfoSubpaths.plist | 12 +++++++++--- 2 files changed, 26 insertions(+), 3 deletions(-) diff --git a/BuildSettingExtractor/BuildSettingCommentGenerator.m b/BuildSettingExtractor/BuildSettingCommentGenerator.m index 27f8d4d..71cd9d2 100644 --- a/BuildSettingExtractor/BuildSettingCommentGenerator.m +++ b/BuildSettingExtractor/BuildSettingCommentGenerator.m @@ -189,6 +189,23 @@ - (BOOL)loadBuildSettingInfo { if (subpathsToAdd) { buildSettingInfoSubpaths = [buildSettingInfoSubpaths arrayByAddingObjectsFromArray:subpathsToAdd]; } + + // Add introduced subpaths that are valid in the version of Xcode we are using + subpathsToAdd = nil; + NSDictionary *introducedSubpaths = buildSettingInfoDict[@"introducedSubpathsByVersion"]; + for (NSString *versionKey in [introducedSubpaths allKeys]) { + NSInteger minVersion = [versionKey integerValue]; + if (xcodeVersion >= minVersion) { + if (!subpathsToAdd) { + subpathsToAdd = [NSMutableArray array]; + } + [subpathsToAdd addObjectsFromArray:introducedSubpaths[versionKey]]; + } + } + if (subpathsToAdd) { + buildSettingInfoSubpaths = [buildSettingInfoSubpaths arrayByAddingObjectsFromArray:subpathsToAdd]; + } + // Rather than track exactly what Xcode versions contain which files, group versions of an expected file in an array. // Log if no file in the group can be read in. diff --git a/BuildSettingExtractor/BuildSettingInfoSubpaths.plist b/BuildSettingExtractor/BuildSettingInfoSubpaths.plist index fe4428e..1a477da 100644 --- a/BuildSettingExtractor/BuildSettingInfoSubpaths.plist +++ b/BuildSettingExtractor/BuildSettingInfoSubpaths.plist @@ -49,6 +49,15 @@ + introducedSubpathsByVersion + + 1200 + + + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalLinker.strings + + + subpaths @@ -76,9 +85,6 @@ Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/Metal Compiler.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalCompiler.strings - - Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalLinker.strings - Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Core Data.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.model.coredata.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Core Data.xcplugin/Contents/Resources/English.lproj/com.apple.compilers.model.coredata.strings From 904182f5ed65ded62922afa6a679fea4c044ce59 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 1 Aug 2020 17:30:29 -0700 Subject: [PATCH 04/69] Accept automatic Xcode version check updates --- BuildSettingExtractor.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/BuildSettingExtractor.xcscheme | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BuildSettingExtractor.xcodeproj/project.pbxproj b/BuildSettingExtractor.xcodeproj/project.pbxproj index da3255b..ea29fe5 100644 --- a/BuildSettingExtractor.xcodeproj/project.pbxproj +++ b/BuildSettingExtractor.xcodeproj/project.pbxproj @@ -297,7 +297,7 @@ 53719E8719BF4C6D005D3DE0 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1140; + LastUpgradeCheck = 1150; ORGANIZATIONNAME = "Tapas Software"; TargetAttributes = { 53719EAF19BF4C6D005D3DE0 = { diff --git a/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme b/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme index 1ef233c..eea0c43 100644 --- a/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme +++ b/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme @@ -1,6 +1,6 @@ Date: Sat, 1 Aug 2020 17:46:36 -0700 Subject: [PATCH 05/69] Convert main scheme to use test plan --- .../project.pbxproj | 2 ++ .../xcschemes/BuildSettingExtractor.xcscheme | 8 ++++- .../BuildSettingExtractor.xctestplan | 29 +++++++++++++++++++ 3 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 BuildSettingExtractorTests/BuildSettingExtractor.xctestplan diff --git a/BuildSettingExtractor.xcodeproj/project.pbxproj b/BuildSettingExtractor.xcodeproj/project.pbxproj index ea29fe5..5c9ca7b 100644 --- a/BuildSettingExtractor.xcodeproj/project.pbxproj +++ b/BuildSettingExtractor.xcodeproj/project.pbxproj @@ -82,6 +82,7 @@ 53BC11301A817447005E2FD2 /* BuildSettingCommentGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = BuildSettingCommentGenerator.m; sourceTree = ""; }; 53C7618023F85AE20024B432 /* SampleFileStructureGenerator.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SampleFileStructureGenerator.h; sourceTree = ""; }; 53C7618123F85AE20024B432 /* SampleFileStructureGenerator.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SampleFileStructureGenerator.m; sourceTree = ""; }; + 53DCD48924D6440400D512FB /* BuildSettingExtractor.xctestplan */ = {isa = PBXFileReference; lastKnownFileType = text; path = BuildSettingExtractor.xctestplan; 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 = ""; }; @@ -208,6 +209,7 @@ 53719EB619BF4C6D005D3DE0 /* BuildSettingExtractorTests */ = { isa = PBXGroup; children = ( + 53DCD48924D6440400D512FB /* BuildSettingExtractor.xctestplan */, 53719EBC19BF4C6D005D3DE0 /* BuildSettingExtractorTests.m */, 53F372F61A7C3164006118CB /* TestFiles */, 53719EB719BF4C6D005D3DE0 /* Supporting Files */, diff --git a/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme b/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme index eea0c43..6e93261 100644 --- a/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme +++ b/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme @@ -1,7 +1,7 @@ + version = "1.7"> @@ -27,6 +27,12 @@ selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" shouldUseLaunchSchemeArgsEnv = "YES"> + + + + diff --git a/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan b/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan new file mode 100644 index 0000000..533832e --- /dev/null +++ b/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan @@ -0,0 +1,29 @@ +{ + "configurations" : [ + { + "id" : "A59CFD73-15EC-4B32-9336-A775AA56A72E", + "name" : "Standard", + "options" : { + + } + } + ], + "defaultOptions" : { + "codeCoverage" : false, + "targetForVariableExpansion" : { + "containerPath" : "container:BuildSettingExtractor.xcodeproj", + "identifier" : "53719E8E19BF4C6D005D3DE0", + "name" : "BuildSettingExtractor" + } + }, + "testTargets" : [ + { + "target" : { + "containerPath" : "container:BuildSettingExtractor.xcodeproj", + "identifier" : "53719EAF19BF4C6D005D3DE0", + "name" : "BuildSettingExtractorTests" + } + } + ], + "version" : 1 +} From 6aeffc9a32afb7117a63316154d34caab38708d6 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 1 Aug 2020 18:10:07 -0700 Subject: [PATCH 06/69] Add default destination folder name - Add defaultDestinationFolderName class property to BuildSettingExtractor - Use new property for initial defaults dictionary --- BuildSettingExtractor/AppConstants+Categories.m | 2 +- BuildSettingExtractor/BuildSettingExtractor.h | 1 + BuildSettingExtractor/BuildSettingExtractor.m | 4 ++++ 3 files changed, 6 insertions(+), 1 deletion(-) diff --git a/BuildSettingExtractor/AppConstants+Categories.m b/BuildSettingExtractor/AppConstants+Categories.m index 57d0537..f5b788a 100644 --- a/BuildSettingExtractor/AppConstants+Categories.m +++ b/BuildSettingExtractor/AppConstants+Categories.m @@ -37,7 +37,7 @@ - (void)tps_registerApplicationDefaults { TPSLinesBetweenBuildSettingsWithInfo : @3, TPSTargetFoldersEnabled : @(NO), TPSProjectFolderEnabled : @(NO), - TPSDestinationFolderName : @"xcconfig", + TPSDestinationFolderName : BuildSettingExtractor.defaultDestinationFolderName, TPSAutosaveInProjectFolder: @(NO), TPSAlignBuildSettingValues: @(NO) }; diff --git a/BuildSettingExtractor/BuildSettingExtractor.h b/BuildSettingExtractor/BuildSettingExtractor.h index c3fc550..cc25630 100644 --- a/BuildSettingExtractor/BuildSettingExtractor.h +++ b/BuildSettingExtractor/BuildSettingExtractor.h @@ -30,6 +30,7 @@ NS_ASSUME_NONNULL_BEGIN + (NSString *)defaultSharedConfigName; // "Shared" is the default. + (NSString *)defaultProjectConfigName; // "Project" is the default. + (NSString *)defaultNameSeparator; // "-" (hyphen) is the default. ++ (NSString *)defaultDestinationFolderName; // "xcconfig" is the default. // The name that will be used to name common / shared config files. diff --git a/BuildSettingExtractor/BuildSettingExtractor.m b/BuildSettingExtractor/BuildSettingExtractor.m index 586629b..052df07 100644 --- a/BuildSettingExtractor/BuildSettingExtractor.m +++ b/BuildSettingExtractor/BuildSettingExtractor.m @@ -43,6 +43,10 @@ + (NSString *)defaultNameSeparator { return @"-"; } ++ (NSString *)defaultDestinationFolderName { + return @"xcconfig"; +} + - (instancetype)init { self = [super init]; if (self) { From 19d92306e5b64bcfc36f20fb937eb1d738fbc10f Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 1 Aug 2020 18:12:04 -0700 Subject: [PATCH 07/69] Update error code typedef name to more descriptive name --- BuildSettingExtractor/Constants+Categories.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildSettingExtractor/Constants+Categories.h b/BuildSettingExtractor/Constants+Categories.h index 288b9a5..7239a6b 100644 --- a/BuildSettingExtractor/Constants+Categories.h +++ b/BuildSettingExtractor/Constants+Categories.h @@ -8,7 +8,7 @@ @import Foundation; -typedef NS_ENUM(NSUInteger, AppErrorCodes) { +typedef NS_ENUM(NSUInteger, BuildSettingExtractorErrorCodes) { UnsupportedXcodeVersion = 100, DirectoryContainsBuildConfigFiles = 101, ProjectSettingsNamingConflict = 102, From 7afe6762aaab76137d5e1996d74164d62e22b182 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 1 Aug 2020 18:19:42 -0700 Subject: [PATCH 08/69] Ensure required name fields cannot be set to an empty value - In Preferences storyboar file - Set view controller as delegate of name fields - Assign each text field in file layout prefs panel a tag - Update combo box text field to continously update - Assign placeholder text of 'None' to separator string field - Accept automatic Xcode file changes - Add enum to give each tag a name - Make FileLayoutPreferencesViewController an NSTextFieldDelegate - Replace empty string input with appropriate default value - Resolves #64 --- .../Base.lproj/Preferences.storyboard | 32 ++++++++++++------- .../FileLayoutPreferencesViewController.m | 26 ++++++++++++++- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard b/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard index f735302..afb01af 100644 --- a/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard +++ b/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard @@ -1,8 +1,8 @@ - + - + @@ -13,7 +13,7 @@ - + @@ -86,7 +86,7 @@ - + @@ -103,7 +103,7 @@ - + @@ -190,7 +190,7 @@ - + @@ -205,11 +205,12 @@ - + + @@ -226,7 +227,7 @@ - + @@ -243,6 +244,7 @@ + @@ -259,7 +261,7 @@ - + @@ -271,9 +273,10 @@ - + + None @@ -351,7 +354,7 @@ - + @@ -369,7 +372,12 @@ - + + + + + + diff --git a/BuildSettingExtractor/Preferences/FileLayoutPreferencesViewController.m b/BuildSettingExtractor/Preferences/FileLayoutPreferencesViewController.m index 23feac7..430fd8e 100644 --- a/BuildSettingExtractor/Preferences/FileLayoutPreferencesViewController.m +++ b/BuildSettingExtractor/Preferences/FileLayoutPreferencesViewController.m @@ -9,9 +9,18 @@ #import "FileLayoutPreferencesViewController.h" #import "AppConstants+Categories.h" #import "SampleFileStructureGenerator.h" +#import "BuildSettingExtractor.h" +typedef NS_ENUM(NSUInteger, PreferencesInterfaceElementTags) { + ProjectNameTextField = 101, + SharedNameTextField = 102, + SeparatorTextField = 103, + DestinationFolderNameTextField = 104 +}; -@interface FileLayoutPreferencesViewController () +#pragma mark - + +@interface FileLayoutPreferencesViewController () @property (weak) IBOutlet NSOutlineView *outlineView; @property Item *rootItem; @end @@ -35,6 +44,21 @@ - (void)viewWillAppear { [self updateOutlineView]; } +- (BOOL)control:(NSControl *)control textShouldEndEditing:(NSText *)fieldEditor { + if ([fieldEditor.string isEqualToString:@""]) { + if (control.tag == ProjectNameTextField) { + fieldEditor.string = BuildSettingExtractor.defaultProjectConfigName; + } + else if (control.tag == SharedNameTextField) { + fieldEditor.string = BuildSettingExtractor.defaultSharedConfigName; + } + else if (control.tag == DestinationFolderNameTextField) { + fieldEditor.string = BuildSettingExtractor.defaultDestinationFolderName; + } + } + return YES; +} + -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { [self updateOutlineView]; } From 86274b3f61f8d627962750309bd77f725119424c Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 1 Aug 2020 18:29:25 -0700 Subject: [PATCH 09/69] Allow for no word separator in names of generated files - Allow the use of an empty string to separate words in generated file names - Add EmptyStringTransformer value transformer to convert nil to empty string - Initialize new transformer in AppDelegate +initialize - In Preferences storyboary set separator text field to use value transformer - Resolves #63 --- BuildSettingExtractor/AppDelegate.m | 5 ++++ BuildSettingExtractor/Constants+Categories.h | 5 ++++ BuildSettingExtractor/Constants+Categories.m | 23 +++++++++++++++++++ .../Base.lproj/Preferences.storyboard | 3 ++- 4 files changed, 35 insertions(+), 1 deletion(-) diff --git a/BuildSettingExtractor/AppDelegate.m b/BuildSettingExtractor/AppDelegate.m index e6b4258..a74a4d9 100644 --- a/BuildSettingExtractor/AppDelegate.m +++ b/BuildSettingExtractor/AppDelegate.m @@ -26,6 +26,11 @@ @interface AppDelegate () @implementation AppDelegate ++ (void)initialize { + EmptyStringTransformer *transformer = [[EmptyStringTransformer alloc] init]; + [NSValueTransformer setValueTransformer:transformer forName:@"EmptyStringTransformer"]; +} + - (void)awakeFromNib { self.dragFileView.target = self; self.dragFileView.action = @selector(handleDroppedFile:); diff --git a/BuildSettingExtractor/Constants+Categories.h b/BuildSettingExtractor/Constants+Categories.h index 7239a6b..ec74a9d 100644 --- a/BuildSettingExtractor/Constants+Categories.h +++ b/BuildSettingExtractor/Constants+Categories.h @@ -59,3 +59,8 @@ extern NSErrorDomain const TPSBuildSettingExtractorErrorDomain; + (NSError *)errorForDestinationContainsBuildConfigFiles; @end + +#pragma mark - + +@interface EmptyStringTransformer: NSValueTransformer {} +@end diff --git a/BuildSettingExtractor/Constants+Categories.m b/BuildSettingExtractor/Constants+Categories.m index b9292db..d90e012 100644 --- a/BuildSettingExtractor/Constants+Categories.m +++ b/BuildSettingExtractor/Constants+Categories.m @@ -125,3 +125,26 @@ + (NSError *)errorForDestinationContainsBuildConfigFiles { } @end + +#pragma mark - + +@implementation EmptyStringTransformer ++ (Class)transformedValueClass { return [NSString class]; } ++ (BOOL)allowsReverseTransformation { return YES; } + +- (id)transformedValue:(id)value { + if ([value isKindOfClass:[NSString class]] && [value isEqualToString:@""]) { + return nil; + } else if (value == nil) { + return @""; + } else { + return value; + } +} + +- (id)reversedTransformedValue:(id)value { + if (value == nil) { return @""; } + else { return value; } +} +@end + diff --git a/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard b/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard index afb01af..c061c5b 100644 --- a/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard +++ b/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard @@ -273,10 +273,11 @@ - + None + EmptyStringTransformer From cd58866c909296cfcb7d33e69d8dcb991712ece5 Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sun, 2 Aug 2020 00:18:00 -0700 Subject: [PATCH 10/69] Support dragging project file to app icon to start extraction - Add Xcode project document type to Info.plist - Move defaults registration to -applicationWillFinishLaunching: - Implement application:openURLs: to handle dragged URLs - Only the first URL is processed - Handling a single project file is the expected common case - Resolves #58 --- BuildSettingExtractor/AppDelegate.m | 6 +++++- .../BuildSettingExtractor-Info.plist | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/BuildSettingExtractor/AppDelegate.m b/BuildSettingExtractor/AppDelegate.m index a74a4d9..982fad8 100644 --- a/BuildSettingExtractor/AppDelegate.m +++ b/BuildSettingExtractor/AppDelegate.m @@ -240,9 +240,13 @@ - (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender return YES; } -- (void)applicationDidFinishLaunching:(NSNotification *)notification { +- (void)applicationWillFinishLaunching:(NSNotification *)notification { [[NSUserDefaults standardUserDefaults] tps_registerApplicationDefaults]; } +- (void)application:(NSApplication *)application openURLs:(NSArray *)urls { + NSURL *fileURL = urls.firstObject; + if (fileURL) { [self processXcodeProjectAtURL:fileURL]; } +} @end diff --git a/BuildSettingExtractor/BuildSettingExtractor-Info.plist b/BuildSettingExtractor/BuildSettingExtractor-Info.plist index 40e8dae..1549c79 100644 --- a/BuildSettingExtractor/BuildSettingExtractor-Info.plist +++ b/BuildSettingExtractor/BuildSettingExtractor-Info.plist @@ -4,6 +4,21 @@ CFBundleDevelopmentRegion en + CFBundleDocumentTypes + + + CFBundleTypeExtensions + + xcodeproj + + CFBundleTypeRole + Editor + LSItemContentTypes + + com.apple.xcode.project + + + CFBundleExecutable ${EXECUTABLE_NAME} CFBundleIconFile From 1b2714900e3a6645e0f4c0c668888532a9ad9bed Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sun, 2 Aug 2020 00:22:28 -0700 Subject: [PATCH 11/69] Add configurations to test plan to include sanitizers --- .../BuildSettingExtractor.xctestplan | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan b/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan index 533832e..9a269be 100644 --- a/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan +++ b/BuildSettingExtractorTests/BuildSettingExtractor.xctestplan @@ -6,6 +6,24 @@ "options" : { } + }, + { + "id" : "4BF654CB-B6F5-489E-B5A8-99F06E583C46", + "name" : "Thread Sanitizer", + "options" : { + "threadSanitizerEnabled" : true, + "undefinedBehaviorSanitizerEnabled" : true + } + }, + { + "id" : "373DC580-59EC-476B-A670-9ADF153957DF", + "name" : "Address Sanitizer", + "options" : { + "addressSanitizer" : { + "enabled" : true + }, + "undefinedBehaviorSanitizerEnabled" : true + } } ], "defaultOptions" : { From ee31539073f3a36092a0e4f84e3be1fe9e00e91f Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Mon, 3 Aug 2020 15:02:29 -0700 Subject: [PATCH 12/69] Accept automatic Xcode version check updates --- BuildSettingExtractor.xcodeproj/project.pbxproj | 2 +- .../xcshareddata/xcschemes/BuildSettingExtractor.xcscheme | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/BuildSettingExtractor.xcodeproj/project.pbxproj b/BuildSettingExtractor.xcodeproj/project.pbxproj index 5c9ca7b..3c967ee 100644 --- a/BuildSettingExtractor.xcodeproj/project.pbxproj +++ b/BuildSettingExtractor.xcodeproj/project.pbxproj @@ -299,7 +299,7 @@ 53719E8719BF4C6D005D3DE0 /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1150; + LastUpgradeCheck = 1160; ORGANIZATIONNAME = "Tapas Software"; TargetAttributes = { 53719EAF19BF4C6D005D3DE0 = { diff --git a/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme b/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme index 6e93261..ff5f70c 100644 --- a/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme +++ b/BuildSettingExtractor.xcodeproj/xcshareddata/xcschemes/BuildSettingExtractor.xcscheme @@ -1,6 +1,6 @@ Date: Mon, 3 Aug 2020 15:11:00 -0700 Subject: [PATCH 13/69] Update to version 1.4.1 - Update version and build number settings - Update ReadMe for 1.4.1 --- BuildSettingExtractor.xcodeproj/project.pbxproj | 8 ++++---- ReadMe.md | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/BuildSettingExtractor.xcodeproj/project.pbxproj b/BuildSettingExtractor.xcodeproj/project.pbxproj index 3c967ee..e806eee 100644 --- a/BuildSettingExtractor.xcodeproj/project.pbxproj +++ b/BuildSettingExtractor.xcodeproj/project.pbxproj @@ -534,10 +534,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = BuildSettingExtractor/BuildSettingExtractor.entitlements; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "BuildSettingExtractor/BuildSettingExtractor-Info.plist"; - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.1; PRODUCT_BUNDLE_IDENTIFIER = "net.tapas-software.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; @@ -550,10 +550,10 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; CODE_SIGN_ENTITLEMENTS = BuildSettingExtractor/BuildSettingExtractor.entitlements; COMBINE_HIDPI_IMAGES = YES; - CURRENT_PROJECT_VERSION = 16; + CURRENT_PROJECT_VERSION = 17; ENABLE_HARDENED_RUNTIME = YES; INFOPLIST_FILE = "BuildSettingExtractor/BuildSettingExtractor-Info.plist"; - MARKETING_VERSION = 1.4; + MARKETING_VERSION = 1.4.1; PRODUCT_BUNDLE_IDENTIFIER = "net.tapas-software.${PRODUCT_NAME:rfc1034identifier}"; PRODUCT_NAME = "$(TARGET_NAME)"; WRAPPER_EXTENSION = app; diff --git a/ReadMe.md b/ReadMe.md index 1b64bcc..9839468 100644 --- a/ReadMe.md +++ b/ReadMe.md @@ -51,6 +51,20 @@ These comments can be turned off in the Preferences window for a more compact fi ### Version History ### +*Version 1.4.1* +*Aug 3, 2020* + +– Added ability to drag Xcode project to app icon to extract settings. +– Added support for no word separator in generated file names. +– Added validation for text fields that should never be empty. +– Added mechanism for handling introduced build setting info files. +– Updated list of build setting info files for Xcode 12.0 beta. +– Updated to extract build settings from Xcode 12.0-compatible project files. +– Convert app scheme to use a test plan. +– Tested on macOS 10.15.5 Catalina. +– Tested on macOS 11.0 Big Sur beta 3. +– Built with Xcode 11.6 on macOS 10.15.5 Catalina. + *Version 1.4* *May 17, 2020* From 34e583d2bca6fd441da32868d66db68f3a25443a Mon Sep 17 00:00:00 2001 From: Isaac Halvorson Date: Tue, 20 Oct 2020 09:36:23 -0500 Subject: [PATCH 14/69] Add Xcode 11.4 to the compatible Xcode versions list --- BuildSettingExtractor/BuildSettingExtractor.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BuildSettingExtractor/BuildSettingExtractor.m b/BuildSettingExtractor/BuildSettingExtractor.m index 052df07..4845597 100644 --- a/BuildSettingExtractor/BuildSettingExtractor.m +++ b/BuildSettingExtractor/BuildSettingExtractor.m @@ -15,7 +15,7 @@ static NSSet *_compatibilityVersionStringSet; static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ - _compatibilityVersionStringSet = [NSSet setWithObjects:@"Xcode 3.2", @"Xcode 6.3", @"Xcode 8.0", @"Xcode 9.3", @"Xcode 10.0", @"Xcode 11.0", @"Xcode 12.0", nil]; + _compatibilityVersionStringSet = [NSSet setWithObjects:@"Xcode 3.2", @"Xcode 6.3", @"Xcode 8.0", @"Xcode 9.3", @"Xcode 10.0", @"Xcode 11.0", @"Xcode 11.4", @"Xcode 12.0", nil]; }); return _compatibilityVersionStringSet; } From f296af987d3b737f51c2c46c746b545c068e228b Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Wed, 21 Oct 2020 08:15:01 -0700 Subject: [PATCH 15/69] Add new subpaths for renamed Metal strings files - Resolves #76 --- BuildSettingExtractor/BuildSettingInfoSubpaths.plist | 2 ++ 1 file changed, 2 insertions(+) diff --git a/BuildSettingExtractor/BuildSettingInfoSubpaths.plist b/BuildSettingExtractor/BuildSettingInfoSubpaths.plist index 1a477da..2cbfa7b 100644 --- a/BuildSettingExtractor/BuildSettingInfoSubpaths.plist +++ b/BuildSettingExtractor/BuildSettingInfoSubpaths.plist @@ -55,6 +55,7 @@ Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalLinker.strings + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.metal-linker.strings @@ -84,6 +85,7 @@ Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/Metal Compiler.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/MetalCompiler.strings + Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Metal.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.metal.strings Contents/PlugIns/Xcode3Core.ideplugin/Contents/SharedSupport/Developer/Library/Xcode/Plug-ins/Core Data.xcplugin/Contents/Resources/en.lproj/com.apple.compilers.model.coredata.strings From a81106ee6016289c17f48aadc6bbbfcbc71c60fb Mon Sep 17 00:00:00 2001 From: James Dempsey Date: Sat, 7 Nov 2020 11:06:38 -0800 Subject: [PATCH 16/69] Accept automatic storyboard changes for Xcode 12.2 --- .../Base.lproj/Preferences.storyboard | 58 +++++++++---------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard b/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard index c061c5b..ca9e78e 100644 --- a/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard +++ b/BuildSettingExtractor/Preferences/Base.lproj/Preferences.storyboard @@ -1,8 +1,8 @@ - + - + @@ -57,10 +57,10 @@ - + - + @@ -68,7 +68,7 @@ - + @@ -80,7 +80,7 @@ - + @@ -146,7 +146,7 @@ - + @@ -168,7 +168,7 @@ - + @@ -181,7 +181,7 @@ - + @@ -191,7 +191,7 @@ - + @@ -218,7 +218,7 @@ - + @@ -228,7 +228,7 @@ - + @@ -252,7 +252,7 @@ - + @@ -262,7 +262,7 @@ - + @@ -287,7 +287,7 @@ - + @@ -297,7 +297,7 @@