本文档介绍 React Native 如何集成 CocoaPods(iOS 项目的依赖管理器)。它解释了支持 iOS 应用程序包含 React Native 组件和库的脚本、函数和工作流程。
React Native 使用 CocoaPods 来管理原生的 iOS 依赖项。集成通过 Ruby 脚本实现,这些脚本在 iOS 项目中配置和安装 React Native 组件。这些脚本负责依赖管理、构建配置以及新架构和 Hermes JavaScript 引擎等特殊情况。
CocoaPods 集成主要在 scripts/react_native_pods.rb 文件中实现,支持工具位于 scripts/cocoapods/ 目录下。此集成使 React Native 开发人员能够无缝使用原生的 iOS 模块和组件。
来源
集成包含几个关键组件
use_react_native! 来包含 React Native 依赖项。react_native_pods.rb 脚本提供了集成的核心功能。cocoapods/ 目录下的辅助脚本处理集成的特定方面。react_native_post_install 函数在 pod 安装后应用必要的配置。来源
开发人员主要与之交互的函数是
此函数将 React Native 依赖项添加到 CocoaPods 项目。它通常从应用的 Podfile 调用。
该函数处理
来源
在处理 React Native 目标之前调用,此函数处理初始项目设置。
这会创建必要的环境文件并设置通用配置。
来源
此函数在 CocoaPods 安装完依赖项后运行,用于应用额外的配置。
它处理
来源
use_react_native! 函数将所有必需的依赖项添加到您的 iOS 项目中。以下是添加的主要依赖项:
| 类别 | Pod | 目的 |
|---|---|---|
| 核心 | React-Core, RCTRequired, RCTTypeSafety, React | React Native 的主要功能 |
| 组件 | React-RCTActionSheet, React-RCTAnimation 等。 | React Native UI 组件 |
| JavaScript | hermes-engine 或 JSC | JavaScript 执行 |
| C++ 桥接 | React-cxxreact, React-jsi, React-jsiexecutor | C++ 到 JavaScript 的桥接 |
| Fabric | React-Fabric, React-RCTFabric | 新架构渲染器 |
| 布局 | Yoga | 布局引擎 |
| 第三方 | RCT-Folly, glog, boost 等。 | C++ 工具 |
来源
集成 React Native 与 CocoaPods 的典型工作流程包括
use_react_native! 添加到其 Podfile 中。pod install 会触发 React Native 设置。来源
CocoaPods 集成为新架构(Fabric 和 TurboModules)提供了特殊处理。
启用新架构时
来源
React Native 支持两种 JavaScript 引擎
引擎的选择在 Podfile 中配置。
集成脚本设置选定的引擎及其依赖项。
来源
React Native 的 CocoaPods 集成同时支持静态库和框架。
集成检测此设置并相应地调整头文件搜索路径和其他配置。
来源
CocoaPods 集成提供了几个有助于常见任务的实用函数
使用正确的头文件搜索路径向 podspec 添加依赖项。
来源
为框架生成正确的头文件搜索路径。
来源
提供 Folly C++ 库配置的标准化访问。
来源
CocoaPods 集成包含解决常见问题的代码
脚本在 Rosetta 2(arm64 上的 x86_64 模拟)上运行时发出警告。
Do not use "pod install" from inside Rosetta2 (x86_64 emulation on arm64).
- Emulated x86_64 is slower than native arm64
- May result in mixed architectures in rubygems
Run "env /usr/bin/arch -arm64 /bin/bash --login" then try again.
来源
集成会检查最低 Xcode 版本,并为 Xcode 15 应用特定补丁。
这可确保与最新 Xcode 版本的兼容性。
来源
最近的版本包含关于直接使用 CocoaPods 的弃用通知。
==================== DEPRECATION NOTICE =====================
Calling `pod install` directly is deprecated in React Native
because we are moving away from Cocoapods toward alternative
solutions to build the project.
* If you are using Expo, please run:
`npx expo run:ios`
* If you are using the Community CLI, please run:
`yarn ios`
=============================================================
这表明构建系统将有未来更改。
来源
React Native 的 CocoaPods 集成提供了一个完整的系统来管理 iOS 依赖项。它支持不同的 JavaScript 引擎、架构选项和构建配置,同时自动处理复杂的设置要求。
对于用户来说,主要接口是 Podfile 中的 use_react_native! 函数,它配置了 React Native iOS 项目所需的一切。该集成随着 React Native 的发展而不断演进,支持新架构等新功能,同时保持向后兼容性。
有关 iOS 应用初始化的更多信息,请参阅 iOS 应用初始化。