将静态库 (Rust .a) 导入到 iOS 中的 Flutter 项目

Importing a static library (Rust .a) to Flutter project in iOS

我已按照 here and here

的说明进行操作

虽然 .a 库和函数在调试(模拟器和真实设备)上按预期工作,但当我通过 TestFlight 存档和测试时,Flutter App 以灰色背景开始(我读到它意味着某种错误)。

如果我继续删除所有对 Rust 库的调用,那么 Testflight 会正常打开。

注意:我还添加了 .a 库作为 XCode 的链接框架,并且我已经将 .h 文件包含到桥接-header.h项目。

我也有

我还遗漏了什么吗?

我设法通过创建一个 Flutter 插件使其工作 flutter create -t plugin 然后我将 .a 文件导入 /iOS 文件夹并包含 all /iOS/Classes.h 文件的 Rust 函数(这些是自动创建的)。

然后在 /iOS/Classes 中的 .Swift 文件中为每个 rust 函数添加一个示例函数 并确保包括

flutter:
  plugin:
    pluginClass: ApproverRustPlugin

在您的 .yaml 插件文件中。

也将这些包含在插件 .podspec 文件中

 s.public_header_files = 'Classes**/*.h'
 s.source_files = 'Classes/**/*'
 s.static_framework = true
 s.vendored_libraries = "**/*.a"

完成所有这些后。确保在主应用程序 .yaml 文件中包含您的插件(假设它与主应用程序位于同一文件夹中)。

dependencies:
  flutter:
    sdk: flutter
  approver_rust:
    path: "./approver_rust"

供参考:

Pod::Spec.new do |s|
  s.name             = 'approver_rust'
  s.version          = '0.0.1'
  s.summary          = 'A new flutter plugin project.'
  s.description      = <<-DESC
A new flutter plugin project.
                       DESC
  s.homepage         = 'http://example.com'
  s.license          = { :file => '../LICENSE' }
  s.author           = { 'Your Company' => 'email@example.com' }
  s.source           = { :path => '.' }
  s.public_header_files = 'Classes**/*.h'
  s.source_files = 'Classes/**/*'
  s.static_framework = true
  s.vendored_libraries = "**/*.a"
  s.dependency 'Flutter'
  s.platform = :ios, '9.0'

  # Flutter.framework does not contain a i386 slice.
  s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES', 'EXCLUDED_ARCHS[sdk=iphonesimulator*]' => 'i386' }
  s.swift_version = '5.0'
end