无法导入使用Cocoapods安装的依赖项

21
我已经使用Cocoapods安装了FBSDK,但由于某些原因无法在我的AppDelegate.swift文件中导入它。 FBSDK工具包出现在我的Xcode项目中,所以我觉得它应该可以工作。 enter image description here 我并不是iOS开发人员,只是想为Flutter SDK编写一个简单的本地插件。有人有想法吗?
--以下是pod文件的内容--
# Uncomment this line to define a global platform for your project
# platform :ios, '9.0'

if ENV['FLUTTER_FRAMEWORK_DIR'] == nil
  abort('Please set FLUTTER_FRAMEWORK_DIR to the directory containing Flutter.framework')
end

target 'Runner' do
  use_frameworks!

  # Pods for Runner
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'FBSDKShareKit'

  # Flutter Pods
  pod 'Flutter', :path => ENV['FLUTTER_FRAMEWORK_DIR']

  if File.exists? '../.flutter-plugins'
    flutter_root = File.expand_path('..')
    File.foreach('../.flutter-plugins') { |line|
      plugin = line.split(pattern='=')
      if plugin.length == 2
        name = plugin[0].strip()
        path = plugin[1].strip()
        resolved_path = File.expand_path("#{path}/ios", flutter_root)
        pod name, :path => resolved_path
      else
        puts "Invalid plugin specification: #{line}"
      end
    }
  end
end

post_install do |installer|
  installer.pods_project.targets.each do |target|
    target.build_configurations.each do |config|
      config.build_settings['ENABLE_BITCODE'] = 'NO'
    end
  end
end

---编辑---

目前我遇到以下错误:FBSDKCoreKit.framework:没有此文件或目录。当我在xCode中打开Frameworks文件夹时,所有文件名都是红色的: enter image description here 但是Finder中的确切文件夹为空。所以我想这就是为什么会显示错误的原因。问题是如何解决这个问题...

这是我的项目中embedded binarieslinked frameworks and libraries的样子: enter image description here


请检查我在此线程中的答案:https://stackoverflow.com/a/44787352/3632832 - byJeevan
将框架添加到嵌入式二进制文件中。 - KKRocks
@KKRocks 你怎么做到的? - Bram Vanbilsen
选择项目目标,然后您就可以在那里看到此选项。 - KKRocks
已将其添加到原始问题中。 - Bram Vanbilsen
显示剩余3条评论
11个回答

33
  1. 选择您的项目目标。
  2. 进入构建设置。
  3. 搜索头文件搜索路径。
  4. 添加此值$(SRCROOT)/Pods,勾选recursive选项,然后Xcode将为您解析路径。

在这里输入图片描述


4
在Xcode v11中,以下内容适用于我:$(SOURCE_ROOT)/Pods/** - Northern Captain
@BramVanbilsen 非常感谢你,你救了我的一天。我希望我也能向你颁发悬赏。 - Taimur Ajmal
@bryan 非常感谢。经过一整天的头痛,我终于找到了解决方案。太棒了!!! - ADK
2
我已经尝试了,但仍然无法工作,请帮忙。 - Ganesh Shetty
我不得不将Header搜索路径设置为递归。还将$(SRCROOT)/Pods添加到Framework搜索路径,并在它对我有效之前也将其设置为递归。 - nivla360

13

你是打开了 .xcodeproj 还是 .xcworkspace?确保每次安装 CocoaPods 时都打开 workspace。


5
我会天真地假设您在Podfile中没有use_frameworks!。如果是这样的话,您有两种方法可以继续进行:
  1. Runner-Bridging-Header.h中添加#import <FBSDKCoreKit/FBSDKCoreKit.h>,从AppDelegate.swift中删除import FBSDKCoreKit,然后继续编写代码。

  2. 向您的Podfile中添加use_frameworks!,然后再次运行pod install。这可能会带来其他问题,但如果能解决问题,我建议您这样做。


use_frameworks!已经在那里了。另一个选项会给我一个错误: /Users/bramvanbilsen/Desktop/facebook_sign_in/facebook_sign_in/example/ios/Pods/FBSDKCoreKit/FBSDKCoreKit/FBSDKCoreKit/Internal/AppEvents/FBSDKAppEvents+Internal.h:19:9: 致命错误:找不到“FBSDKCoreKit / FBSDKAppEvents.h”文件 #import <FBSDKCoreKit/FBSDKAppEvents.h> - Bram Vanbilsen
你能展示一下你的 Podfile 吗?考虑到你的应用程序叫做 Runner,这看起来像是一些奇怪的路径。 - S2dent
我已将其添加到我的问题中!该应用实际上是Flutter的插件(由Google开发的框架),旨在允许iOS用户使用Facebook登录。因此,iOS项目是自动生成的,这就是为什么它很奇怪的原因...我已经在一个全新的项目上使其正常工作,但需要让它在这个自动生成的项目中也能正常工作。 - Bram Vanbilsen

3
如果您使用,它应该为您生成了一个<*.xcworkspace>文件。打开这个文件,这样您的项目就可以看到已经安装了并且有引用它的参考了。

3

当你安装Pods时,必须先构建你的应用程序。然后你的导入就不会显示错误了。


1
不确定为什么这没有得到更多的关注。我没有意识到这一点,立即运行我的应用程序就允许我导入可可荚 - 谢谢! - Carter4502
这个答案需要更高。 - Abhinav Mathur

2
为什么不直接使用Swift的Pods呢?
pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'

然后像平常一样导入,例如 -
import FBSDKLoginKit
import FacebookLogin

完成后,请执行清理并构建操作(command/⌘ + Shift + K)和构建操作(command/⌘ + B)。确保使用 .xcworkspace 文件打开项目。
有关 Swift FBSDK 的更多信息在此处
一旦使用了 Swift pods,您应该在项目中看到这些框架。

enter image description here

如果您仍然看到错误,那么请使用command + shift + alt + K清除构建文件夹。

但是我使用的Pod在一个干净的新Swift项目中可以工作。所以我不明白为什么它们在这个项目中不能工作... - Bram Vanbilsen
你可以自由选择使用什么。Pods是按项目安装的,这个项目的pod install可能出了很多问题。检查已安装的框架的目标,或者尝试重新安装pods(从pod文件中删除pod条目并运行install,然后再添加并安装)。 - Anjan Biswas

0
以上的Header Search Path解决方案应该可以解决问题。 如果你太懒了不想去那里。 复制podfile内容,删除所有的pods,执行pod install,然后恢复你的podfile,再次执行pod install... 应该就可以解决问题了;-)

0
在我的情况下,它已经正确安装,但我意识到这个pod是Objective-C,无法在Swift文件中导入它。我不得不创建一个桥接头文件才能使其工作。
请参考这个stackoverflow线程如何在Swift中导入现有的Objective C类

0

首先使用Command + Shift + K清理您的项目,然后关闭项目并删除pods文件夹、pod.lock文件和.xcworkspace文件。然后运行pod install,看看是否解决了问题。


我尝试了一下,在构建项目之后,对于使用 CocoaPods 安装的每个依赖项,我都会收到以下类型的错误消息: 错误:/Users/bramv/Documents/Flutter-Facebook-Sign-In-Plugin/example/ios/build/Debug-iphoneos/FBSDKCoreKit/FBSDKCoreKit.framework:没有这样的文件或目录。 - Bram Vanbilsen

0

首先清理你的项目目录。在构建设置中的框架搜索路径中添加$(inherited)。


然后将您的框架路径添加到框架搜索路径中。例如:Target -> Build Settings -> Framework Search Paths -> "您的本地目录路径,如"/Users/user/Documents/FacebookSDKs" - Bhavesh Patel
这个本地路径目录应该是什么?我没有像以前那样手动下载sdk。这就是为什么我正在尝试使用pods :) - Bram Vanbilsen
$(inherited)应该是递归还是非递归的? - Abdullah Umer
它是非递归的。 - Bhavesh Patel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接