Swift on Android의 잠재적 활용
Swift for Android의 잠재적 활용 분야는 다양합니다. 단순히 iOS와 Android 간 코드 공유를 넘어 다음을 포함합니다.
-
공유 비즈니스 로직: iOS 및 Android 애플리케이션 전반에 걸쳐 핵심 비즈니스 로직, 알고리즘, 데이터 모델을 공유하여 중복 작업을 최소화하고 일관성을 보장합니다.
-
성능 중요 모듈: Swift의 강력한 성능 특성은 이미지 처리, 오디오 조작 또는 계산 집약적인 작업과 같은 성능에 민감한 구성 요소를 개발하는 데 이상적입니다.
-
크로스 플랫폼 라이브러리 및 SDK: Swift를 활용하여 기존 Android 및 iOS 애플리케이션에 쉽게 통합될 수 있는 라이브러리 및 SDK를 구축할 수 있습니다.
-
전체 네이티브 애플리케이션: UI에 상당한 노력이 필요하지만, 각 OS의 플랫폼 네이티브 UI 프레임워크를 사용하여 전체 Android 애플리케이션을 Swift로 구축하는 것도 가능합니다.
설치 과정의 복잡성
Swift for Android를 시작하려면 여러 구성 요소를 수동으로 설치해야 합니다. Swift 환경 관리자인 Swiftly를 설치한 다음, Swift for Android 문서에 따라 호스트 툴체인, Android용 Swift SDK, Android NDK를 설치해야 합니다. 이 과정은 상당한 양의 수동 명령 실행과 cURL 사용을 포함하며, 보안을 위해 별도 환경에서 진행하는 것이 권장됩니다.
코드 분석 및 JNI 연동
swift-android-examples 저장소의 hello-swift 예제를 살펴보면, MainActivity.kt 파일은 일반적인 Android 앱과 크게 다르지 않습니다. Swift 코드는 stringFromSwift() 함수에 external 키워드를 사용하여 Kotlin 외부에 구현되어 있음을 알립니다. 실제 Swift 코드는 helloswift.swift 파일에 있으며, @_cdecl 데코레이터를 통해 Kotlin에 노출됩니다. 이 함수는 UnsafeMutablePointer<JNIEnv?>와 같은 포인터 타입을 사용하여 JNI(Java Native Interface)를 통해 Android와 상호작용하며, 이는 Objective-C 이후로 직접 포인터를 다루지 않았던 개발자에게는 복잡하게 느껴질 수 있습니다.
현재의 한계점 및 장기 비전
현재 Swift for Android는 주로 Swift로 작성된 비즈니스 로직을 공유하는 데 초점을 맞추고 있습니다. Hotwire Native 앱의 경우 비즈니스 로직이 이미 Rails 앱 서버에 존재하므로 이점은 크지 않습니다. 또한, 현재의 Swift-Android 연동 코드는 복잡하며, 저자는 Kotlin 코드보다 선호하지 않는다는 의견을 피력합니다. 장기적인 비전에서도 Swift for Android 애플리케이션의 UI는 주로 Android의 네이티브 UI 프레임워크(Jetpack Compose, Android Views) 또는 FlutterSwift와 같은 기존 크로스 플랫폼 솔루션, 혹은 Skip.tools와 같은 브리징 솔루션에 의존할 것으로 예상됩니다. 즉, Swift만으로 크로스 플랫폼 UI를 구축하는 것은 아직 요원합니다.