This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English
익스텐션 메니페스트는 단일 익스텐션을 빌드할 때 사용되는 flags와 defines가 들어 있는 설정 파일입니다. 이 설정은 어플리케이션 레벨 설정 및 Defold 엔진 자체의 기본 레벨 설정과 결합됩니다.
어플리케이션 메니페스트(파일 확장자 .appmanifest)는 빌드 서버에서 게임을 빌드하는 방법을 정의하는 어플리케이션 레벨 설정입니다. 어플리케이션 메니페스트를 사용하면 사용하지 않는 엔진 일부를 제거할 수 있습니다. 물리 엔진이 필요하지 않다면 실행 파일에서 제거해 크기를 줄일 수 있습니다. 사용하지 않는 기능을 제외하는 방법은 어플리케이션 메니페스트 매뉴얼에서 알아보세요.
Defold 엔진에는 엔진과 Defold SDK의 각 릴리스에 포함되는 빌드 메니페스트(build.yml)가 있습니다. 이 메니페스트는 사용할 SDK 버전, 실행할 컴파일러, 링커 및 기타 도구, 그리고 이 도구들에 전달할 기본 빌드 및 링크 flags를 제어합니다. 이 메니페스트는 share/extender/build_input.yml GitHub에서 확인할 수 있습니다.
반면 익스텐션 메니페스트(ext.manifest)는 익스텐션 전용 설정 파일입니다. 익스텐션 메니페스트는 익스텐션의 소스 코드를 컴파일하고 링크하는 방법과 포함할 추가 라이브러리를 제어합니다.
세 가지 메니페스트 파일은 모두 같은 문법을 공유하므로 병합할 수 있으며, 익스텐션과 게임이 빌드되는 방식을 완전히 제어할 수 있습니다.
빌드되는 각 익스텐션에 대해 메니페스트는 다음과 같이 결합됩니다:
manifest = merge(game.appmanifest, ext.manifest, build.yml)
이를 통해 사용자는 엔진과 각 익스텐션의 기본 동작을 덮어쓸 수 있습니다. 또한 최종 링크 단계에서는 어플리케이션 메니페스트와 Defold 메니페스트를 병합합니다:
manifest = merge(game.appmanifest, build.yml)
익스텐션 이름 외에도 메니페스트 파일에는 플랫폼별 컴파일 flags, 링크 flags, 라이브러리, 프레임워크가 포함될 수 있습니다. ext.manifest 파일에 “platforms” 세그먼트가 없거나 목록에서 플랫폼이 누락되어도 번들링 대상 플랫폼은 계속 빌드되지만 추가 flags는 설정되지 않습니다.
예제는 다음과 같습니다:
name: "AdExtension"
platforms:
arm64-ios:
context:
frameworks: ["CoreGraphics", "CFNetwork", "GLKit", "CoreMotion", "MessageUI", "MediaPlayer", "StoreKit", "MobileCoreServices", "AdSupport", "AudioToolbox", "AVFoundation", "CoreGraphics", "CoreMedia", "CoreMotion", "CoreTelephony", "CoreVideo", "Foundation", "GLKit", "JavaScriptCore", "MediaPlayer", "MessageUI", "MobileCoreServices", "OpenGLES", "SafariServices", "StoreKit", "SystemConfiguration", "UIKit", "WebKit"]
flags: ["-stdlib=libc++"]
linkFlags: ["-ObjC"]
libs: ["z", "c++", "sqlite3"]
defines: ["MY_DEFINE"]
armv7-ios:
context:
frameworks: ["CoreGraphics", "CFNetwork", "GLKit", "CoreMotion", "MessageUI", "MediaPlayer", "StoreKit", "MobileCoreServices", "AdSupport", "AudioToolbox", "AVFoundation", "CoreGraphics", "CoreMedia", "CoreMotion", "CoreTelephony", "CoreVideo", "Foundation", "GLKit", "JavaScriptCore", "MediaPlayer", "MessageUI", "MobileCoreServices", "OpenGLES", "SafariServices", "StoreKit", "SystemConfiguration", "UIKit", "WebKit"]
flags: ["-stdlib=libc++"]
linkFlags: ["-ObjC"]
libs: ["z", "c++", "sqlite3"]
defines: ["MY_DEFINE"]
플랫폼별 컴파일 flags에 허용되는 키는 다음과 같습니다:
frameworks - 빌드할 때 포함할 Apple 프레임워크(iOS 및 macOS)weakFrameworks - 빌드할 때 선택적으로 포함할 Apple 프레임워크(iOS 및 macOS)flags - 컴파일러에 전달할 flagslinkFlags - 링커에 전달할 flagslibs - 링크할 때 포함할 추가 라이브러리defines - 빌드할 때 설정할 definesaaptExtraPackages - 생성해야 하는 추가 패키지 이름(Android)aaptExcludePackages - 제외할 패키지의 정규식(regexp) 또는 정확한 이름(Android)aaptExcludeResourceDirs - 제외할 리소스 디렉토리의 정규식(regexp) 또는 정확한 이름(Android)excludeLibs, excludeJars, excludeSymbols - 이 flags는 플랫폼 context에 이전에 정의된 항목을 제거하는 데 사용됩니다.모든 키워드에는 화이트리스트 필터가 적용됩니다. 이는 허용되지 않는 경로 처리와 빌드 업로드 폴더 외부 파일 접근을 방지하기 위한 것입니다.