在 iOS 框架中使用 Google MLKit

问题描述 投票:0回答:1

我有一个 swift 框架,在该框架中我使用 GoogleMLKit/SegmentationSelfie。因为 MLKit 只能通过 cocoa pods 获得,所以我必须将我的项目转换为 pods 项目,并按如下方式导入 MLKit 库。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyFramework' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyFramework
  pod 'GoogleMLKit/SegmentationSelfie'

end

我将框架编译到 .framework 文件夹中,然后将其添加到我的应用程序中,并在我想要使用它的文件中执行

import MyFramework
操作。我收到错误
Missing required module 'MLKit'
这是我所期望的,因为 pod 文件显示我使用标志
use_frameworks!
所以它应该是动态的,即使用我的框架的应用程序需要导入 MLKit 作为依赖项。因此,再次考虑到 MLKit 仅在可可豆荚上,我将我的应用程序更改为豆荚项目,并添加一个与上面的完全相同的豆荚文件(但显然是针对我的应用程序)。现在,当我运行该应用程序时,不会出现编译错误,因为它现在有了 MLKit。然而,当我的应用程序启动时,我收到错误,似乎下面 MLKit 中的几乎每个文件都是其中一个错误的示例。

objc[10782]: Class MLKSegmentationMask is implemented in both /private/var/containers/Bundle/Application/AD152823-400E-4F1C-B553-B8EE680E64B7/MyApp.app/Frameworks/MyFramework.framework/MyFramework (0x1059b7950) and /private/var/containers/Bundle/Application/AD152823-400E-4F1C-B553-B8EE680E64B7/MyApp.app/MyApp (0x10180f5b0). One of the two will be used. Which one is undefined.

我尝试将应用程序库搜索路径指向框架,看看它是否可以解决对 MLKit 的需求,而无需在应用程序 pod 文件中单独导入 MLKit,但这不起作用。我还在框架中尝试了许多不同的东西,试图让它不将 MLKit 编译到框架中,而只是简单地依赖于框架。

我在这里想要实现的是让 MyFramework 仅依赖于 MLKit,而不将其编译进去,这样我的应用程序就可以导入 MLKit 并且 MyFramework 应该很高兴。

它需要这样,因为出于此目的,我一直使用 MyApp 作为示例应用程序,该应用程序不使用 MLKit,但我还有其他应用程序,我将使用此框架,因为它们已经因其他原因使用 MLKit所以我不希望框架在 MLKit 中编译,否则我的应用程序碰巧也使用 MLKit 将始终看到这个巨大的错误列表,不用介意这个错误的明显问题是相同文件有两个版本它会任意选择其中之一。

话虽如此,我什至无法以仅编译 MLKit 的方式构建 MyFramework,但如果我可以将其编译到框架或嵌入中,那么我可以将其从捆绑包中删除,然后希望我可以将其导入应用程序,它将解决依赖性。

但我还没有能够让这些工作发挥作用,并且已经在网上寻找有关在框架中使用 MLKit 的信息一周了,但到目前为止没有发现任何有用的信息。我找到了一些关于如何从 MLKits pod 构建 xcframeworks 的线程,希望我能够使用它们而不是 cocoa pod,并希望对它如何嵌入/依赖有更多的控制。

https://gist.github.com/MapaX/5dc58ccb16ad1f772907154ae4991dca

ios deep-learning google-mlkit semantic-segmentation
1个回答
0
投票

对于重复 MLKSegmentationMask 实现的问题,在我看来,这是一个常见的 cocopod 问题,一些类似的文章讨论了这个问题,例如 Class 在两者中都实现了,将使用两者之一。哪一个是未定义的.

是的,不幸的是 MLKit SDK 目前仅在 cocopod 上可用(尚未在 swift manager 等上可用)。

© www.soinside.com 2019 - 2024. All rights reserved.