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