无法导入使用 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 binaries
和linked 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' 文件未找到 #importPodfile
吗?考虑到您的应用名为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)