1function(SELF_GENERATED) 2 function(FIND_BUNDLE _name _out_bundle _out_parent_dir) 3 set(BUNDLE_DIRS "${CONFIG}-iphoneos;${CONFIG}-iphonesimulator;${CONFIG};UninstalledProducts;UninstalledProducts/iphoneos;UninstalledProducts/iphonesimulator") 4 5 foreach(dir ${BUNDLE_DIRS}) 6 set(tmpDir @PROJECT_BINARY_DIR@/src/${dir}) 7 set(tmpBundleDir ${tmpDir}/${_name}) 8 if(EXISTS "${tmpBundleDir}") 9 set(${_out_bundle} "${tmpBundleDir}" PARENT_SCOPE) 10 set(${_out_parent_dir} "${tmpDir}" PARENT_SCOPE) 11 break() 12 endif() 13 endforeach() 14 endfunction() 15 16 if(INTEGRATED_SDK) 17 set(Bundle @PROJECT_NAME@.framework) 18 else() 19 set(Bundle @PROJECT_NAME@.app) 20 endif() 21 22 FIND_BUNDLE(${Bundle} BundleDir ParentDir) 23 24 if(BundleDir) 25 message(STATUS "Use bundle: ${BundleDir}") 26 else() 27 message(FATAL_ERROR "Bundle directory does not exist") 28 endif() 29 30 if(INTEGRATED_SDK) 31 configure_file("@PROJECT_SOURCE_DIR@/resources/packaging/ios/module.modulemap" "${BundleDir}/Modules/module.modulemap" COPYONLY) 32 execute_process(COMMAND ${CMAKE_COMMAND} -E tar cf "@PROJECT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.framework.zip" --format=zip ${Bundle} WORKING_DIRECTORY ${ParentDir}) 33 else() 34 file(GLOB_RECURSE FILES RELATIVE "${CMAKE_BINARY_DIR}" *.dylib) 35 foreach(f ${FILES}) 36 get_filename_component(filename_without_dir ${f} NAME) 37 get_filename_component(filename_stripped ${filename_without_dir} NAME_WE) 38 message(STATUS "Change @rpath of ${filename_without_dir}") 39 execute_process(COMMAND install_name_tool -id @rpath/${filename_stripped} ${f}) 40 endforeach() 41 42 execute_process(COMMAND ${CMAKE_COMMAND} -P ${CMAKE_BINARY_DIR}/SignFiles.cmake WORKING_DIRECTORY ${BundleDir} RESULT_VARIABLE _result) 43 if(NOT ${_result} EQUAL 0) 44 message(FATAL_ERROR "Signing failed") 45 endif() 46 47 execute_process(COMMAND ${CMAKE_COMMAND} -E copy_directory ${BundleDir} Payload/${Bundle}) 48 execute_process(COMMAND ${CMAKE_COMMAND} -E tar cf "@PROJECT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.ipa" --format=zip Payload) 49 if(CMAKE_VERSION VERSION_LESS "3.17") 50 execute_process(COMMAND ${CMAKE_COMMAND} -E remove_directory Payload) 51 else() 52 execute_process(COMMAND ${CMAKE_COMMAND} -E rm -r Payload) 53 endif() 54 endif() 55 56 FIND_BUNDLE(${Bundle}.dSYM dSYM ParentDir) 57 if(dSYM) 58 message(STATUS "Use dSYM: ${dSYM}") 59 execute_process(COMMAND ${CMAKE_COMMAND} -E tar cf "@PROJECT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.dSYM.zip" --format=zip ${Bundle}.dSYM WORKING_DIRECTORY ${ParentDir}) 60 endif() 61 62 if(ParentDir) 63 file(GLOB SymbolMap "${ParentDir}/*.bcsymbolmap") 64 if(SymbolMap) 65 message(STATUS "Use bcsymbolmap: ${SymbolMap}") 66 execute_process(COMMAND ${CMAKE_COMMAND} -E copy ${SymbolMap} @PROJECT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.bcsymbolmap) 67 endif() 68 endif() 69endfunction() 70 71function(XCODE_GENERATED) 72 execute_process(COMMAND ${CMAKE_COMMAND} -E tar cf "@PROJECT_BINARY_DIR@/@CPACK_PACKAGE_FILE_NAME@.xcarchive.zip" --format=zip @PROJECT_NAME@.xcarchive) 73 if(INTEGRATED_SDK) 74 message(FATAL_ERROR "Not supported") 75 else() 76 execute_process(COMMAND ${CMAKE_COMMAND} -E rename @PROJECT_NAME@.ipa @CPACK_PACKAGE_FILE_NAME@.ipa) 77 endif() 78endfunction() 79 80if(EXISTS "@CMAKE_BINARY_DIR@/@PROJECT_NAME@.xcarchive") 81 XCODE_GENERATED() 82else() 83 SELF_GENERATED() 84endif() 85