Skip to content

Commit c7a0570

Browse files
committed
Allow newer xcode projects that don't have info.plist information embedded to generate the proper info.plist file
1 parent 2878a2c commit c7a0570

File tree

4 files changed

+58
-13
lines changed

4 files changed

+58
-13
lines changed

XCode/PBXResourcesBuildPhase.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,7 @@
2929
#import "PBXBuildPhase.h"
3030

3131
@interface PBXResourcesBuildPhase : PBXBuildPhase
32+
33+
- (NSMutableDictionary *) configToInfoPlist: (XCBuildConfiguration *)config;
34+
3235
@end

XCode/PBXResourcesBuildPhase.m

Lines changed: 44 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -207,6 +207,30 @@ - (BOOL) copyResourceFrom: (NSString *)srcPath to: (NSString *)dstPath
207207
return result;
208208
}
209209

210+
- (NSMutableDictionary *) configToInfoPlist: (XCBuildConfiguration *)config
211+
{
212+
NSMutableDictionary *ipd = [NSMutableDictionary dictionary];
213+
NSDictionary *buildSettings = [config buildSettings];
214+
// NSString *appIcon = [buildSettings objectForKey: @"ASSETCATALOG_COMPILER_APPICON_NAME"];
215+
NSString *version = [buildSettings objectForKey: @"CURRENT_PROJECT_VERSION"];
216+
NSString *copyright = [buildSettings objectForKey: @"INFOPLIST_KEY_NSHumanReadableCopyright"];
217+
NSString *mainNib = [buildSettings objectForKey: @"INFOPLIST_KEY_NSMainNibFile"];
218+
NSString *principalClass = [buildSettings objectForKey: @"INFOPLIST_KEY_NSPrincipalClass"];
219+
NSString *bundleIdentifier = [buildSettings objectForKey: @"PRODUCT_BUNDLE_IDENTIFIER"];
220+
NSString *iconFile = [self processAssets];
221+
222+
[ipd setObject: version forKey: @"CFBundleVersion"];
223+
[ipd setObject: mainNib forKey: @"NSMainNibFile"];
224+
[ipd setObject: copyright forKey: @"NSHumanReadableCopyright"];
225+
[ipd setObject: principalClass forKey: @"NSPrincipalClass"];
226+
[ipd setObject: iconFile forKey: @"NSIcon"];
227+
[ipd setObject: @"$(DEVELOPMENT_LANGUAGE)" forKey: @"CFBundleDevelopmentRegion"];
228+
[ipd setObject: @"$(EXECUTABLE_NAME)" forKey: @"CFBundlExecutable"];
229+
[ipd setObject: bundleIdentifier forKey: @"CFBundleIdentifier"];
230+
231+
return ipd;
232+
}
233+
210234
- (BOOL) build
211235
{
212236
xcputs("=== Executing Resources Build Phase");
@@ -332,16 +356,29 @@ - (BOOL) build
332356
XCBuildConfiguration *xbc = [xcl defaultConfiguration];
333357
NSDictionary *bs = [xbc buildSettings];
334358
NSString *infoPlist = [bs objectForKey: @"INFOPLIST_FILE"];
359+
NSString *outputPlist = [resourcesDir
360+
stringByAppendingPathComponent: @"Info-gnustep.plist"];
335361

336-
if ([mgr fileExistsAtPath: infoPlist] == NO)
362+
if (infoPlist != nil)
337363
{
338-
infoPlist = [infoPlist lastPathComponent];
339-
}
364+
if ([mgr fileExistsAtPath: infoPlist] == NO)
365+
{
366+
infoPlist = [infoPlist lastPathComponent];
367+
}
340368

341-
NSString *outputPlist = [resourcesDir
342-
stringByAppendingPathComponent: @"Info-gnustep.plist"];
343-
[self processInfoPlistInput: infoPlist
344-
output: outputPlist];
369+
[self processInfoPlistInput: infoPlist
370+
output: outputPlist];
371+
}
372+
else
373+
{
374+
xcputs([[NSString stringWithFormat: @"\t* No Info.plist, generating..."] cString]);
375+
XCBuildConfiguration *config = [xcl configurationWithName: @"Debug"];
376+
NSMutableDictionary *ipl = [self configToInfoPlist: config];
377+
NSString *plString = [ipl description];
378+
379+
NSDebugLog(@"ipl = %@", ipl);
380+
[plString writeToFile: outputPlist atomically: YES];
381+
}
345382

346383
xcputs("=== Resources Build Phase Completed");
347384
fflush(stdout);

XCode/XCConfigurationList.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
- (NSString *) defaultConfigurationName; // getter
4848
- (void) setDefaultConfigurationName: (NSString *)object; // setter
4949
- (XCBuildConfiguration *) defaultConfiguration;
50+
- (XCBuildConfiguration *) configurationWithName: (NSString *)name;
5051

5152
- (void) applyDefaultConfiguration;
5253
@end

XCode/XCConfigurationList.m

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -76,27 +76,31 @@ - (void) setDefaultConfigurationName: (NSString *)object; // setter
7676
ASSIGN(defaultConfigurationName,object);
7777
}
7878

79-
- (XCBuildConfiguration *) defaultConfiguration
79+
- (XCBuildConfiguration *) configurationWithName: (NSString *)name
8080
{
8181
NSEnumerator *en = [buildConfigurations objectEnumerator];
82-
NSString *defaultConfig = (defaultConfigurationName == nil)?
83-
@"Release":defaultConfigurationName;
8482
XCBuildConfiguration *config = nil;
8583

8684
NSDebugLog(@"Number of build configurations = %ld\n%@",
8785
[buildConfigurations count], buildConfigurations);
8886

8987
while((config = [en nextObject]) != nil)
9088
{
91-
if([[config name]
92-
isEqualToString:
93-
defaultConfig])
89+
if([[config name] isEqualToString: name])
9490
{
9591
break;
9692
}
9793
}
9894

9995
return config;
96+
97+
}
98+
99+
- (XCBuildConfiguration *) defaultConfiguration
100+
{
101+
NSString *defaultConfig = (defaultConfigurationName == nil)?
102+
@"Release":defaultConfigurationName;
103+
return [self configurationWithName: defaultConfig];
100104
}
101105

102106
- (void) applyDefaultConfiguration

0 commit comments

Comments
 (0)