앱 확장 기능
앱 확장 기능을 사용하면 메인 앱 외부에서 커스텀 기능과 콘텐츠를 제공할 수 있다. iOS에는 다양한 종류의 앱 확장이 있으며, 이에 대한 자세한 내용은 앱 확장 프로그래밍 가이드에서 확인할 수 있다. 이 가이드에서는 iOS에서 앱 확장 기능을 활용하는 방법을 간략히 설명한다.
확장 기능의 메모리 사용
이 확장 기능들은 일반 앱 샌드박스 외부에서 로드되기 때문에, 여러 확장 기능이 동시에 로드될 가능성이 높다. 예상할 수 있듯이, 이러한 확장 기능들은 메모리 사용량에 엄격한 제한이 있다. 앱 확장 기능을 개발할 때 이 점을 꼭 염두에 두어야 한다. 실제 기기에서 애플리케이션을 테스트하는 것은 항상 권장되며, 특히 앱 확장 기능을 개발할 때는 더욱 중요하다. 개발자들은 종종 iOS 시뮬레이터에서는 확장 기능이 잘 동작하는데, 실제 기기에서는 로드되지 않는다는 사용자 보고를 받는 경우가 많다.
이 주제에 대해 더 깊이 이해하려면 Conrad Kramer의 Memory Use in Extensions 강연을 시청하는 것을 적극 권장한다.
Today 위젯
Today 위젯의 메모리 제한은 16MB이다. React Native를 사용한 Today 위젯 구현체는 메모리 사용량이 너무 높아 불안정하게 동작할 수 있다. Today 위젯이 'Unable to Load' 메시지를 표시한다면 메모리 제한을 초과한 것이다:
앱 확장 기능은 항상 실제 기기에서 테스트해야 하지만, 특히 Today 위젯의 경우 이 방법만으로는 충분하지 않을 수 있다. 디버그 구성 빌드는 메모리 제한을 초과할 가능성이 높은 반면, 릴리스 구성 빌드는 즉시 실패하지 않는다. 실제 메모리 사용량을 분석하기 위해 Xcode Instruments를 사용하는 것을 강력히 권장한다. 릴리스 구성 빌드가 16MB 제한에 매우 근접한 경우가 많기 때문이다. API에서 데이터를 가져오는 등 일반적인 작업을 수행하면 16MB 제한을 쉽게 초과할 수 있다.
React Native Today 위젯 구현체의 한계를 실험해보려면 react-native-today-widget의 예제 프로젝트를 확장해보는 것이 좋다.
다양한 앱 확장 기능
Today 위젯 외에도 다른 종류의 앱 확장 기능은 더 큰 메모리 제한을 가진다. 예를 들어, 커스텀 키보드 확장은 48MB로 제한되며, 공유 확장은 120MB로 제한된다. 이러한 앱 확장 기능을 React Native로 구현하는 것이 더 실용적이다. 개념 증명 예제로는 react-native-ios-share-extension이 있다.