RustDesk 如何构建 iOS release 版 IPA?
RustDesk 如何构建 iOS release 版 IPA【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk这篇文章解决一个具体任务从 RustDesk 源码构建出 iOS 平台的 release 版 IPA 安装包。RustDesk 的 iOS 应用是 Flutter 壳工程加一个用 cargo 交叉编译的 Rust 静态库liblibrustdesk.a构建分三步生成 flutter-rust-bridge 绑定文件、为aarch64-apple-ios目标编译 Rust 库、在flutter/目录下执行flutter build ipa --release。完整流程可以从仓库内的构建脚本和 CI 工作流核对flutter/build_ios.sh、flutter/ios_arm64.sh 以及 .github/workflows/flutter-build.yml 中的build-rustdesk-iosjob、前置的 bridge 生成工作流。CI 只对 iOS 构建aarch64真机架构没有 iOS 的模拟器或 x86_64 产物仓库里虽然有一个 flutter/ios_x64.sh但 CI 并未使用它。环境与工具版本以下条件来自 CI 工作流 flutter-build.yml 的env和build-rustdesk-iosjob本地构建应与之一致项目版本/取值说明操作系统macOSCI 用macos-latestflutter build ipa只能在 macOS 上执行Rust1.75工作流注释sciter 在 1.78 上因 ABI 变化i128 layout update不能工作Rust targetaarch64-apple-iosiOS 真机目标Flutter3.24.5stable 渠道vcpkgcommit9e593bb18ea69cc5095e012465dcd675a822ed0d依赖声明在仓库根目录 vcpkg.jsontriplet 为arm64-iosnasm / yasm任意可用版本CI 用brew install nasm yasm安装flutter-rust-bridge codegen1.80.1仅生成 bridge 时需要见 bridge.yml 的FLUTTER_RUST_BRIDGE_VERSION另外两点版本约束来自同一工作流的注释Flutter 3.24.5 需要先给 Flutter SDK 打一个补丁.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diffCI 中仅当版本为 3.24.5 时执行git apply。1.81 是 macOS桌面构建要求的 Rust 版本因为 yury/cidre 依赖与 iOS 构建要求的 1.75 不是一回事不要混用。准备生成 flutter-rust-bridge 文件新克隆的仓库里没有 bridge 生成文件CI 是通过 artifact 恢复它们的Restore bridge files步骤把bridge-artifact下载到工作区。本地构建必须先生成。按 bridge.yml 的做法# 安装 codegen 工具版本与 bridge.yml 保持一致 cargo install flutter_rust_bridge_codegen --version 1.80.1 --features uuid --locked flutter pub get ~/.cargo/bin/flutter_rust_bridge_codegen \ --rust-input ./src/flutter_ffi.rs \ --dart-output ./flutter/lib/generated_bridge.dart \ --c-output ./flutter/macos/Runner/bridge_generated.h # CI 会把同一份 C 头文件复制给 iOS 工程 cp ./flutter/macos/Runner/bridge_generated.h ./flutter/ios/Runner/bridge_generated.h生成后仓库中应有以下文件CI 上传的bridge-artifact就是这个列表src/bridge_generated.rs、src/bridge_generated.io.rsflutter/lib/generated_bridge.dart、flutter/lib/generated_bridge.freezed.dartflutter/macos/Runner/bridge_generated.h、flutter/ios/Runner/bridge_generated.hflutter/lib/generated_bridge.freezed.dart由flutter pub get触发的 freezed 构建产生。第一步编译 Rust 静态库先给 Flutter SDK 打补丁修改的是 Flutter 安装目录不是本仓库cd $(dirname $(dirname $(which flutter))) git apply /path/to/rustdesk/.github/patches/flutter_3.24.4_dropdown_menu_enableFilter.diff其中/path/to/rustdesk替换为你本地克隆的仓库路径。然后用 cargo 编译 iOS 目标。可以直接执行仓库脚本 flutter/ios_arm64.sh它的内容就是cargo build --locked --features flutter,hwcodec --release --target aarch64-apple-ios --lib编译成功后的产物是target/aarch64-apple-ios/release/liblibrustdesk.a——CI 用这个确切路径上传 artifactUpload liblibrustdesk.a Artifacts步骤这也是判断第一步是否完成的依据。第二步构建 IPA在flutter/目录下执行 build_ios.sh 中的核心命令cd flutter flutter build ipa --releasebuild_ios.sh 的实际逻辑是先对 Flutter SDK 打上面的补丁再执行这条命令。脚本注释说明官方没有启用--obfuscate和--split-debug-info./split-debug-info原因是混淆后不易排查错误。CI 构建的是未签名包命令为flutter build ipa --release --no-codesign注释写明“for easy debugging”。如果你要产出可安装到真机的签名包需要配置自己的开发者签名后去掉--no-codesign——仓库文档没有给出 iOS 签名与公证的完整流程CI 中 iOS 的Publish ipa package发布步骤也处于注释状态所以 CI 目前不会发布签好的 IPA。验证构建结果两个产物路径都可以直接核对均来自 flutter-build.yml 中实际使用或引用的路径Rust 静态库存在target/aarch64-apple-ios/release/liblibrustdesk.aFlutter 构建结束退出码为 0后IPA 位于flutter/build/ios/ipa/目录。CI 中被注释的发布步骤用的正是flutter/build/ios/ipa/*.ipa这个通配可据此确认产物位置。限制说明仅aarch64真机目标在维护中flutter/ios_x64.sh对应的x86_64-apple-ios构建未出现在 CI 里。Flutter 必须锁定在 3.24.5 并应用 dropdown 补丁Rust 必须用 1.751.78 的 i128 ABI 变化会让 sciter 失效。bridge 生成文件是构建前置条件缺失时编译会失败本地按上一节流程生成CI 中由bridge-artifact恢复。仓库提供的路径产出的是未签名 IPA签名配置需要读者自行在 Xcode 侧完成文档未覆盖这部分。【免费下载链接】rustdeskAn open-source remote desktop application designed for self-hosting, as an alternative to TeamViewer.项目地址: https://gitcode.com/GitHub_Trending/ru/rustdesk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考