issuimo/UnityResolve.hpp

Add iOS Mode Support to UnityResolve.hpp

TheRouletteBoi opened this issue · 0 comments

I added conditional macros support for iOS. It defines a new macro IOS_MODE based on the detection of TARGET_OS_IOS, ensuring that the code is properly compiled when targeting iOS platforms.

If you are on iOS just use my patch until it gets merged.

ios_support.patch

diff --git a/UnityResolve.hpp b/UnityResolveModified.hpp
index 95d3102..adc9227 100644
--- a/UnityResolve.hpp
+++ b/UnityResolveModified.hpp
@@ -15,6 +15,12 @@
 #define ANDROID_MODE 0
 #endif
 
+#if defined(TARGET_OS_IOS)
+#define IOS_MODE 1
+#else
+#define IOS_MODE 0
+#endif
+
 #if defined(__linux__) && !defined(__ANDROID__)
 #define LINUX_MODE 1
 #else
@@ -26,16 +32,21 @@
 // #define WINDOWS_MODE 0
 // #define ANDROID_MODE 1 // 设置运行环境
 // #define LINUX_MODE 0
+// #define IOS_MODE 0
 
 // ============================== 导入对应环境依赖 ==============================
 
-#if WINDOWS_MODE || LINUX_MODE
+#if WINDOWS_MODE || LINUX_MODE || IOS_MODE
 #include <format>
 #include <numbers>
 #include <ranges>
 #include <regex>
 #endif
 
+#if IOS_MODE
+#include <algorithm>
+#endif
+
 #include <codecvt>
 #include <fstream>
 #include <iostream>
@@ -60,7 +71,7 @@
 #elif _WIN32
 #define UNITY_CALLING_CONVENTION __cdecl
 #endif
-#elif ANDROID_MODE || LINUX_MODE
+#elif ANDROID_MODE || LINUX_MODE || IOS_MODE
 #include <locale>
 #include <dlfcn.h>
 #define UNITY_CALLING_CONVENTION
@@ -385,7 +396,7 @@ public:
 		}
 	}
 
-#if WINDOWS_MODE || LINUX_MODE /*__cplusplus >= 202002L*/
+#if WINDOWS_MODE || LINUX_MODE || IOS_MODE /*__cplusplus >= 202002L*/
 	static auto DumpToFile(const std::string path) -> void {
 		std::ofstream io(path + "dump.cs", std::fstream::out);
 		if (!io) return;
@@ -591,7 +602,7 @@ public:
 	static auto Invoke(const std::string& funcName, Args... args) -> Return {
 #if WINDOWS_MODE
 		if (!address_.contains(funcName) || !address_[funcName]) address_[funcName] = static_cast<void*>(GetProcAddress(static_cast<HMODULE>(hmodule_), funcName.c_str()));
-#elif  ANDROID_MODE || LINUX_MODE
+#elif  ANDROID_MODE || LINUX_MODE || IOS_MODE
 		if (address_.find(funcName) == address_.end() || !address_[funcName]) {
 			address_[funcName] = dlsym(hmodule_, funcName.c_str());
 		}
@@ -3025,7 +3036,7 @@ public:
 		static auto Invoke(void* address, Args... args) -> Return {
 #if WINDOWS_MODE
 			if (address != nullptr) return reinterpret_cast<Return(*)(Args...)>(address)(args...);
-#elif LINUX_MODE || ANDROID_MODE
+#elif LINUX_MODE || ANDROID_MODE || IOS_MODE
 			if (address != nullptr) return ((Return(*)(Args...))(address))(args...);
 #endif
 			return Return();