在 CI 上找不到 React Native FBSDK 文件

React Native FBSDK file not found on CI

我已经安装了 FBSDKCoreKitFBSDKLoginKitFBSDKShareKit 11=] 然后将框架拖到 XCode 中的框架文件夹中。如果需要,我选中了复制文件的选项,以便它们出现在项目中。

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

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

/Users/vagrant/git/node_modules/react-native-fbsdk/ios/RCTFBSDK/share/RCTFBSDKShareDialog.h:21:9: 'FBSDKShareKit/FBSDKShareKit.h' file not found

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

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

您的 Mac 上似乎有 FacebookSDK ~/Documents/FacebookSDK,但您没有在 bitrise.io 上下载它,所以它根本不可用为您打造。

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

error: 'FBSDKShareKit/FBSDKShareKit.h' file not found

This is generally a result of an incorrectly configured repository with regards to the location of FBSDK dependencies. If you take a look at: https://github.com/facebook/react-native-fbsdk/blob/master/ios/RCTFBSDK.xcodeproj/project.pbxproj

You will notice that RCTFBSDK will look for dependencies in one of two locations:

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

The second option is the correct option for continuous integration systems like Buddybuild. In other words, you MUST place your FBSDK dependencies under the "ios/Frameworks" folder in order for it to work on a continuous integration system.

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

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

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

希望这对未来的读者有所帮助。

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