Add iOS Mode Support to UnityResolve.hpp
TheRouletteBoi opened this issue · 0 comments
TheRouletteBoi commented
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.
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();