yonaskolb / XcodeGen

A Swift command line tool for generating your Xcode project
MIT License
6.88k stars 809 forks source link

Allow lookup template attributes from globalTemplateAttributes #1400

Open vikage opened 10 months ago

vikage commented 10 months ago

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 commented 10 months ago

@yonaskolb @brentleyjones Please help me review this PR

vikage commented 9 months ago

@yonaskolb Please help me review this PR. Thanks

yonaskolb commented 8 months ago

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

vikage commented 8 months ago

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

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

yonaskolb commented 8 months ago

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

vikage commented 8 months ago

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

vikage commented 8 months ago

@yonaskolb Please help me take a look

vikage commented 6 months ago

@yonaskolb Please review, thanks