如何在离子电容器自定义插件上嵌入第三方框架?
How to embed third party framework on ionic capacitor custom plugin?
我正在开发一个 Ionic Capacitor 插件,它导入 2 个 iOs .framework 文件和一个引用其中一个 .framework 文件的 .bundle。问题是,无论我如何 link/embed 和 point/copy 这个文件在插件项目上,xcode 声称,在应用程序项目上,它无法在 swift 文件。
我已经尝试将文件添加到项目中,使用 "Embedded binaries" 选项,链接库,允许 non-modular 包含(在构建选项菜单上),将文件添加到 headers(在构建阶段),等等....
xcode指出错误的那一行是:
import OneFramework
并且xcode声称:
没有这样的模块'OneFramework'
我期待着当我通过 npm 将插件添加到我的应用程序项目时,然后 运行ning 一个“$ rm -rf ios && ionic capacitor 运行 ios" 到 运行 应用程序,xcode 找到我正在尝试做的插件的所有模块。
我找到了解决方案。要实现这一点,首先要知道的是,当您执行 npx @capacitor/cli plugin:generate
时,CLI 为您执行的是生成 cocoa pod。此 pod 的根是生成的文件夹本身。
考虑到这一点,接下来要做的就是学习如何制作 pods,但我将总结使我取得成功的主要方面。
-首先打开*.xcworkspace。然后,单击 "Add Files to Pod..." 选项并添加您的文件。请确保标记 "Copy files if needed" 选项。请参考下图。
-现在很高兴为您的 .framework 创建一个文件夹,为 .bundle(如果有的话)文件创建另一个文件夹。通过右键单击 Pods 项目和 select 选项 "New group" 来执行此操作。 Select 这样的名称与 xcode 的格式不同,很高兴知道这个文件夹是由您创建的。
-如果你做对了,你最近添加到项目中的框架将出现在 pods 项目中,如下所示:
-现在,对于您的 swift 实现,找到您的文件,将 pods 项目中的 .frameworks 拖到插件项目的 "Frameworks, Libraries and Embedded content" 中。结果将是这样的:
-好的,包含并链接了文件。现在我们应该让我们的 cocoa pod 知道这一点并声明这些文件。文件"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上测试插件是否ok,你需要在APP项目的pods项目的podfile中添加插件项目的根路径。像这样:
-要安装它,您可以继续 Yourproject/ios/App 和 运行 pod install
。
请注意:
要声明您最近创建的插件的存在,您还需要做一些声明,但这部分很简单并且已经记录在 capacitor/plugin 文档中。
我建议的pod install
安装方法是为了测试。如果您使用 npm 打包您的插件并像所有其他插件一样安装它,那就太好了。
我对 cocoapods 了解不多,但我认为这是一个干净的解决方案。如果没有,请告诉我。
如果这个回答对你有用,请点个赞,我分享了一周的研究和尝试,一路写下来。
我正在开发一个 Ionic Capacitor 插件,它导入 2 个 iOs .framework 文件和一个引用其中一个 .framework 文件的 .bundle。问题是,无论我如何 link/embed 和 point/copy 这个文件在插件项目上,xcode 声称,在应用程序项目上,它无法在 swift 文件。
我已经尝试将文件添加到项目中,使用 "Embedded binaries" 选项,链接库,允许 non-modular 包含(在构建选项菜单上),将文件添加到 headers(在构建阶段),等等....
xcode指出错误的那一行是:
import OneFramework
并且xcode声称: 没有这样的模块'OneFramework'
我期待着当我通过 npm 将插件添加到我的应用程序项目时,然后 运行ning 一个“$ rm -rf ios && ionic capacitor 运行 ios" 到 运行 应用程序,xcode 找到我正在尝试做的插件的所有模块。
我找到了解决方案。要实现这一点,首先要知道的是,当您执行 npx @capacitor/cli plugin:generate
时,CLI 为您执行的是生成 cocoa pod。此 pod 的根是生成的文件夹本身。
考虑到这一点,接下来要做的就是学习如何制作 pods,但我将总结使我取得成功的主要方面。
-首先打开*.xcworkspace。然后,单击 "Add Files to Pod..." 选项并添加您的文件。请确保标记 "Copy files if needed" 选项。请参考下图。
-现在很高兴为您的 .framework 创建一个文件夹,为 .bundle(如果有的话)文件创建另一个文件夹。通过右键单击 Pods 项目和 select 选项 "New group" 来执行此操作。 Select 这样的名称与 xcode 的格式不同,很高兴知道这个文件夹是由您创建的。
-如果你做对了,你最近添加到项目中的框架将出现在 pods 项目中,如下所示:
-现在,对于您的 swift 实现,找到您的文件,将 pods 项目中的 .frameworks 拖到插件项目的 "Frameworks, Libraries and Embedded content" 中。结果将是这样的:
-好的,包含并链接了文件。现在我们应该让我们的 cocoa pod 知道这一点并声明这些文件。文件"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上测试插件是否ok,你需要在APP项目的pods项目的podfile中添加插件项目的根路径。像这样:
-要安装它,您可以继续 Yourproject/ios/App 和 运行 pod install
。
请注意:
要声明您最近创建的插件的存在,您还需要做一些声明,但这部分很简单并且已经记录在 capacitor/plugin 文档中。
我建议的pod install
安装方法是为了测试。如果您使用 npm 打包您的插件并像所有其他插件一样安装它,那就太好了。
我对 cocoapods 了解不多,但我认为这是一个干净的解决方案。如果没有,请告诉我。
如果这个回答对你有用,请点个赞,我分享了一周的研究和尝试,一路写下来。