Cocoapods使用use_frameworks!导入问题

21

我想在我的Objective-C应用程序中使用一些Swift pods,所以我需要使用框架而不是静态库。但是在Podfile中启用use_frameworks!会导致大量的#import错误。

我的Podfile:

platform :ios, '8.0'
use_frameworks!

pod 'AFNetworking', '2.6.0'
pod 'Typhoon'
pod 'SSKeychain'
pod 'JBWebViewController'
pod 'TTTAttributedLabel'
pod 'HockeySDK'
pod 'GoogleAnalytics'
pod 'Intercom'
pod 'FBSDKCoreKit'
pod 'FBSDKLoginKit'
pod 'UIButton+Activity'
pod 'HexColors'
pod 'AFNetworkActivityLogger'
pod 'HCSStarRatingView', :git => 'https://github.com/hsousa/HCSStarRatingView.git'
pod 'LGSideMenuController'
pod 'DateTools'
pod 'SDWebImage'
pod 'SSCWhatsAppActivity'
pod 'UIViewController+BlockSegue'

第一个问题出现在 SSKeychain pod 中:

SSKeychain Error

在我的代码中,我使用引号来包含SSKeychain,如下所示:#import "SSKeychain/SSKeychain.h"。但是如果我理解正确的话,从现在开始我需要使用尖括号,如下所示:#import <SSKeychain/SSKeychain.h>?但是在这种情况下,我的代码仍然出现了相同的错误。

我的构建阶段:

Build Phases

无论如何,我已经找到了带有“引号”导入的SSKeychain分支(https://github.com/adamwulf/sskeychain/commit/2b7fd878415e8e4f23f74636cdd8c993466d0749),并切换到了这些版本。

但现在我遇到了许多其他pod相同的问题(几乎所有pod都有这个问题):

FBSDKCoreKit error

在应用程序中导入:#import "FBSDKCoreKit/FBSDKCoreKit.h"

我真的需要分叉每个存储库并更改导入语句吗?或者我使用的pod方式不正确?

附注:我在每次构建尝试之前清理派生数据和项目。

Cocoapods版本:0.39.0


你使用的是哪个版本的CocoaPods?最新的吗?0.39.0? - Diego Freniche
退出项目,然后运行“pod install”。 - Twitter khuong291
@DiegoFreniche 我已经尝试了0.39.0版本和从最新的主分支构建的版本。 - Ponf
如果您没有在同一个会话中安装所有的pod,我建议您先删除所有的pod库,然后再重新添加它们。这在我的情况下有效。 - HarshIT
@HarshIT 我已经尝试删除 /PodsPodfile.lockworkspace,并运行了清理 pod install - 但问题仍然存在。 - Ponf
4个回答

12

由于您在Podfile中使用了模块,为什么不直接这样做:

@import SSKeychain;

改为:

#import <SSKeychain/SSKeychain.h>

测试方法:

  • 创建一个简单的iOS项目,仅包含一个ViewController
  • 使用上面的代码创建一个Podfile
  • 运行pod install
  • 打开Workspace
  • 构建和运行: 它将成功编译

当我尝试使用@import而不是#import时,我收到了一个错误,指出找不到框架:https://s.mail.ru/GNxY2NAxse12/img-2015-12-23-12-42-25.png。我认为这是一个主要问题。 - Ponf
我已在一个空项目中进行了测试,它可以正常工作,请创建一个测试项目以确保其正常工作,然后将您的目标与新项目的目标进行比较。 - Diego Freniche
我终于搞定了!问题是通过从“链接二进制文件和库”中删除Pods.framework并手动添加它们来修复的。感谢您的帮助!您可以编辑您的答案,我会接受它 :) - Ponf
1
更好的方法:自问自答。你已经找到了有效的解决方案! - Diego Freniche
谢谢Diego。我发现在添加了use_frameworks!之后,经典的#import会出现问题(重复定义等)。通过将它们替换为@import,我的构建问题得到了解决。 - Ferran Maylinch

7
我终于搞明白了!问题得到解决,方法是从链接二进制文件库中移除Pods.framework,然后手动再添加它们。

感谢您的帮助!


很奇怪,你是否实际上打开了工作区而不是项目? - Tancrede Chazallet
1
@AncAinu 是的,我在项目中有两个目标,并且框架只链接到其中一个,所以我不得不手动添加 Embed Pods Frameworks 构建步骤 :( - Ponf
3
下次运行此命令(https://github.com/CocoaPods/cocoapods-deintegrate)将删除所有 CocoaPods 的痕迹,然后再次运行 pod install 会更有用。 - Diego Freniche
1
@Ponf 我也遇到了同样的问题,我有3个目标,但只将 Pods.framework 链接到了第一个目标,在 Build Settings > Embed Pods Frameworks 中。很遗憾它不会自动完成这个操作。 - Kevin Hirsch
这个“Link Binary With Libraries”在哪里?我没看到它。 - mehmetsen80

1

同时检查pod install的错误信息。

在我的情况下,我在FRAMEWORK_SEARCH_PATHS中使用了自定义导入,正是因为这个原因,每当我执行pod install时,CocoaPods添加的额外搜索路径就不会被添加。所以我不得不删除我的自定义路径,然后它们就出现了。然后我添加了我的自定义路径。

可能最好先执行pod deintegrate,删除xcworkspace文件,然后再次执行pod install。然后添加您的自定义构建设置。

这是我遇到的错误:

[!] The App [Debug] target overrides the FRAMEWORK_SEARCH_PATHS
build setting defined in Pods/Target Support Files/Pods-AppLib/Pods-AppLib.debug.xcconfig. 
This can lead to problems with the CocoaPods installation

0
在我的情况下,我已经为我的Objective C项目下载了几个ObjC Pods,然后我需要一个Swift Pod,所以我在我的pod文件中启用了use_framwork并安装了那个Swift Pod。安装完Swift Pod后,在许多类中出现了ObjeC库的导入问题。 我是如何解决这个问题的?
  1. 从pod文件中删除所有Objective C pods
  2. 打开终端并运行命令:cd path/myProject
  3. 在终端中运行命令:pod install
  4. 再次将它们(所有Objective C pods)粘贴到pod文件中并保存
  5. 在终端中运行命令:pod install

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