在 CI 上找不到 React Native FBSDK 文件

Posted

技术标签:

【中文标题】在 CI 上找不到 React Native FBSDK 文件【英文标题】:React Native FBSDK file not found on CI 【发布时间】:2017-01-19 18:33:33 【问题描述】:

我已经安装了 FBSDKCoreKitFBSDKLoginKitFBSDKShareKit,方法是将 SDK 下载到 ~/Documents/FacebookSDK,然后将框架拖到框架文件夹中在 XCode 中。如果需要,我选中了复制文件的选项,以便它们出现在项目中。

然后我添加了正确的框架搜索路径~/Documents/FacebookSDK

在本地构建工作正常,但是,在 Bitrise (CI) 上构建失败并出现错误:

/Users/vagrant/git/node_modules/react-native-fbsdk/ios/RCTFBSDK/share/RCTFBSDKShareDialog.h:21:9: 'FBSDKShareKit/FBSDKShareKit.h' 文件未找到

框架搜索路径还包含$(PROJECT_DIR),它应该会找到位于appname/Frameworks/ 的框架,但我似乎无法修复这个未找到的错误。

【问题讨论】:

【参考方案1】:

我在使用 BuddyBuild(另一个 CI 系统)时遇到了这个问题,并通过链接在他们的文档页面http://docs.buddybuild.com/docs/common-react-native-errors#section-error-fbsdksharekit-fbsdksharekit-h-file-not-found 上的说明解决了这个问题,特别是本节:

错误:找不到“FBSDKShareKit/FBSDKShareKit.h”文件

这通常是由于存储库配置不正确导致的 关于 FBSDK 依赖项的位置。如果你看看: https://github.com/facebook/react-native-fbsdk/blob/master/ios/RCTFBSDK.xcodeproj/project.pbxproj

您会注意到 RCTFBSDK 会在以下两个之一中查找依赖项 地点:

~/Documents/FacebookSDK $(PROJECT_DIR)/../../../ios/Frameworks

第二个选项是持续集成系统的正确选项 像 Buddybuild 一样。换句话说,您必须将您的 FBSDK “ios/Frameworks”文件夹下的依赖项以使其正常工作 在持续集成系统上。

问题在于,正如 Viktor 指出的那样,CI 系统没有对包含所需框架的 FacebookSDK 文件夹的引用,因此您需要将框架本身实际复制到您的项目本身中,以便所有内容都包含在你的存储库。这是必要的,因为 RCTFBSDK 库希望在您的项目中的文件夹 $PROJECT_ROOT/ios/Frameworks 中找到它需要的框架(请参阅 BuddyBuild 文档),如果它们在其他任何地方,它就会崩溃。

为了清楚起见,我为使构建工作而采取的步骤是:

在我的项目中创建文件夹$PROJECT_ROOT/ios/FrameworksFrameworks 可能不存在) 将 Facebook 框架文件从 ~/Documents/FacebookSDK 复制到这个新文件夹中 按照 fbsdk Github 页面上的安装说明参考 Xcode 中的框架。

希望这对以后的读者有所帮助。

【讨论】:

【参考方案2】:

见:https://discuss.bitrise.io/t/build-failing-with-file-not-found-fbsdk-in-ios-build/399/11

您的 Mac 上的 ~/Documents/FacebookSDK 似乎有 FacebookSDK,但您没有在 bitrise.io 上下载它,所以它根本不适用于您的构建。

【讨论】:

我们如何下载并解压到 bitrise? @WitaloBenicio ***.com/a/44321452/974381 解释它的方式(我建议这个解决方案,将它包含在你的存储库中),或者通过像 bitrise.io/integrations/steps/resource-archive 这样的步骤,它可以下载 ZIP 文件并解压缩它到您提供的路径。【参考方案3】:

我在 Bitrise 中使用 ZIP Unarchive 步骤,路径如下:~/Documents/FacebookSDK,但我无法使其工作。 当我将框架搜索路径更改为 $HOME/Documents/FacebookSDK 时,我能够成功地继续构建。

【讨论】:

$HOME/Documens/FacebookSDK,我猜你的意思是Documents?那个错字可能会让人有点绊倒。 谢谢@Bataleonand

以上是关于在 CI 上找不到 React Native FBSDK 文件的主要内容,如果未能解决你的问题,请参考以下文章

java.lang.ClassNotFoundException:在路径上找不到类“.MainActivity”:DexPathList react-native [重复]

在 Mac 上找不到 SDK 位置?

在“UIDatePicker”类型的对象上找不到属性“preferredDatePickerStyle”

FB SDK 错误:登录失败(react-native)

如何使用 React Native 重现 iOS 11 地图底页

React Native Detox - 本地和 CI 有不同的结果