flutter로 개발중인 앱을 앱스토어 배포를 위해서 준비중에 아래와 같은 오류를 접하게 되었습니다.
App Store Connect Operation Error
ITMS-90205: Invalid Bundle. The bundle
at 'App.app/PlugIns/AppExtension.appex' contains disallowed nested bundles.
App Store Connect Operation Error
ITMS-90206: Invalid Bundle. The bundle
at 'App.app/PlugIns/AppExtension.appex' contains disallowed file
'Frameworks'.
App Extension 모듈이 Frameworks 폴더를 내포하고 있는 경우에 발생하는 오류 입니다. App Extension 모듈에서 내포하고 있는 Frameworks를 살펴보니 Flutter.framework와 App.framework 였습니다.
두 개의 framework을 참조하는 이유는 App Extension의 구현 자체는 swift로 구현되어 있기는 하지만, flutter를 이용해서 구현된 App과 리소스를 공유하는 부분이 있는데 이 리소스가 flutter의 assets에 포함되어 있어서 참조가 발생했습니다.
App Extension에서 flutter의 assets에 등록된 파일을 읽기 위해서 아래와 같은 방식으로 구현되었습니다.
참고 : https://docs.flutter.dev/development/ui/assets-and-images#loading-flutter-assets-in-ios
let flutterEngine = FlutterEngine(name: "WidgetViewController")
flutterEngine.run()
let flutterViewController = FlutterViewController(engine: flutterEngine, nibName: nil, bundle: nil)
flutterViewController.lookupKey(forAsset: "assets/info.json")
bundle.path(forResource: key, ofType: nil)
위 코드 만으로는 App Extension에서 assets을 정상적으로 접근을 할 수 없습니다. 왜냐하면 flutter의 assets에 등록된 리소스들은 App.framework에 포함되는데 App Extension 모듈에 해당 프레임워크가 포함되지 않기 때문입니다.
그래서 App의 Build Phases에 포함된 xcode_backend.sh를 실행시키는 절차를 App Extension 프로젝트에도 포함하여 App Extension에서도 App.framework에 대한 참조를 추가할 수 있습니다.
참고 : https://github.com/hmhv/flutter_today_extension_example
이렇게 하면 App과 App Extension 양쪽에 App.framework가 포함되는데 debug 또는 Ad-hoc 배포를 통해서 사용하는데는 문제가 발생하지 않습니다. 문제는 앱스토어에 배포하는 과정에서 오류를 접하게됩니다.
App.framework를 App Extension에 포함하지 않으면서, App 번들에 포함되어 있는 App.framework를 찾아서 직접 접근하는 방법을 사용하여 문제를 해결할 수 있었습니다.
if let frameworksURL = bundle.privateFrameworksURL {
if let assetBundle = Bundle(url:frameworksURL.appendingPathComponent("App.framework")) {
if let path = assetBundle.path(forResource: "flutter_assets/assets/info.json", ofType: nil) {
if FileManager.default.fileExists(atPath: path) {
return URL(fileURLWithPath: path, isDirectory: true)
}
}
}
}
참고 : https://github.com/flutter/flutter/issues/54586#issuecomment-743400473
댓글
댓글 쓰기