CustomUtils Help

Build

BuildServiceWindow_01.png

모듈화를 통해 각 빌드 환경에 맞춰 커스텀 빌더를 구축할 수 있도록 도와 주는 종합 빌드 툴

Builder Class Diagram
BuildInteractionInterfaceBuilder _builder;bool TryAttachBuilder(Type type, out Builder builder)Builder AttachBuilder(Type)void BuildOnCLI() void OnPostProcessBuild(BuildReport report)Buildervirtual void StartBuild(BuildPlayerOptions)void OnPreProcess(ref BuildPlayerOptions)void OnPostProcess(BuildSummary summary)NewBuildervoid OnPreProcess(ref BuildPlayerOptions)void OnPostProcess(BuildSummary summary)override void StartBuild(BuildPlayerOptions)OptionalBuildAttributeEnum buildTypeBuildTarget buildTargetBuildTargetGroup buildTargetGroupBuilderAttribute(object, BuildTarget, BuildTargetGroup)ConstructorIPostprocessBuildWithReportInvoke in Unity batch mode build1
Build Progress Diagram
EditorBuildServiceEditorBuildServiceEditorBuildDrawerEditorBuildDrawerBuildInteractionInterfaceBuildInteractionInterfaceBuilderBuildPipelineBuildPipelineloop[OnFocus]1Draw()BuildCreate and attach builder2AttachBuilder(Type builderType)3CreateBuilder(Enum buildType)Builder4Return Builder5Builder.StartBuild()6PreProcess()7BuildPlayer(BuildPlayerOptions)8Return BuildReport...Wait until build is finished...9PostProcess()Record build results

필수 구현 (Required Implementation)

Attribute 구현을 통한 커스텀 빌드 에디터 구현

  1. BuilderAttributeBuilderAttribute.buildType으로 넘겨줄 enumBuildTypeEnumAttribute와 함께 구현

  2. Builder를 상속 받는 class 구현

  3. 구현한 BuilderBuilderAttribute를 추가

  4. EditorBuildDrawer<TConfig, TNullConfig>를 상속 받는 EditorBuildDrawer를 구현

  5. Service -> Build -> Build Service를 통해 빌드 실행


Builder 를 상속 받는 경우 반드시 BuilderAttribute, BuildTypeEnumAttribute 를 구현하여야 EditorBuildService 에서 정상 동작


[AttributeUsage(AttributeTargets.Class)] public class BuilderAttribute : Attribute { public Enum buildType; public BuildTarget buildTarget; public BuildTargetGroup buildTargetGroup; public BuilderAttribute(object buildType, BuildTarget buildTarget, BuildTargetGroup buildTargetGroup) { this.buildType = buildType is Enum enumType ? enumType : default; this.buildTarget = buildTarget; this.buildTargetGroup = buildTargetGroup; } } [AttributeUsage(AttributeTargets.Enum)] public class BuildTypeEnumAttribute : Attribute { }
[BuildTypeEnum] public enum BUILD_TYPE { NONE, ANDROID, IOS }
using System.IO; using UnityEditor; using UnityEditor.Build.Reporting; [Alias("Sample Standalone Build")] [Builder(SAMPLE_BUILD_TYPE.STANDALONE, BuildTarget.StandaloneWindows64, BuildTargetGroup.Standalone)] public class Sample_Builder_Standalone : Builder { protected override void OnPreProcess(ref BuildPlayerOptions options) protected override void OnPostProcess(BuildSummary summary) }
BuildConfigProvider
  • 모든 빌드 관련 옵션은 정적 ClassBuildConfigProviderJObject형태의 Key-Value 타입으로 저장 되며 구현한 Builder에서 BuilderConfigProvider에 접근 하여 각 옵션에 대해서 처리

BuildInteractionInterface
  • 모든 빌드는 BuildInteractionInterface를 거쳐 동작 하며 생성한 Builder의 시작 지점을 제공

  • CLI를 통한 빌드 interface 시작점 제공

선택 구현 (Optional Implementation)


Builder 사용을 위한 추가 적인 옵션 구현

  • BuildOptionEnumAttribute: 빌드에 사용할 추가 적인 옵션 사용. buildTargetGroup을 지정 하지 않는 경우 범용 옵션으로 적용

    BuildServiceWindow_04.png
  • DefineSymbolEnumAttribute: 빌드에 적용할 DefineSymbol을 정의

    BuildServiceWindow_03.png

[AttributeUsage(AttributeTargets.Enum)] public class BuildOptionEnumAttribute : Attribute { public BuildTargetGroup buildTargetGroup; public BuildOptionEnumAttribute() => buildTargetGroup = BuildTargetGroup.Unknown; public BuildOptionEnumAttribute(BuildTargetGroup buildTargetGroup) => this.buildTargetGroup = buildTargetGroup; } [AttributeUsage(AttributeTargets.Enum)] public class DefineSymbolEnumAttribute : Attribute { }
[BuildOptionEnum] public enum DEFAULT_CUSTOM_BUILD_OPTION { ignoreResourcesReimport, cleanBurstDebug, cleanIL2CPPSludge, revealInFinder, refreshAssetDatabase, } [BuildOptionEnum(BuildTargetGroup.Android)] public enum ANDROID_CUSTOM_BUILD_OPTION_TYPE { DEBUG_ANDROID, RELEASE_ANDROID, } [BuildOptionEnum(BuildTargetGroup.iOS)] public enum IOS_CUSTOM_BUILD_OPTION_TYPE { DEBUG_IOS, RELEASE_IOS, }
[DefineSymbolEnum] public enum BUILD_DEFINE_SYMBOL_TYPE { DEBUG_LOG, DISABLE_ERROR, ACTIVE_DEBUG_MODE, }
Last modified: 01 2월 2025