diff --git a/src/MeloNX-Skip/melonx-skip/.gitignore b/src/MeloNX-Skip/melonx-native/.gitignore
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/.gitignore
rename to src/MeloNX-Skip/melonx-native/.gitignore
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/build.gradle.kts b/src/MeloNX-Skip/melonx-native/Android/app/build.gradle.kts
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/app/build.gradle.kts
rename to src/MeloNX-Skip/melonx-native/Android/app/build.gradle.kts
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/proguard-rules.pro b/src/MeloNX-Skip/melonx-native/Android/app/proguard-rules.pro
similarity index 82%
rename from src/MeloNX-Skip/melonx-skip/Android/app/proguard-rules.pro
rename to src/MeloNX-Skip/melonx-native/Android/app/proguard-rules.pro
index ee52833fd..72e9b124d 100644
--- a/src/MeloNX-Skip/melonx-skip/Android/app/proguard-rules.pro
+++ b/src/MeloNX-Skip/melonx-native/Android/app/proguard-rules.pro
@@ -3,4 +3,4 @@
-keep class kotlin.jvm.functions.** {*;}
-keep class com.sun.jna.** { *; }
-keep class * implements com.sun.jna.** { *; }
--keep class melo.nx.** { *; }
+-keep class melonx.module.** { *; }
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/AndroidManifest.xml b/src/MeloNX-Skip/melonx-native/Android/app/src/main/AndroidManifest.xml
similarity index 90%
rename from src/MeloNX-Skip/melonx-skip/Android/app/src/main/AndroidManifest.xml
rename to src/MeloNX-Skip/melonx-native/Android/app/src/main/AndroidManifest.xml
index a9838b590..ed17d5b5c 100644
--- a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/AndroidManifest.xml
+++ b/src/MeloNX-Skip/melonx-native/Android/app/src/main/AndroidManifest.xml
@@ -7,7 +7,6 @@
-
val contentContext = ctx.content()
Box(modifier = ctx.modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
- MeloNXRootView().Compose(context = contentContext)
+ melonxRootView().Compose(context = contentContext)
}
}
}
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-anydpi/ic_launcher.xml b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-anydpi/ic_launcher.xml
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-anydpi/ic_launcher.xml
rename to src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-anydpi/ic_launcher.xml
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 000000000..118b0e50a
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
new file mode 100644
index 000000000..02597e7a5
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..0577d1fa9
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
new file mode 100644
index 000000000..0577d1fa9
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 000000000..8d847421c
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
new file mode 100644
index 000000000..02ce09f53
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..dcd0964ba
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
new file mode 100644
index 000000000..dcd0964ba
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 000000000..e4f01bb87
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
new file mode 100644
index 000000000..3de637ede
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..8c285cd41
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
new file mode 100644
index 000000000..8c285cd41
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 000000000..c553511c3
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
new file mode 100644
index 000000000..3b3f8b035
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..dae6805a4
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
new file mode 100644
index 000000000..dae6805a4
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 000000000..eacd61503
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
new file mode 100644
index 000000000..d806bd48c
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
new file mode 100644
index 000000000..8c69d5c62
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
new file mode 100644
index 000000000..8c69d5c62
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/fastlane/Appfile b/src/MeloNX-Skip/melonx-native/Android/fastlane/Appfile
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/fastlane/Appfile
rename to src/MeloNX-Skip/melonx-native/Android/fastlane/Appfile
diff --git a/src/MeloNX-Skip/melonx-skip/Android/fastlane/Fastfile b/src/MeloNX-Skip/melonx-native/Android/fastlane/Fastfile
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/fastlane/Fastfile
rename to src/MeloNX-Skip/melonx-native/Android/fastlane/Fastfile
diff --git a/src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/full_description.txt b/src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/full_description.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/full_description.txt
rename to src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/full_description.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/short_description.txt b/src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/short_description.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/short_description.txt
rename to src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/short_description.txt
diff --git a/src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/title.txt b/src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/title.txt
new file mode 100644
index 000000000..eed76715b
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Android/fastlane/metadata/android/en-US/title.txt
@@ -0,0 +1 @@
+melonx
diff --git a/src/MeloNX-Skip/melonx-skip/Android/gradle.properties b/src/MeloNX-Skip/melonx-native/Android/gradle.properties
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/gradle.properties
rename to src/MeloNX-Skip/melonx-native/Android/gradle.properties
diff --git a/src/MeloNX-Skip/melonx-skip/Android/gradle/wrapper/gradle-wrapper.properties b/src/MeloNX-Skip/melonx-native/Android/gradle/wrapper/gradle-wrapper.properties
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/gradle/wrapper/gradle-wrapper.properties
rename to src/MeloNX-Skip/melonx-native/Android/gradle/wrapper/gradle-wrapper.properties
diff --git a/src/MeloNX-Skip/melonx-skip/Android/settings.gradle.kts b/src/MeloNX-Skip/melonx-native/Android/settings.gradle.kts
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Android/settings.gradle.kts
rename to src/MeloNX-Skip/melonx-native/Android/settings.gradle.kts
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AccentColor.colorset/Contents.json b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AccentColor.colorset/Contents.json
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AccentColor.colorset/Contents.json
rename to src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AccentColor.colorset/Contents.json
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png
new file mode 100644
index 000000000..c27aff8a2
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png
new file mode 100644
index 000000000..c27aff8a2
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png
new file mode 100644
index 000000000..a0f669359
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png
new file mode 100644
index 000000000..0495ec355
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png
new file mode 100644
index 000000000..0ff8cd5c3
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png
new file mode 100644
index 000000000..27095184b
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png
new file mode 100644
index 000000000..27095184b
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png
new file mode 100644
index 000000000..a9b6494ad
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png
new file mode 100644
index 000000000..0ff8cd5c3
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png
new file mode 100644
index 000000000..b88e18c08
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png
new file mode 100644
index 000000000..b88e18c08
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png
new file mode 100644
index 000000000..fc368e907
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png
new file mode 100644
index 000000000..c27aff8a2
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png
new file mode 100644
index 000000000..87fbe8114
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png
new file mode 100644
index 000000000..fc368e907
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png
new file mode 100644
index 000000000..b21e3d277
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png
new file mode 100644
index 000000000..55a213ace
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png
new file mode 100644
index 000000000..e3ff1cb8a
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png differ
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png
new file mode 100644
index 000000000..7bf0d4a5b
Binary files /dev/null and b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/Contents.json b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/Contents.json
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/Contents.json
rename to src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/AppIcon.appiconset/Contents.json
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/Contents.json b/src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/Contents.json
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/Contents.json
rename to src/MeloNX-Skip/melonx-native/Darwin/Assets.xcassets/Contents.json
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Entitlements.plist b/src/MeloNX-Skip/melonx-native/Darwin/Entitlements.plist
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/Entitlements.plist
rename to src/MeloNX-Skip/melonx-native/Darwin/Entitlements.plist
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Info.plist b/src/MeloNX-Skip/melonx-native/Darwin/Info.plist
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/Info.plist
rename to src/MeloNX-Skip/melonx-native/Darwin/Info.plist
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Sources/Main.swift b/src/MeloNX-Skip/melonx-native/Darwin/Sources/Main.swift
similarity index 96%
rename from src/MeloNX-Skip/melonx-skip/Darwin/Sources/Main.swift
rename to src/MeloNX-Skip/melonx-native/Darwin/Sources/Main.swift
index 583e91cef..95ddf75c3 100644
--- a/src/MeloNX-Skip/melonx-skip/Darwin/Sources/Main.swift
+++ b/src/MeloNX-Skip/melonx-native/Darwin/Sources/Main.swift
@@ -1,5 +1,5 @@
import SwiftUI
-import MeloNX
+import melonx
/// The entry point to the app simply loads the App implementation from SPM module.
@main struct AppMain: App {
@@ -8,7 +8,7 @@ import MeloNX
var body: some Scene {
WindowGroup {
- MeloNXRootView()
+ melonxRootView()
}
.onChange(of: scenePhase) { oldPhase, newPhase in
switch newPhase {
@@ -25,7 +25,7 @@ import MeloNX
}
}
-typealias AppDelegate = MeloNXAppDelegate
+typealias AppDelegate = melonxAppDelegate
#if canImport(UIKit)
typealias AppDelegateAdaptor = UIApplicationDelegateAdaptor
typealias AppMainDelegateBase = UIApplicationDelegate
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/AppStore.xcconfig b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/AppStore.xcconfig
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/AppStore.xcconfig
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/AppStore.xcconfig
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/Appfile b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/Appfile
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/Appfile
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/Appfile
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/Deliverfile b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/Deliverfile
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/Deliverfile
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/Deliverfile
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/Fastfile b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/Fastfile
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/Fastfile
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/Fastfile
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/description.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/description.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/description.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/description.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/keywords.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/keywords.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/keywords.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/keywords.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/privacy_url.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/privacy_url.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/privacy_url.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/privacy_url.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/release_notes.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/release_notes.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/release_notes.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/release_notes.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/software_url.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/software_url.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/software_url.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/software_url.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/subtitle.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/subtitle.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/subtitle.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/subtitle.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/support_url.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/support_url.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/support_url.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/support_url.txt
diff --git a/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/title.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/title.txt
new file mode 100644
index 000000000..eed76715b
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/title.txt
@@ -0,0 +1 @@
+melonx
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/version_whats_new.txt b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/version_whats_new.txt
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/version_whats_new.txt
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/en-US/version_whats_new.txt
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/rating.json b/src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/rating.json
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/rating.json
rename to src/MeloNX-Skip/melonx-native/Darwin/fastlane/metadata/rating.json
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/MeloNX.xcconfig b/src/MeloNX-Skip/melonx-native/Darwin/melonx.xcconfig
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Darwin/MeloNX.xcconfig
rename to src/MeloNX-Skip/melonx-native/Darwin/melonx.xcconfig
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/MeloNX.xcodeproj/project.pbxproj b/src/MeloNX-Skip/melonx-native/Darwin/melonx.xcodeproj/project.pbxproj
similarity index 85%
rename from src/MeloNX-Skip/melonx-skip/Darwin/MeloNX.xcodeproj/project.pbxproj
rename to src/MeloNX-Skip/melonx-native/Darwin/melonx.xcodeproj/project.pbxproj
index ad1ccc781..442e01997 100644
--- a/src/MeloNX-Skip/melonx-skip/Darwin/MeloNX.xcodeproj/project.pbxproj
+++ b/src/MeloNX-Skip/melonx-native/Darwin/melonx.xcodeproj/project.pbxproj
@@ -7,8 +7,8 @@
objects = {
/* Begin PBXBuildFile section */
- 49231BAC2AC5BCEF00F98ADF /* MeloNXApp in Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* MeloNXApp */; };
- 49231BAD2AC5BCEF00F98ADF /* MeloNXApp in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* MeloNXApp */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
+ 49231BAC2AC5BCEF00F98ADF /* melonxApp in Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* melonxApp */; };
+ 49231BAD2AC5BCEF00F98ADF /* melonxApp in Embed Frameworks */ = {isa = PBXBuildFile; productRef = 49231BAB2AC5BCEF00F98ADF /* melonxApp */; settings = {ATTRIBUTES = (CodeSignOnCopy, ); }; };
496BDBEE2B8A7E9C00C09264 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = 496BDBED2B8A7E9C00C09264 /* Localizable.xcstrings */; };
499CD43B2AC5B799001AE8D8 /* Main.swift in Sources */ = {isa = PBXBuildFile; fileRef = 49F90C2B2A52156200F06D93 /* Main.swift */; };
499CD4402AC5B799001AE8D8 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 49F90C2F2A52156300F06D93 /* Assets.xcassets */; };
@@ -21,7 +21,7 @@
dstPath = "";
dstSubfolderSpec = 10;
files = (
- 49231BAD2AC5BCEF00F98ADF /* MeloNXApp in Embed Frameworks */,
+ 49231BAD2AC5BCEF00F98ADF /* melonxApp in Embed Frameworks */,
);
name = "Embed Frameworks";
runOnlyForDeploymentPostprocessing = 0;
@@ -29,12 +29,12 @@
/* End PBXCopyFilesBuildPhase section */
/* Begin PBXFileReference section */
- 493609562A6B7EAE00C401E2 /* MeloNX */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = MeloNX; path = ..; sourceTree = ""; };
- 496BDBEB2B89A47800C09264 /* MeloNX.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = MeloNX.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ 493609562A6B7EAE00C401E2 /* melonx */ = {isa = PBXFileReference; lastKnownFileType = wrapper; name = melonx; path = ..; sourceTree = ""; };
+ 496BDBEB2B89A47800C09264 /* melonx.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = melonx.app; sourceTree = BUILT_PRODUCTS_DIR; };
4900101C2BACEA710000DE33 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = "Info.plist"; sourceTree = ""; };
- 496BDBED2B8A7E9C00C09264 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = Localizable.xcstrings; path = ../Sources/MeloNX/Resources/Localizable.xcstrings; sourceTree = ""; };
+ 496BDBED2B8A7E9C00C09264 /* Localizable.xcstrings */ = {isa = PBXFileReference; lastKnownFileType = text.json.xcstrings; name = Localizable.xcstrings; path = ../Sources/melonx/Resources/Localizable.xcstrings; sourceTree = ""; };
496EB72F2A6AE4DE00C1253A /* Skip.env */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; name = Skip.env; path = ../Skip.env; sourceTree = ""; };
- 496EB72F2A6AE4DE00C1253B /* MeloNX.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = MeloNX.xcconfig; sourceTree = ""; };
+ 496EB72F2A6AE4DE00C1253B /* melonx.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = melonx.xcconfig; sourceTree = ""; };
496EB72F2A6AE4DE00C1253C /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; name = README.md; path = ../README.md; sourceTree = ""; };
499AB9082B0581F4005E8330 /* plugins */ = {isa = PBXFileReference; lastKnownFileType = folder; name = plugins; path = ../../../SourcePackages/plugins; sourceTree = BUILT_PRODUCTS_DIR; };
49F90C2B2A52156200F06D93 /* Main.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Main.swift; path = Sources/Main.swift; sourceTree = SOURCE_ROOT; };
@@ -47,7 +47,7 @@
isa = PBXFrameworksBuildPhase;
buildActionMask = 2147483647;
files = (
- 49231BAC2AC5BCEF00F98ADF /* MeloNXApp in Frameworks */,
+ 49231BAC2AC5BCEF00F98ADF /* melonxApp in Frameworks */,
);
runOnlyForDeploymentPostprocessing = 0;
};
@@ -57,7 +57,7 @@
496BDBEC2B89A47800C09264 /* Products */ = {
isa = PBXGroup;
children = (
- 496BDBEB2B89A47800C09264 /* MeloNX.app */,
+ 496BDBEB2B89A47800C09264 /* melonx.app */,
);
name = Products;
sourceTree = "";
@@ -75,9 +75,9 @@
children = (
496EB72F2A6AE4DE00C1253C /* README.md */,
496EB72F2A6AE4DE00C1253A /* Skip.env */,
- 496EB72F2A6AE4DE00C1253B /* MeloNX.xcconfig */,
+ 496EB72F2A6AE4DE00C1253B /* melonx.xcconfig */,
496BDBED2B8A7E9C00C09264 /* Localizable.xcstrings */,
- 493609562A6B7EAE00C401E2 /* MeloNX */,
+ 493609562A6B7EAE00C401E2 /* melonx */,
49F90C2A2A52156200F06D93 /* App */,
49AB54462B066A7E007B79B2 /* SkipStone */,
496BDBEC2B89A47800C09264 /* Products */,
@@ -98,9 +98,9 @@
/* End PBXGroup section */
/* Begin PBXNativeTarget section */
- 499CD4382AC5B799001AE8D8 /* MeloNX */ = {
+ 499CD4382AC5B799001AE8D8 /* melonx */ = {
isa = PBXNativeTarget;
- buildConfigurationList = 499CD4412AC5B799001AE8D8 /* Build configuration list for PBXNativeTarget "MeloNX" */;
+ buildConfigurationList = 499CD4412AC5B799001AE8D8 /* Build configuration list for PBXNativeTarget "melonx" */;
buildPhases = (
499CD43A2AC5B799001AE8D8 /* Sources */,
499CD43C2AC5B799001AE8D8 /* Frameworks */,
@@ -112,12 +112,12 @@
);
dependencies = (
);
- name = MeloNX;
+ name = melonx;
packageProductDependencies = (
- 49231BAB2AC5BCEF00F98ADF /* MeloNXApp */,
+ 49231BAB2AC5BCEF00F98ADF /* melonxApp */,
);
productName = App;
- productReference = 496BDBEB2B89A47800C09264 /* MeloNX.app */;
+ productReference = 496BDBEB2B89A47800C09264 /* melonx.app */;
productType = "com.apple.product-type.application";
};
/* End PBXNativeTarget section */
@@ -130,7 +130,7 @@
LastSwiftUpdateCheck = 1430;
LastUpgradeCheck = 1540;
};
- buildConfigurationList = 49F90C232A52156200F06D93 /* Build configuration list for PBXProject "MeloNX" */;
+ buildConfigurationList = 49F90C232A52156200F06D93 /* Build configuration list for PBXProject "melonx" */;
compatibilityVersion = "Xcode 14.0";
developmentRegion = en;
hasScannedForEncodings = 0;
@@ -148,7 +148,7 @@
projectDirPath = "";
projectRoot = "";
targets = (
- 499CD4382AC5B799001AE8D8 /* MeloNX */,
+ 499CD4382AC5B799001AE8D8 /* melonx */,
);
};
/* End PBXProject section */
@@ -201,7 +201,7 @@
/* Begin XCBuildConfiguration section */
499CD4422AC5B799001AE8D8 /* Debug */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 496EB72F2A6AE4DE00C1253B /* MeloNX.xcconfig */;
+ baseConfigurationReference = 496EB72F2A6AE4DE00C1253B /* melonx.xcconfig */;
buildSettings = {
ENABLE_PREVIEWS = YES;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
@@ -211,7 +211,7 @@
};
499CD4432AC5B799001AE8D8 /* Release */ = {
isa = XCBuildConfiguration;
- baseConfigurationReference = 496EB72F2A6AE4DE00C1253B /* MeloNX.xcconfig */;
+ baseConfigurationReference = 496EB72F2A6AE4DE00C1253B /* melonx.xcconfig */;
buildSettings = {
ENABLE_PREVIEWS = YES;
LD_RUNPATH_SEARCH_PATHS = "@executable_path/Frameworks";
@@ -258,7 +258,7 @@
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
- 499CD4412AC5B799001AE8D8 /* Build configuration list for PBXNativeTarget "MeloNX" */ = {
+ 499CD4412AC5B799001AE8D8 /* Build configuration list for PBXNativeTarget "melonx" */ = {
isa = XCConfigurationList;
buildConfigurations = (
499CD4422AC5B799001AE8D8 /* Debug */,
@@ -267,7 +267,7 @@
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
- 49F90C232A52156200F06D93 /* Build configuration list for PBXProject "MeloNX" */ = {
+ 49F90C232A52156200F06D93 /* Build configuration list for PBXProject "melonx" */ = {
isa = XCConfigurationList;
buildConfigurations = (
49F90C4B2A52156300F06D93 /* Debug */,
@@ -279,9 +279,9 @@
/* End XCConfigurationList section */
/* Begin XCSwiftPackageProductDependency section */
- 49231BAB2AC5BCEF00F98ADF /* MeloNXApp */ = {
+ 49231BAB2AC5BCEF00F98ADF /* melonxApp */ = {
isa = XCSwiftPackageProductDependency;
- productName = MeloNXApp;
+ productName = melonxApp;
};
/* End XCSwiftPackageProductDependency section */
};
diff --git a/src/MeloNX-Skip/melonx-native/Package.swift b/src/MeloNX-Skip/melonx-native/Package.swift
new file mode 100644
index 000000000..695aa2555
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Package.swift
@@ -0,0 +1,46 @@
+// swift-tools-version: 5.9
+// This is a Skip (https://skip.tools) package,
+// containing a Swift Package Manager project
+// that will use the Skip build plugin to transpile the
+// Swift Package, Sources, and Tests into an
+// Android Gradle Project with Kotlin sources and JUnit tests.
+import PackageDescription
+
+let package = Package(
+ name: "melonx-native",
+ defaultLocalization: "en",
+ platforms: [.iOS(.v17), .macOS(.v14), .tvOS(.v17), .watchOS(.v10), .macCatalyst(.v17)],
+ products: [
+ .library(name: "melonxApp", type: .dynamic, targets: ["melonx"]),
+ .library(name: "MeloNXModel", type: .dynamic, targets: ["MeloNXModel"]),
+ ],
+ dependencies: [
+ .package(url: "https://source.skip.tools/skip.git", from: "1.3.0"),
+ .package(url: "https://source.skip.tools/skip-ui.git", from: "1.0.0"),
+ .package(url: "https://source.skip.tools/skip-fuse.git", "0.0.0"..<"2.0.0"),
+ .package(url: "https://source.skip.tools/skip-model.git", from: "1.0.0"),
+// .package(url: "https://source.skip.tools/skip-unit.git", from: "1.0.0")
+ ],
+ targets: [
+ .target(name: "melonx", dependencies: [
+ "MeloNXModel",
+ .product(name: "SkipUI", package: "skip-ui")
+ ], resources: [.process("Resources")], plugins: [.plugin(name: "skipstone", package: "skip")]),
+ .target(name: "MeloNXModel", dependencies: [
+ "LibRyujinx",
+ .product(name: "SkipFuse", package: "skip-fuse"),
+ .product(name: "SkipModel", package: "skip-model")
+ ], plugins: [.plugin(name: "skipstone", package: "skip")]),
+ .target(name: "LibRyujinx", dependencies: [],
+ sources: ["src"],
+ plugins: []),
+ .testTarget(name: "melonxTests", dependencies: [
+ "melonx",
+ .product(name: "SkipTest", package: "skip")
+ ], resources: [.process("Resources")], plugins: [.plugin(name: "skipstone", package: "skip")]),
+ .testTarget(name: "MeloNXModelTests", dependencies: [
+ "MeloNXModel",
+ .product(name: "SkipTest", package: "skip")
+ ], plugins: [.plugin(name: "skipstone", package: "skip")]),
+ ]
+)
diff --git a/src/MeloNX-Skip/melonx-skip/README.md b/src/MeloNX-Skip/melonx-native/README.md
similarity index 97%
rename from src/MeloNX-Skip/melonx-skip/README.md
rename to src/MeloNX-Skip/melonx-native/README.md
index c7c4ade9a..c2420c9ca 100644
--- a/src/MeloNX-Skip/melonx-skip/README.md
+++ b/src/MeloNX-Skip/melonx-native/README.md
@@ -1,4 +1,4 @@
-# MeloNX
+# melonx
This is a [Skip](https://skip.tools) dual-platform app project.
It builds a native app for both iOS and Android.
@@ -35,7 +35,7 @@ An Android emulator must already be running, which can be launched from
Android Studio's Device Manager.
To run both the Swift and Kotlin apps simultaneously,
-launch the MeloNXApp target from Xcode.
+launch the melonxApp target from Xcode.
A build phases runs the "Launch Android APK" script that
will deploy the transpiled app a running Android emulator or connected device.
Logging output for the iOS app can be viewed in the Xcode console, and in
diff --git a/src/MeloNX-Skip/melonx-skip/Skip.env b/src/MeloNX-Skip/melonx-native/Skip.env
similarity index 84%
rename from src/MeloNX-Skip/melonx-skip/Skip.env
rename to src/MeloNX-Skip/melonx-native/Skip.env
index 3189b198b..8dcaba52c 100644
--- a/src/MeloNX-Skip/melonx-skip/Skip.env
+++ b/src/MeloNX-Skip/melonx-native/Skip.env
@@ -1,11 +1,11 @@
// The configuration file for your Skip App (https://skip.tools).
// Properties specified here are shared between
-// Darwin/MeloNX.xcconfig and Android/settings.gradle.kts
+// Darwin/melonx.xcconfig and Android/settings.gradle.kts
// and will be included in the app's metadata files
// Info.plist and AndroidManifest.xml
// PRODUCT_NAME is the default title of the app, which must match the app's Swift module name
-PRODUCT_NAME = MeloNX
+PRODUCT_NAME = melonx
// PRODUCT_BUNDLE_IDENTIFIER is the unique id for both the iOS and Android app
PRODUCT_BUNDLE_IDENTIFIER = com.xitrix.melonx
@@ -17,4 +17,4 @@ MARKETING_VERSION = 0.0.1
CURRENT_PROJECT_VERSION = 1
// The package name for the Android entry point, referenced by the AndroidManifest.xml
-ANDROID_PACKAGE_NAME = melo.nx
+ANDROID_PACKAGE_NAME = melonx.module
diff --git a/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/CMakeLists.txt1 b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/CMakeLists.txt1
new file mode 100644
index 000000000..e5363fe86
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/CMakeLists.txt1
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.3)
+project(cproject, LANGUAGES C)
+file(GLOB SOURCES src/*.c)
+add_library(ryujinx SHARED ${SOURCES})
+include_directories(ryujinx PUBLIC include)
+
+# include(libs/OpenSSL.cmake)
+# add_dependencies(ryujinx openssl)
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/Skip/skip.yml b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/Skip1/skip.yml
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/Skip/skip.yml
rename to src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/Skip1/skip.yml
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/include/demo.h b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/include/demo.h
similarity index 95%
rename from src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/include/demo.h
rename to src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/include/demo.h
index 937b60f19..f002369b3 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/include/demo.h
+++ b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/include/demo.h
@@ -44,7 +44,7 @@ int main_ryujinx_sdl(int argc, char **argv);
int get_current_fps();
-void initialize_android(char* path);
+void initialize_android(const char* path);
int demo_number();
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/libs/OpenSSL.cmake b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/libs/OpenSSL.cmake
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/libs/OpenSSL.cmake
rename to src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/libs/OpenSSL.cmake
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/src/demo.c b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/src/demo.c
similarity index 71%
rename from src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/src/demo.c
rename to src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/src/demo.c
index a9848f190..38ec04c4b 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/src/demo.c
+++ b/src/MeloNX-Skip/melonx-native/Sources/LibRyujinx/src/demo.c
@@ -11,3 +11,7 @@
int demo_number() {
return 123;
}
+
+#ifdef __APPLE__
+void initialize_android(const char* path) {}
+#endif
diff --git a/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Models/Game.swift b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Models/Game.swift
new file mode 100644
index 000000000..8b526d2dd
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Models/Game.swift
@@ -0,0 +1,94 @@
+//
+// Game.swift
+// melonx-native
+//
+// Created by Даниил Виноградов on 04.03.2025.
+//
+
+//import SwiftUI
+//import UniformTypeIdentifiers
+import Foundation
+import LibRyujinx
+
+public struct Game: Identifiable, Equatable, Hashable {
+ public var id: URL { fileURL }
+
+ public var containerFolder: URL
+// var fileType: UTType
+ public var fileURL: URL
+
+ public var titleName: String
+ public var titleId: String
+ public var developer: String
+ public var version: String
+ public var icon: Data?
+
+
+// public init(title: String, developer: String) {
+// self.titleName = title
+// self.developer = developer
+// }
+
+
+ static func convertGameInfoToGame(gameInfo: GameInfo, url: URL) -> Game {
+ var gameInfo = gameInfo
+ var gameTemp = Game(containerFolder: url.deletingLastPathComponent(), fileURL: url, titleName: "", titleId: "", developer: "", version: "")
+
+ gameTemp.titleName = withUnsafePointer(to: &gameInfo.TitleName) {
+ $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size(ofValue: $0)) {
+ let title = String(cString: $0)
+ logger.info("Title name: \(title)")
+ return title
+ }
+ }
+
+ gameTemp.developer = withUnsafePointer(to: &gameInfo.Developer) {
+ $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size(ofValue: $0)) {
+ String(cString: $0)
+ }
+ }
+
+ gameTemp.titleId = withUnsafePointer(to: &gameInfo.TitleId) {
+ $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size(ofValue: $0)) {
+ String(cString: $0)
+ }
+ }
+
+
+ gameTemp.version = withUnsafePointer(to: &gameInfo.Version) {
+ $0.withMemoryRebound(to: UInt8.self, capacity: MemoryLayout.size(ofValue: $0)) {
+ String(cString: $0)
+ }
+ }
+
+ let imageSize = Int(gameInfo.ImageSize)
+ if imageSize > 0, imageSize <= 1024 * 1024 {
+ let imageData = Data(bytes: gameInfo.ImageData, count: imageSize)
+
+ gameTemp.icon = imageData // UIImage(data: imageData)
+ } else {
+ logger.error("Invalid image size.")
+ }
+ return gameTemp
+ }
+
+// func createImage(from gameInfo: GameInfo) -> UIImage? {
+// // Access the struct
+// let gameInfoValue = gameInfo
+//
+// // Get the image data
+// let imageSize = Int(gameInfoValue.ImageSize)
+// guard imageSize > 0, imageSize <= 1024 * 1024 else {
+// print("Invalid image size.")
+// return nil
+// }
+//
+// // Convert the ImageData byte array to Swift's Data
+// let imageData = Data(bytes: gameInfoValue.ImageData, count: imageSize)
+//
+// // Create a UIImage (or NSImage on macOS)
+// print(imageData)
+//
+// return UIImage(data: imageData)
+// }
+}
diff --git a/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Ryujinx.swift b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Ryujinx.swift
new file mode 100644
index 000000000..331e588ce
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Ryujinx.swift
@@ -0,0 +1,91 @@
+//
+// Ryujinx.swift
+// melonx-native
+//
+// Created by Даниил Виноградов on 04.03.2025.
+//
+
+//import LibRyujinx
+import Foundation
+import Observation
+
+#if os(Android)
+import Android
+import SkipFuse
+#else
+import Darwin
+#endif
+
+@Observable public class Ryujinx {
+ public var games: [Game] = []
+ public var firmwareversion = "0"
+ public static let shared = Ryujinx()
+
+ private init() {}
+
+ private var basePath: URL!
+}
+
+public extension Ryujinx {
+ func initialize(basePath: URL) {
+ self.basePath = basePath
+ RyujinxLib.shared.initialize(basePath: basePath.path())
+ }
+
+ func fetchFirmwareVersion() -> String {
+ firmwareversion = RyujinxLib.shared.installedFirmwareVersion()
+ return firmwareversion
+ }
+
+ func installFirmware(firmwarePath: String) {
+ RyujinxLib.shared.installFirmware(firmwarePath)
+
+ let version = fetchFirmwareVersion()
+ if !version.isEmpty {
+ self.firmwareversion = version
+ }
+ }
+
+ func loadGames(){
+ let fileManager = FileManager.default
+ let romsDirectory = basePath.appendingPathComponent("roms")
+
+ if (!fileManager.fileExists(atPath: romsDirectory.path)) {
+ do {
+ try fileManager.createDirectory(at: romsDirectory, withIntermediateDirectories: true, attributes: nil)
+ } catch {
+ logger.error("Failed to create roms directory: \(error)")
+ }
+ }
+ var games: [Game] = []
+
+ do {
+ let files = try fileManager.contentsOfDirectory(at: romsDirectory, includingPropertiesForKeys: nil)
+
+ for fileURLCandidate in files {
+ if fileURLCandidate.pathExtension == "zip" {
+ continue
+ }
+
+ do {
+ logger.debug("Parsing game path: \(fileURLCandidate)")
+ let handle = try FileHandle(forReadingFrom: fileURLCandidate)
+ guard let gameInfo = RyujinxLib.shared.getGameInfo(handle.fileDescriptor, fileURLCandidate.pathExtension)
+ else { continue }
+
+ let game = Game.convertGameInfoToGame(gameInfo: gameInfo, url: fileURLCandidate)
+
+ games.append(game)
+ } catch {
+ print(error)
+ }
+ }
+
+ return self.games = games
+ } catch {
+ logger.error("Error loading games from roms folder: \(error)")
+ self.games = []
+ }
+
+ }
+}
diff --git a/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/RyujinxLib.swift b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/RyujinxLib.swift
new file mode 100644
index 000000000..ff42b5c35
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/RyujinxLib.swift
@@ -0,0 +1,75 @@
+//
+// RyujinxLib.swift
+// melonx-native
+//
+// Created by Даниил Виноградов on 04.03.2025.
+//
+
+import Foundation
+import LibRyujinx
+
+#if os(Android)
+import Android
+#else
+import Darwin
+#endif
+
+class RyujinxLib {
+ public static let shared = RyujinxLib()
+
+ private init() {
+ handle = dlopen("libRyujinx.Headless.SDL2.so", RTLD_NOW)
+ }
+
+ deinit { dlclose(handle!) }
+
+ private let handle: UnsafeMutableRawPointer?
+}
+
+extension RyujinxLib {
+ func initialize(basePath: String) {
+ guard let pathCString = basePath.cString(using: .utf8)
+ else { return }
+
+ let sym = dlsym(handle, "initialize_android")
+
+ typealias initializeFunc = @convention(c) (UnsafePointer) -> ()
+ let f = unsafeBitCast(sym, to: initializeFunc.self)
+ f(pathCString)
+ }
+
+ func installedFirmwareVersion() -> String {
+ let sym = dlsym(handle, "installed_firmware_version")
+
+ typealias initializeFunc = @convention(c) () -> (UnsafePointer)
+ let f = unsafeBitCast(sym, to: initializeFunc.self)
+ let version = f()
+ return String(cString: version)
+ }
+
+ func installFirmware(_ path: String) {
+ guard let pathCString = path.cString(using: .utf8)
+ else { return }
+
+ let sym = dlsym(handle, "install_firmware")
+
+ typealias initializeFunc = @convention(c) (UnsafePointer) -> ()
+ let f = unsafeBitCast(sym, to: initializeFunc.self)
+ f(pathCString)
+ }
+
+ func getGameInfo(_ fileDescriptor: Int32, _ fileURLCandidate: String) -> GameInfo? {
+ guard let fileURLCandidateCString = fileURLCandidate.cString(using: .utf8)
+ else { return nil }
+
+ let sym = dlsym(handle, "get_game_info")
+
+ typealias initializeFunc = @convention(c) (Int32, UnsafePointer) -> (GameInfo)
+ let f = unsafeBitCast(sym, to: initializeFunc.self)
+ return f(fileDescriptor, fileURLCandidateCString)
+ }
+}
+
+//public struct GameInfo {
+//
+//}
diff --git a/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Skip/skip.yml b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Skip/skip.yml
new file mode 100644
index 000000000..1cac34a4c
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/Skip/skip.yml
@@ -0,0 +1,13 @@
+# Configuration file for https://skip.tools project
+#
+# Kotlin dependencies and Gradle build options for this module can be configured here
+#build:
+# contents:
+# - block: 'dependencies'
+# contents:
+# - 'implementation("androidx.compose.runtime:runtime")'
+
+# this is a natively-compiled module
+skip:
+ mode: 'native'
+ bridging: true
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/ViewModel.swift b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/ViewModel.swift
similarity index 96%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/ViewModel.swift
rename to src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/ViewModel.swift
index a1e780ac2..e7d125d21 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/ViewModel.swift
+++ b/src/MeloNX-Skip/melonx-native/Sources/MeloNXModel/ViewModel.swift
@@ -1,8 +1,8 @@
import Foundation
import Observation
-import OSLog
+import SkipFuse
-fileprivate let logger: Logger = Logger(subsystem: "MeloNX", category: "MeloNX")
+let logger: Logger = Logger(subsystem: "MeloNXModel", category: "MeloNXModel")
/// The Observable ViewModel used by the application.
@Observable public class ViewModel {
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/ContentView.swift b/src/MeloNX-Skip/melonx-native/Sources/melonx/ContentView.swift
similarity index 87%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/ContentView.swift
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/ContentView.swift
index 29a9ad32c..a96a8d980 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/ContentView.swift
+++ b/src/MeloNX-Skip/melonx-native/Sources/melonx/ContentView.swift
@@ -1,5 +1,5 @@
import SwiftUI
-import SkipKit
+import MeloNXModel
enum ContentTab: String, Hashable {
case games, home, settings
@@ -10,10 +10,6 @@ struct ContentView: View {
@State var viewModel = ViewModel()
@State var appearance = ""
- init() {
- initializeSDL()
- }
-
var body: some View {
TabView(selection: $tab) {
NavigationStack {
@@ -33,6 +29,9 @@ struct ContentView: View {
}
.environment(viewModel)
.preferredColorScheme(appearance == "dark" ? .dark : appearance == "light" ? .light : nil)
+ .onAppear {
+ initializeSDL()
+ }
}
// MARK: - Helper Methods
@@ -42,6 +41,8 @@ struct ContentView: View {
// SDL_SetMainReady() // Sets SDL Ready
// SDL_iPhoneSetEventPump(SDL_TRUE) // Set iOS Event Pump to true
// SDL_Init(SdlInitFlags) // Initialises SDL2
- _ = Ryujinx.shared
+ let path = URL.documentsDirectory
+ Ryujinx.shared.initialize(basePath: path)
+ Ryujinx.shared.loadGames()
}
}
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Resources/Localizable.xcstrings b/src/MeloNX-Skip/melonx-native/Sources/melonx/Resources/Localizable.xcstrings
similarity index 99%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Resources/Localizable.xcstrings
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/Resources/Localizable.xcstrings
index 53e41063e..6a2ed625a 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Resources/Localizable.xcstrings
+++ b/src/MeloNX-Skip/melonx-native/Sources/melonx/Resources/Localizable.xcstrings
@@ -57,10 +57,10 @@
}
}
},
- "Firmware Version: %@" : {
+ "Firmware" : {
},
- "Framework" : {
+ "Firmware Version: %@" : {
},
"Games" : {
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Resources/Module.xcassets/Contents.json b/src/MeloNX-Skip/melonx-native/Sources/melonx/Resources/Module.xcassets/Contents.json
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Resources/Module.xcassets/Contents.json
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/Resources/Module.xcassets/Contents.json
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/GamesView.swift b/src/MeloNX-Skip/melonx-native/Sources/melonx/Screens/GamesView.swift
similarity index 80%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/GamesView.swift
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/Screens/GamesView.swift
index ac18eb976..eb5256fe2 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/GamesView.swift
+++ b/src/MeloNX-Skip/melonx-native/Sources/melonx/Screens/GamesView.swift
@@ -5,15 +5,9 @@
// Created by Даниил Виноградов on 02.03.2025.
//
+import MeloNXModel
import SwiftUI
-//struct Game: Identifiable {
-// var id: String { title }
-//
-// var title: String
-// var developer: String
-//}
-
struct GamesView: View {
@State var firmwareversion = "0"
@State var searchQuery: String = ""
@@ -36,7 +30,7 @@ struct GamesView: View {
guard !searchQuery.isEmpty else { return Ryujinx.shared.games }
return Ryujinx.shared.games.filter {
$0.titleName.lowercased() == searchQuery.lowercased() ||
- $0.developer.lowercased() == searchQuery.lowercased()
+ $0.developer.lowercased() == searchQuery.lowercased()
}
}
@@ -61,13 +55,6 @@ struct GamesView: View {
}
}
ToolbarItem(placement: .topBarLeading) {
-// Menu {
-// Button("Option 1") { }
-// Button("Option 2") { }
-// Button("Option 3") { }
-// } label: {
-// Image(systemName: "ellipsis")
-// }
Menu {
Text("Firmware Version: \(firmwareversion)")
.tint(.white)
@@ -84,7 +71,7 @@ struct GamesView: View {
// TODO: - Edit action
}
} label: {
- Label("Framework", systemImage: "chevron.right")
+ Label("Firmware", systemImage: "chevron.right")
}
Button("Show MeloNX Folder") {
// TODO: - Edit action
@@ -107,14 +94,20 @@ struct GameView: View {
var body: some View {
HStack(spacing: 16) {
ZStack {
- RoundedRectangle(cornerRadius: 8)
- .fill(Color.gray)
- .frame(width: 45, height: 45)
-
- Image(systemName: "gamecontroller.fill")
- .font(.system(size: 20))
- .foregroundColor(.gray)
+ if let iconData = game.icon,
+ let icon = UIImage(data: iconData)
+ {
+ Image(uiImage: icon)
+ .resizable()
+ } else {
+ Image(systemName: "gamecontroller.fill")
+ .font(.system(size: 20))
+ .foregroundColor(.gray)
+ .background(Color.gray)
+ }
}
+ .frame(width: 45, height: 45)
+ .clipShape(RoundedRectangle(cornerRadius: 8))
// Game Info
VStack(alignment: .leading, spacing: 2) {
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/SettingsView.swift b/src/MeloNX-Skip/melonx-native/Sources/melonx/Screens/SettingsView.swift
similarity index 98%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/SettingsView.swift
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/Screens/SettingsView.swift
index 0bdb9081f..ede51fae9 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/SettingsView.swift
+++ b/src/MeloNX-Skip/melonx-native/Sources/melonx/Screens/SettingsView.swift
@@ -6,6 +6,7 @@
//
import SwiftUI
+import MeloNXModel
struct SettingsView : View {
@Environment(ViewModel.self) var viewModel: ViewModel
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Skip/skip.yml b/src/MeloNX-Skip/melonx-native/Sources/melonx/Skip/skip.yml
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Skip/skip.yml
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/Skip/skip.yml
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/MeloNXApp.swift b/src/MeloNX-Skip/melonx-native/Sources/melonx/melonxApp.swift
similarity index 87%
rename from src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/MeloNXApp.swift
rename to src/MeloNX-Skip/melonx-native/Sources/melonx/melonxApp.swift
index 9277bc502..9f72dcb20 100644
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Screens/MeloNXApp.swift
+++ b/src/MeloNX-Skip/melonx-native/Sources/melonx/melonxApp.swift
@@ -2,7 +2,7 @@ import Foundation
import OSLog
import SwiftUI
-fileprivate let logger: Logger = Logger(subsystem: "com.xitrix.melonx", category: "MeloNX")
+fileprivate let logger: Logger = Logger(subsystem: "com.xitrix.melonx", category: "melonx")
/// The Android SDK number we are running against, or `nil` if not running on Android
let androidSDK = ProcessInfo.processInfo.environment["android.os.Build.VERSION.SDK_INT"].flatMap({ Int($0) })
@@ -10,8 +10,8 @@ let androidSDK = ProcessInfo.processInfo.environment["android.os.Build.VERSION.S
/// The shared top-level view for the app, loaded from the platform-specific App delegates below.
///
/// The default implementation merely loads the `ContentView` for the app and logs a message.
-public struct MeloNXRootView : View {
- @ObservedObject var appDelegate = MeloNXAppDelegate.shared
+public struct melonxRootView : View {
+ @ObservedObject var appDelegate = melonxAppDelegate.shared
public init() {
}
@@ -29,8 +29,8 @@ public struct MeloNXRootView : View {
///
/// This functions can update a shared observable object to communicate app state changes to interested views.
/// The sender for each of these functions will be either a `UIApplication` (iOS) or `AppCompatActivity` (Android)
-public class MeloNXAppDelegate: ObservableObject {
- public static let shared = MeloNXAppDelegate()
+public class melonxAppDelegate: ObservableObject {
+ public static let shared = melonxAppDelegate()
private init() {
}
diff --git a/src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/MeloNXModelTests.swift b/src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/MeloNXModelTests.swift
new file mode 100644
index 000000000..85b4b167c
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/MeloNXModelTests.swift
@@ -0,0 +1,33 @@
+import XCTest
+import OSLog
+import Foundation
+import SkipBridge
+@testable import MeloNXModel
+
+let logger: Logger = Logger(subsystem: "MeloNXModel", category: "Tests")
+
+@available(macOS 13, *)
+final class MeloNXModelTests: XCTestCase {
+ override func setUp() {
+ #if os(Android)
+ // needed to load the compiled bridge from the transpiled tests
+ loadPeerLibrary(packageName: "melonx-native", moduleName: "MeloNXModel")
+ #endif
+ }
+
+ func testMeloNXModel() throws {
+ logger.log("running testMeloNXModel")
+ XCTAssertEqual(1 + 2, 3, "basic test")
+ }
+
+ func testViewModel() async throws {
+ let vm = ViewModel()
+ vm.items.append(Item(title: "ABC"))
+ XCTAssertFalse(vm.items.isEmpty)
+ XCTAssertEqual("ABC", vm.items.last?.title)
+
+ vm.clear()
+ XCTAssertTrue(vm.items.isEmpty)
+ }
+
+}
diff --git a/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/Skip/skip.yml b/src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/Skip/skip.yml
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/Skip/skip.yml
rename to src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/Skip/skip.yml
diff --git a/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/XCSkipTests.swift b/src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/XCSkipTests.swift
similarity index 100%
rename from src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/XCSkipTests.swift
rename to src/MeloNX-Skip/melonx-native/Tests/MeloNXModelTests/XCSkipTests.swift
diff --git a/src/MeloNX-Skip/melonx-native/Tests/melonxTests/Resources/TestData.json b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/Resources/TestData.json
new file mode 100644
index 000000000..0b62cd886
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/Resources/TestData.json
@@ -0,0 +1,3 @@
+{
+ "testModuleName": "melonx"
+}
\ No newline at end of file
diff --git a/src/MeloNX-Skip/melonx-native/Tests/melonxTests/Skip/skip.yml b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/Skip/skip.yml
new file mode 100644
index 000000000..f7eb02105
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/Skip/skip.yml
@@ -0,0 +1,3 @@
+# Configuration file for https://skip.tools project
+#build:
+# contents:
\ No newline at end of file
diff --git a/src/MeloNX-Skip/melonx-native/Tests/melonxTests/XCSkipTests.swift b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/XCSkipTests.swift
new file mode 100644
index 000000000..b4a626386
--- /dev/null
+++ b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/XCSkipTests.swift
@@ -0,0 +1,28 @@
+import Foundation
+#if os(macOS) // Skip transpiled tests only run on macOS targets
+import SkipTest
+
+/// This test case will run the transpiled tests for the Skip module.
+@available(macOS 13, macCatalyst 16, *)
+final class XCSkipTests: XCTestCase, XCGradleHarness {
+ public func testSkipModule() async throws {
+ // Run the transpiled JUnit tests for the current test module.
+ // These tests will be executed locally using Robolectric.
+ // Connected device or emulator tests can be run by setting the
+ // `ANDROID_SERIAL` environment variable to an `adb devices`
+ // ID in the scheme's Run settings.
+ //
+ // Note that it isn't currently possible to filter the tests to run.
+ try await runGradleTests()
+ }
+}
+#endif
+
+/// True when running in a transpiled Java runtime environment
+let isJava = ProcessInfo.processInfo.environment["java.io.tmpdir"] != nil
+/// True when running within an Android environment (either an emulator or device)
+let isAndroid = isJava && ProcessInfo.processInfo.environment["ANDROID_ROOT"] != nil
+/// True is the transpiled code is currently running in the local Robolectric test environment
+let isRobolectric = isJava && !isAndroid
+/// True if the system's `Int` type is 32-bit.
+let is32BitInteger = Int64(Int.max) == Int64(Int32.max)
diff --git a/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/MeloNXTests.swift b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/melonxTests.swift
similarity index 68%
rename from src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/MeloNXTests.swift
rename to src/MeloNX-Skip/melonx-native/Tests/melonxTests/melonxTests.swift
index 988970835..9cb043e78 100644
--- a/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/MeloNXTests.swift
+++ b/src/MeloNX-Skip/melonx-native/Tests/melonxTests/melonxTests.swift
@@ -1,15 +1,15 @@
import XCTest
import OSLog
import Foundation
-@testable import MeloNX
+@testable import melonx
-let logger: Logger = Logger(subsystem: "MeloNX", category: "Tests")
+let logger: Logger = Logger(subsystem: "melonx", category: "Tests")
@available(macOS 13, *)
-final class MeloNXTests: XCTestCase {
+final class melonxTests: XCTestCase {
- func testMeloNX() throws {
- logger.log("running testMeloNX")
+ func testmelonx() throws {
+ logger.log("running testmelonx")
XCTAssertEqual(1 + 2, 3, "basic test")
}
@@ -17,7 +17,7 @@ final class MeloNXTests: XCTestCase {
// load the TestData.json file from the Resources folder and decode it into a struct
let resourceURL: URL = try XCTUnwrap(Bundle.module.url(forResource: "TestData", withExtension: "json"))
let testData = try JSONDecoder().decode(TestData.self, from: Data(contentsOf: resourceURL))
- XCTAssertEqual("MeloNX", testData.testModuleName)
+ XCTAssertEqual("melonx", testData.testModuleName)
}
}
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/jniLibs/arm64-v8a/libcrypto.so b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/jniLibs/arm64-v8a/libcrypto.so
deleted file mode 100755
index d91a5a937..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/jniLibs/arm64-v8a/libcrypto.so and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/jniLibs/arm64-v8a/libssl.so b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/jniLibs/arm64-v8a/libssl.so
deleted file mode 100755
index d7534576d..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/jniLibs/arm64-v8a/libssl.so and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 739c072ba..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
deleted file mode 100644
index 81c161892..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_background.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
deleted file mode 100644
index 113e3ea46..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
deleted file mode 100644
index 113e3ea46..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 139ad2065..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
deleted file mode 100644
index cb5c6376e..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_background.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
deleted file mode 100644
index 99db60864..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
deleted file mode 100644
index 99db60864..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 08d7f6b3b..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
deleted file mode 100644
index a93a64cb2..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 8371cb8f4..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
deleted file mode 100644
index 8371cb8f4..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 7fb9812cf..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
deleted file mode 100644
index 37d1d7277..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 772fe9ce6..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
deleted file mode 100644
index 772fe9ce6..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 0ee407c43..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
deleted file mode 100644
index 31286ead5..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
deleted file mode 100644
index 7416fc95e..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
deleted file mode 100644
index 7416fc95e..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/title.txt b/src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/title.txt
deleted file mode 100644
index 7427ca2d3..000000000
--- a/src/MeloNX-Skip/melonx-skip/Android/fastlane/metadata/android/en-US/title.txt
+++ /dev/null
@@ -1 +0,0 @@
-MeloNX
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png
deleted file mode 100644
index d9cb095dc..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png
deleted file mode 100644
index d9cb095dc..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@2x~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png
deleted file mode 100644
index 7c88f0586..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20@3x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png
deleted file mode 100644
index c72f356a8..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-20~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png
deleted file mode 100644
index 4695642a7..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png
deleted file mode 100644
index f0ac06f36..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png
deleted file mode 100644
index f0ac06f36..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@2x~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png
deleted file mode 100644
index 3f1c9c30f..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29@3x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png
deleted file mode 100644
index 4695642a7..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-29~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png
deleted file mode 100644
index 952385db6..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png
deleted file mode 100644
index 952385db6..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@2x~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png
deleted file mode 100644
index 829fd1260..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40@3x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png
deleted file mode 100644
index d9cb095dc..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-40~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png
deleted file mode 100644
index 989656e8e..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon-83.5@2x~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png
deleted file mode 100644
index 829fd1260..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png
deleted file mode 100644
index 99e6c8814..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@2x~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png
deleted file mode 100644
index c4649c3a9..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon@3x.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png
deleted file mode 100644
index c314ac82f..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ios-marketing.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png b/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png
deleted file mode 100644
index 44f76a4b1..000000000
Binary files a/src/MeloNX-Skip/melonx-skip/Darwin/Assets.xcassets/AppIcon.appiconset/AppIcon~ipad.png and /dev/null differ
diff --git a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/title.txt b/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/title.txt
deleted file mode 100644
index 7427ca2d3..000000000
--- a/src/MeloNX-Skip/melonx-skip/Darwin/fastlane/metadata/en-US/title.txt
+++ /dev/null
@@ -1 +0,0 @@
-MeloNX
diff --git a/src/MeloNX-Skip/melonx-skip/Package.swift b/src/MeloNX-Skip/melonx-skip/Package.swift
deleted file mode 100644
index 4b36751b3..000000000
--- a/src/MeloNX-Skip/melonx-skip/Package.swift
+++ /dev/null
@@ -1,40 +0,0 @@
-// swift-tools-version: 5.9
-// This is a Skip (https://skip.tools) package,
-// containing a Swift Package Manager project
-// that will use the Skip build plugin to transpile the
-// Swift Package, Sources, and Tests into an
-// Android Gradle Project with Kotlin sources and JUnit tests.
-import PackageDescription
-
-let package = Package(
- name: "melonx-skip",
- defaultLocalization: "en",
- platforms: [.iOS(.v17), .macOS(.v14), .tvOS(.v17), .watchOS(.v10), .macCatalyst(.v17)],
- products: [
- .library(name: "MeloNXApp", type: .dynamic, targets: ["MeloNX"]),
- ],
- dependencies: [
- .package(url: "https://source.skip.tools/skip.git", from: "1.3.0"),
- .package(url: "https://source.skip.tools/skip-unit.git", from: "1.0.0"),
- .package(url: "https://source.skip.tools/skip-ui.git", from: "1.0.0"),
- .package(url: "https://source.skip.tools/skip-foundation.git", from: "1.0.0"),
- .package(url: "https://source.skip.tools/skip-ffi.git", from: "1.0.0"),
- .package(url: "https://source.skip.tools/skip-kit.git", from: "0.3.1")
- ],
- targets: [
- .target(name: "MeloNX", dependencies: [
- "LibCLibrary",
- .product(name: "SkipUI", package: "skip-ui"),
- .product(name: "SkipFoundation", package: "skip-foundation"),
- .product(name: "SkipFFI", package: "skip-ffi"),
- .product(name: "SkipKit", package: "skip-kit")
- ], resources: [.process("Resources")], plugins: [.plugin(name: "skipstone", package: "skip")]),
- .testTarget(name: "MeloNXTests", dependencies: [
- "MeloNX",
- .product(name: "SkipTest", package: "skip")
- ], resources: [.process("Resources")], plugins: [.plugin(name: "skipstone", package: "skip")]),
- .target(name: "LibCLibrary", dependencies: [
- .product(name: "SkipUnit", package: "skip-unit")
- ], sources: ["src"], plugins: [.plugin(name: "skipstone", package: "skip")])
- ]
-)
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/CMakeLists.txt b/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/CMakeLists.txt
deleted file mode 100644
index 68222c43c..000000000
--- a/src/MeloNX-Skip/melonx-skip/Sources/LibCLibrary/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-cmake_minimum_required(VERSION 3.3)
-project(cproject, LANGUAGES C)
-file(GLOB SOURCES src/*.c)
-add_library(clibrary SHARED ${SOURCES})
-include_directories(clibrary PUBLIC include)
-set_property(TARGET clibrary PROPERTY IMPORTED_LOCATION "/projectspath/LinkTest/TestLib/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libtest-lib.so")
-
-# include(libs/OpenSSL.cmake)
-# add_dependencies(clibrary openssl)
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Models/Game.swift b/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Models/Game.swift
deleted file mode 100644
index 9066f27a4..000000000
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Models/Game.swift
+++ /dev/null
@@ -1,69 +0,0 @@
-//
-// Game.swift
-// melonx-skip
-//
-// Created by Даниил Виноградов on 04.03.2025.
-//
-
-//import LibCLibrary
-import Foundation
-import UIKit
-
-public struct Game: Identifiable, Equatable, Hashable {
- public var id: URL { fileURL }
-
- var containerFolder: URL
-// var fileType: UTType
- var fileURL: URL
-
- var titleName: String
- var titleId: String
- var developer: String
- var version: String
- var icon: UIImage?
-
-
- static func convertGameInfoToGame(gameInfo: GameInfo, url: URL) -> Game {
- var gameInfo = gameInfo
- var gameTemp = Game(containerFolder: url.deletingLastPathComponent(), fileURL: url, titleName: "", titleId: "", developer: "", version: "")
-
- gameTemp.titleName = gameInfo.TitleName
-
- gameTemp.developer = gameInfo.Developer
-
- gameTemp.titleId = gameInfo.TitleId
-
-
- gameTemp.version = gameInfo.Version
-
- let imageSize = Int(gameInfo.ImageSize)
- if imageSize > 0, imageSize <= 1024 * 1024 {
-// let imageData = Data(bytes: gameInfo.ImageData, count: imageSize)
-//
-// gameTemp.icon = UIImage(data: imageData)
- } else {
- print("Invalid image size.")
- }
- return gameTemp
- }
-
-// func createImage(from gameInfo: GameInfo) -> UIImage? {
-// // Access the struct
-// let gameInfoValue = gameInfo
-//
-// // Get the image data
-// let imageSize = Int(gameInfoValue.ImageSize)
-// guard imageSize > 0, imageSize <= 1024 * 1024 else {
-// print("Invalid image size.")
-// return nil
-// }
-//
-// // Convert the ImageData byte array to Swift's Data
-// let imageData = Data(bytes: gameInfoValue.ImageData, count: imageSize)
-//
-// // Create a UIImage (or NSImage on macOS)
-// print(imageData)
-//
-// return UIImage(data: imageData)
-// }
-}
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Ryujinx.swift b/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Ryujinx.swift
deleted file mode 100644
index 9924f8b70..000000000
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/Ryujinx.swift
+++ /dev/null
@@ -1,95 +0,0 @@
-//
-// Ryujinx.swift
-// melonx-skip
-//
-// Created by Даниил Виноградов on 02.03.2025.
-//
-
-import Foundation
-import Combine
-
-@Observable class Ryujinx {
- var firmwareversion = "0"
- var testMessage: String = ""
- var games: [Game] = []
-
- static let shared = Ryujinx()
-
- private init() {
- testMessage = RyujinxLib.instance.test_func()
- games = loadGames()
- initialize()
- }
-}
-
-extension Ryujinx {
- func initialize() {
- let path = URL.documentsDirectory.path()
- RyujinxLib.instance.initialize_android(path)
- }
-
- func fetchFirmwareVersion() -> String {
- do {
- firmwareversion = RyujinxLib.instance.installed_firmware_version()
- } catch {
- firmwareversion = "0"
- }
- return firmwareversion
- }
-
- func installFirmware(firmwarePath: String) {
- RyujinxLib.instance.install_firmware(firmwarePath)
-
- let version = fetchFirmwareVersion()
- if !version.isEmpty {
- self.firmwareversion = version
- }
- }
-
- func loadGames() -> [Game] {
- let fileManager = FileManager.default
- let documentsDirectory = URL.documentsDirectory
-
- let romsDirectory = documentsDirectory.appendingPathComponent("roms")
-
- if (!fileManager.fileExists(atPath: romsDirectory.path)) {
- do {
- try fileManager.createDirectory(at: romsDirectory, withIntermediateDirectories: true, attributes: nil)
- } catch {
- print("Failed to create roms directory: \(error)")
- }
- }
- var games: [Game] = []
-
- do {
- let files = try fileManager.contentsOfDirectory(at: romsDirectory, includingPropertiesForKeys: nil)
-
- for fileURLCandidate in files {
- if fileURLCandidate.pathExtension == "zip" {
- continue
- }
-
- do {
- let handle = try FileHandle(forReadingFrom: fileURLCandidate)
-// let fileExtension = (fileURLCandidate.pathExtension as NSString).utf8String
-// let extensionPtr = UnsafeMutablePointer(mutating: fileExtension)
-
-
- let gameInfo = RyujinxLib.instance.get_game_info(handle.fileDescriptor, "nsp")
-//
- let game = Game.convertGameInfoToGame(gameInfo: gameInfo, url: fileURLCandidate)
-//
- games.append(game)
- } catch {
- print(error)
- }
- }
-
- return games
- } catch {
- print("Error loading games from roms folder: \(error)")
- return games
- }
-
- }
-}
diff --git a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/RyujinxLib.swift b/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/RyujinxLib.swift
deleted file mode 100644
index 8ce178608..000000000
--- a/src/MeloNX-Skip/melonx-skip/Sources/MeloNX/RyujinxLib.swift
+++ /dev/null
@@ -1,71 +0,0 @@
-//
-// Ryujinx.swift
-// melonx-skip
-//
-// Created by Даниил Виноградов on 02.03.2025.
-//
-
-import Foundation
-import SkipFFI
-import OSLog
-#if !SKIP
-import LibCLibrary
-#endif
-
-//#if SKIP
-struct GameInfo {
- var fileSize: Int
- var TitleName: String
- var TitleId: String
- var Developer: String
- var Version: String
- var ImageData: Data
- var ImageSize: UInt
-}
-//#endif
-
-let appLogger = Logger(subsystem: "MeloNX", category: "Application")
-
-/// `DemoLibrary` is a Swift encapsulation of the embedded C library's functions and structures.
-internal final class DemoLib {
- /// The singleton library instance, registered using JNA to map the Kotlin functions to their native equivalents
- static let instance = registerNatives(DemoLib(), frameworkName: "MeloNXApp", libraryName: "clibrary")
-
- /* SKIP EXTERN */ public func demo_number() -> Int32 {
- return LibCLibrary.demo_number()
- }
-}
-
-/// `DemoLibrary` is a Swift encapsulation of the embedded C library's functions and structures.
-internal final class RyujinxLib {
- /// The singleton library instance, registered using JNA to map the Kotlin functions to their native equivalents
- static let instance = registerNatives(RyujinxLib(), frameworkName: "MeloNXApp", libraryName: "Ryujinx.Headless.SDL2")
-
- /* SKIP EXTERN */ public func installed_firmware_version() -> String {
-#if SKIP
- return String(cString: LibCLibrary.installed_firmware_version())
-#else
- return "nil"
-#endif
- }
-
- /* SKIP EXTERN */ public func test_func() -> String {
-#if SKIP
- return String(cString: LibCLibrary.test_func())
-#else
- return "nil"
-#endif
- }
-
- /* SKIP EXTERN */ public func initialize_android(_ path: String) {}
-
- /* SKIP EXTERN */ public func install_firmware(_ path: String) {}
-
- /* SKIP EXTERN */ public func get_game_info(_ fileDescriptor: Int32, _ extension: String) -> GameInfo {
-#if SKIP
- return String(cString: LibCLibrary.test_func())
-#else
- return GameInfo(fileSize: 0, TitleName: "", TitleId: "", Developer: "", Version: "", ImageData: Data(), ImageSize: 0)
-#endif
- }
-}
diff --git a/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/Resources/TestData.json b/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/Resources/TestData.json
deleted file mode 100644
index 490a0b8c1..000000000
--- a/src/MeloNX-Skip/melonx-skip/Tests/MeloNXTests/Resources/TestData.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
- "testModuleName": "MeloNX"
-}
\ No newline at end of file