菜单

CocoaPods 集成

相关源文件

本文档介绍 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 模块和组件。

来源

架构和关键组件

集成包含几个关键组件

  1. Podfile 配置:您的应用的 Podfile 调用 use_react_native! 来包含 React Native 依赖项。
  2. 核心脚本react_native_pods.rb 脚本提供了集成的核心功能。
  3. 辅助脚本cocoapods/ 目录下的辅助脚本处理集成的特定方面。
  4. 安装后处理react_native_post_install 函数在 pod 安装后应用必要的配置。

来源

主要入口点和函数

开发人员主要与之交互的函数是

use_react_native!

此函数将 React Native 依赖项添加到 CocoaPods 项目。它通常从应用的 Podfile 调用。

该函数处理

  • 设置环境变量
  • 检查最低要求
  • 添加 React Native 核心 pods 和依赖项
  • 配置构建设置
  • 在需要时运行代码生成
  • 在启用时设置 Fabric 或 Hermes

来源

prepare_react_native_project!

在处理 React Native 目标之前调用,此函数处理初始项目设置。

这会创建必要的环境文件并设置通用配置。

来源

react_native_post_install

此函数在 CocoaPods 安装完依赖项后运行,用于应用额外的配置。

它处理

  • 为特定 bundle 关闭代码签名
  • 应用特定于平台的补丁
  • 更新头文件搜索路径
  • 为架构设置构建标志
  • 为新架构进行配置

来源

关键依赖项配置

use_react_native! 函数将所有必需的依赖项添加到您的 iOS 项目中。以下是添加的主要依赖项:

类别Pod目的
核心React-Core, RCTRequired, RCTTypeSafety, ReactReact Native 的主要功能
组件React-RCTActionSheet, React-RCTAnimation 等。React Native UI 组件
JavaScripthermes-engine 或 JSCJavaScript 执行
C++ 桥接React-cxxreact, React-jsi, React-jsiexecutorC++ 到 JavaScript 的桥接
FabricReact-Fabric, React-RCTFabric新架构渲染器
布局Yoga布局引擎
第三方RCT-Folly, glog, boost 等。C++ 工具

来源

集成工作流程

集成 React Native 与 CocoaPods 的典型工作流程包括

  1. 设置:开发人员将 use_react_native! 添加到其 Podfile 中。
  2. Pod 安装:运行 pod install 会触发 React Native 设置。
  3. 添加依赖项:脚本将 React Native pods 添加到项目中。
  4. 配置:根据参数应用构建设置。
  5. 代码生成:如果启用,则运行 Codegen 来生成原生代码。
  6. 安装后处理:安装后应用其他设置。

工作流程阶段

来源

特殊配置

新架构支持

CocoaPods 集成为新架构(Fabric 和 TurboModules)提供了特殊处理。

启用新架构时

  • 会添加额外的 C++ 编译器标志
  • 会包含特殊的 pod 依赖项
  • 代码生成会配置为 Fabric 组件
  • CLANG_CXX_LANGUAGE_STANDARD 会设置为 c++20

来源

JavaScript 引擎配置

React Native 支持两种 JavaScript 引擎

  1. Hermes(默认):一个为 React Native 优化的轻量级 JavaScript 引擎。
  2. JavaScriptCore:Apple 的 JavaScript 引擎。

引擎的选择在 Podfile 中配置。

集成脚本设置选定的引擎及其依赖项。

来源

框架支持

React Native 的 CocoaPods 集成同时支持静态库和框架。

集成检测此设置并相应地调整头文件搜索路径和其他配置。

来源

其他工具

CocoaPods 集成提供了几个有助于常见任务的实用函数

add_dependency

使用正确的头文件搜索路径向 podspec 添加依赖项。

来源

头文件搜索路径

为框架生成正确的头文件搜索路径。

来源

Folly 配置

提供 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 版本,并为 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 应用初始化