cocos creator 3.8发布到iOS,调用iOS原生方法失败,怎么解决??请大佬帮忙~~~!

环境:xcode 16.0, ios11,cocos creator 3.8.3和4
Cocos代码:

if (sys.isNative && (sys.os === sys.OS.ANDROID || sys.os === sys.OS.IOS)) {
            native.bridge.sendToNative('playHanziSound',hanziStr);
}

iOS代码:
1、在 AppDelegate.mm 的 - ( BOOL )application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中补充以下代码:

    static ICallback cb = ^void (NSString* _arg0, NSString* _arg1){
        if([_arg0 isEqual:@"playHanziSound"]){
            [self playHanziSound:_arg1];
        }
    };
    JsbBridge* m = [JsbBridge sharedInstance];
    [m setCallback:cb];

2、iOS AppDelegate.mm中定义的实际执行方法

- ( void ) playHanziSound:(NSString*) hanziText{
}

详细报错见下:

Main Thread Checker: UI API called on a background thread: -[UIView layer]
PID: 977, TID: 169022, Thread name: (none), Queue name: com.apple.root.default-qos.overcommit, QoS: 0
Backtrace:
4   OKChinese-mobile                    0x0000000100fcf9a0 _ZN2cc3gfx14CCMTLSwapchain6doInitERKNS0_13SwapchainInfoE + 164
5   OKChinese-mobile                    0x0000000100f7e1cc _ZN2cc3gfx9Swapchain10initializeERKNS0_13SwapchainInfoE + 144
6   OKChinese-mobile                    0x0000000100f5eac8 _ZZN2cc3gfx14SwapchainAgent6doInitERKNS0_13SwapchainInfoEEN13SwapchainInit7executeEv + 32
7   OKChinese-mobile                    0x00000001009dbf54 _ZN2cc12MessageQueue15executeMessagesEv + 68
8   OKChinese-mobile                    0x00000001009dbfb0 _ZN2cc12MessageQueue13flushMessagesEv + 52
9   OKChinese-mobile                    0x00000001009db854 _ZN2cc12MessageQueue18consumerThreadLoopEv + 64
10  OKChinese-mobile                    0x00000001009e4814 _ZNSt3__18__invokeB8de180100IMN2cc12MessageQueueEDoFvvEPS2_JEvEEDTcldsdeclsr3stdE7declvalIT0_EEclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT1_EEEEOS7_OS6_DpOS8_ + 132
11  OKChinese-mobile                    0x00000001009e4784 _ZNSt3__116__thread_executeB8de180100INS_10unique_ptrINS_15__thread_structENS_14default_deleteIS2_EEEEMN2cc12MessageQueueEDoFvvEJPS7_EJLm2EEEEvRNS_5tupleIJT_T0_DpT1_EEENS_15__tuple_indicesIJXspT2_EEEE + 48
12  OKChinese-mobile                    0x00000001009e4430 _ZNSt3__114__thread_proxyB8de180100INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN2cc12MessageQueueEDoFvvEPS8_EEEEEPvSD_ + 84
13  libsystem_pthread.dylib             0x0000000217f9537c _pthread_start + 136
14  libsystem_pthread.dylib             0x0000000217f90494 thread_start + 8
Modifying properties of a view's layer off the main thread is not allowed: view <View: 0x1098f58c0> with associated view controller <ViewController: 0x1098f54c0>; backtrace: 
(
	0   UIKitCore                           0x00000001949aea00 5BD027B1-0EC9-35FD-B9F0-6288A525693A + 22456832
	1   UIKitCore                           0x00000001934adc74 5BD027B1-0EC9-35FD-B9F0-6288A525693A + 433268
	2   QuartzCore                          0x000000019272b784 0011C1DB-B0CA-3F85-9BFE-429013410160 + 42884
	3   QuartzCore                          0x000000019272b5f8 0011C1DB-B0CA-3F85-9BFE-429013410160 + 42488
	4   QuartzCore                          0x00000001927288c8 0011C1DB-B0CA-3F85-9BFE-429013410160 + 30920
	5   QuartzCore                          0x0000000192873ca4 0011C1DB-B0CA-3F85-9BFE-429013410160 + 1387684
	6   OKChinese-mobile                    0x0000000100fcfd08 _ZZN2cc3gfx14CCMTLSwapchain6doInitERKNS0_13SwapchainInfoEENK3$_0clEbb + 64
	7   OKChinese-mobile                    0x0000000100fcfa6c _ZN2cc3gfx14CCMTLSwapchain6doInitERKNS0_13SwapchainInfoE + 368
	8   OKChinese-mobile                    0x0000000100f7e1cc _ZN2cc3gfx9Swapchain10initializeERKNS0_13SwapchainInfoE + 144
	9   OKChinese-mobile                    0x0000000100f5eac8 _ZZN2cc3gfx14SwapchainAgent6doInitERKNS0_13SwapchainInfoEEN13SwapchainInit7executeEv + 32
	10  OKChinese-mobile                    0x00000001009dbf54 _ZN2cc12MessageQueue15executeMessagesEv + 68
	11  OKChinese-mobile                    0x00000001009dbfb0 _ZN2cc12MessageQueue13flushMessagesEv + 52
	12  OKChinese-mobile                    0x00000001009db854 _ZN2cc12MessageQueue18consumerThreadLoopEv + 64
	13  OKChinese-mobile                    0x00000001009e4814 _ZNSt3__18__invokeB8de180100IMN2cc12MessageQueueEDoFvvEPS2_JEvEEDTcldsdeclsr3stdE7declvalIT0_EEclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT1_EEEEOS7_OS6_DpOS8_ + 132
	14  OKChinese-mobile                    0x00000001009e4784 _ZNSt3__116__thread_executeB8de180100INS_10unique_ptrINS_15__thread_structENS_14default_deleteIS2_EEEEMN2cc12MessageQueueEDoFvvEJPS7_EJLm2EEEEvRNS_5tupleIJT_T0_DpT1_EEENS_15__tuple_indicesIJXspT2_EEEE + 48
	15  OKChinese-mobile                    0x00000001009e4430 _ZNSt3__114__thread_proxyB8de180100INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN2cc12MessageQueueEDoFvvEPS8_EEEEEPvSD_ + 84
	16  libsystem_pthread.dylib             0x0000000217f9537c _pthread_start + 136
	17  libsystem_pthread.dylib             0x0000000217f90494 thread_start + 8
)
Modifying properties of a view's layer off the main thread is not allowed: view <View: 0x1098f58c0> with associated view controller <ViewController: 0x1098f54c0>; backtrace: 
(
	0   UIKitCore                           0x00000001949aea00 5BD027B1-0EC9-35FD-B9F0-6288A525693A + 22456832
	1   UIKitCore                           0x00000001934adc74 5BD027B1-0EC9-35FD-B9F0-6288A525693A + 433268
	2   QuartzCore                          0x000000019272b784 0011C1DB-B0CA-3F85-9BFE-429013410160 + 42884
	3   QuartzCore                          0x000000019272b5f8 0011C1DB-B0CA-3F85-9BFE-429013410160 + 42488
	4   QuartzCore                          0x00000001927288c8 0011C1DB-B0CA-3F85-9BFE-429013410160 + 30920
	5   QuartzCore                          0x0000000192873ca4 0011C1DB-B0CA-3F85-9BFE-429013410160 + 1387684
	6   OKChinese-mobile                    0x0000000100fcfd08 _ZZN2cc3gfx14CCMTLSwapchain6doInitERKNS0_13SwapchainInfoEENK3$_0clEbb + 64
	7   OKChinese-mobile                    0x0000000100fcfa88 _ZN2cc3gfx14CCMTLSwapchain6doInitERKNS0_13SwapchainInfoE + 396
	8   OKChinese-mobile                    0x0000000100f7e1cc _ZN2cc3gfx9Swapchain10initializeERKNS0_13SwapchainInfoE + 144
	9   OKChinese-mobile                    0x0000000100f5eac8 _ZZN2cc3gfx14SwapchainAgent6doInitERKNS0_13SwapchainInfoEEN13SwapchainInit7executeEv + 32
	10  OKChinese-mobile                    0x00000001009dbf54 _ZN2cc12MessageQueue15executeMessagesEv + 68
	11  OKChinese-mobile                    0x00000001009dbfb0 _ZN2cc12MessageQueue13flushMessagesEv + 52
	12  OKChinese-mobile                    0x00000001009db854 _ZN2cc12MessageQueue18consumerThreadLoopEv + 64
	13  OKChinese-mobile                    0x00000001009e4814 _ZNSt3__18__invokeB8de180100IMN2cc12MessageQueueEDoFvvEPS2_JEvEEDTcldsdeclsr3stdE7declvalIT0_EEclsr3stdE7declvalIT_EEspclsr3stdE7declvalIT1_EEEEOS7_OS6_DpOS8_ + 132
	14  OKChinese-mobile                    0x00000001009e4784 _ZNSt3__116__thread_executeB8de180100INS_10unique_ptrINS_15__thread_structENS_14default_deleteIS2_EEEEMN2cc12MessageQueueEDoFvvEJPS7_EJLm2EEEEvRNS_5tupleIJT_T0_DpT1_EEENS_15__tuple_indicesIJXspT2_EEEE + 48
	15  OKChinese-mobile                    0x00000001009e4430 _ZNSt3__114__thread_proxyB8de180100INS_5tupleIJNS_10unique_ptrINS_15__thread_structENS_14default_deleteIS3_EEEEMN2cc12MessageQueueEDoFvvEPS8_EEEEEPvSD_ + 84
	16  libsystem_pthread.dylib             0x0000000217f9537c _pthread_start + 136
	17  libsystem_pthread.dylib             0x0000000217f90494 thread_start + 8
)
22:17:00 [DEBUG]: EventBus[Engine] has no listener found!
#FactoryInstall Unable to query results, error: 5
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
libpng warning: iCCP: known incorrect sRGB profile
22:17:00 [DEBUG]: JS: [object Object]
22:17:00 [DEBUG]: JS: [object Object]
22:17:00 [INFO]: for2d/builtin-sprite|sprite-vs:vert|sprite-fs:frag|CC_USE_EMBEDDED_ALPHA0|USE_TEXTURE1|IS_GRAY0 compile succeed.
22:17:00 [DEBUG]: JS: [object Object]
22:17:01 [INFO]: internal/builtin-graphics|vs:vert|fs:frag compile succeed.

楼主,这个怎么解决的?
3.8.4遇到了

最后怎么解决的

iOS调用cocos代码需要在cocos线程调用
CC_CURRENT_ENGINE()->getScheduler()->performFunctionInCocosThread([=](){
});

我现在是ts调用 ios原生就报错
20:52:38 [ERROR]: [SE_ERROR] (/Applications/Cocos/Creator/3.8.7/CocosCreator.app/Contents/Resources/resources/3d/engine/native/cocos/bindings/manual/JavaScriptObjCBridge.mm, 326): call (AppUtils.getVersionName) failed, result code: -3
20:52:38 [ERROR]: E/ [ERROR] Failed to invoke JavaScriptObjCBridge_callStaticMethod

源码
ts。
native.reflection.callStaticMethod(“AppUtils”, “getVersionName”, “”);

oc
.h
#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface AppUtils : NSObject

+(NSString*) getVersionCode;

+(NSString*) getVersionName:(NSString *)message;

@end

NS_ASSUME_NONNULL_END

.mm
#import “AppUtils.h”
@implementation AppUtils
+(NSString *) getVersionCode{
NSLog(@“call getVersionCode”);
// 省略
return @“1”;
}

+(NSString*) getVersionName:(NSString *)message {
NSLog(@“call getVersionName”);
// 省略
return @“1.0.0”;
}
@end

感谢您的回复。确实可行

大佬, ios 我自定义新增的 .a和.h 和 .mm文件 怎么在cocosCreator build ios工程时 自动引入到xcode工程

xcode里面把文件拖进来,action选引用,target选你的工程target

我要自动的方式,我想写脚本自动化实现,但是读取xcode文件内容包里的project.pbxproj文件一直读取有问题,没办法注入。几十个项目,所以得整自动化流程

这个说来话长,原本我都准备写一篇教程的 :joy:
简单来讲,就是用nodejs的xcode包,解析这个文件,剩下的都是坑~

解析这块你有做了? 我用python 或者 ruby 要解析都过不去

#!/usr/bin/env ruby
require ‘xcodeproj’

配置参数

PROJECT_DIR = ARGV[0] || File.expand_path(‘build/ios/proj’, dir)
TARGET_FILES_DIR = File.expand_path(‘native/engine/ios’, dir)
TARGET_NAME = ‘game-project-mobile’

文件列表配置

FILES = [
‘AppUtils.h’,
‘AppUtils.mm’,
‘GameAnalytics.h’,
‘GameAnalyticsCpp.h’,
‘GameAnalyticsCpp.mm’,
‘libGameAnalytics.a’
]

begin

查找Xcode项目

print PROJECT_DIR
xcodeproj_path = Dir.glob("#{PROJECT_DIR}/*.xcodeproj").first
print xcodeproj_path
raise “Xcode project not found in #{PROJECT_DIR}” unless xcodeproj_path

project = Xcodeproj::Project.open(xcodeproj_path)
target = project.targets.find { |t| t.name == TARGET_NAME } || project.targets.first

添加文件引用

FILES.each do |filename|
file_ref = project.new_file("#{TARGET_FILES_DIR}/#{filename}")

case File.extname(filename)
when '.mm'
  build_file = target.source_build_phase.add_file_reference(file_ref)
  build_file.settings = { 'COMPILER_FLAGS' => '-fobjc-arc' }
when '.a'
  target.frameworks_build_phase.add_file_reference(file_ref)
when '.h'
  # 头文件自动包含在Header Search Paths中
end

end

配置构建参数

target.build_configurations.each do |config|
# 头文件搜索路径
config.build_settings[‘HEADER_SEARCH_PATHS’] ||= [’(inherited)'] config.build_settings['HEADER_SEARCH_PATHS'] << "(SRCROOT)/…/…/#{TARGET_FILES_DIR}/**"

# 静态库链接参数
config.build_settings['OTHER_LDFLAGS'] ||= []
config.build_settings['OTHER_LDFLAGS'] << "-force_load \"$(SRCROOT)/../../#{TARGET_FILES_DIR}/libGameAnalytics.a\""

end

project.save
puts “成功更新Xcode工程: #{File.basename(xcodeproj_path)}”
rescue => e
puts “错误: #{e.message}”
puts e.backtrace.join("\n")
exit 1
end
是哪里出问题?
能分享一下怎么解析注入的?

我主要是添加plist、json等资源文件,可能不一样,思路就是先手动加,然后看具体是哪里改动了

好的谢谢,我在琢磨一下