Version: Unity 6.0 (6000.0)
언어 : 한국어
Unity의 iOS 애플리케이션 빌드 방법
iOS 시작하기

Unity Xcode 프로젝트의 구조

iOS 플랫폼용 Unity 프로젝트를 빌드할 때 Unity는 Xcode 프로젝트가 포함된 폴더를 생성합니다. 이 프로젝트를 빌드하고 서명한 후 기기에서 배포하거나 앱 스토어에서 배포해야 합니다.

참고: Xcode.PBXProject를 사용하여 생성된 Xcode 프로젝트를 수정할 수 있습니다.

모든 생성된 Unity iOS Xcode 프로젝트는 다음과 같은 구조와 타겟을 갖습니다.

Unity iOS Xcode 프로젝트 구조
Unity iOS Xcode 프로젝트 구조

Xcode 프로젝트에는 Xcode 프로젝트 파일 xcodeproj 및 Xcode 프로젝트 내비게이터에만 표시되는 프레임워크 링크가 포함되어 있습니다. 기본 폴더 외에 커스텀 폴더를 생성하여 커스텀 파일을 추가할 수 있습니다.

프로젝트 타겟

  • Unity-iPhone: UnityFramework을 실행하는 씬 런처 부분입니다. 여기에는 MainApp 폴더와 실행 화면, .xib 파일, 아이콘, 데이터, Info.plist 파일과 같은 앱 표현 데이터가 포함되어 있습니다. Unity-iPhone 타겟에는 UnityFramework 타겟에 대한 단일 종속성이 있습니다.
  • UnityFramework: UnityFramework.framework 번들을 생성하는 타겟입니다. 여기에는 Unity 런타임, Classes, UnityFramework, Libraries 폴더와 종속 프레임워크가 포함되어 있습니다. UnityFramework 폴더에는 Unity 런타임, Unity 플러그인, 패키지, 프로젝트를 위한 통합 개인정보 보호 매니페스트 파일(PrivacyInfo.xcprivacy)이 포함되어 있습니다.
  • GameAssembly: C++ 코드로 변환된 C# 코드의 컨테이너입니다. 이를 빌드하기 위해 Xcode는 Unity가 생성된 모든 Xcode 프로젝트에 포함하는__ IL2CPP__Unity에서 개발한 스크립팅 백엔드로, 여러 플랫폼용 프로젝트를 빌드할 때 Mono 대신 사용할 수 있습니다. 자세한 정보
    See in Glossary
    툴을 사용합니다. 이 빌드는 다음을 생성합니다.
    • libGameAssembly.a: 프로젝트의 모든 관리되는 코드가 포함된 정적 라이브러리로, C++로 크로스 컴파일되고 iOS용으로 빌드됩니다.
    • il2cpp.a: 관리되는 코드를 지원하기 위해 IL2CPP 런타임 코드를 포함하는 정적 라이브러리입니다.

참고: PBXProject.GetUnityFrameworkTargetGuid()를 사용하여 UnityFramework 타겟 GUID를 가져오고 PBXProject.GetUnityMainTargetGuid()를 사용하여 Unity-iPhone 타겟 GUID를 가져옵니다.

Classes 폴더

Classes 폴더에는 Unity 런타임과 Objective-C를 통합하는 코드가 들어 있습니다. Unity는 이 폴더 내 main.mmUnityAppController.mm/h 파일에 애플리케이션의 엔트리 포인트를 저장합니다. UnityAppController에서 파생된 자체 AppDelegate를 생성하거나 플러그인이 AppController.h를 포함하는 경우 대신 UnityAppController.h를 포함할 수 있습니다. Plugins/iOS 폴더에 AppController.mm/h가 있는 경우 병합하여 이름을 변경할 수 있습니다.

InternalProfiler.h 파일은 내부 프로파일러를 활성화하기 위한 컴파일러 조건부를 정의합니다. 이 폴더의 코드는 자주 변경되지 않으며, 커스텀 클래스를 여기에 배치할 수 있습니다. Append 모드를 선택하면 Xcode가 빌드 간에 이 폴더의 변경 사항을 보존합니다. 하지만 이 함수는 여러 빌드 타겟을 지원하지 않으며 Libraries 폴더에 고정된 구조가 필요합니다.

Unity의 내부 프로파일러는 빠르고 비간섭적이며, 다음과 같은 기본 정보를 제공합니다.

  • 프레임 시간을 가장 많이 소비하는 하위 시스템
  • .NET 힙 크기
  • GC 이벤트 횟수 및 지속 시간

Data 폴더

이 폴더에는 코드 스트리핑 설정에 따라 애플리케이션의 직렬화된 에셋과 .NET 어셈블리(.dll 또는 .dat 파일)가 전체 코드 또는 메타데이터로 포함됩니다. machine.config 파일은 보안 및 WebRequest 같은 다양한 .NET 서비스를 설정합니다. Xcode는 모든 빌드로 이 폴더의 콘텐츠를 새로 고침합니다. 이를 변경하지 않아야 합니다.

기본적으로 Data 폴더의 Target MembershipUnity-iPhone 타겟이며, Unity 런타임은 이 타겟을 mainBundle에서 검색합니다. Unity 런타임이 Data 폴더를 찾는 기본 번들을 변경하려면 Run 함수 중 하나를 호출하기 전에 UnityFramework 인스턴스에서 setDataBundleId: "com.my.product"를 호출합니다. 예를 들어 UnityFramework 호출과 함께 Data를 사용하려면 setDataBundleId: "com.unity3d.framework"를 사용하고 Target MembershipUnityFramework로 설정합니다.

참고: 온디맨드 리소스는 Data 폴더가 UnityFramework 타겟이 아니라 애플리케이션 타겟에 속해 있을 때만 지원됩니다.

Libraries 폴더

Libraries 폴더에는 IL2CPP에 대한 libil2cpp.a가 포함되어 있습니다. libiPhone-lib.a 파일은 Unity 런타임 정적 라이브러리이며, RegisterMonoModules.cpp는 Unity 네이티브 코드를 .NET과 바인딩합니다. Xcode는 모든 빌드로 이 폴더의 콘텐츠를 새로 고침합니다. 이를 변경하지 않아야 합니다.

그래픽 파일

아이콘과 스플래시 화면(.png 파일)은 Unity-iPhone 폴더의 에셋 카탈로그에 있습니다. Unity는 이러한 파일을 자동으로 관리합니다. 실행 화면, XML 인터페이스 빌더(.xib 파일), 스토리보드 파일은 프로젝트의 루트 폴더에 저장됩니다. 이러한 파일은 Player Settings 창(메뉴: Edit > Project Settings > Player Settings)에서 설정할 수 있습니다. 생성한 커스텀 실행 이미지가 Apple의 Human Interface 가이드라인을 준수하는지 확인합니다.

프로퍼티 리스트(.plist) 파일

mainBundle을 통해 액세스할 수 있는 Unity-iPhone 타겟 내 Info.plist 파일은 Unity의 Player Settings 창(메뉴: Edit > Project Settings > Player Settings > Other Settings > Identification)에서 관리할 수 있습니다. Unity는 플레이어를 빌드하는 동안 이 파일을 교체하지 않고 이 파일을 업데이트합니다. 필요한 경우가 아니라면 변경하지 마십시오.

bundleWithIdentifier:@"com.unity3d.framework"를 통해 액세스할 수 있는 /UnityFramework/Info.plist 파일은 UnityFramework에 속합니다. mainBundleInfo.plist 파일 대신 이 파일에 값을 유지할 수 있습니다. 이렇게 하면 UnityFramework가 다른 애플리케이션으로 이동하는 경우에도 이러한 값을 얻을 수 있습니다(예: Unity as a Library 사용 시).

추가 리소스

Unity의 iOS 애플리케이션 빌드 방법
iOS 시작하기