使用CocosCreator 3.8.7版本
问题一
IOS构建后在 build phases 选项上生成了大量的 Copy Files 导致我打开这个选项卡顿
###期望修改成2.x版本的格式,打开不会卡顿
使用CocosCreator 3.8.7版本
###期望修改成2.x版本的格式,打开不会卡顿
感谢回复。这是正确的方案,两个问题都给我解决了
我提供另外一个方案,适合大家用命令行打包,每次生成新xcode工程的。
我是用cmake来接sdk的。
假如这个sdk叫SomeSDK,资源是SomeSDKResrouces.bundle,库是SomeSDK.framework。将这些内容放在native/engine/ios/sdk下。
在工程的native/engine/ios下,修改CMakeLists.txt / Pre-service.cmake / Post-service.cmake
CMakeLists 里面加入SDK需要的资源,以及自己的代码。
list(APPEND CC_UI_RESOURCES
${CC_PROJECT_DIR}/sdk/SomeSDKResrouces.bundle
)
list(APPEND CC_PROJ_SOURCES
${CC_PROJECT_DIR}/sdk/SDKProxy.mm
${CC_PROJECT_DIR}/sdk/SDKProxy.h
)
Pre-service.cmake 加入一个辅助函数,给xcode编译链接增加属性。
function(cocos_append_string_property target property value)
get_property(pre_value TARGET ${target} PROPERTY ${property})
list(APPEND pre_value " ${value}")
set_property(TARGET ${target} PROPERTY ${property} "${pre_value}")
endfunction()
Post-service.cmake 接入实际的sdk 框架
cocos_append_string_property(${CC_TARGET_NAME} XCODE_ATTRIBUTE_OTHER_LDFLAGS "-ObjC")
# Supported for SomeSDK
cocos_append_string_property(${CC_TARGET_NAME} XCODE_ATTRIBUTE_FRAMEWORK_SEARCH_PATHS ${CMAKE_CURRENT_LIST_DIR}/sdk)
set_target_properties(${CC_TARGET_NAME} PROPERTIES
XCODE_EMBED_FRAMEWORKS "${CMAKE_CURRENT_LIST_DIR}/sdk/SomeSDK.framework"
XCODE_EMBED_FRAMEWORKS_CODE_SIGN_ON_COPY "YES" # frameworks must be signed by the same developer as the binary
XCODE_EMBED_FRAMEWORKS_REMOVE_HEADERS_ON_COPY "YES" # not strictly necessary, but that's cleaner
XCODE_ATTRIBUTE_LD_RUNPATH_SEARCH_PATHS "@executable_path/Frameworks/"
)
target_link_libraries(${CC_TARGET_NAME} "-framework SomeSDK")
这样每次打出来的xcode 工程就自动接入了sdk了。
关键在于 XCODE_EMBED_FRAMEWORKS 这一系列的属性。
也是提供一种另外的方法吧。
你这个写法比较好,这样每次我新加的脚本 都会被自动加入
我测试了一下加了一个目录src里面有文件src/config.json、src/test.mm、src/test.h。
在CMakeLists.txt的末尾追加
list(APPEND CC_UI_RESOURCES
{CC_PROJECT_DIR}/src/config.json
)
list(APPEND CC_PROJ_SOURCES
{CC_PROJECT_DIR}/src/test.mm
${CC_PROJECT_DIR}/src/test.h
)
重新构建后,直接打不开项目。我只是加了几个文件
大佬受教 
你一个个加吧,先加代码到 CC_PROJ_SOURCES 试试看。
目录是在native\engine\ios\src上吗?
是native\engine\ios\src这个目录
我贴一下完整的,你看看是不是有区别。
CMakeLists.txt
cmake_minimum_required(VERSION 3.8)
set(CMAKE_SYSTEM_NAME iOS)
set(APP_NAME "main" CACHE STRING "Project Name")
project(${APP_NAME} CXX)
set(CC_PROJECT_DIR ${CMAKE_CURRENT_LIST_DIR})
set(CC_UI_RESOURCES)
set(CC_PROJ_SOURCES)
set(CC_ASSET_FILES)
set(CC_COMMON_SOURCES)
set(CC_ALL_SOURCES)
include(${CC_PROJECT_DIR}/../common/CMakeLists.txt)
set(EXECUTABLE_NAME ${APP_NAME}-mobile)
add_compile_definitions(_LIBCPP_ENABLE_CXX17_REMOVED_UNARY_BINARY_FUNCTION)
list(APPEND CC_UI_RESOURCES
${CC_PROJECT_DIR}/sdk/SomeSDKResources.bundle
)
list(APPEND CC_PROJ_SOURCES
${CC_PROJECT_DIR}/sdk/SDKProxy.mm
${CC_PROJECT_DIR}/sdk/SDKProxy.h
)
cc_ios_before_target(${EXECUTABLE_NAME})
add_executable(${EXECUTABLE_NAME} ${CC_ALL_SOURCES})
cc_ios_after_target(${EXECUTABLE_NAME})
我选择将 cocos 相关的代码放在一个单独的项目中,最后输出一个.a 文件和一些头文件给其他项目使用,在这个项目中封装所有的 cocos 相关功能和接口。
实在需要和 cocos 相关功能进行交互的才放在这个里面,否则就在主项目里面。
这个项目是 cocos creator 构建出来的那个工程修改而来的,它直接引用引擎源码,基于命令行工具cmake 等,不维护xcode工程,之后再进行更新的时候就不再使用 cocos creator 构建了,直接来这个项目修改。升级引擎或者合并pr基本也只需要更新引用的引擎源码的提交。
然后就不需要关心被覆盖的问题了
招个专业的iOS开发,帮你把框架拆分好
用你的方法解决了,不能将list(APPEND CC_PROJ_SOURCES 加到CMakeLists.txt的末尾。这有顺序问题