reactjs - `pod install` 在 react-native 的自动链接中到底做了什么?
问题描述
我正在使用 React Native 0.61,并且一直在阅读新的自动链接功能。如果您对以下任何问题有任何见解,我将不胜感激。
我的问题是:
1)我的理解react-native link <module>
是它为<module>
你的 Podfile 添加了一行,然后你运行pod install
. 但是,去年我一直在react-native link
手动使用和链接,并且从未运行过pod install
. 所以我说的对react-native link
吗?不仅仅是在你的 Podfile 中添加行吗?
2)过去,当react-native link
链接模块失败时,我通过将.xcodeproj
和.a
文件拖到 Xcode 中手动链接它,如此处所述。是否react-native link
(当它起作用时)将该行添加到您的 Podfile 并为您添加.xcodeproj
和.a
文件到 Xcode 中?
3) 除了添加到 Xcode中的.xcodeproj
and文件之外,本机模块的链接是否涉及任何其他内容?.a
4)具体pod install
做什么?它是否将 Podfile 中引用的所有本机模块添加.xcodeproj
到.a
Xcode 中?如果是这样,那将涉及两个步骤:将该行添加到您的 Podfile 中,然后运行pod install
. 为什么不只是react-native link
?
5)我对自动链接的理解是,它将所有本机模块的行添加到您的 Podfile 中,然后您仍然必须运行pod install
. 这不只是完成与 相同的事情react-native link
吗?
6) 在本自动链接指南中,它说“自动链接是 react-native 链接的替代品。如果您在 0.60 版本之前使用过 React Native,如果您之前安装有任何依赖项,请取消链接本机依赖项。”。为什么它告诉你取消链接?如果模块已经链接,取消链接并重新链接会做什么?react-native link
这意味着模块与自动链接的链接方式和通过自动链接的方式之间存在差异。如果您自动链接 then pod install
,然后尝试使用react-native link
,会发生什么情况,反之亦然?
7) 我在前面的问题中概述了这一点,但为了简洁起见, 自动链接 +和之间有什么区别?pod install
react-native link
解决方案
你所有的问题都紧密相连,所以我只会给你一些细节,希望能为你解决问题。
如果 React Native 版本 <= 0.59并且项目中没有使用Cocoapods :
react-native 链接只会将.xcodeproj
文件和.a
文件添加到 XCode 项目中。它不会向 Podfile 添加任何行,因为在这种情况下,Podfile 不存在。
如果 React Native 版本 <= 0.59并且项目中使用了 Cocoapods:
react-native 链接会将这些行添加到 Podfile 并安装 pod。它不会添加.xcodeproj
或.a
归档到 XCode 项目。这是假设库支持 Cocoapods 安装。你怎么知道这个库是否支持 Podfile 安装?他们在他们的 Github 页面/NPM 页面上提到了它。此外,此类库也将具有 .podspec 文件。示例: https ://github.com/react-native-community/react-native-device-info
看到这个库有一个.podspec
文件 -> RNDeviceInfo.podspec。所以这支持 Cocoapods 安装。如果库不支持 Cocoapods 安装,react-native 链接将像上述情况一样添加xcode.proj
并归档到 XCode 项目。.a
如果 React Native 版本 >= 0.61(在这种情况下默认使用 Cocoapods)
不再需要 react-native 链接。你只需安装库(yarn add
或npm install
)然后执行pod install
。这里发生的是,Cocoapods 从 node_modules 文件夹中获取库,检查是否有.podspec
文件,然后安装 pod。但它不会在 podfile 中添加任何行。这是 React Native 0.60 版中引入的自动链接。对于没有.podspec
文件的旧库,您需要通过 react-native 链接手动链接库。
推荐阅读
- haskell - 在 Haskell 中显示当地时间
- ant - 通过 manifestclasspath ant 任务在 MANIFEST.MF 中截断 jar 名称创建的清单文件
- c# - 我收到错误,因为无法为我的项目解析服务类型
- python - 在文件的特定行中插入行
- spring - Spring Boot、Docker、Bash - 自动化测试 url 问题
- c# - 从 C# 中运行完整的 powershell 脚本
- c# - C# HashSet VS C++ std::unordered_set 与自定义类键。C++ 更慢……不可能。如何实现C#的速度?
- haskell - 在 Haskell 中打印排列长度的问题
- swift - 使用 Firebase 身份验证链接多个身份验证提供程序
- python - 循环问题