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