XcodeGen icon indicating copy to clipboard operation
XcodeGen copied to clipboard

Allow lookup template attributes from globalTemplateAttributes

Open vikage opened this issue 2 years ago • 8 comments

This PR allow xcodegen to lookup template attributes from globalTemplateAttributes spec to share attributes accross all yaml files. For example here, we have a shared today-extension-target.yml between multi project specs: legacy-project.yml and new-project.yml We need to configure different config files between legacy and old. With this PR we just declare a version attribute from project spec and today-extension-target.yml can access it

Example today-extension-target.yml

targetTemplates:
  TodayExtTemplate:
    platform: iOS
    type: app-extension
    settings:
      CODE_SIGN_IDENTITY: Apple Development
    configFiles:
      Debug: Config/${version}/Debug.xcconfig
      Release: Config/${version}/Release.xcconfig
    sources:
      - TodayExtension

targets:
  TodayExt:
    templates:
      - TodayExtTemplate

legacy-project.yml

name: Demo

options:
  createIntermediateGroups: True
  
globalTemplateAttributes:
  version: legacy

include:
  - today-extension-target.yml

targets:
  Demo:
    type: application
    platform: iOS
    deploymentTarget: "10.0"
    sources:
      - DemoXcodeGenGlobalTemplateAttribute

new-project.yml

name: Demo

options:
  createIntermediateGroups: True
  
globalTemplateAttributes:
  version: new

include:
  - today-extension-target.yml

targets:
  Demo:
    type: application
    platform: iOS
    deploymentTarget: "10.0"
    sources:
      - DemoXcodeGenGlobalTemplateAttribute

vikage avatar Sep 07 '23 04:09 vikage

@yonaskolb @brentleyjones Please help me review this PR

vikage avatar Sep 07 '23 05:09 vikage

@yonaskolb Please help me review this PR. Thanks

vikage avatar Oct 03 '23 04:10 vikage

I can see the utility in this @vikage. Got a few notes:

  • does the existing functionality of referencing environment variables in the spec also solve your issue? eg Config/${VERSION}/Debug.xcconfig and VERSION=new xcodegen generate
  • If this were added I can see this being useful just as globally accessible values, as opposed to restricting to just target or scheme templates. What do you think?
  • If this were moved forward, it would definitely need some unit tests, and an example in Tests/Fixtures/TestProject/project.yml

yonaskolb avatar Oct 31 '23 10:10 yonaskolb

I can see the utility in this @vikage. Got a few notes:

  • does the existing functionality of referencing environment variables in the spec also solve your issue? eg Config/${VERSION}/Debug.xcconfig and VERSION=new xcodegen generate
  • If this were added I can see this being useful just as globally accessible values, as opposed to restricting to just target or scheme templates. What do you think?
  • If this were moved forward, it would definitely need some unit tests, and an example in Tests/Fixtures/TestProject/project.yml

@yonaskolb

  • Currently, exporting a variable on the command line could fix my issue. But I think it will be great if we have it in the yml config file.
  • If this was added, we could access variables globally without any restrictions.

If you are agree with this feature, I will implement an example and some unit tests

vikage avatar Oct 31 '23 10:10 vikage

Yes happy for you to move it forward, with the ability to reference these values anywhere and not just within templates

yonaskolb avatar Oct 31 '23 10:10 yonaskolb

@yonaskolb I added unit test and example. Please help me review. Thanks

vikage avatar Oct 31 '23 14:10 vikage

@yonaskolb Please help me take a look

vikage avatar Nov 03 '23 14:11 vikage

@yonaskolb Please review, thanks

vikage avatar Jan 02 '24 04:01 vikage