html_to_markdown_ffi_ios 1.2.9
html_to_markdown_ffi_ios: ^1.2.9 copied to clipboard
Typed HTML to Markdown conversion for the Zuraffa ecosystem: a Rust FFI core behind a pure-Dart converter port with federated native adapters.
html_to_markdown_ffi_ios #
iOS adapter for html_to_markdown_ffi: registers the port over an injected
channel and ships the Rust native library inside the package.
Zero-touch distribution #
The adapter ships the statically linked slices as
ios/html_to_markdown_ffi_ios/Frameworks/libhtml_to_markdown_ffi.xcframework
(ios-arm64 and the arm64 + x86_64 simulator slice) and links it
through the plugin's own Swift package
(ios/html_to_markdown_ffi_ios/Package.swift, a binaryTarget over that
xcframework). The plugin declares ffiPlugin: true for iOS, so Flutter
builds and links it for you.
A consumer adds the dependency and nothing else — no Podfile entry, no
xcconfig, no -force_load flag, no project-file change of any kind:
dependencies:
html_to_markdown_ffi_ios: ^1.2.3
The symbols reach Dart through DynamicLibrary.process().
How the archive survives the link #
Two details of the Swift package are load-bearing, and both were found by building a real consumer app rather than by reading the manifest:
- The product is dynamic.
.library(name: "html-to-markdown-ffi-ios", type: .dynamic, ...). A static product contributes only the object files it compiles itself; thebinaryTarget's archive is not merged into it. A dynamic product is linked against the archive and embedded in the app bundle, so the library is loaded at launch and its symbols are in the global namespace thatDynamicLibrary.process()searches. - The product name uses dashes. Flutter's Swift Package Manager
integration looks a plugin's product up by the plugin name with
underscores turned into dashes
(
flutter_tools/lib/src/macos/swift_package_manager.dart— the product name becomes theCFBundleIdentifier, which cannot contain underscores). The product must therefore behtml-to-markdown-ffi-ios, nothtml_to_markdown_ffi_ios. - A C anchor keeps the archive in the link. A static archive contributes
only the object members the linker needs, and nothing in the app
references
htm_convertby name, so the archive would be dropped silently. Thehtml_to_markdown_ffi_ios_anchortarget takes the address ofhtm_convert, which creates the undefined reference that keeps it.
final getIt = GetIt.instance;
registerIosHtmlToMarkdownFfiDependencies(
getIt,
channel: IosHtmlToMarkdownFfiChannel.native(),
);