@@ -37,11 +37,6 @@ type buildSettingsCacheKey struct {
3737 configuration string
3838}
3939
40- type buildSettings struct {
41- settings serialized.Object
42- basePath string
43- }
44-
4540// ProjectHelper ...
4641type ProjectHelper struct {
4742 logger log.Logger
@@ -55,7 +50,7 @@ type ProjectHelper struct {
5550 isCompatMode bool
5651
5752 // Buildsettings is an array as it can contain both workspace and project build settings in that order
58- buildSettingsCache map [buildSettingsCacheKey ][]buildSettings
53+ buildSettingsCache map [buildSettingsCacheKey ][]serialized. Object
5954}
6055
6156// NewProjectHelper checks the provided project or workspace and generate a ProjectHelper with the provided scheme and configuration
@@ -240,14 +235,16 @@ func (p *ProjectHelper) targetTeamID(targetName, config string) (string, error)
240235 return devTeam , err
241236}
242237
243- func (p * ProjectHelper ) fetchBuildSettings (targetName , conf string ) ([]buildSettings , error ) {
244- var settingsList []buildSettings
238+ func (p * ProjectHelper ) fetchBuildSettings (targetName , conf string ) ([]serialized. Object , error ) {
239+ var settingsList []serialized. Object
245240 var wsErr error
246241 if p .XcWorkspace != nil { // workspace available
247242 var settings serialized.Object
248243 settings , wsErr = p .XcWorkspace .SchemeBuildSettings (targetName , conf , p .additionalXcodebuildOptions ... )
249244 if wsErr == nil {
250- settingsList = append (settingsList , buildSettings {settings : settings , basePath : p .XcWorkspace .Path })
245+ // Settings like INFOPLIST_FILE and CODE_SIGN_ENTITLEMENTS are project-relative
246+ // https://developer.apple.com/documentation/xcode/build-settings-reference#Infoplist-File
247+ settingsList = append (settingsList , settings )
251248 if ! p .isCompatMode { // Fall back to project if workspace failed or compatibility mode is on
252249 return settingsList , nil
253250 }
@@ -261,7 +258,7 @@ func (p *ProjectHelper) fetchBuildSettings(targetName, conf string) ([]buildSett
261258
262259 projectSettings , projectErr := p .XcProj .TargetBuildSettings (targetName , conf , p .additionalXcodebuildOptions ... )
263260 if projectErr == nil {
264- settingsList = append (settingsList , buildSettings { settings : projectSettings , basePath : p . XcProj . Path } )
261+ settingsList = append (settingsList , projectSettings )
265262 return settingsList , nil
266263 }
267264
@@ -275,7 +272,7 @@ func (p *ProjectHelper) fetchBuildSettings(targetName, conf string) ([]buildSett
275272 return settingsList , projectErr
276273}
277274
278- func (p * ProjectHelper ) cachedBuildSettings (targetName , conf string ) ([]buildSettings , error ) {
275+ func (p * ProjectHelper ) cachedBuildSettings (targetName , conf string ) ([]serialized. Object , error ) {
279276 key := buildSettingsCacheKey {targetName : targetName , configuration : conf }
280277 settings , ok := p .buildSettingsCache [key ]
281278 if ok {
@@ -289,7 +286,7 @@ func (p *ProjectHelper) cachedBuildSettings(targetName, conf string) ([]buildSet
289286 }
290287
291288 if p .buildSettingsCache == nil {
292- p .buildSettingsCache = map [buildSettingsCacheKey ][]buildSettings {}
289+ p .buildSettingsCache = map [buildSettingsCacheKey ][]serialized. Object {}
293290 }
294291 p .buildSettingsCache [key ] = settingsList
295292
@@ -303,13 +300,13 @@ func (p *ProjectHelper) targetBuildSettings(targetName, conf string) (serialized
303300 }
304301
305302 if len (settingsList ) == 1 {
306- return settingsList [0 ]. settings , nil
303+ return settingsList [0 ], nil
307304 }
308305
309306 p .logger .Debugf ("buildSettings: Workspace target build settings: %+v" , settingsList [0 ])
310307 p .logger .Debugf ("buildSettings: Project target build settings: %+v" , settingsList [1 ])
311308 p .logger .Debugf ("buildSettings: Multiple build settings found for target (%s), returning the project one" , targetName )
312- return settingsList [1 ]. settings , nil
309+ return settingsList [1 ], nil
313310}
314311
315312func (p * ProjectHelper ) buildSettingForKey (targetName , conf string , key string ) (string , error ) {
@@ -318,33 +315,33 @@ func (p *ProjectHelper) buildSettingForKey(targetName, conf string, key string)
318315 return "" , err
319316 }
320317
321- wsSettings := settingsList [0 ]. settings
322- wsValue , err := wsSettings .String (key )
318+ settings := settingsList [0 ] // workspace setting if available, project otherwise
319+ settingValue , err := settings .String (key )
323320 if err != nil {
324- return wsValue , err
321+ return settingValue , err
325322 }
326323
327324 if len (settingsList ) == 1 {
328- return wsValue , nil
325+ return settingValue , nil
329326 }
330327
331- projectSettings := settingsList [1 ]. settings
332- projectValue , err := projectSettings .String (key )
328+ projectSettings := settingsList [1 ]
329+ projectSettingValue , err := projectSettings .String (key )
333330 if err != nil {
334331 p .logger .Errorf ("buildSettings: Failed to fetch project build setting for key (%s): %s" , key , err )
335- p .logger .Printf ("buildSettings: Returning workspace value for key (%s): %s" , key , wsValue )
336- return wsValue , nil
332+ p .logger .Printf ("buildSettings: Returning workspace value for key (%s): %s" , key , settingValue )
333+ return settingValue , nil
337334 }
338335
339- if projectValue != wsValue {
340- p .logger .Errorf ("buildSettings: Conflicting values for build setting %s: '%s' (workspace) vs '%s' (project)" , key , wsValue , projectValue )
336+ if projectSettingValue != settingValue {
337+ p .logger .Errorf ("buildSettings: Conflicting values for build setting %s: '%s' (workspace) vs '%s' (project)" , key , settingValue , projectSettingValue )
341338 // Return alternate value to be consistent with old project based target build setting fetch
342- p .logger .Printf ("buildSettings: Returning project value for key (%s): %s" , key , projectValue )
343- return projectValue , nil
339+ p .logger .Printf ("buildSettings: Returning project value for key (%s): %s" , key , projectSettingValue )
340+ return projectSettingValue , nil
344341 }
345- p .logger .Debugf ("buildSettings: Matching values for workspace and project build setting %s: '%s'" , key , wsValue )
342+ p .logger .Debugf ("buildSettings: Matching values for workspace and project build setting %s: '%s'" , key , settingValue )
346343
347- return wsValue , err
344+ return settingValue , err
348345}
349346
350347func (p * ProjectHelper ) buildSettingPathForKey (targetName , conf string , key string ) (string , error ) {
@@ -353,38 +350,39 @@ func (p *ProjectHelper) buildSettingPathForKey(targetName, conf string, key stri
353350 return "" , err
354351 }
355352
356- wsSettings := settingsList [0 ]
357- wsValue , err := wsSettings . settings .String (key )
353+ settings := settingsList [0 ]
354+ settingValue , err := settings .String (key )
358355 if err != nil {
359- return wsValue , err
356+ return settingValue , err
360357 }
361358
362- if pathutil .IsRelativePath (wsValue ) {
363- wsValue = filepath .Join (filepath .Dir (wsSettings .basePath ), wsValue )
359+ projectBasePath := p .XcProj .Path
360+ if pathutil .IsRelativePath (settingValue ) {
361+ settingValue = filepath .Join (filepath .Dir (projectBasePath ), settingValue )
364362 }
365363
366364 if len (settingsList ) == 1 {
367- return wsValue , nil
365+ return settingValue , nil
368366 }
369367
370368 projectSettings := settingsList [1 ]
371- projectValue , err := projectSettings . settings .String (key )
369+ projectSettingValue , err := projectSettings .String (key )
372370 if err != nil {
373- return projectValue , err
371+ return projectSettingValue , err
374372 }
375373
376- if pathutil .IsRelativePath (projectValue ) {
377- projectValue = filepath .Join (filepath .Dir (projectSettings . basePath ), projectValue )
374+ if pathutil .IsRelativePath (projectSettingValue ) {
375+ projectSettingValue = filepath .Join (filepath .Dir (projectBasePath ), projectSettingValue )
378376 }
379377
380- if projectValue != wsValue {
381- p .logger .Errorf ("buildSettings: Conflicting paths for build setting %s: '%s' (workspace) vs '%s' (project)" , key , wsValue , projectValue )
382- p .logger .Printf ("buildSettings: Returning project path for key (%s): %s" , key , projectValue )
383- return projectValue , nil
378+ if projectSettingValue != settingValue {
379+ p .logger .Errorf ("buildSettings: Conflicting paths for build setting %s: '%s' (workspace) vs '%s' (project)" , key , settingValue , projectSettingValue )
380+ p .logger .Printf ("buildSettings: Returning project path for key (%s): %s" , key , projectSettingValue )
381+ return projectSettingValue , nil
384382 }
385383
386- p .logger .Debugf ("buildSettings: Matching paths for workspace and project build setting %s: '%s'" , key , wsValue )
387- return wsValue , nil
384+ p .logger .Debugf ("buildSettings: Matching paths for workspace and project build setting %s: '%s'" , key , settingValue )
385+ return settingValue , nil
388386}
389387
390388// TargetBundleID returns the target bundle ID
0 commit comments