
如何把 llama.cpp 预编译 XCFramework 通过 Swift Package 的 binaryTarget 接入 iOS 项目【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp如果你有 iOS或其他 Swift项目想在 App 内直接调用 llama.cpp 做本地推理又不想在 CI 或开发机上从源码编译整个 C 库llama.cpp 提供了预编译的 XCFramework。官方文档说明XCFramework 是库的预编译版本支持 iOS、visionOS、tvOS 和 macOScan be used in Swift projects without the need to compile the library from source。本文的主路径就是把这份预编译包以 Swift Package Manager 的binaryTarget形式挂进你的 Swift 包另一条可选路径是在本地用build-xcframework.sh自己构建 XCFramework 并手动挂进 Xcode 工程。准备工作binaryTarget方案的前提条件你的包使用 Swift Package Manager且示例中声明的工具链版本为swift-tools-version: 5.10这是 文档示例中声明的最低 Swift 版本XCFramework 覆盖的平台为 iOS、visionOS、tvOS、macOS如果你只需要 iOS 即可直接使用包会通过url下载一个 zip 并校验checksum因此首次解析包时需要能访问该下载地址。仓库中构建脚本 build-xcframework.sh 为各平台设定的最低系统版本为iOS 16.4、macOS 13.3、visionOS 1.0、tvOS 16.4。预编译产物按这些最低版本构建如果你的 App 需要支持更低的系统版本这条预编译路线不适用。主路径在 Package.swift 中声明 binaryTarget文档给出的Package.swift完整示例如下目标是一个依赖LlamaFramework的可执行目标// swift-tools-version: 5.10 // The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription let package Package( name: MyLlamaPackage, targets: [ .executableTarget( name: MyLlamaPackage, dependencies: [ LlamaFramework ]), .binaryTarget( name: LlamaFramework, url: https://github.com/ggml-org/llama.cpp/releases/download/b5046/llama-b5046-xcframework.zip, checksum: c19be78b5f00d8d29a25da41042cb7afa094cbf6280a225abe614b03b20029ab ) ] )按你的工程需要把MyLlamaPackage换成你自己的包名与目标名并在需要调用 llama.cpp 的 target 的dependencies中加入LlamaFramework。关于版本选择文档明确说明上面的示例使用的是中间构建版本b5046The above example is using an intermediate buildb5046of the library要使用其他版本需要同时修改url和checksum。仓库文档中没有提供其他版本的 URL 与校验值对照表因此如果你要用别的构建号需要从对应的 release 资产中取得 zip 地址并自行计算 checksum 填入——b5046这一组 URL 与 checksum 是文档中唯一可直接复制使用的组合。在代码中调用挂好 binaryTarget 后Swift 代码中即可直接import llama使用 C API。仓库自带的示例 App 就是这种用法见 examples/llama.swiftui/llama.cpp.swift/LibLlama.swiftimport Foundation import llama该示例封装了llama_batch操作、LlamaContextactor内部持有llama_model、llama_context、llama_sampler等指针并在deinit中释放可以作为在你的 iOS 项目里调用 C API 的参考实现。验证接入是否成功接入完成的判断依据来自仓库文档给出的验证方式SPM 解析包时会根据checksum校验下载的 XCFramework zip校验失败说明 URL 与 checksum 不匹配例如改了 URL 没换 checksum需要修正这两者的对应关系示例 App 文档给出的成功条件是Openllama.swiftui.xcodeprojproject in Xcode and you should be able to build and run the app on a simulator or a real device. 即工程能在 Xcode 中成功构建并可在模拟器或真机上运行。如果只想验证包声明本身可以在你自己的包中先让一个 target 依赖LlamaFramework并import llama编译通过即说明 XCFramework 已正确解析和链接。可选替代路径本地构建 XCFramework 并手动引入如果你需要的构建版本与b5046不同、或需要基于当前源码构建仓库提供了 build-xcframework.sh 脚本在 llama.cpp 仓库根目录执行$ ./build-xcframework.sh使用该脚本前需要确认以下条件脚本启动时会自行检查并报错退出已安装 CMake 3.28.0 或更高版本脚本提示brew install cmake已安装 Xcode 和 Xcode Command Line Tools提示xcode-select --install。需要注意的副作用脚本开头会执行rm -rf build-apple以及各平台的build-ios-sim、build-ios-device、build-macos、build-visionos、build-visionos-sim、build-tvos-sim、build-tvos-device等目录即清理上一次构建的所有本地产物再重新构建因此运行前确认这些目录里没有你需要保留的内容。不带参数时构建全部平台iOS 模拟器/真机、macOS、visionOS、tvOS也可以只传平台参数如./build-xcframework.sh ios-sim ios-device可选值见脚本头部注释ios-sim ios-device macos visionos visionos-sim tvos-sim tvos-device。构建成功后产物位于build-apple/llama.xcframework。此时接入方式不再是 SPM binaryTarget而是按 示例文档手动挂进 Xcode 工程两种方式任选其一把build-apple/llama.xcframework拖拽到工程导航器project navigator中或在工程设置的 Frameworks, Libraries, and Embedded Content 一栏中手动选择该 framework。仓库中的llama.swiftui.xcodeproj就是这种接法的现成实例其project.pbxproj通过相对路径../../build-apple/llama.xcframework引用本地构建产物并配置了 CodeSignOnCopy 与 RemoveHeadersOnCopy 的嵌入属性。限制与说明binaryTarget主路径依赖 release 上的预编译 zip文档只给出了b5046一个版本的 URL 与 checksum换版本需要读者自行找到对应资产并替换这两个字段仓库文档没有承诺所有 release 都附带 XCFramework 资产。两条路径的产物来源不同SPM 路径用的是官方 release 预编译包手动引入路径用的是你本地当前源码的构建产物。不要混用——示例 Appllama.swiftui用的是本地构建的build-apple/llama.xcframework而 SPM 文档示例用的是b5046预编译 zip二者对应不同的源码状态。XCFramework 构建启用 Metal 后端并默认内嵌 Metal 库脚本中GGML_METALON、GGML_METAL_EMBED_LIBRARY默认ON这些是构建脚本中的固定配置文档未提供面向 iOS 集成的进一步调参说明。【免费下载链接】llama.cppLLM inference in C/C项目地址: https://gitcode.com/GitHub_Trending/ll/llama.cpp创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考