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