Version: 2017.3
iOS 2D 텍스처 오버라이드
Unity 리모트

64비트 iOS로 업그레이드(Upgrading to 64 bit iOS)

iOS 64비트 지원은 C#/UnityScript 코드로 실행되는 IL2CPP라는 스크립팅 백엔드를 사용하여 구현됩니다.

IL2CPP 런타임은 사전 컴파일러를 가상 컴퓨터와 결합하여 어셈블리를 C++로 변환하는 동시에스탠다드 플랫폼 C++ 컴파일러를 활용하여 네이티브 바이너리를 생성합니다. 그 결과 성능, 플랫폼 호환성 및 유지관리 용이성이 크게 향상됩니다.

IL2CPP는 iOS에서 ARM 64비트로 배포하는 기능을 지원하는 유일한 스크립팅 백엔드이므로, 새 앱을 릴리스하기 위해 Apple 앱 스토어에 배포할 때 필수적입니다.

IL2CPP에 대한 자세한 내용은 Unity 스크립팅의 미래Unity의 Apple iOS 64비트 지원 블로그 게시물을 참조하십시오.

iOS에서 IL2CPP 사용을 시작하는 방법

플레이어 설정Scripting Backend 에서 IL2CPP를 선택해야 합니다.

스크립팅 백엔드 선택
스크립팅 백엔드 선택

기본적으로 Universal 아키텍처(ARM64ARMv7 모두 포함)용으로 빌드하고, 필요한 경우 플레이어 설정에서 특정 아키텍처로 전환할 수 있습니다. 애플리케이션을 64비트에서 시작하고 실행하려면 다음과 같은 몇 가지 작업을 수행해야 합니다.

  • 테스트하는 데 사용할 64비트 지원 기기가 필요합니다. 이런 기기는 모두 A7 칩 이상이 탑재된 iOS 기기입니다. 현재 iPhone 5S, iPad Air, iPad Mini Retina, iPhone 6, iPhone 6 Plus, iPad Mini 3, iPad Air 2가 해당됩니다.
  • 모든 네이티브 플러그인이 64비트를 지원하도록 컴파일되거나 소스 코드로 제공되어야 합니다. 타사 플러그인을 사용하는 경우 플러그인 공급업체에 연락하여 해당 플러그인의 64비트 지원 및 IL2CPP 호환 버전을 요청해야 합니다. 현 시점에는 모든 최신 Prime31 플러그인이 잘 동작하는 것으로 알려져 있습니다.
  • 플러그인 공급업체이거나 자체 네이티브 플러그인을 보유하고 있는 경우 다음 몇 가지 사항을 기억해야 합니다.
    • IL2CPP는 Mono Runtime API와 API 호환이 되지 습니다(노출되지 않음). 즉, 플러그인에서 mono\\*_ 를 사용하는 경우 함수가 더 이상 링크되지 않습니다. 이 문제를 해결하는 최상의 방법은 관리된 위임/콜백 접근방식으로 전환하며, 관리된 콜백을 플러그인의 네이티브 방향으로 전달하고, 네이티브 데이터나 이벤트가 도착할 때 다시 호출하는 것입니다.
    • 미리 컴파일된 정적 라이브러리(.a 파일)로 제공되는 모든 플러그인에는 이제 ARM64 슬라이스가 포함되어야 합니다.
    • 네이티브 코드/타입 변환을 수행할 때는 이제 포인터와 long의 너비가 64비트고 int의 너비는 여전히 32비트임을 주의해야 합니다.
  • 생성되는 C++ 코드의 양을 최소화하기 위해, IL2CPP는 항상(스트리핑 레벨Disabled 로 설정된 경우에도) 일종의 매니지드 코드 스트리핑을 수행합니다. 때로는 사용자가 이 작업을 도와야 합니다. iOS 플레이어 크기 최적화 매뉴얼에서 link.xml 가이드를 찾아볼 수 있습니다.

문제 해결

  • Q: 제 코드가 IL2CPP에서 Mono를 사용할 때보다 더 느리게 실행됩니다. 그 이유는 무엇입니까? A: 코드 성능을 Xcode Release 설정에서 테스트하고 있는지 확인해야 합니다. 그래도 문제가 계속 발생하면 버그리포트를 제출합니다.
  • Q: Unity에서 생성된 Xcode 프로젝트가 컴파일되지 않고 다음과 같은 오류가 발생합니다. Method not found: 'Default constructor not found...ctor() of System.ComponentModel.Int64Converter' A: 디시리얼라이저와 시리얼라이저에서 종종 .NET Reflection API를 통해서만 일부 타입을 레퍼런스하고, 이 경우 해당 메서드나 클래스까지도 프로젝트에서 스트립될 수 있습니다. link.xml를 사용하거나 스크립트에서 명시적으로 레퍼런스되는 더미 코드를 도입하여 특정 클래스/메서드가 사용된다는 것을 매니지드 코드 스트리퍼에 알릴 수 있습니다.
  • Q: Unity에서 생성된 Xcode 프로젝트에서 컴파일에 실패하고 다른 오류가 발생합니다. A: 모든 플러그인이 _ARM64_와 IL2CPP를 지원하는지 확인하고, 지원되는 경우 버그리포트를 제출하고 해당 프로젝트를 (또는 프로젝트의 스크립팅 파트만) 버그 리포트에 첨부해 주십시오. 감사합니다!
iOS 2D 텍스처 오버라이드
Unity 리모트