uni-app iOS原生插件开发,模拟器调试正常,插件打包后在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 |
解决了么?最后怎么解决的?
做成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项目配置
-
打开Xcode:使用Xcode打开uni-app生成的iOS项目(通常在
uni-app-project/platforms/ios/
目录下)。 -
集成插件:
- 确保
Podfile
中包含了你的原生插件依赖(如果插件使用CocoaPods管理)。 - 如果插件是手动集成的,检查
MyPlugin
文件夹(或你自定义的插件文件夹)是否存在于Xcode项目的Plugins
目录下,并且已被添加到Xcode项目中。
- 确保
-
Build Settings:检查Xcode项目的Build Settings,确保没有配置错误,特别是关于Framework Search Paths和Library Search Paths的设置。
步骤三:真机调试
-
清理并重建项目:在Xcode中,使用
Product
->Clean Build Folder
清理构建文件夹,然后重新构建项目。 -
运行项目:确保选择的是真机作为运行目标,点击运行按钮。
示例代码:插件桥接
在你的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项目。