Cocoapods 使用_frameworks!进口问题

Posted

技术标签:

【中文标题】Cocoapods 使用_frameworks!进口问题【英文标题】:Cocoapods use_frameworks! import issue 【发布时间】:2015-12-23 06:21:47 【问题描述】:

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

我的播客文件:

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:

在代码中,我使用“引号”#import "SSKeychain/SSKeychain.h" 包含 SSKeychain,但如果我理解正确,我需要从现在开始使用<angle> #import <SSKeychain/SSKeychain.h>?但在这种情况下,我收到同样的错误,但在我的代码中。

我的构建阶段:

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

但现在我对许多其他 pod(几乎所有)都有同样的问题:

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

我真的需要分叉每个 repo 并更改导入语句吗?还是我以错误的方式包含 pod?

PS:每次构建尝试之前,我都会清理派生数据和项目。

Cocoapods 版本:0.39.0

【问题讨论】:

您使用的是哪个版本的 CocoaPods?最后一个? 0.39.0? 退出项目,出去运行“pod install” @DiegoFreniche 我已经尝试了 0.39.0 和从最新主分支构建的版本。 如果您没有在同一会话中安装所有 pod,建议您先删除所有 pod 库,然后重新添加所有这些库。它适用于我的情况。 @HarshIT 我尝试删除 /PodsPodfile.lockworkspace,然后运行干净的 pod install - 同样的问题。 【参考方案1】:

你已经在 Podfile 中使用了Modules,为什么不直接:

@import SSKeychain;

代替:

#import <SSKeychain/SSKeychain.h>

测试:

创建一个简单的 iOS 项目,只需一个 ViewController 使用上面的代码创建一个 Podfile 运行 pod 安装 打开工作区 构建并运行:编译成功

【讨论】:

当我尝试使用 @import 而不是 #import 时,我收到了找不到框架的错误:s.mail.ru/GNxY2NAxse12/img-2015-12-23-12-42-25.png。我认为这是一个主要问题 我在一个空项目中进行了测试,它可以工作,请创建一个测试项目以确保它可以正常工作,然后将您的目标与新项目的目标进行比较 我终于想通了!该问题已通过从 Link Binary With Libraries 中删除 Pods.framework 并再次手动添加来解决。感谢您的帮助!你可以编辑你的答案,我会接受的:) 更好:自动回答自己。您已经找到了有效的方法! 谢谢迭戈。我发现在添加use_frameworks! 之后,经典的#imports 给我带来了问题(重复定义等)。通过用@imports 替换它们,我的构建再次得到修复。【参考方案2】:

我终于想通了!该问题已通过从 Link Binary With Libraries 中删除 Pods.framework 并再次手动添加来解决。

感谢您的帮助!

【讨论】:

奇怪,你打开的是工作区而不是项目? @AncAinu 是的,我在项目中有 2 个目标,并且框架仅与其中一个链接,因此我必须手动添加 Embed Pods Frameworks 构建步骤 :( 下一次,运行这个 (github.com/CocoaPods/cocoapods-deintegrate) 删除所有 CocoaPods 的痕迹会很有用,然后再次运行 pod install @Ponf 也发生在我身上,有 3 个目标,但仅在 Build Settings > Embed Pods Frameworks 中将 Pods.framework 链接到第一个目标。遗憾的是它不会自动执行此操作。 我没有看到这个“链接二进制与库”在哪里?【参考方案3】:

还要检查pod install 上的错误消息。

在我的例子中,我在FRAMEWORK_SEARCH_PATHS 中使用了自定义导入,正因为我这样做了,所以每当我这样做pod install 时,CocoaPods 添加的额外搜索路径都不会被添加。所以我不得不删除我的自定义路径,然后他们出现了。然后我添加了我的自定义路径。

执行pod deintegrate 可能是个好主意,删除de 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

【讨论】:

【参考方案4】:

在我的情况下,我已经为我的 Objective C 项目下载了几个 ObjC Pod,然后我需要一个 swift pod,所以我在我的 pod 文件中启用 use_framwork 并安装那个 swift pod,在安装那个 swift pod 导入之后很多类的 ObjeC 库都会出现问题,所以

我做了什么来解决这个问题?

    从 pod 文件中删除所有 Objective C pod 打开终端并运行命令:cd path/myProject 终端运行命令:pod install 在 pod 文件中再次过去(所有 Objective C pod)并保存 终端运行命令:pod install

【讨论】:

以上是关于Cocoapods 使用_frameworks!进口问题的主要内容,如果未能解决你的问题,请参考以下文章

RestKit 编译失败,cocoapods use_frameworks for swift

为啥我们使用 use_frameworks!在 CocoaPods 中?

CocoaPods使用UMengSocial时报错

CocoaPods的使用 安装

使用_frameworks!和库 repo 根目录中的 podspec

CocoaPods 安装旧版框架