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

Posted

技术标签:

【中文标题】无法导入使用 Cocoapods 安装的依赖项【英文标题】:Can't import dependency installed with Cocoapods 【发布时间】:2017-12-02 03:52:43 【问题描述】:

我已经使用 Cocoapods 安装了 FBSDK,但由于某种原因无法将其导入我的 AppDelegate.swift 文件中。 FBSDK 套件出现在我的 Xcode 项目中,所以我觉得它应该可以工作。

无论如何,我都不是 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

---编辑---

我收到以下错误 atm:FBSDKCoreKit.framework: No such file or directory。当我在 xCode 中打开 Frameworks 文件夹时,所有文件名都是红色的: 但 Finder 中的确切文件夹是空的。所以我想这就是显示错误的原因。问题是如何解决这个问题......

这是我的embedded binarieslinked frameworks and libraries 在项目中的样子:

【问题讨论】:

请检查我从这个线程***.com/a/44787352/3632832的回答 将框架添加到嵌入式二进制文件。 @KKRocks 如何做到这一点? 选择项目目标,你可以在那里看到这个选项。 @KKRocks 我在“构建阶段”下的 Pods 项目中找到了它,但在我的 Runner 项目中似乎找不到它。就像我说的,我只是想制作一个插件。该项目是预先创建的,所以可能有点奇怪:/ 【参考方案1】:
    选择您的项目目标 转到构建设置。 搜索标题搜索路径。 将此值 $(SRCROOT)/Pods 递归添加,然后 Xcode 将为您解析路径。

【讨论】:

在 xcode v11 中,以下内容对我有用:$(SOURCE_ROOT)/Pods/** @BramVanbilsen 非常感谢 - 你拯救了我的一天。我希望我也可以奖励你。 @bryan 非常感谢。经过一天的头痛,我找到了解决方案。超级!!! 我已经这样做了,但它仍然无法正常工作。请帮忙。【参考方案2】:

您打开的是.xcodeproj 还是.xcworkspace?安装 cocoapod 时确保它是工作区

【讨论】:

【参考方案3】:

我天真地假设你没有use_frameworks! Podfile。如果这是真的,那么你有两种方法可以从这里开始:

    在您的Runner-Bridging-Header.h 中添加#import <FBSDKCoreKit/FBSDKCoreKit.h>,从AppDelegate.swift 中删除import FBSDKCoreKit,然后继续编写代码。

    use_frameworks! 添加到您的Podfile 并再次运行pod install。这可能会带来一些其他问题,但如果可行,我会建议这样做。

【讨论】:

使用框架!已经在里面了。另一个选项给了我一个错误:/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 你能显示你的Podfile吗?考虑到您的应用名为Runner,这看起来像是您发送的一些奇怪路径 我将它添加到我的问题中!该应用程序实际上是 Flutter(谷歌框架)的一个插件,允许 iOS 用户使用 Facebook 登录。所以 iOS 项目是自动生成的,这就是为什么它很奇怪......我让它在一个全新的项目上工作,但也需要它与这个自动生成的项目一起工作。【参考方案4】:

安装 pod 时,您必须先构建应用程序。然后您的导入将停止显示错误。

【讨论】:

不知道为什么这没有得到更多的关注。我没有意识到这一点,运行我的应用程序立即允许我导入可可豆荚 - 谢谢! 这个答案需要更高【参考方案5】:

如果您使用cocoapods,它应该会为您生成一个*.xcworkspace 文件。请打开此文件,以便您的项目可以看到已安装的 FBSDK 并引用它。

【讨论】:

【参考方案6】:

为什么不简单地使用 Swift pod?-

pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'

然后正常导入,比如-

import FBSDKLoginKit
import FacebookLogin

完成后,进行清理并构建 (command/⌘ + Shift + K) 和构建 (command/⌘ + B)。确保您使用.xcworkspace 文件打开项目。

更多关于 Swift FBSDK 的信息here。

使用 Swift pod 后,您应该会在项目中看到这些框架。

如果您仍然看到错误,则“清理构建文件夹”使用 command + shift + alt + K .

【讨论】:

但是我使用的 pod 在一个全新的 swift 项目中工作。所以我不明白为什么他们不应该为这个工作...... 您想使用什么取决于您。每个项目都会安装 Pod,并且该项目的 pod 安装可能会出现许多问题。检查已安装框架的目标,或者只是尝试重新安装 pod(从 pod 文件中删除 pod 条目并运行安装,然后再次添加并安装)。【参考方案7】:

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

【讨论】:

我试过了,在构建项目之后,对于使用可可豆荚安装的每个依赖项,我都会收到以下错误:错误:/Users/bramv/Documents/Flutter-Facebook-Sign-In-Plugin/ example/ios/build/Debug-iphoneos/FBSDKCoreKit/FBSDKCoreKit.framework: 没有这样的文件或目录【参考方案8】:

首先清理您的项目目录。并在 Build settings 的 framework 搜索路径中添加 $(inherited)。

【讨论】:

然后将你的框架路径添加到你的框架搜索路径中。 Like Target -> Build Settings -> Framework Search Paths -> "你的本地目录路径,如 "/Users/user/Documents/FacebookSDKs" 这个本地路径目录应该是什么?我没有像过去那样手动下载 sdk。这就是我尝试使用 pod 的原因 :) $(inherited) 应该是递归的还是非递归的? 它是非递归的【参考方案9】:

由于在使用 CocoaPods 时会在 [CP] Embed Pods Frameworks 构建阶段执行导入 FBSDKCoreKit.framework 等,因此您应该在 Embed Frameworks 构建阶段删除对这些框架的引用。

CocoaPods 不会创建这些引用,我假设您已经尝试过导入 Facebooks 框架的其他方法,并且这些链接已在此过程中创建。您还可以删除 App-Project 的 Frameworks 文件夹中对 Facebook 框架的引用(屏幕截图中用红色写的那些,而不是 Pods-Project 中的那些!),但保留 Pods_Runner.framework 那里。

据我所知,您的 Linked Frameworks and Libraries 部分看起来有效。

如果还是不行,我建议你用一个空的 Podfile 创建一个新的 Xcode 项目,并且只通过 CocoaPods 包含 Facebook 框架。然后在 AppDelegate 中导入 Facebook-SDK 应该可以工作,否则我可以与您分享一个示例项目。然后你应该检查你的构建设置和构建阶段,也许那里有问题。如果您仍然无法解决问题,您可能需要重新创建 xcode-project 并再次导入所有文件。

如果没有重现错误的示例项目,这是我能给出的最佳建议。

祝你好运! :)

【讨论】:

【参考方案10】:

上述标题搜索路径的解决方案应该可以工作。 如果你懒得去那里。 复制 podfile 内容,删除所有 pod,安装 pod,然后恢复您的 podfile,再次安装 pod.... 应该可以工作 ;-)

【讨论】:

【参考方案11】:

就我而言,它已正确安装,但我意识到 pod 是 Objective-C 并且无法将其导入 Swift 文件。我必须创建一个 桥接头 才能使其工作。

参考这个***线程 How to import existing Objective C classes in Swift

【讨论】:

以上是关于无法导入使用 Cocoapods 安装的依赖项的主要内容,如果未能解决你的问题,请参考以下文章

Cocoapods 在设置 react-native 开发时无法下载依赖项(APPLE M1)

添加 cocoapods 依赖项后,Fastlane 健身房失败

安装旧的 cocoapods?

NPM 安装被阻止 - 通过本地文件系统导入依赖项

grails - 如何强制更新子依赖项

Cocoapods 安装及使用