swift - 如何在 ionic 电容器自定义插件上嵌入第三方框架?

标签 swift xcode ionic4 capacitor

我正在开发一个 Ionic Capacitor 插件,它导入 2 个 iOs .framework 文件和一个引用此 .framework 文件之一的 .bundle。问题是,无论我如何在插件项目上链接/嵌入和指向/复制这些文件,xcode 声称,在应用项目上,它无法在 swift 文件中找到该模块。

我已经尝试将文件添加到项目中,使用“嵌入式二进制文件”选项,链接库,允许非模块化包含(在构建选项菜单上),将文件添加到头文件(在构建阶段),等等。 ...

xcode 指出错误的那一行是:

import OneFramework

而 xcode 声称:
没有这样的模块“OneFramework”

我原以为当我通过 npm 将插件添加到我的应用程序项目中,然后运行“$ rm -rf ios && ionic capacity run ios”来运行该应用程序时,xcode 会找到我正在尝试的插件的所有模块做。

最佳答案

我找到了解决方案。要实现这一点,首先要知道的是,当您这样做时 npx @capacitor/cli plugin:generate CLI 为您做的是生成 cocoa pod 。这个 pod 的根是生成的文件夹本身。
考虑到这一点,接下来要做的是学习如何制作 pod ,但我将总结引导我取得成功的主要方面。

-首先你打开*.xcworkspace。然后,单击“将文件添加到 Pod...”选项并添加您的文件。请确保已标记“如果需要,请复制文件”选项。请引用下图。

Picture showing the add files to pod option

- 现在很高兴为您的 .framework 创建一个文件夹,为 .bundle(如果有)文件创建另一个文件夹。为此,请右键单击 Pods 项目并选择“新建组”选项。选择一个与xcode模式不同的名称,很高兴知道这个文件夹是你创建的。

- 如果你做对了,你最近添加到项目中的框架会像这样出现在 pods 项目中:
the result of the frameworks add operation

- 现在,为了您的快速实现,找到您的文件,将 pods 项目中的 .frameworks 拖到插件项目的“框架、库和嵌入内容”中。结果将是这样的:
enter image description here

- 好的,文件包含并链接。现在我们应该让我们的 cocoa bean 知道这一点并声明这些文件。文件“YourAwesomePlugin.podspec”(位于插件项目的根目录)是 pod 的主要入口。在此文件中,您将声明哪些文件(.frameworks、.bundle 等)属于您的 pod,因此在您 npm 安装它时将属于您的插件。要声明这一点,您需要三个指令:

s.vendored_frameworks = 'ios/Pods/YourFrameworkFolder/**'
s.resource = 'ios/Pods/YourResourceFolder/YourBundle.bundle'   
s.xcconfig = {'ENABLE_BITCODE' => 'NO'} #This is mandatory on my case, but you need to evaluate if this options applies to your plugin. 

- 现在我们在插件项目上点击播放。要在你的app上测试插件是否正常,你需要在APP项目的pods项目的podfile中添加插件项目根目录的路径。像这样:

enter image description here

- 要安装它,您可以前往 Yourproject/ios/App 并运行 pod install .

请注意:

要声明您最近创建的插件的存在,您还需要做一些声明,但这部分很简单,并且已经记录在电容器/插件文档中。

安装方法通过pod install我建议的是用于测试。如果您像所有其他插件一样使用 npm 和 npm install 打包插件,那就太好了。

我对 cocoapods 的了解并不多,但这是有效的,我认为这是一个干净的解决方案。如果没有,请告诉我。

如果这个答案对你有用,请点赞,这是我一周的研究和尝试,我正在分享,同时把它写下来。

关于swift - 如何在 ionic 电容器自定义插件上嵌入第三方框架?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58045726/

相关文章:

ios - 检查 imageView 是否为空

ios - 无法找到 NSNotification 的发件人

ios - 表格 View 中 2 个不同的可重用单元格的不同高度

ios - 如何使用 XCUITest 测试 UIImageView 是否包含具有特定名称的图像?

iOS:以编程方式自动调整 UIImage 的大小

angular - Firebase 上托管的 Ionic 4 应用程序仅在重新加载时返回 404

html - 可以将背景图像添加到 ion-alert 吗?

ios - 表格 View 中的嵌套 Collection View 更好或多个 Collection View

path - 错误检查 ANDROID_SDK_ROOT/JAVA_HOME/PATH 环境变量

Xcode 6 测试版 : I'm not able to select Swift as language