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

MDo*_*dis 5 ffi ios rust dart flutter

我已按照此处此处的说明进行操作

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

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

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

我也有

  • 跑步flutter build --release
  • 清除派生数据
  • Pod 缓存
  • 甚至从头开始重新制作iOS文件夹。

我在这里还缺少其他东西吗?

MDo*_*dis 2

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

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

flutter:
  plugin:
    pluginClass: ApproverRustPlugin
Run Code Online (Sandbox Code Playgroud)

在您的.yaml插件文件中。

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

 s.public_header_files = 'Classes**/*.h'
 s.source_files = 'Classes/**/*'
 s.static_framework = true
 s.vendored_libraries = "**/*.a"
Run Code Online (Sandbox Code Playgroud)

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

dependencies:
  flutter:
    sdk: flutter
  approver_rust:
    path: "./approver_rust"
Run Code Online (Sandbox Code Playgroud)

以供参考:

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
Run Code Online (Sandbox Code Playgroud)