无法向 Flutter 插件添加 iOS 依赖

sag*_*uri 8 ios flutter flutter-plugin

我正在创建一个 Flutter 插件。但是当我尝试向插件的 iOS 部分添加依赖项时,我没有找到任何合适的指南。我在podspec插件文件中声明了依赖项。但是依赖项仅在example/iosthrough Pod 中可用,但我想在我ios的插件文件夹中访问该依赖项。这是我的podspec

#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
  s.name             = 'comet_chat'
  s.version          = '0.0.1'
  s.summary          = 'A new Flutter plugin.'
  s.description      = <<-DESC
A new Flutter plugin.
                       DESC
  s.homepage         = 'http://example.com'
  s.license          = { :file => '../LICENSE' }
  s.author           = { 'Your Company' => 'email@example.com' }
  s.source           = { :path => '.' }
  s.source_files = 'Classes/**/*'
  s.public_header_files = 'Classes/**/*.h'
  s.dependency 'Flutter'
  s.dependency 'CometChatPro', '1.4.0'

  s.ios.deployment_target = '10.0'
  s.preserve_paths = 'CometChatPro.framework'
  s.xcconfig = { 'OTHER_LDFLAGS' => '-framework CometChatPro' }
  s.vendored_frameworks = 'CometChatPro.framework'
end
Run Code Online (Sandbox Code Playgroud)

我关注了这个问题,但没有帮助。如何解决这个问题?如何仅获得插件的依赖项?

gui*_*ume 0

没有办法“只打开插件的类”,并且您添加的依赖项podspec仅适用于您的插件,除非明确公开。

长话短说

根据设计,您的 iOS Flutter 插件在嵌入 Flutter 应用程序项目时将始终运行。另外,您的 ; 存在冲突podspec它永远不应该在 和 中指定相同的框架dependencyvendored_frameworks

如果您有一个CometChatPro.framework文件夹,请将其复制到插件的ios/Libraries文件夹中,并在您的podspecin vendored_frameworks. 就我个人而言,我从未使用过说明符,但插件的实现dependency中有一个示例。flutter-webrtc

无论哪种方式,ios/Classes插件的文件夹都可以访问您在文件中指定的依赖项ios/plugin_name.podpsec。当您在 Xcode 以外的任何编辑器(Visual Studio Code、Android Studio 等)中编辑插件时,它只是“不知道”。

要为插件的 iOS 实现开发 Swift 或 Objective-C 类,您应该:

  1. 打开位于 的示例的 Xcode 工作区example/ios/Runner.xcworkspace
  2. 编辑你的插件的 iOS 类Pods/Development Pods/plugin_name/../../ios/.symlinks/plugins/plugin_name/ios/Classes
  3. 构建您的项目以修复任何编译错误。

如果此时您仍然无法访问插件的 iOS 类中的框架,则意味着 Cocoapods 未正确设置它。在这种情况下,您需要找到哪个 Xcode 构建设置未正确设置,然后在插件的 中指定这些构建设置podspec,如下所示:

  s.xcconfig = { 
                'FRAMEWORK_SEARCH_PATHS' => ['${PODS_TARGET_SRCROOT}/Libraries'],
                'HEADER_SEARCH_PATHS' => ["${PODS_ROOT}/../.symlinks/plugins/plugin_name/ios/Libraries/CometChatPro.framework/Headers"
               }
Run Code Online (Sandbox Code Playgroud)

这会显式地将框架添加到插件目标的FRAMEWORK_SEARCH_PATHS,以及框架的Headers路径到HEADER_SEARCH_PATH.

链接时vendored_frameworks,您需要确保 Cocoapods 确实成功嵌入了框架,并且您正在构建正确的架构。