3.8.8编译出来的ios项目在Xcode26中无法使用模拟器

  • Creator 版本: 3.8.8
  • 目标平台:ios
    问题就是标题中写到的这样,附上我和deepseek搞了一天后总结出来的尝试过程和结果

Cocos Creator 3.8.x Apple Silicon 模拟器适配记录

日期:2026-07-09

引擎:Cocos Creator 3.8.6 → 3.8.7 → 3.8.8

Mac:Apple Silicon (ARM64)

Xcode:26.6

iOS SDK:26.5

一、背景

Cocos Creator 3.8.x 的 iOS 原生构建(native/CMake + C++ 引擎)从设计上只适配了 Intel Mac 模拟器(x86_64)和真机(arm64),未完成对 Apple Silicon Mac 模拟器(arm64-simulator)的支持。本文记录了尝试让它在 Apple Silicon 模拟器上运行的全过程。


二、涉及的文件与修改

2.1 :white_check_mark: 编译错误:EventTarget.h template 语法

** 文件 **:/Applications/Cocos/Creator/3.8.x/CocosCreator.app/Contents/Resources/resources/3d/engine/native/cocos/core/event/EventTarget.h

** 问题 **:第 317、322 行 this->template addEventListener(...) 缺少模板参数 <TgtEvent, Fn>,Xcode 16+ 的 Clang 严格检查拒绝通过。

** 解决 **:升级到 Cocos Creator 3.8.7+ 即可(官方已修复)。


2.2 :white_check_mark: 编译错误:half.h 非法特化 std 类型

** 文件 **:/Applications/Cocos/Creator/3.8.x/CocosCreator.app/Contents/Resources/resources/3d/engine/native/external/sources/enoki/half.h

** 问题 **:第 23-25 行对 std::is_floating_pointstd::is_arithmeticstd::is_signed 做了显式模板特化,C++ 标准不允许用户特化这些标准库实体,Xcode 16+ 强制禁止。

** 修改 **:删除第 22-26 行(整个 NAMESPACE_BEGIN(std) ... NAMESPACE_END(std) 块)。


2.3 :white_check_mark: 模拟器设备不可见

** 文件 **:/Applications/Cocos/Creator/3.8.x/CocosCreator.app/Contents/Resources/resources/3d/engine/templates/cmake/apple.cmake

** 问题 **:

  • 原代码第 99 行:EXCLUDED_ARCHS[sdk=iphonesimulator*] = "arm64"

这导致 Apple Silicon Mac 上模拟器架构被排空、Xcode 不显示任何模拟器设备。

  • 原代码第 89 行:ONLY_ACTIVE_ARCH = YES

配合 EXCLUDED_ARCHS 进一步加剧了设备隐藏。

** 修改 **:


# 模拟器仅使用 arm64(Apple Silicon 原生)

set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "arm64")

set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "arm64")

# 关闭"仅活跃架构"限制

XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH NO


2.4 :white_check_mark: 引擎库缺少 SUPPORTED_PLATFORMS

** 文件 1 **:/Applications/Cocos/Creator/3.8.x/CocosCreator.app/Contents/Resources/resources/3d/engine/native/CMakeLists.txt

第 3728-3733 行,给引擎库 cocos_engine 添加:


XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS "iphoneos iphonesimulator"

** 文件 2 **:/Applications/Cocos/Creator/3.8.x/CocosCreator.app/Contents/Resources/resources/3d/engine/native/external/sources/boost-source/container/CMakeLists.txt

第 37-42 行,给 boost_container 添加:


XCODE_ATTRIBUTE_SUPPORTED_PLATFORMS "iphoneos iphonesimulator"

CMake 的 Xcode 生成器不会自动给静态库 target 添加 iphonesimulator 平台支持,需要手动声明。


2.5 :white_check_mark: 引擎库 ONLY_ACTIVE_ARCH 导致架构不一致

** 文件 **:同上 CMakeLists.txt(引擎)第 3729 行

** 问题 **:引擎库 ONLY_ACTIVE_ARCH = YES 导致只构建 arm64,主 App 同时构建 arm64 + x86_64,链接时架构不匹配。

** 修改 **:


XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "NO"


2.6 :white_check_mark: 启用 ios-m1-simulator 预编译库路径

** 文件 **:/Applications/Cocos/Creator/3.8.x/CocosCreator.app/Contents/Resources/resources/3d/engine/native/external/CMakeLists.txt

** 问题 **:第 21 行 ios-m1-simulator 配置被注释掉,引擎使用 ios/ 目录的真机库。

** 修改 **:


include(...ios-m1-simulator/CMakeLists.txt) # 启用

# include(...ios/CMakeLists.txt) # 注释掉


2.7 :white_check_mark: 预编译库 arm64 → simulator 转换

** 工具 **:arm64-to-sim — 将 arm64 真机二进制转换为模拟器兼容格式。

** 成功转换的库 **(12个):

libcrypto.a, libfreetype.a, libjpeg.a, libpng.a, libssl.a, libtbb_static.a, libtbbmalloc_proxy_static.a, libtbbmalloc_static.a, libuv_a.a, libwebp.a, libwebsockets.a

** 转换流程 **:


# 1. 提取 arm64 切片

lipo xxx.a -thin arm64 -output arm64.a

# 2. 解压 .o 文件

ar x arm64.a

# 3. 逐个转换

arm64-to-sim png.o -o png.o

# 4. 重新打包

ar crs lib_sim.a *.o

# 5. 合并 x86_64 + 转换后 arm64

lipo -create x86_64.a arm64_sim.a -output final.a

转换后的库放入:


/Applications/.../engine/native/external/ios-m1-simulator/libs/


2.8 :x: V8 引擎库转换失败(致命阻塞点)

** 文件 **:libv8_monolith.a (67MB)

** 现象 **:arm64-to-sim 转换后,链接时出现数百个 V8 内部符号未定义。

** 原因 **:V8 库体量庞大、内部 .o 文件交叉引用极其复杂,arm64-to-sim 逐个文件转换的模式无法保持内部依赖完整性。

** 其他同样无法处理的库 **:libv8_monolith.aglslang/*.a(10个)、spirv-cross/*.a(3个)


三、最终结论

| 层级 | 问题数 | 状态 |

|------|--------|------|

| C++ 编译兼容 | 2 | :white_check_mark: 全部解决 |

| 模拟器架构/平台配置 | 4 | :white_check_mark: 全部解决 |

| 普通预编译库(12个) | 1 | :white_check_mark: arm64-to-sim 成功 |

| V8 等复杂库 | 1 | :x: 无法转换,阻塞 |

Cocos Creator 3.8.x 的 iOS 原生构建链路** 目前不支持 Apple Silicon 模拟器 **。引擎代码中预留了 ios-m1-simulator 配置路径,说明官方有计划支持,但未完成。

试试 ios模拟器 Rosetta 模式

https://zhuanlan.zhihu.com/p/638953880