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 我尝试删除/Pods
、Podfile.lock
和 workspace
,然后运行干净的 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!
之后,经典的#import
s 给我带来了问题(重复定义等)。通过用@import
s 替换它们,我的构建再次得到修复。【参考方案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 中?