fangmd / blogsource

6 stars 0 forks source link

Dart ffi #94

Open fangmd opened 12 months ago

fangmd commented 12 months ago
image
fangmd commented 12 months ago

Flutter iOS/MacOS xcode 引入静态库

  1. xxx.a 放到项目目录下 Runner/xxxx.a
  2. xxx.a 拖动到 xcode 的 Runner/Frameworks
image
  1. 检查1
image
  1. 添加
image
  1. 静态库.h 头文件复制到项目下
  2. 创建一个 oc 文件,同时会自动创建 Runner-Bridging-Header.h,并在 Runner-Bridging-Header.h 中添加 #import "qs_sdk.h"
  3. oc 中使用下 静态库.h, 并且使用内部的一个函数(这样可以确保 .a .h 会被打包到项目中),然后 Dart 中就可以正常调用静态库了

Dart 加载静态库

nativeApiLib = DynamicLibrary.executable(); // 静态库

其他

如果不需要支持m系列芯片,或者静态库不支持

去掉 arm64 编译

image

静态库在 release 和 profile 模式下找不到符号

https://github.com/brickpop/flutter-rust-ffi/issues/7#issuecomment-687907804

原因: ios 在 release/profile 模式下做了 tree shaking

处理方案:实现 oc(.m .h) 文件给静态库所有函数包一层,在 swift 中调用一下会使用到的静态库函数(不用真的调用,实现一个入口函数-dummyMethodToEnforceBundling,函数里面使用了所有 oc 函数就可以,dummyMethodToEnforceBundling函数不需要被调用)

other

image
fangmd commented 11 months ago

Flutter iOS/iOS/Macos 加载动态库