如何在 iOS 应用程序的同一个项目中集成 Objective-C 和 Swift pod
Posted
技术标签:
【中文标题】如何在 iOS 应用程序的同一个项目中集成 Objective-C 和 Swift pod【英文标题】:How to integrate both Objective-C and Swift pods in same project in iOS app 【发布时间】:2017-06-01 08:09:18 【问题描述】:我在 ios 应用中做 Objective-C。但问题是我想在之前成功添加的可可豆荚中添加一些 Objective-C api,但是,现在我想通过可可豆荚添加 Swift Api,但安装时遇到的问题如下。
[!] 用 Swift 编写的 Pod 只能作为框架集成;将use_frameworks!
添加到您的 Podfile 或目标以选择使用它。使用的 Swift Pod 有:apis
但我无法手动添加它,因为它的 api 很大并且它包含子文件夹。
但是,如果我从 use_frameworks! 中删除“#”键,它会被安装,但是,在我的项目中找不到旧的 Objective-C apis 获取文件。 甚至我在通过可可豆荚安装框架/api方面也有非常基础的知识。
谁能建议我如何克服这个问题。
【问题讨论】:
【参考方案1】:use_frameworks!
仅在 Objective-C
pod 是动态框架而不是静态库时才能使用。大多数流行的第三方库都使用动态框架,如AFNetworking
、GoogleMaps
等。
确保您的所有Objective-C
pod 都是动态框架。如果您不确定,只需使用cocoapods
创建一个示例项目并使用use_frameworks!
。尝试一一添加,所有的 pod 并找出哪个是罪魁祸首。
【讨论】:
在我这样做之后,它显示了在 pod 中安装在 Objective-C 中的现有框架,同时编译应用程序,显示 ld: library not found for -apiname clang: error: linker command failed with exit代码 1(使用 -v 查看调用) 如果你的Objective-C
pod 中的任何一个是静态库并且在动态框架中不可用,那么恐怕你不能使用use_framework!
我正在处理它的现有项目,以及那个 Objective-C api,我无法手动添加它。【参考方案2】:
我曾经遇到过这个问题,我所做的就是像你提到的那样使用use_frameworks!
,然后我更改了Objective-C imports
的编写方式。
use_frameworks!
命令将每个 pod 转换为一个框架,因此在您的项目中,import
不再像往常一样看到 .h 和 .m 文件。
因此,您不必使用#import <AFNetworking/AFNetworking.h>
,而是使用@import AFNetworking;
根据我自己的经验,也许这只是我项目的一个特例。但是将所有东西都变成框架会减慢 Xcode 上的编译时间,并且由于某种原因它使我的 App Package 更大。
【讨论】:
在我这样做之后,它显示了在 pod 中安装在 Objective-C 中的现有框架,同时编译应用程序,显示 ld: library not found for -apiname clang: error: linker command failed with exit代码 1(使用 -v 查看调用)【参考方案3】:Podfile 文件:
platform :ios, '10.0'
use_frameworks!
def pods
pod 'Alamofire', '= 4.4'
pod 'SwiftyJSON' '= 3.1.4'
pod 'MBProgressHUD'
end
target 'YourProject' do
pods
end
YourProject-Bridging-Header.h
#import <MBProgressHUD/MBProgressHUD.h>
构建设置
【讨论】:
你先明白什么问题了吗? 我已经在 pod 文件中有 Objective-C api,现在我想在同一个 pod 中安装 Swift api,这就是问题。以上是关于如何在 iOS 应用程序的同一个项目中集成 Objective-C 和 Swift pod的主要内容,如果未能解决你的问题,请参考以下文章