Flutter插件开发中iOS图片等资源配置问题

前言

flutter开发中,不可避免要使用原生的东西,比如,我们要调用原生自定义的相机,就会涉及到和flutter和native的通信等问题

Flutter和native通信方式

1.不通过插件

直接在flutter目录中,分别在android和iOS目录,直接定义就可以了,然后通过MethodChannel来注册通信即可Flutter插件开发中iOS图片等资源配置问题_第1张图片

这种方式缺点也比较明显,比如不利于解耦,导致这2个子目录臃肿,修改起来也很麻烦,

2.通过插件的形式

插件相当于第三方库文件,具体的创建的过程就不再赘述了,我相信大部分同学都可以完成这一步,可以看下图

Flutter插件开发中iOS图片等资源配置问题_第2张图片

这种方式的优点有很多,比如不会在冗杂在主目录下的android和iOS目录中,在主目录下,单独建立一个plugins目录,所有的插件都在这个目录下进行开发,也方便打成插件包给其他工程使用等等。

注意事项

我们在开发Android插件的时候,直接在插件中的Android目录下,走Android正常的开发流程即可,如图

Flutter插件开发中iOS图片等资源配置问题_第3张图片

但是,在iOS目录中,我们需要在.podspec文件中指定我们需要编译的文件,和相关资源配置等

Flutter插件开发中iOS图片等资源配置问题_第4张图片

下面来看看.podspec文件中的配置(podspec文件相当于Android中的gradle文件)

#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
  s.name             = 'take_picture_plugin'
  s.version          = '0.0.1'
  s.summary          = 'take picture by camera plugin.'
  s.description      = <<-DESC
A new Flutter plugin.
                       DESC
  s.homepage         = 'http://example.com'
  s.license          = { :file => '../LICENSE' }
  s.author           = { 'Your Company' => '[email protected]' }
  s.source           = { :path => '.' }
  s.source_files = 'Classes/**/*'
  s.public_header_files = 'Classes/**/*.h'
  s.resources = ['Classes/*.png']
  s.dependency 'Flutter'
  s.ios.deployment_target = '8.0'
end

上面的配置名称顾名思义很简单,当我们需要其他配置的时候,可以去http://guides.cocoapods.org/syntax/podspec.html查看

Flutter插件开发中iOS图片等资源配置问题_第5张图片

比如,如果你要插件中使用本地图片,就需要引入图片资源到iOS插件后,你才能使用本地图片,可以通过spec.resources = ['Images/*.png']来配置,也可以通过bundle等,引入外部第三方库,可以通过s.dependency来配置。

当我们配置完iOS插件中的podspec后,发现配置并没有生效,无论我们如何在android studio进行操作,原因就是podspec文件的执行需要用到mac 中pod命令,所以,我们就必须通过pod install来让它生效,使用mac Terminal,cd进入到插件中example目录,再进入到iOS目录,使用pod install 即可让podspec配置生效。

总结

记住你一定要用pod install走一遍,这个问题困扰了我好几个小时

你可能感兴趣的:(Android,iOS,flutter)