google / flutter-mediapipe

Apache License 2.0
160 stars 6 forks source link

🐛 [mediapipe_genai] Unable to Submit IOS App - arm64_libllm_inference_engine.framework does not support the minimum OS Version specified #58

Open aaronrau opened 1 month ago

aaronrau commented 1 month ago

Bug report

Describe the bug Unable to distribute the example app to Testflight for internal testing. Error: Runner.app/Frameworks/arm64_libllm_inference_engine.framework does not support the minimum OS Version specified in the Info.plist.

Steps to reproduce

in the EXAMPLE/IOS https://github.com/google/flutter-mediapipe/tree/main/packages/mediapipe-task-genai/example

  1. run flutter build ipa
  2. Drag and drop the "build/ios/ipa/*.ipa" bundle into the Apple Transporter macOS app https://apps.apple.com/us/app/transporter/id1450874784
  3. Click on the distribute button
  4. Apple returns the error
    Asset validation failed (90208)
    Invalid Bundle. The bundle Runner.app/Frameworks/arm64_libllm_inference_engine.framework does not support the minimum OS Version specified in the Info.plist. (ID: 9e7cf909-70a6-4ccb-840e-ee10cbe8da8c)

Expected behavior

Able to distribute the example app to testflight

Additional context

Able to run the build in debug on iPhone 15 device. Just can't distribute the build.

vtool -show Products/Applications/Frameworks/arm64_libllm_inference_engine.framework/arm64_libllm_inference_engine

The minimum version in arm64 is IOS 16.1 
Load command 10
      cmd LC_BUILD_VERSION
  cmdsize 32
 platform IOS
    minos 16.1
      sdk 16.1
   ntools 1
     tool LD
  version 820.1
Load command 11
      cmd LC_SOURCE_VERSION
  cmdsize 16
  version 0.0

But the flutter package Frameworks/arm64_libllm_inference_engine.framework/Info.plist appears to be 12.0 this is causing a conflict

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CFBundleDevelopmentRegion</key>
    <string>en</string>
    <key>CFBundleExecutable</key>
    <string>arm64_libllm_inference_engine</string>
    <key>CFBundleIdentifier</key>
    <string>io.flutter.flutter.native-assets.arm64-libllm-inference-engine</string>
    <key>CFBundleInfoDictionaryVersion</key>
    <string>6.0</string>
    <key>CFBundleName</key>
    <string>arm64_libllm_inference_engine</string>
    <key>CFBundlePackageType</key>
    <string>FMWK</string>
    <key>CFBundleShortVersionString</key>
    <string>1.0</string>
    <key>CFBundleSignature</key>
    <string>????</string>
    <key>CFBundleVersion</key>
    <string>1.0</string>
    <key>MinimumOSVersion</key>
    <string>12.0</string>
</dict>
</plist>

Flutter doctor

Run flutter doctor and paste the output below:

Click To Expand ``` [✓] Flutter (Channel master, 3.23.0-13.0.pre.69, on macOS 14.4.1 23E224 darwin-arm64, locale en-US) [✓] Android toolchain - develop for Android devices (Android SDK version 34.0.0) [✓] Xcode - develop for iOS and macOS (Xcode 15.2) [✓] Chrome - develop for the web [✓] Android Studio (version 2023.3) [✓] VS Code (version 1.89.1) [✓] Connected device (5 available) ! Error: Browsing on the local area network for Aaron Work. Ensure the device is unlocked and attached with a cable or associated with the same local area network as this Mac. The device must be opted into Developer Mode to connect wirelessly. (code -27) [✓] Network resources • No issues found! ```

Flutter dependencies

Run flutter pub deps -- --style=compact and paste the output below:

Click To Expand ``` Dart SDK 3.5.0-214.0.dev Flutter SDK 3.23.0-13.0.pre.69 example 1.0.0+1 dependencies: - adaptive_dialog 2.1.0 [animations collection dynamic_color flutter intersperse macos_ui meta] - chat_bubbles 1.6.0 [flutter intl] - cupertino_icons 1.0.8 - flutter 0.0.0 [characters collection material_color_utilities meta vector_math sky_engine] - flutter_bloc 8.1.5 [bloc flutter provider] - flutter_localizations 0.0.0 [flutter intl characters clock collection material_color_utilities meta path vector_math] - freezed_annotation 2.4.1 [collection json_annotation meta] - getwidget 4.0.0 [flutter] - http 1.2.1 [async http_parser meta web] - intl 0.19.0 [clock meta path] - logging 1.2.0 - mediapipe_core 0.0.1 [equatable ffi logging meta] - mediapipe_genai 0.0.1 [async equatable ffi http logging mediapipe_core native_assets_cli native_toolchain_c path] - path 1.9.0 - path_provider 2.1.3 [flutter path_provider_android path_provider_foundation path_provider_linux path_provider_platform_interface path_provider_windows] - provider 6.1.2 [collection flutter nested] - shimmer 3.0.0 [flutter] - uuid 4.4.0 [crypto sprintf meta fixnum] dev dependencies: - build_runner 2.4.10 [analyzer args async build build_config build_daemon build_resolvers build_runner_core code_builder collection crypto dart_style frontend_server_client glob graphs http_multi_server io js logging meta mime package_config path pool pub_semver pubspec_parse shelf shelf_web_socket stack_trace stream_transform timing watcher web_socket_channel yaml] - flutter_lints 3.0.2 [lints] - flutter_test 0.0.0 [flutter test_api matcher path fake_async clock stack_trace vector_math leak_tracker_flutter_testing async boolean_selector characters collection leak_tracker leak_tracker_testing material_color_utilities meta source_span stream_channel string_scanner term_glyph vm_service] - freezed 2.5.2 [analyzer build build_config collection meta source_gen freezed_annotation json_annotation] transitive dependencies: - _fe_analyzer_shared 67.0.0 [meta] - analyzer 6.4.1 [_fe_analyzer_shared collection convert crypto glob meta package_config path pub_semver source_span watcher yaml] - animations 2.0.11 [flutter] - appkit_ui_element_colors 1.0.0 [equatable flutter plugin_platform_interface] - args 2.5.0 - async 2.11.0 [collection meta] - bloc 8.1.4 [meta] - boolean_selector 2.1.1 [source_span string_scanner] - build 2.4.1 [analyzer async convert crypto glob logging meta package_config path] - build_config 1.1.1 [checked_yaml json_annotation path pubspec_parse yaml] - build_daemon 4.0.2 [built_collection built_value crypto http_multi_server logging path pool shelf shelf_web_socket stream_transform watcher web_socket_channel] - build_resolvers 2.4.2 [analyzer async build collection convert crypto graphs logging package_config path pool pub_semver stream_transform yaml] - build_runner_core 7.3.0 [async build build_config build_resolvers collection convert crypto glob graphs json_annotation logging meta package_config path pool timing watcher yaml] - built_collection 5.1.1 - built_value 8.9.2 [built_collection collection fixnum meta] - characters 1.3.0 - checked_yaml 2.0.3 [json_annotation source_span yaml] - cli_config 0.1.2 [args yaml] - clock 1.1.1 - code_builder 4.10.0 [built_collection built_value collection matcher meta] - collection 1.18.0 - convert 3.1.1 [typed_data] - crypto 3.0.3 [typed_data] - dart_style 2.3.6 [analyzer args collection path pub_semver source_span] - dynamic_color 1.7.0 [flutter flutter_test material_color_utilities] - equatable 2.0.5 [collection meta] - fake_async 1.3.1 [clock collection] - ffi 2.1.2 - file 7.0.0 [meta path] - fixnum 1.1.0 - frontend_server_client 4.0.0 [async path] - glob 2.1.2 [async collection file path string_scanner] - gradient_borders 1.0.1 [flutter] - graphs 2.3.1 [collection] - http_multi_server 3.2.1 [async] - http_parser 4.0.2 [collection source_span string_scanner typed_data] - intersperse 2.0.0 - io 1.0.4 [meta path string_scanner] - js 0.7.1 - json_annotation 4.9.0 [meta] - leak_tracker 10.0.5 [clock collection meta path vm_service] - leak_tracker_flutter_testing 3.0.5 [flutter leak_tracker leak_tracker_testing matcher meta] - leak_tracker_testing 3.0.1 [leak_tracker matcher meta] - lints 3.0.0 - macos_ui 2.0.7 [flutter macos_window_utils gradient_borders appkit_ui_element_colors equatable] - macos_window_utils 1.5.0 [flutter] - matcher 0.12.16+1 [async meta stack_trace term_glyph test_api] - material_color_utilities 0.11.1 [collection] - meta 1.15.0 - mime 1.0.5 - native_assets_cli 0.3.2 [cli_config collection crypto pub_semver yaml yaml_edit] - native_toolchain_c 0.3.3 [cli_config glob logging meta native_assets_cli pub_semver] - nested 1.0.0 [flutter] - package_config 2.1.0 [path] - path_provider_android 2.2.5 [flutter path_provider_platform_interface] - path_provider_foundation 2.4.0 [flutter path_provider_platform_interface] - path_provider_linux 2.2.1 [ffi flutter path path_provider_platform_interface xdg_directories] - path_provider_platform_interface 2.1.2 [flutter platform plugin_platform_interface] - path_provider_windows 2.2.1 [ffi flutter path path_provider_platform_interface win32] - platform 3.1.4 - plugin_platform_interface 2.1.8 [meta] - pool 1.5.1 [async stack_trace] - pub_semver 2.1.4 [collection meta] - pubspec_parse 1.3.0 [checked_yaml collection json_annotation pub_semver yaml] - shelf 1.4.1 [async collection http_parser path stack_trace stream_channel] - shelf_web_socket 2.0.0 [shelf stream_channel web_socket_channel] - sky_engine 0.0.99 - source_gen 1.5.0 [analyzer async build dart_style glob path source_span yaml] - source_span 1.10.0 [collection path term_glyph] - sprintf 7.0.0 - stack_trace 1.11.1 [path] - stream_channel 2.1.2 [async] - stream_transform 2.1.0 - string_scanner 1.2.0 [source_span] - term_glyph 1.2.1 - test_api 0.7.1 [async boolean_selector collection meta source_span stack_trace stream_channel string_scanner term_glyph] - timing 1.0.1 [json_annotation] - typed_data 1.3.2 [collection] - vector_math 2.1.4 - vm_service 14.2.3 - watcher 1.1.0 [async path] - web 0.5.1 - web_socket 0.1.5 [web] - web_socket_channel 3.0.0 [async crypto stream_channel web web_socket] - win32 5.5.1 [ffi] - xdg_directories 1.0.4 [meta path] - yaml 3.1.2 [collection source_span string_scanner] - yaml_edit 2.2.1 [collection meta source_span yaml] (base) aaronrau@Aarons-Air example % ```

aaronrau commented 1 month ago

Manually editing the Frameworks/arm64_libllm_inference_engine.framework/Info.plist seems to fix the problem

From

<key>MinimumOSVersion</key>
<string>12.0</string>

To

<key>MinimumOSVersion</key>
<string>16.1</string>
craiglabenz commented 1 month ago

Thanks for your investigations here, @aaronrau. Are you able to open a PR with that change to the example app's Info.plist file? Admittedly, I didn't think about distributing the example app - but it would probably be a fun thing to play with on your phone :)

aaronrau commented 1 month ago

@craiglabenz I'm not familiar with how the native assets are being built and linked. I think it's something related to https://github.com/google-ai-edge/mediapipe/blob/f936711aca489b30f75fde4535e60b8030e127a1/mediapipe/tasks/ios/genai/core/BUILD gets build. I think it's with that process? Attached is the screenshot inside the app bundle where it needs to be changed.

image