Xcode에서 ios 플러그인을 만들어보자

Xcode에서 ios 플러그인을 만들어보자

Xcode에서 ios플러그인을 만들고, 이를 유니티에서 어떻게 호출하는지 간단하게 정리했습니다.

참고: Xcode 15.3 버전에서 진행했습니다.

프로젝트 셋팅

  • Xcode를 열고 새로운 프로젝트를 생성합니다.
  • Framework & Library 중에서 Static Library를 선택합니다.
  • 프로젝트 이름과 기타 옵션을 설정하고 프로젝트를 생성합니다.

iOS 코드

  • 프로젝트에 새로운 Objective-C 클래스를 추가합니다.
  • .m 으로 되어있는 확장자를 .mm으로 바꾸어 Object-C++ 클래스로 변경합니다.
extern "C"{
    const char * getSimpleString(){
        return "Simple String from iOS Plugin";
    }
}

위의 코드를 입력합니다.

플러그인 빌드

빌드 타겟을 Any iOS Device로 설정

  • Product’ > ‘Scheme’ > ‘Edit Scheme’을 선택하고, ‘Build Configuration’을 ‘Release’로 설정 (프레임워크를 공개 배포할 경우 Release 모드에서 빌드하는 것이 일반적입니다.)

  • ‘Product’ 메뉴에서 ‘Build’를 선택하여 프로젝트를 빌드합니다.

  • Product > Show Build Folder in Finder
  • 그러면 파인더가 나오고 Build>Products>Release-프로젝트폴더가 있고
  • 그 안에.a 파일과 .h 파일이 있습니다. (.h 파일은 include 폴더 안에 있음)

  • include는 그냥 폴더 째로, .a와 함께 유니티의 Plugins>iOS 폴더 안에 배치시킵니다.

유니티에서의 활용

using System.Runtime.InteropServices;
using UnityEngine;

public class PluginTester : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern IntPtr getSimpleString();

    void Start()
    {
        string str = Marshal.PtrToStirngAnsi(getSimpleString());
        Debug.Log(str);
    }
}

유니티 코드는 이런 식으로 해주면 됩니다.

  • DLLImport(“Internal”) 을 이용하여 불러올 것
  • 중요한 점은 const char * 를 string으로 변형해주는 코드. 이게 없으면 오류가 납니다.

유니티에서의 iOS 빌드

  • 플랫폼을 iOS로 해서 빌드해줍니다.

Unity가 빌드를 완료하면, 지정한 위치에 Xcode 프로젝트 폴더가 생성됩니다. 이 폴더를 찾아 .xcodeproj 파일을 더블 클릭하여 Xcode에서 엽니다.

Xcode의 프로젝트 설정에서 개발자 계정을 설정합니다. Signing & Capabilities 탭에서 Team을 선택하거나 추가합니다.

위의 그림처럼 두가지 에러가 뜨면

  1. Unable to process request - PLA Update available
    이 에러는 Apple 개발자 프로그램 라이선스 계약(Program License Agreement, PLA)에 업데이트가 있고, 그것을 검토하고 동의해야 함을 나타냅니다.
    1. No profiles for com.DefaultCompany.PluginTest were found
      이 에러는 Xcode가 지정된 앱 ID에 대한 유효한 프로비저닝 프로파일을 찾을 수 없음을 나타냅니다.

1을 해결하니 자동으로 2도 해결이 되었습니다.

  • 이렇게 ‘Apple Development: 내 이름’ 키체인 로그인을 하라고 하면 이 컴퓨터에 ‘로그인한 계정의 처음으로 입력했던 비밀번호’를 쳐봅니다. (이거 때문에 많이 헤맸음…)

테스트하기

  • 이제 USB로 iPhone을 연결합니다
  • 위에 타겟을 연결한 iPhone으로 변경해줍니다
  • 플레이 버튼을 누릅니다

© 2022. All rights reserved.