将静态库 (Rust .a) 导入到 iOS 中的 Flutter 项目
Importing a static library (Rust .a) to Flutter project in iOS
的说明进行操作
虽然 .a
库和函数在调试(模拟器和真实设备)上按预期工作,但当我通过 TestFlight 存档和测试时,Flutter App 以灰色背景开始(我读到它意味着某种错误)。
如果我继续删除所有对 Rust 库的调用,那么 Testflight 会正常打开。
注意:我还添加了 .a
库作为 XCode 的链接框架,并且我已经将 .h
文件包含到桥接-header.h项目。
我也有
- 运行
flutter build --release
- 清除派生数据
- pods缓存
- 甚至重新制作了 iOS 文件夹
从零开始。
我还遗漏了什么吗?
我设法通过创建一个 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
虽然 .a
库和函数在调试(模拟器和真实设备)上按预期工作,但当我通过 TestFlight 存档和测试时,Flutter App 以灰色背景开始(我读到它意味着某种错误)。
如果我继续删除所有对 Rust 库的调用,那么 Testflight 会正常打开。
注意:我还添加了 .a
库作为 XCode 的链接框架,并且我已经将 .h
文件包含到桥接-header.h项目。
我也有
- 运行
flutter build --release
- 清除派生数据
- pods缓存
- 甚至重新制作了 iOS 文件夹 从零开始。
我还遗漏了什么吗?
我设法通过创建一个 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