使用Cocoapods时出现错误 "use_frameworks!" SWIFT

18

我有一个干净的Swift项目,使用了一些CocoaPods:ParseAFNetworkingRESideMenu。 我需要使用STZPopupView pod,所以我更新了CocoaPods到最新版本:

gem install cocoapods

然后我为我的项目重新启动了它:

pod install

由于这个错误:

[!] Pods written in Swift can only be integrated as frameworks; this feature is still in beta. Add `use_frameworks!` to your Podfile or target to opt into using it.

我更新了我的podfile文件,添加了"use_frameworks!"

现在我的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 'isam' do
pod 'RESideMenu', '~> 4.0.7'
pod 'AFNetworking', '~> 2.5'
pod 'Parse', '~> 1.6'
pod 'STZPopupView', '~> 1.0'
end

target 'isamTests' do

end

由于构建时出现了两个错误:

  • 无法找到“RESideMenu.h”文件
  • 导入桥接标头"..../isam/Swift-Bridging-Header.h"失败

我没有改变项目中的任何其他内容。

我的Swift-Bridging-Header.h没有更改:

#ifndef isam_Swift_Bridging_Header_h
#define isam_Swift_Bridging_Header_h

#import <Parse/Parse.h>
#import <RESideMenu.h>

#endif
在我的构建设置中,我有: builds settings 我认为这是由于我的podfile中的"use_frameworks!",但我不知道如何做才能正确使用所有的pods来构建我的应用程序。
编辑:
确切的错误信息是:
/path_of_my_project/Swift-Bridging-Header.h:12:9: error: 'RESideMenu.h' file not found
#import <RESideMenu.h>
        ^
<unknown>:0: error: failed to import bridging header '/path_of_my_project/Swift-Bridging-Header.h'

从桥接头文件中删除这些语句:#ifndef isam_Swift_Bridging_Header_h和#define isam_Swift_Bridging_Header_h以及endif。这样应该可以正常工作。 - Dilip Lilaramani
@dilip.ajm #ifndef 只是简单地防止它被多次导入,据我所知。 - Andrew
@SantaClaus 我试过用引号和不用引号,但都不起作用。 - cmii
3个回答

16

我其实遇到了同样的问题。你可以试试这个链接:http://www.innerexception.com/2015/05/cocoapods-useframeworks-means-bridging.html

当在 CocoaPods 中使用 use_frameworks! 时,所有的 pod 都将被用作框架,不仅仅是 Swift 的 pod。因此,你不需要为此编写一个桥接头文件。只需在所需的所有 Swift 文件中导入你的 pods。 在你的示例中,你需要写: import RESideMenu


这对我解决了问题。但是我也遇到了一个“接口声明重复”的问题,通过将导入框架头文件的Objective-C文件更改为使用全局包含而不是本地包含来解决:#import <Framework/Framework.h> - Scott Fister

2
尝试将Objective-C桥接头中的isam/移除,只保留Swift-Bridging-Header.h。
从个人经验来看,当组合Swift和Objective C框架时,CocoaPods仍存在一些问题。您可以使用Alamofire,它几乎相当于AFNetworking的Swift版本。
希望这可以帮助您。
另外,为什么在Swift中要使用Objectice-C Parse,而不直接使用Swift库呢?

删除isam/无法工作。实际上,我需要STZPopupView pod,因为我想自定义uialertcontroller:http://stackoverflow.com/questions/31254931/add-an-animation-image-per-image-inside-a-uialertcontroller-swift - cmii
目标“isam”应该从Pod文件中删除,但在构建设置的头文件位置之前要求删除它。我没有那个,并且从未必须在构建设置中包含项目目录。我建议只需将Header.h添加到其中并创建一个名为Header的新头文件以简化事情(这种命名方式不是最佳实践,但可以帮助您缩小范围并找到问题)。 - mosn
你的 CocoaPods 版本是多少? - cmii
我按照您的指示操作,但还是不行 :( 我在问题中复制了完全相同的错误信息。 - cmii
Swift的东西仍然比Obj-C库更容易出错。 - brainray
显示剩余3条评论

1

我遇到了同样的问题。例如,我将所有的导入从#import "RESideMenu.h"更改为#import <RESideMenu/RESideMenu.h>


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