uni-app iOS原生插件开发,模拟器调试正常,插件打包后在uni-app项目中真机运行报错当前运行的基座不包含原生插件

发布于 1周前 作者 phonegap100 来自 Uni-App

uni-app iOS原生插件开发,模拟器调试正常,插件打包后在uni-app项目中真机运行报错当前运行的基座不包含原生插件

产品分类

uni小程序SDK

手机系统

iOS

手机系统版本号

iOS 16

手机厂商

苹果

手机机型

iPhone SE2

页面类型

vue

SDK版本号

3.8.7

操作步骤

使用cocoapod集成项目开发iOS原生插件

预期结果

插件能正常使用

实际结果

模拟器能正确使用,真机报错【当前运行的基座不包含原生插件xxxx】

bug描述

求助: 开发iOS原生插件,使用cocoapod的方式集成HBuilder-uniPlugin项目,在xcode无论是真机还是模拟器调试,插件都能正常使用,然后打包插件,在HbuilderX新建uniapp项目,引入插件,制作了模拟器和真机的自定义基座,运行,模拟器也正常,但是真机报错,【当前运行的基座不包含原生插件xxxx】如图一所示。
我已经反复调试了两天,不知道问题在哪,我试过集成cocoapod后,只写一个最简单的Module测试,发现是一样的问题。
在配置cocoapod的过程中,我在主项目的Build Setting - other Linker Flags 添加了 $(inherited) 项目,否则xcode是找不到我新建的Module文件,也会出现找不到插件的情况。我不知道打包成插件的时候,是不是也要对这一步做什么操作,才能在真机正确使用。
图三和图四是在uniapp项目中使用本地插件。模拟器运行正常, 真机就不行。
我已经调试了2天,求助

图一 图二 图三 图四

开发环境、版本号、项目创建方式

信息
产品分类 uni小程序SDK
手机系统 iOS
手机系统版本号 iOS 16
手机厂商 苹果
手机机型 iPhone SE2
页面类型 vue
SDK版本号 3.8.7

3 回复

解决了么?最后怎么解决的?


做成framework插件集成到Hbuilder中报错【当前运行的基座不包含原生插件xxxx】,但是在OC的工程里面调试就正常,在 Build Setting - other Linker Flags 添加了 $(inherited) ,但是在Hbuilder工程里面怎么设置 other Linker Flags 呢?

在uni-app中开发iOS原生插件时,遇到“当前运行的基座不包含原生插件”这类错误,通常意味着真机运行的基座(即uni-app的iOS原生壳应用)没有正确集成或包含你开发的原生插件。以下是一个简要的步骤和代码示例,帮助你检查和解决这个问题。

步骤一:确认插件配置

首先,确保你的manifest.json文件中已经正确配置了原生插件。示例如下:

{
  "mp-weixin": {},
  "app-plus": {
    "nativePlugins": [
      {
        "name": "MyPlugin", // 插件名称
        "description": "My Custom iOS Plugin",
        "version": "1.0.0",
        "provider": "your.company.id", // 你的开发者账号ID
        "path": "plugins/my-plugin", // 插件源码路径
        "platforms": ["ios"] // 指定平台
      }
    ]
  }
}

步骤二:检查Xcode项目配置

  1. 打开Xcode:使用Xcode打开uni-app生成的iOS项目(通常在uni-app-project/platforms/ios/目录下)。

  2. 集成插件

    • 确保Podfile中包含了你的原生插件依赖(如果插件使用CocoaPods管理)。
    • 如果插件是手动集成的,检查MyPlugin文件夹(或你自定义的插件文件夹)是否存在于Xcode项目的Plugins目录下,并且已被添加到Xcode项目中。
  3. Build Settings:检查Xcode项目的Build Settings,确保没有配置错误,特别是关于Framework Search Paths和Library Search Paths的设置。

步骤三:真机调试

  1. 清理并重建项目:在Xcode中,使用Product -> Clean Build Folder清理构建文件夹,然后重新构建项目。

  2. 运行项目:确保选择的是真机作为运行目标,点击运行按钮。

示例代码:插件桥接

在你的iOS原生插件代码中,确保有一个Objective-C/Swift类,它实现了uni-app的原生插件接口。例如,一个简单的Objective-C插件类可能如下所示:

#import <UniAppPlugin/UniPlugin.h>

@interface MyPlugin : NSObject <UniModule>

@end

@implementation MyPlugin

- (void)moduleDidLoad:(UniModuleContext *)context {
    // 插件加载时的初始化代码
}

- (void)myCustomMethod:(NSDictionary *)args resolve:(UniPromiseResolveBlock)resolve reject:(UniPromiseRejectBlock)reject {
    // 实现你的自定义方法
    resolve(@[@"result"]);
}

@end

确保在Xcode中正确设置了插件的导出信息,使得uni-app能够识别和调用你的插件方法。

通过上述步骤和代码示例,你应该能够解决“当前运行的基座不包含原生插件”的问题,并在真机上成功运行你的uni-app项目。

回到顶部