[swift] Swift 앱에서 플러그인 디버깅하기

여러분이 Swift로 개발한 앱에 플러그인이 포함되어 있다면, 때로는 플러그인의 동작을 디버깅해야 할 수도 있습니다. 이 글에서는 Swift 앱에서 플러그인을 디버깅하는 방법에 대해 알아보겠습니다.

1. 플러그인을 빌드할 때 디버그 정보 포함시키기

첫 번째로, 플러그인을 빌드할 때 디버그 정보를 포함시키는 것이 중요합니다. 이를 위해서, 플러그인의 빌드 타겟 설정에서 “Debug Information Format”을 “DWARF with dSYM File”로 설정해야 합니다. 이렇게 하면 디버그 심볼 파일이 생성되어 앱과 함께 빌드됩니다.

2. 앱에서 플러그인 로딩하기

Swift에서 플러그인은 주로 동적 라이브러리로 사용되며, 앱이 실행될 때 로딩됩니다. 플러그인을 로딩하는 방법은 여러 가지가 있지만, 대부분의 경우 dlopen 함수를 사용합니다. 아래는 예시 코드입니다.

import Foundation

func loadPlugin() {
    let pluginPath = Bundle.main.path(forResource: "Plugin", ofType: "dylib")
    if let path = pluginPath {
        let handle = dlopen(path, RTLD_NOW)
        if handle != nil {
            print("Plugin loaded successfully!")
        } else {
            let error = String(cString: dlerror())
            print("Failed to load plugin: \(error)")
        }
    } else {
        print("Plugin file not found.")
    }
}

위 코드에서 “Plugin”과 “dylib”은 로딩할 플러그인의 이름과 확장자로 변경해주어야 합니다.

3. 디버깅하기

앱이 실행될 때 플러그인이 로딩되는지 확인하는 가장 간단한 방법은 디버깅 로그를 출력하는 것입니다. print 함수를 사용하여 로그를 출력하면 Xcode의 콘솔에 로그가 표시됩니다. 위에서 작성한 코드에 로그 출력 부분을 추가해보세요.

...
if handle != nil {
    print("Plugin loaded successfully!")
    // 추가: 디버깅 로그
    print("Plugin handle: \(handle)")
} else {
...

이제 앱을 실행하고 Xcode의 콘솔을 확인해보세요. 플러그인이 로딩되었을 때 “Plugin loaded successfully!”와 플러그인 핸들(주소)이 출력됩니다.

디버깅이 필요한 플러그인의 특정 함수나 기능이 있다면 해당 부분에 print 문을 추가하여 원하는 정보를 출력해볼 수도 있습니다.

4. 다른 디버깅 도구 사용하기

만약 print 문으로 디버깅이 어려운 경우에는 Xcode의 디버깅 도구를 사용할 수도 있습니다. 앱을 실행한 후, Xcode의 디버깅 탭에서 “Debug” 메뉴를 선택하고 “Attach to Process by PID or Name”을 선택합니다. 그런 다음 로딩된 플러그인의 프로세스를 선택하여 디버깅할 수 있습니다.

참고 자료