如何在 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 是动态框架而不是静态库时才能使用。大多数流行的第三方库都使用动态框架,如AFNetworkingGoogleMaps 等。

确保您的所有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的主要内容,如果未能解决你的问题,请参考以下文章

iOS项目中集成Flutter的最新适配升级

如何在我的Flutter应用中集成游戏?

iOS - 如何在我的应用程序中集成蓝牙设备

如何在 Swift 3 中集成 AdMob 广告?

如何在你的Vue项目中集成TypeScript

如何在 iOS 混合应用程序中集成 card.io sdk?