DOC-302f 增加 UniFFI 符号检查脚本 #35

Closed
opened 2026-06-03 18:56:11 +08:00 by wangdl · 1 comment
Owner

目标

对最终生成的 libzx_document_ffi.a 执行 nm 检查,确保所有 C ABI 符号存在。能在进 Xcode 之前就发现问题。

必须存在的符号

API 分发函数(12 个)

_uniffi_zx_document_ffi_fn_func_detect_material_type
_uniffi_zx_document_ffi_fn_func_parse_markdown
_uniffi_zx_document_ffi_fn_func_parse_text
_uniffi_zx_document_ffi_fn_func_read_image_meta
_uniffi_zx_document_ffi_fn_func_read_text_stats
_uniffi_zx_document_ffi_fn_func_search_markdown_blocks
_uniffi_zx_document_ffi_fn_func_search_text_content
_uniffi_zx_document_ffi_fn_func_create_note_anchor
_uniffi_zx_document_ffi_fn_func_push_reading_event
_uniffi_zx_document_ffi_fn_func_update_reading_position
_uniffi_zx_document_ffi_fn_func_export_pending_events
_uniffi_zx_document_ffi_fn_func_clear_exported_events

Checksum 函数(12 个)

_uniffi_zx_document_ffi_checksum_func_detect_material_type
_uniffi_zx_document_ffi_checksum_func_parse_markdown
... (共 12 个)

Buffer 管理函数(5 个)

_ffi_zx_document_ffi_rustbuffer_alloc
_ffi_zx_document_ffi_rustbuffer_from_bytes
_ffi_zx_document_ffi_rustbuffer_free
_ffi_zx_document_ffi_rustbuffer_reserve
_ffi_zx_document_ffi_uniffi_contract_version

实现

scripts/ 下新增 check-symbols.sh

#!/bin/bash
set -e
LIB="${1:-bindings/ios/simulator/libzx_document_ffi.a}"

echo "==> Checking UniFFI symbols in $LIB..."

check_sym() {
  if ! nm -g "$LIB" 2>/dev/null | grep -q "$1"; then
    echo "MISSING: $1"
    exit 1
  fi
}

check_sym "_uniffi_zx_document_ffi_fn_func_detect_material_type"
check_sym "_uniffi_zx_document_ffi_fn_func_parse_markdown"
check_sym "_uniffi_zx_document_ffi_fn_func_parse_text"
check_sym "_ffi_zx_document_ffi_rustbuffer_alloc"
check_sym "_ffi_zx_document_ffi_uniffi_contract_version"
# ... 其余符号

echo "All symbols OK"

集成到 build-ios.sh 末尾:构建成功 → 自动运行符号检查。符号不存在 → 构建直接失败。

依赖

  • 依赖 DOC-302c(构建流程改完)

验收

  • bash scripts/check-symbols.sh 输出 "All symbols OK"
  • build-ios.sh 末尾自动调用符号检查
  • 缺符号时 exit code 非 0
## 目标 对最终生成的 `libzx_document_ffi.a` 执行 `nm` 检查,确保所有 C ABI 符号存在。**能在进 Xcode 之前就发现问题。** ## 必须存在的符号 ### API 分发函数(12 个) ``` _uniffi_zx_document_ffi_fn_func_detect_material_type _uniffi_zx_document_ffi_fn_func_parse_markdown _uniffi_zx_document_ffi_fn_func_parse_text _uniffi_zx_document_ffi_fn_func_read_image_meta _uniffi_zx_document_ffi_fn_func_read_text_stats _uniffi_zx_document_ffi_fn_func_search_markdown_blocks _uniffi_zx_document_ffi_fn_func_search_text_content _uniffi_zx_document_ffi_fn_func_create_note_anchor _uniffi_zx_document_ffi_fn_func_push_reading_event _uniffi_zx_document_ffi_fn_func_update_reading_position _uniffi_zx_document_ffi_fn_func_export_pending_events _uniffi_zx_document_ffi_fn_func_clear_exported_events ``` ### Checksum 函数(12 个) ``` _uniffi_zx_document_ffi_checksum_func_detect_material_type _uniffi_zx_document_ffi_checksum_func_parse_markdown ... (共 12 个) ``` ### Buffer 管理函数(5 个) ``` _ffi_zx_document_ffi_rustbuffer_alloc _ffi_zx_document_ffi_rustbuffer_from_bytes _ffi_zx_document_ffi_rustbuffer_free _ffi_zx_document_ffi_rustbuffer_reserve _ffi_zx_document_ffi_uniffi_contract_version ``` ## 实现 在 `scripts/` 下新增 `check-symbols.sh`: ```bash #!/bin/bash set -e LIB="${1:-bindings/ios/simulator/libzx_document_ffi.a}" echo "==> Checking UniFFI symbols in $LIB..." check_sym() { if ! nm -g "$LIB" 2>/dev/null | grep -q "$1"; then echo "MISSING: $1" exit 1 fi } check_sym "_uniffi_zx_document_ffi_fn_func_detect_material_type" check_sym "_uniffi_zx_document_ffi_fn_func_parse_markdown" check_sym "_uniffi_zx_document_ffi_fn_func_parse_text" check_sym "_ffi_zx_document_ffi_rustbuffer_alloc" check_sym "_ffi_zx_document_ffi_uniffi_contract_version" # ... 其余符号 echo "All symbols OK" ``` 集成到 `build-ios.sh` 末尾:构建成功 → 自动运行符号检查。符号不存在 → 构建直接失败。 ## 依赖 - 依赖 DOC-302c(构建流程改完) ## 验收 - `bash scripts/check-symbols.sh` 输出 "All symbols OK" - `build-ios.sh` 末尾自动调用符号检查 - 缺符号时 exit code 非 0
wangdl added this to the M3:iOS 主 App 资料阅读闭环 milestone 2026-06-03 18:56:11 +08:00
wangdl added the
type:test
area:ci
labels 2026-06-03 18:56:11 +08:00
Author
Owner

关闭

DOC-302f 已完成 — 但自动验证待 DOC-FULL-029 完善

## 关闭 DOC-302f 已完成 — 但自动验证待 DOC-FULL-029 完善
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wangdl/zhixi-document-runtime#35
No description provided.