美文网首页
Flutter 开发iOS插件 引用三方框架

Flutter 开发iOS插件 引用三方框架

作者: 東玖零 | 来源:发表于2019-04-04 13:15 被阅读0次

    具体如何创建插件依赖插件,可参考闲鱼技术

    现在有一个调用阿里云上传图片的插件alioss,打开文件夹其中有个目录是ios,仔细查看有个alioss.podspec文件,用CocaPods创建过自己库的同学应该不陌生,文件内容如下:

    #
    # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
    #
    Pod::Spec.new do |s|
      s.name             = 'alioss'
      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.ios.deployment_target = '8.0'
    end
    

    1.引用阿里三方库我们在倒数第二行添加。

      s.dependency 'AliyunOSSiOS'
    

    这样我们就引用了阿里的pod库了,封装好相关的上传代码,到flutter主工程下的ios目录下pod install 完成后,就可以测试上传文件的代码了。

    2、引用三方静态库(.a文件)我们再添加一行。(在另一个插件里有个连接打印机功能,就不再重复.podspec文件了)

    s.vendored_libraries = 'Classes/LPAPI/CAR_PRINT.a'
    

    然后把静态库放在相应的文件夹路径下,同样使用pod install重新构建工程,run下会报警告报错,内容如下:

    Warning: no rule to process file '/Users/xxx/development/FlutterPlugin/xxx/ios/Classes/LPAPI/CAR_PRINT.a' of type archive.ar for architecture armv7
    Warning: no rule to process file '/Users/xxx/development/FlutterPlugin/xxx/ios/Classes/LPAPI/CAR_PRINT.a' of type archive.ar for architecture arm64
    ld: library not found for -lCAR_PRINT
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    这时候需要删除 flutter主工程的pods下对应的插件(千万要找到引用.a对应的插件)的TARGETS-->Build Settings->Other Linker Flags列表中的-l"CAR_PRINT" 选项,再run一下还是报警告报错,内容如下:

    Warning: no rule to process file '/Users/xxx/development/FlutterPlugin/xxx/ios/Classes/LPAPI/CAR_PRINT.a' of type archive.ar for architecture armv7
    Warning: no rule to process file '/Users/xxx/development/FlutterPlugin/xxx/ios/Classes/LPAPI/CAR_PRINT.a' of type archive.ar for architecture arm64
    Undefined symbols for architecture arm64:
      "_OBJC_CLASS_$_LPAPI", referenced from:
          objc-class-ref in PrinterViewController.o
    ld: symbol(s) not found for architecture arm64
    clang: error: linker command failed with exit code 1 (use -v to see invocation)
    

    说明PrinterViewController文件引用了CAR_PRINT.a的头文件。
    这时候我们需要TARGETS-->Build Phases-->Compile Sources 删除CAR_PRINT.a文件,再在Compile Sources同级的另一个选项Link Binary With Libraries 里添加刚刚删除的CAR_PRINT.a文件。

    最后再run一下,控制台显示内容如下:

    Launching lib/main.dart on iPhone 8 in debug mode...
    Xcode build done.                                           51.9s
    

    最后我们还要根据引用.a静态库的提示是否要在插件的TARGETS-->Build Settings->Other Linker Flags列表中加入-ObjC或-all_load等其他flag.

    如果上述步骤出错可以使用pod install重置设置选项,还有xcode还是无法运行flutter主工程的,我用的是vscode和vscode flutter插件来运行。

    3、引用三方动态库Framework的坑还没试过,最后的资料里有提到。

    最后我们来一张运行图纪念一下。

    Simulator Screen Shot - iPhone 8 - 2019-04-04 at 13.14.10.png

    想详细了解xxxx.podspec文件的可以移步官网解释技术帖子

    相关文章

      网友评论

          本文标题:Flutter 开发iOS插件 引用三方框架

          本文链接:https://www.haomeiwen.com/subject/aflfiqtx.html