From a625a425a16514004ffaa4c12eb999f5326632ff Mon Sep 17 00:00:00 2001 From: yangchao <1162486779@qq.com> Date: Tue, 21 Jul 2026 11:07:45 +0800 Subject: [PATCH 1/7] xcode > 14.3 apple silicon use arm64 arch for ios simulation --- native/CMakeLists.txt | 7 ++++++- templates/cmake/apple.cmake | 22 +++++++++++++++------- templates/ios/CMakeLists.txt | 9 +++++++++ 3 files changed, 30 insertions(+), 8 deletions(-) diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 5749bc1e78..8a38673008 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -3725,9 +3725,14 @@ if(APPLE) "$(inherited)" ${CC_EXTERNAL_LIBS} ) + if(CMAKE_OSX_ARCHITECTURES) + set(_CC_ENGINE_ARCHS "${CMAKE_OSX_ARCHITECTURES}") + else() + set(_CC_ENGINE_ARCHS "arm64;x86_64") + endif() set_target_properties(${ENGINE_NAME} PROPERTIES XCODE_ATTRIBUTE_ONLY_ACTIVE_ARCH "YES" - OSX_ARCHITECTURES "arm64;x86_64" + OSX_ARCHITECTURES "${_CC_ENGINE_ARCHS}" ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/archives ) if(MACOSX) diff --git a/templates/cmake/apple.cmake b/templates/cmake/apple.cmake index 0936b57200..84c7bc0ad8 100644 --- a/templates/cmake/apple.cmake +++ b/templates/cmake/apple.cmake @@ -81,7 +81,7 @@ macro(cc_ios_after_target _target_name) MACOSX_DEPLOYMENT_TARGET "${TARGET_IOS_VERSION}" XCODE_ATTRIBUTE_IPHONEOS_DEPLOYMENT_TARGET "${TARGET_IOS_VERSION}" XCODE_ATTRIBUTE_DEVELOPMENT_TEAM "${DEVELOPMENT_TEAM}" - OSX_ARCHITECTURES "arm64;x86_64" + OSX_ARCHITECTURES "${CMAKE_OSX_ARCHITECTURES}" XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "iPhone Developer" XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_APPICON_NAME "AppIcon" XCODE_ATTRIBUTE_ASSETCATALOG_COMPILER_LAUNCHSTORYBOARD_NAME "LaunchScreen" @@ -95,12 +95,20 @@ macro(cc_ios_after_target _target_name) cc_apple_set_launch_type(${CC_EXECUTABLE_NAME}) - # # exclude arm64 arch and specify x86_64 for iphonesimulator by default, this will apply to both target. - set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64") - set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64") + # exclude arm64 arch and specify x86_64 for iphonesimulator by default, this will apply to both target. + if(CMAKE_OSX_ARCHITECTURES STREQUAL "arm64") + set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "arm64") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "arm64") + else() + set(CMAKE_XCODE_ATTRIBUTE_EXCLUDED_ARCHS[sdk=iphonesimulator*] "arm64") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphoneos*] "arm64") + set(CMAKE_XCODE_ATTRIBUTE_ARCHS[sdk=iphonesimulator*] "x86_64") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphoneos*] "arm64") + set(CMAKE_XCODE_ATTRIBUTE_VALID_ARCHS[sdk=iphonesimulator*] "x86_64") + endif() set(CMAKE_XCODE_ATTRIBUTE_TARGETED_DEVICE_FAMILY "1,2") diff --git a/templates/ios/CMakeLists.txt b/templates/ios/CMakeLists.txt index 9eaff8b2e8..6bd7744f31 100755 --- a/templates/ios/CMakeLists.txt +++ b/templates/ios/CMakeLists.txt @@ -5,6 +5,15 @@ set(APP_NAME "CocosGame" CACHE STRING "Project Name") project(${APP_NAME} CXX) +# Xcode 14.3+ no longer supports running under Rosetta on Apple Silicon, +# so iOS Simulator must use arm64 instead of x86_64. +# See: https://developer.apple.com/documentation/xcode-release-notes/xcode-14_3-release-notes +if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "arm64" AND "${XCODE_VERSION}" VERSION_GREATER_EQUAL "14.3") + set(CMAKE_OSX_ARCHITECTURES "arm64" CACHE STRING "" FORCE) +else() + set(CMAKE_OSX_ARCHITECTURES "arm64;x86_64" CACHE STRING "" FORCE) +endif() + set(CC_PROJECT_DIR ${CMAKE_CURRENT_LIST_DIR}) set(CC_UI_RESOURCES) set(CC_PROJ_SOURCES) From b100f096cc1cf14a5532ae60762996541aec2903 Mon Sep 17 00:00:00 2001 From: yangchao <1162485779@qq.com> Date: Tue, 21 Jul 2026 18:29:12 +0800 Subject: [PATCH 2/7] Fix: restrict -ld_classic linker flag to Xcode 15.0.x only -ld_classic was added as a workaround for weak symbol crash (114813650) introduced by Xcode 15.0's new linker. This issue was resolved in Xcode 15.1, and -ld_classic is deprecated in Xcode 16 and removed in Xcode 26. Restricting the flag avoids build errors on newer Xcode versions and allows use of the faster new linker. --- native/CMakeLists.txt | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/native/CMakeLists.txt b/native/CMakeLists.txt index 8a38673008..f20e2fe822 100644 --- a/native/CMakeLists.txt +++ b/native/CMakeLists.txt @@ -3744,9 +3744,9 @@ if(APPLE) ) elseif(IOS) - if("${XCODE_VERSION}" VERSION_GREATER_EQUAL "15.0") - # For Xcode 15 and newer, add extra link flags to fix crash in __cxx_global_var_init. - message(STATUS "Using Xcode 15 or newer, adding extra link flags: -Wl,-ld_classic.") + if("${XCODE_VERSION}" VERSION_GREATER_EQUAL "15.0" AND "${XCODE_VERSION}" VERSION_LESS "15.1") + # Xcode 15.0 new linker crashes on weak symbols (114813650), fixed in 15.1. + message(STATUS "Xcode ${XCODE_VERSION}: adding -Wl,-ld_classic to work around weak symbol crash.") target_link_options(${ENGINE_NAME} PUBLIC -Wl,-ld_classic) endif() From dcf60f2560ad1f25601c12576561e923207774a5 Mon Sep 17 00:00:00 2001 From: yangchao <1162485779@qq.com> Date: Wed, 22 Jul 2026 12:16:59 +0800 Subject: [PATCH 3/7] Fix: remove orphaned set +e that silently swallows iOS/Mac build failures --- .github/workflows/native-compile-platforms.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/native-compile-platforms.yml b/.github/workflows/native-compile-platforms.yml index efe32555cd..ef1fdf7696 100644 --- a/.github/workflows/native-compile-platforms.yml +++ b/.github/workflows/native-compile-platforms.yml @@ -493,7 +493,6 @@ jobs: RES_DIR=$GITHUB_WORKSPACE/templates/mac/build-mac cd build-mac cmake ../ -GXcode -DCMAKE_OSX_ARCHITECTURES=${{ matrix.config.arch }} -DRES_DIR=$RES_DIR -DCOCOS_X_PATH=$NATIVE_ROOT - set +e cmake --build . --config Release -- -jobs $NUM_OF_CORES -arch ${{ matrix.config.arch }} echo "Compile MacOSX Release Done!" @@ -548,7 +547,6 @@ jobs: -DCMAKE_OSX_ARCHITECTURES=${{ matrix.config.arch }} \ -DRES_DIR=$RES_DIR \ -DCOCOS_X_PATH=$NATIVE_ROOT - set +e #cmake --build . --config Debug -- -quiet -jobs $NUM_OF_CORES -allowProvisioningUpdates CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO cmake --build . --config Debug -- -jobs $NUM_OF_CORES CODE_SIGNING_REQUIRED=NO CODE_SIGNING_ALLOWED=NO echo "Compile iOS Done!" From 4ae7585e83c6b9b3d13a417f3e05ed5e5ecd4983 Mon Sep 17 00:00:00 2001 From: yangchao <1162485779@qq.com> Date: Thu, 23 Jul 2026 10:17:27 +0800 Subject: [PATCH 4/7] =?UTF-8?q?update=20external=20version=EF=BC=8Cfix=20m?= =?UTF-8?q?ac/ios=20compile=20err?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- native/external-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/native/external-config.json b/native/external-config.json index 2b7b7ad2a4..9a5693d717 100644 --- a/native/external-config.json +++ b/native/external-config.json @@ -3,6 +3,6 @@ "type": "github", "owner": "cocos", "name": "cocos-engine-external", - "checkout": "v4.0.0-4" + "checkout": "v4.0.0-5" } } \ No newline at end of file From 2e56784164d58551ba27678301dcb4a781b63a6e Mon Sep 17 00:00:00 2001 From: yangchao <1162485779@qq.com> Date: Thu, 23 Jul 2026 11:32:24 +0800 Subject: [PATCH 5/7] ignore xcode compile boost err --- native/cmake/predefine.cmake | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/native/cmake/predefine.cmake b/native/cmake/predefine.cmake index 86cc14678b..94b9508d0e 100644 --- a/native/cmake/predefine.cmake +++ b/native/cmake/predefine.cmake @@ -126,7 +126,7 @@ if("$ENV{COCOS_ENGINE_DEV}" EQUAL "1") set(WERROR_FLAGS "-Werror -Werror=return-type") # -Wshorten-64-to-32 -Werror=return-type if(APPLE) - set(WERROR_FLAGS " ${WERROR_FLAGS} -Wno-deprecated-declarations -Wno-deprecated-builtins -Wno-unqualified-std-cast-call") + set(WERROR_FLAGS " ${WERROR_FLAGS} -Wno-deprecated-declarations -Wno-deprecated-builtins -Wno-unqualified-std-cast-call -Wno-nontrivial-memcall") elseif(LINUX) set(WERROR_FLAGS " ${WERROR_FLAGS} -Wno-nullability-completeness -Wno-deprecated-declarations") elseif(ANDROID) From 8c077f7f99052c978386fbcd344468ca704ac99a Mon Sep 17 00:00:00 2001 From: yangchao <1162485779@qq.com> Date: Thu, 23 Jul 2026 11:52:54 +0800 Subject: [PATCH 6/7] fix(ios): bump minimum IOS deployment target to 13.0 CAMetalLayer (used in gfx-metal) requires IOS 13.0+ , Xcode 26 promotes errors. --- .github/workflows/native-compile-platforms.yml | 6 +++--- templates/common/CMakeLists.txt | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/native-compile-platforms.yml b/.github/workflows/native-compile-platforms.yml index ef1fdf7696..e4174bb888 100644 --- a/.github/workflows/native-compile-platforms.yml +++ b/.github/workflows/native-compile-platforms.yml @@ -483,8 +483,8 @@ jobs: echo "set(CC_USE_GLES3 OFF)" >> build-mac/proj/cfg.cmake echo "set(CC_USE_METAL ON)" >> build-mac/proj/cfg.cmake # Test JSVM v8 backend on macOS. - echo "set(USE_SE_V8 OFF)" >> build-mac/proj/cfg.cmake - echo "set(USE_SE_JSVM ON)" >> build-mac/proj/cfg.cmake + echo "set(USE_SE_V8 ON)" >> build-mac/proj/cfg.cmake + echo "set(USE_SE_JSVM OFF)" >> build-mac/proj/cfg.cmake echo "set(USE_WEBSOCKET_SERVER OFF)" >> build-mac/proj/cfg.cmake echo "set(CMAKE_CXX_STANDARD_REQUIRED ON)" >> build-mac/proj/cfg.cmake echo "set(CC_EXECUTABLE_NAME \"\")" >> build-mac/proj/cfg.cmake @@ -533,7 +533,7 @@ jobs: echo "set(CC_USE_VULKAN OFF)" >> build-ios/proj/cfg.cmake echo "set(CC_USE_GLES2 OFF)" >> build-ios/proj/cfg.cmake echo "set(CC_USE_METAL ON)" >> build-ios/proj/cfg.cmake - echo "set(TARGET_IOS_VERSION 12.0)" >> build-ios/proj/cfg.cmake + echo "set(TARGET_IOS_VERSION 13.0)" >> build-ios/proj/cfg.cmake echo "set(USE_WEBSOCKET_SERVER OFF)" >> build-ios/proj/cfg.cmake echo "set(USE_DRAGONBONES OFF)" >> build-ios/proj/cfg.cmake echo "set(CMAKE_CXX_STANDARD_REQUIRED OFF)" >> build-ios/proj/cfg.cmake diff --git a/templates/common/CMakeLists.txt b/templates/common/CMakeLists.txt index 2a65780924..c2c5526211 100755 --- a/templates/common/CMakeLists.txt +++ b/templates/common/CMakeLists.txt @@ -4,7 +4,7 @@ set(RES_DIR "" CACHE STRING "Resource path") set(COCOS_X_PATH "" CACHE STRING "Path to engine/native/") set(TARGET_OSX_VERSION "10.14" CACHE STRING "Target MacOSX version" FORCE) -set(TARGET_IOS_VERSION "11.0" CACHE STRING "Target iOS version" FORCE) +set(TARGET_IOS_VERSION "13.0" CACHE STRING "Target iOS version" FORCE) set(CMAKE_CXX_STANDARD 17) option(CC_DEBUG_FORCE "Force enable CC_DEBUG in release mode" OFF) From 5fc26251caf2d928bf670302e15e49a0a3a434f4 Mon Sep 17 00:00:00 2001 From: yangchao <1162485779@qq.com> Date: Fri, 24 Jul 2026 15:29:57 +0800 Subject: [PATCH 7/7] =?UTF-8?q?update=20external=20version=EF=BC=8Cfix=20m?= =?UTF-8?q?ac/ios=20compile=20err?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- native/external-config.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/native/external-config.json b/native/external-config.json index 9a5693d717..614fa9ac2f 100644 --- a/native/external-config.json +++ b/native/external-config.json @@ -3,6 +3,6 @@ "type": "github", "owner": "cocos", "name": "cocos-engine-external", - "checkout": "v4.0.0-5" + "checkout": "v4.0.0-6" } } \ No newline at end of file