在Xcode中出现的Pod错误 "Id: framework not found Pods"

42

我正在尝试从Bitbucket存储库克隆一个项目,但在尝试在工作区中运行Xcode项目时出现错误Id: framework not found Pods clang: error: linker command failed with exit code 1 (use -v to see invocation)。这是我遵循的步骤,如果有人能让我知道我做错了什么,那就太好了!

  1. git clone (Bitbucket链接)
  2. 将Xcode pods项目的配置设置更改为none(调试和发布都要)
  3. 执行pod install
  4. 打开Xcode工作区文件
  5. 在Xcode中尝试构建,收到错误消息Id: framework not found Pods clang: error: linker command failed with exit code 1 (use -v to see invocation)

编辑 这是Podfile内容:

# Uncomment this line to define a global platform for your project
platform :ios, '8.0'
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'

target 'Oncarb' do
  pod 'Alamofire'
  pod 'SwiftyJSON', '~> 2.2.0'
end

#target 'OncarbTests' do
#  pod 'Alamofire'
#  pod 'SwiftlyJSON', '~> 2.2.0'
#end

我是否漏掉了某一步骤?

谢谢!


你必须使用 CocoaPods - webo80
你是否已将Pod框架添加到嵌入式二进制文件中?如果想在真实设备上构建应用程序,通常需要这样做。 - Dean
@Pami -- 你可以也发一下你的Podfile吗? - sudo make install
@Dean 我刚刚将Pod框架添加到了嵌入式二进制文件中 - 开始时它们并不存在,但不幸的是,当我尝试构建时仍然出现相同的错误。还有其他建议吗? - Pami
5个回答

141

这个方法对我有用:

  1. 打开工作区。
  2. 点击屏幕左侧的蓝色项目图标(展开文件树)。
  3. 在右侧选择“Targets”(而不是“Project”,Project是蓝色的,Target像一个铅笔、一个尺子和一个画三角形的刷子)。
  4. 点击常规选项卡。
  5. 进入“Linked Frameworks and Libraries”部分(全部在底部)。
  6. 删除Pods框架。
  7. 添加Alamofire和SwiftyJSON。

在我的情况下,除非我删除了pod框架,否则它不起作用,但我感觉这只是一个解决方法。也许有更多经验的人可以发表评论。


2
在删除了Pods框架、关闭Xcode、运行pod update以及清理/构建之后,这个方法对我也起作用了。 - Bat Lanyard
1
这个问题还有很多其他错误的答案 >.> 感谢您分解步骤! - Decoded
1
从“嵌入式二进制文件”中移除“Pod.framework”对我起作用了。 - DTHENG
2
谢谢你的解决方案。我在将CocoaPods升级到1.0之后也遇到了这个问题。 - ArdenDev
1
另一种解决方案可能是:$ pod deintegrate && rm Podfile.lock && pod install - yasirmturk

31
有时在重命名目标或移动文件后,可能会破坏Pods的安装。幸运的是,有一种比“sudo make install”解决方案更容易的方法来修复它。
  1. 运行 pod deintegrate 从你的项目中彻底移除Cocoapods。
  2. 再次运行pod install以将其全部添加回来。
完成了,问题解决了。

当在Firebase pod上遇到问题并需要在测试目标中使用inherit!:complete时,这也是有效的。 - richy
在我重命名项目后,编辑Podfile并在那里更改我的项目名称,然后添加Firebase和Crashlytics pod后,它也对我起作用了。 - nommer

5

我的问题是当我运行测试时,出现了这个错误。因为我刚刚安装它在我的电脑上。

target 'Project' do
   pod 'xxx'
end

你还应该将其添加到测试目标中:
target 'ProjectTests' do
   pod 'xxx'
end

测试目标也可以嵌套在其他目标中,然后将继承所有这些Pod。 - jscs

1

一个可能的原因是在测试类/测试目标中 显式导入 一个Cocoapods框架。

示例:

import XCTest
//import AlamofireImage
@testable import MyProject

// instead of importing AlamofireImage:
#if os(iOS) || os(tvOS) || os(watchOS)
    import UIKit
    public typealias Image = UIImage
#elseif os(macOS)
    import Cocoa
    public typealias Image = NSImage
#endif

我首先导入了AlamofireImage,因为我在测试中明确使用了AlamofireImage中定义的typealias Image

如果像我的示例那样轻松地避免导入,就这么做吧。我只是将Image的定义复制到了我的测试类文件中。

如果您认为确实需要该导入,请继续查看William Hu的答案。他的答案有一个脚注:

target 'MyProjectTests' do
   pod 'OnlyThatFrameworkYouImportIntoYourTest' 
end

您只需将那些需要显式导入的pod添加到测试目标中。


1
在我的情况下,有几个框架显示为红色。这些是之前的Podfile配置留下的。我只需删除这些框架并问题就解决了。

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