• uni-app 原生ios插件开发以及自定义基座


    前言

    这个纯粹就是个人的总结,若果有疑问请留言

    环境配置

    1. xcode 我用的是当前最新的版本 (13.4.1)
    2. uni-app 提供的sdk (去官方下载) 链接 https://nativesupport.dcloud.net.cn/AppDocs/download/ios
    3. hbuilderx (3.5.3)

    tip :版本不一样不会有太大的问题

    创建插件项目以及配置项目的文件

    请见官方文章,说的很清晰,我只说一下文章中没有提到的东西和实际开发中遇到问题,本人不是原生开发,不喜勿喷

    https://nativesupport.dcloud.net.cn/NativePlugin/course/ios

    1. 创建插件Framework
    2. 导入查检项目到HBuilder-uniPluginDemo
    3. 配置HBuilder-uniPluginDemo
    4. 确认下支持的版本,现在一般的三方提供的sdk都是支持ios9以及上,这一点文章中没有提到的
      在这里插入图片描述

    页面跳转问题

    文章中也有给出结论
    https://nativesupport.dcloud.net.cn/NativePlugin/course/ios?id=q-%e5%a6%82%e4%bd%95%e8%b7%b3%e8%bd%ac%e5%8e%9f%e7%94%9f-uiviewcontroller
    直接使用这个方法就可以

    // 获取当前显示的 UIViewController
    + (UIViewController *)dc_findCurrentShowingViewController {
        //获得当前活动窗口的根视图
        UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
        UIViewController *currentShowingVC = [self findCurrentShowingViewControllerFrom:vc];
        return currentShowingVC;
    }
    + (UIViewController *)findCurrentShowingViewControllerFrom:(UIViewController *)vc
    {
        // 递归方法 Recursive method
        UIViewController *currentShowingVC;
        if ([vc presentedViewController]) {
            // 当前视图是被presented出来的
            UIViewController *nextRootVC = [vc presentedViewController];
            currentShowingVC = [self findCurrentShowingViewControllerFrom:nextRootVC];
    
        } else if ([vc isKindOfClass:[UITabBarController class]]) {
            // 根视图为UITabBarController
            UIViewController *nextRootVC = [(UITabBarController *)vc selectedViewController];
            currentShowingVC = [self findCurrentShowingViewControllerFrom:nextRootVC];
    
        } else if ([vc isKindOfClass:[UINavigationController class]]){
            // 根视图为UINavigationController
            UIViewController *nextRootVC = [(UINavigationController *)vc visibleViewController];
            currentShowingVC = [self findCurrentShowingViewControllerFrom:nextRootVC];
    
        } else {
            // 根视图为非导航类
            currentShowingVC = vc;
        }
    
        return currentShowingVC;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    使用方法
    我的建议是写一个uiviewcontroller类别,命名为CurrentViewController也可以随意,这样就不用每次使用的时候都去写一遍了,在h文件中吧dc_findCurrentShowingViewController这个方法抛出就可以了,使用的时候只需要调用dc_findCurrentShowingViewController这个方法即可

    // viewController  这个可以用作跳转的viewConteroller 即可
     UIViewController * viewController  = [UIViewController dc_findCurrentShowingViewController];
    
    • 1
    • 2

    自定义基座

    文档
    https://nativesupport.dcloud.net.cn/AppDocs/usesdk/ios?id=%e5%a6%82%e4%bd%95%e7%94%a8%e7%a6%bb%e7%ba%bf%e6%89%93%e5%8c%85%e5%b7%a5%e7%a8%8b%e5%88%b6%e4%bd%9c%e8%87%aa%e5%ae%9a%e4%b9%89%e8%b0%83%e8%af%95%e5%9f%ba%e5%ba%a7

    1. control.xml文件 添加 debug=“true” syncDebug=“true” 正式去掉
    2. 在原生工程里找到info.plist文件并增加一项(安装文件的一个设置)
    3. 打印log 在项目中 Build Phases ——> Link Binary With Libraries 中添加 liblibLog.a 在skd->libs文件夹下
      在这里插入图片描述 5. 自定义基座一定是使用的开发证书,并且一定要不运行其他东西,模式也要设置成debug模式在这里插入图片描述
      在这里插入图片描述

    引入文件或者静态库

    只需要把文件拖入即可,xcode会自动引入的,拖动的时候注意,一定要选择复制 和 此项目即可
    在这里插入图片描述

    结束

    有新的发现会及时更新,不喜勿喷,有问题评论,如果有帮到你了,麻烦支持下,谢谢

    请添加图片描述

  • 相关阅读:
    光学教程考试练习题及答案
    leetcode周赛第二题6230. 长度为 K 子数组中的最大和
    ubuntu 18.04安装python3.7.5,并将 python 设定为python3, pip设定为pip3
    人脸关键点COFW-68使用指南
    中国绿色建材行业发展前景与投资战略规划深度研究报告2022-2028年
    【MySQL系列】MySQL表的增删改查(基础)
    工业智能网关BL110应用之三十二: 如何连接配置阿里云服务器
    深度残差网络的实现与编程
    探索CSS中的宽度设置:width: 100% 与 width: auto 的区别
    【基于机械臂触觉伺服的物体操控】论文研读《A control framework for tactile servoing》
  • 原文地址:https://blog.csdn.net/mrz123123123/article/details/126691752