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

标签 ios flutter dart rust ffi

我已按照 here 中的说明进行操作和 here
虽然.a库和函数在调试(模拟器和真实设备)上按预期工作,当我通过 TestFlight 存档和测试时,Flutter 应用程序以灰色背景开始(我读到这意味着某种错误)。
如果我继续删除 Rust 库的所有调用,那么 Testflight 会正常打开。
注意:我还添加了 .a库作为来自 XCode 的链接框架,我已经包含了 .h文件到项目的 bridging-header.h。
我也有

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

  • 还有什么我在这里想念的吗?

    最佳答案

    我设法通过创建 Flutter 插件使其工作 flutter create -t plugin然后我导入了 .a /iOS 上的文件文件夹并包含 全部 .h 上的 Rust 函数里面的文件 /iOS/Classes (这些是自动创建的)。
    然后为 .Swift 中的每个 rust 函数添加一个示例函数文件在 /iOS/Classes并确保包括

    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
    

    关于ios - 将静态库(Rust .a)导入到 iOS 中的 Flutter 项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64064580/

    相关文章:

    dart - 创建自己的 Flutter 小部件最佳实践

    firebase - 如何使用datetimepicker计算年龄?

    flutter - 可见性与条件小部件

    objective-c - Objective C - 字符转换为 NSString

    flutter - 如何在 google flutter 中对齐行中的文本小部件?

    dart - 使用 BLoC 处理导航的正确方法

    android - 如何修复 webview_flutter 中的白屏?

    ios - 创建一个辅助类来读写 plist

    ios - 无法在 iOS 13 中禁用暗模式 - 基于 plist 权限文本的设备特定权限警报

    iphone - "release"如何在 ARC 上创建一个 UIWebView