From 951289a80239a0cbdbb5931f5f5ca2d4c3899a4a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 22 Dec 2023 14:03:22 -0600 Subject: [PATCH 01/29] Don't consume stylus events unless they're supported by the host Fixes #595 --- Limelight/Input/StreamView.m | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Limelight/Input/StreamView.m b/Limelight/Input/StreamView.m index 86ab0beb..8891a9bc 100644 --- a/Limelight/Input/StreamView.m +++ b/Limelight/Input/StreamView.m @@ -240,9 +240,15 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; return 90 - MIN(90, altitudeDegs); } -- (void)sendStylusEvent:(UITouch*)event { +- (BOOL)sendStylusEvent:(UITouch*)event { uint8_t type; + // Don't touch stylus events if the host doesn't support them. We want to pass + // them as normal touches for legacy hosts that don't understand pen events. + if (!(LiGetHostFeatureFlags() & LI_FF_PEN_TOUCH_EVENTS)) { + return NO; + } + switch (event.phase) { case UITouchPhaseBegan: type = LI_TOUCH_EVENT_DOWN; @@ -257,17 +263,17 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; type = LI_TOUCH_EVENT_CANCEL; break; default: - return; + return YES; } CGPoint location = [self adjustCoordinatesForVideoArea:[event locationInView:self]]; CGSize videoSize = [self getVideoAreaSize]; - LiSendPenEvent(type, LI_TOOL_TYPE_PEN, 0, location.x / videoSize.width, location.y / videoSize.height, - (event.force / event.maximumPossibleForce) / sin(event.altitudeAngle), - 0.0f, 0.0f, - [self getRotationFromAzimuthAngle:[event azimuthAngleInView:self]], - [self getTiltFromAltitudeAngle:event.altitudeAngle]); + return LiSendPenEvent(type, LI_TOOL_TYPE_PEN, 0, location.x / videoSize.width, location.y / videoSize.height, + (event.force / event.maximumPossibleForce) / sin(event.altitudeAngle), + 0.0f, 0.0f, + [self getRotationFromAzimuthAngle:[event azimuthAngleInView:self]], + [self getTiltFromAltitudeAngle:event.altitudeAngle]) != LI_ERR_UNSUPPORTED; } - (void)sendStylusHoverEvent:(UIHoverGestureRecognizer*)gesture API_AVAILABLE(ios(13.0)) { @@ -329,8 +335,9 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; if (@available(iOS 13.4, *)) { for (UITouch* touch in touches) { if (touch.type == UITouchTypePencil) { - [self sendStylusEvent:touch]; - return; + if ([self sendStylusEvent:touch]) { + return; + } } } } @@ -506,8 +513,9 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; if (@available(iOS 13.4, *)) { for (UITouch* touch in touches) { if (touch.type == UITouchTypePencil) { - [self sendStylusEvent:touch]; - return; + if ([self sendStylusEvent:touch]) { + return; + } } } @@ -593,8 +601,9 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; if (@available(iOS 13.4, *)) { for (UITouch* touch in touches) { if (touch.type == UITouchTypePencil) { - [self sendStylusEvent:touch]; - return; + if ([self sendStylusEvent:touch]) { + return; + } } } } From 77485f2d8dd629fddc1239d208c4c04230011d34 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 22 Dec 2023 14:46:23 -0600 Subject: [PATCH 02/29] Display error codes when the connection is terminated --- .../ViewControllers/StreamFrameViewController.m | 14 +++++++++++++- moonlight-common/moonlight-common-c | 2 +- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/Limelight/ViewControllers/StreamFrameViewController.m b/Limelight/ViewControllers/StreamFrameViewController.m index 7720a9ff..a4c8f344 100644 --- a/Limelight/ViewControllers/StreamFrameViewController.m +++ b/Limelight/ViewControllers/StreamFrameViewController.m @@ -439,9 +439,21 @@ break; default: + { + NSString* errorString; + if (abs(errorCode) > 1000) { + // We'll assume large errors are hex values + errorString = [NSString stringWithFormat:@"%08X", (uint32_t)errorCode]; + } + else { + // Smaller values will just be printed as decimal (probably errno.h values) + errorString = [NSString stringWithFormat:@"%d", errorCode]; + } + title = @"Connection Terminated"; - message = @"The connection was terminated"; + message = [NSString stringWithFormat: @"The connection was terminated\n\nError code: %@", errorString]; break; + } } } diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index 3ed3ba62..3aae4cdc 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit 3ed3ba62534ce06c1b97fec46722969e7710fee6 +Subproject commit 3aae4cdc595ff6f428a2abbfb9d5055c03423bc2 From e05a6e4ec1c0ea70ff3cfba5f4a071679291aace Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 27 Dec 2023 22:17:22 -0600 Subject: [PATCH 03/29] Update moonlight-common.xcodeproj to recommended build settings --- .../moonlight-common.xcodeproj/project.pbxproj | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj index 224f5503..f6dd28c3 100644 --- a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj +++ b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 48; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -364,7 +364,8 @@ FB290E2619B37A4E004C83CF /* Project object */ = { isa = PBXProject; attributes = { - LastUpgradeCheck = 1400; + BuildIndependentTargetsInParallel = YES; + LastUpgradeCheck = 1510; ORGANIZATIONNAME = "Moonlight Stream"; TargetAttributes = { FB1A67EE21324EE300507771 = { @@ -492,6 +493,7 @@ "moonlight-common-c/enet/include", "../libs/**", ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-ObjC"; @@ -521,6 +523,7 @@ "moonlight-common-c/enet/include", "../libs/**", ); + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; MTL_ENABLE_DEBUG_INFO = NO; ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = "-ObjC"; @@ -565,8 +568,10 @@ COPY_PHASE_STRIP = NO; DEAD_CODE_STRIPPING = YES; DEFINES_MODULE = YES; + ENABLE_MODULE_VERIFIER = YES; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_ENABLE_OBJC_EXCEPTIONS = YES; @@ -585,6 +590,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11"; ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SKIP_INSTALL = YES; @@ -624,8 +631,10 @@ DEAD_CODE_STRIPPING = YES; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; DEFINES_MODULE = YES; + ENABLE_MODULE_VERIFIER = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_NO_COMMON_BLOCKS = YES; @@ -636,6 +645,8 @@ GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; MACOSX_DEPLOYMENT_TARGET = 10.10; + MODULE_VERIFIER_SUPPORTED_LANGUAGES = "objective-c objective-c++"; + MODULE_VERIFIER_SUPPORTED_LANGUAGE_STANDARDS = "gnu99 gnu++11"; PROVISIONING_PROFILE = ""; SDKROOT = macosx; SKIP_INSTALL = YES; @@ -652,6 +663,7 @@ "../libs/**", ); IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -669,6 +681,7 @@ "../libs/**", ); IPHONEOS_DEPLOYMENT_TARGET = 12.0; + MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; From e69cd3dbbce98f2c7835f1de634ac614cc40fe49 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Wed, 27 Dec 2023 22:27:09 -0600 Subject: [PATCH 04/29] Define __APPLE_USE_RFC_3542 at the project level for IPV6_PKTINFO For some reason, the definition in unix.c is not working as expected. --- .../moonlight-common.xcodeproj/project.pbxproj | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj index f6dd28c3..e5abffcb 100644 --- a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj +++ b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj @@ -485,10 +485,6 @@ DEBUG_INFORMATION_FORMAT = dwarf; DEVELOPMENT_TEAM = DM46QST4M7; GCC_C_LANGUAGE_STANDARD = gnu11; - GCC_PREPROCESSOR_DEFINITIONS = ( - "DEBUG=1", - "$(inherited)", - ); HEADER_SEARCH_PATHS = ( "moonlight-common-c/enet/include", "../libs/**", @@ -580,6 +576,7 @@ GCC_PREPROCESSOR_DEFINITIONS = ( LC_DEBUG, "DEBUG=1", + __APPLE_USE_RFC_3542, "$(inherited)", ); GCC_SYMBOLS_PRIVATE_EXTERN = NO; @@ -638,6 +635,10 @@ GCC_C_LANGUAGE_STANDARD = gnu99; GCC_ENABLE_OBJC_EXCEPTIONS = YES; GCC_NO_COMMON_BLOCKS = YES; + GCC_PREPROCESSOR_DEFINITIONS = ( + __APPLE_USE_RFC_3542, + "$(inherited)", + ); GCC_WARN_64_TO_32_BIT_CONVERSION = NO; GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; GCC_WARN_UNDECLARED_SELECTOR = YES; From 485c5e10dbc7ba57a0eba6954668f425c9eaaf46 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Thu, 28 Dec 2023 16:13:36 -0600 Subject: [PATCH 05/29] Update moonlight-common-c with fix for v4-mapped v6 addresses --- moonlight-common/moonlight-common-c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index 3aae4cdc..50d8dcb0 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit 3aae4cdc595ff6f428a2abbfb9d5055c03423bc2 +Subproject commit 50d8dcb07298035648e8d4e4770fb6c698ce6490 From 62c6661267b3858801b0c4b1c3757c2cce9ae301 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 29 Dec 2023 22:32:39 -0600 Subject: [PATCH 06/29] Update moonlight-common-c for X-SS-Connect-Data support --- moonlight-common/moonlight-common-c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index 50d8dcb0..6e9ed871 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit 50d8dcb07298035648e8d4e4770fb6c698ce6490 +Subproject commit 6e9ed871bc3e013386c775b2ee7d31deb1151068 From ae1c290b7929ddf6085c8b231f24cb74026be58c Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 29 Dec 2023 22:33:58 -0600 Subject: [PATCH 07/29] Version 9.0.1 --- Moonlight.xcodeproj/project.pbxproj | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Moonlight.xcodeproj/project.pbxproj b/Moonlight.xcodeproj/project.pbxproj index 2deeb005..eef22c1a 100644 --- a/Moonlight.xcodeproj/project.pbxproj +++ b/Moonlight.xcodeproj/project.pbxproj @@ -1192,7 +1192,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/tvOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/tvOS-Sim", ); - MARKETING_VERSION = 9.0.0; + MARKETING_VERSION = 9.0.1; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1248,7 +1248,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/tvOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/tvOS-Sim", ); - MARKETING_VERSION = 9.0.0; + MARKETING_VERSION = 9.0.1; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1377,7 +1377,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 1; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Limelight/Limelight-Prefix.pch"; HEADER_SEARCH_PATHS = ( @@ -1405,7 +1405,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/iOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/iOS-Sim", ); - MARKETING_VERSION = 9.0.0; + MARKETING_VERSION = 9.0.1; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -1426,7 +1426,7 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 1; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Limelight/Limelight-Prefix.pch"; HEADER_SEARCH_PATHS = ( @@ -1454,7 +1454,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/iOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/iOS-Sim", ); - MARKETING_VERSION = 9.0.0; + MARKETING_VERSION = 9.0.1; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.$(PRODUCT_NAME:rfc1034identifier)"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; From cc799768ef03d95e67d0421262ea02089ba3aaad Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 29 Dec 2023 23:36:40 -0600 Subject: [PATCH 08/29] Fix signing metadata for iOS --- Moonlight.xcodeproj/project.pbxproj | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/Moonlight.xcodeproj/project.pbxproj b/Moonlight.xcodeproj/project.pbxproj index eef22c1a..d7279468 100644 --- a/Moonlight.xcodeproj/project.pbxproj +++ b/Moonlight.xcodeproj/project.pbxproj @@ -933,7 +933,6 @@ }; }; FB290CED19B2C406004C83CF = { - DevelopmentTeam = DM46QST4M7; LastSwiftMigration = 1140; }; }; @@ -1378,6 +1377,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = DM46QST4M7; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Limelight/Limelight-Prefix.pch"; HEADER_SEARCH_PATHS = ( @@ -1406,7 +1406,7 @@ "$(PROJECT_DIR)/libs/FFmpeg/lib/iOS-Sim", ); MARKETING_VERSION = 9.0.1; - PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SKIP_INSTALL = NO; @@ -1427,6 +1427,7 @@ CODE_SIGN_IDENTITY = "iPhone Developer"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CURRENT_PROJECT_VERSION = 1; + DEVELOPMENT_TEAM = DM46QST4M7; GCC_PRECOMPILE_PREFIX_HEADER = YES; GCC_PREFIX_HEADER = "Limelight/Limelight-Prefix.pch"; HEADER_SEARCH_PATHS = ( @@ -1455,7 +1456,7 @@ "$(PROJECT_DIR)/libs/FFmpeg/lib/iOS-Sim", ); MARKETING_VERSION = 9.0.1; - PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.$(PRODUCT_NAME:rfc1034identifier)"; + PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; SKIP_INSTALL = NO; From 5501d85762de726fd8eaa954ea43f60c5bf46054 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 15 Jan 2024 15:11:32 -0600 Subject: [PATCH 09/29] Update moonlight-common-c with new encryption support --- Limelight/Network/HttpManager.m | 5 +++-- moonlight-common/moonlight-common-c | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/Limelight/Network/HttpManager.m b/Limelight/Network/HttpManager.m index 61882244..9a1dd3e3 100644 --- a/Limelight/Network/HttpManager.m +++ b/Limelight/Network/HttpManager.m @@ -276,7 +276,7 @@ // indicated by a negative version in the last field. int fps = (config.frameRate > 60 && ![config.appVersion containsString:@".-"]) ? 0 : config.frameRate; - NSString* urlString = [NSString stringWithFormat:@"%@/%@?uniqueid=%@&appid=%@&mode=%dx%dx%d&additionalStates=1&sops=%d&rikey=%@&rikeyid=%d%@&localAudioPlayMode=%d&surroundAudioInfo=%d&remoteControllersBitmap=%d&gcmap=%d&gcpersist=%d", + NSString* urlString = [NSString stringWithFormat:@"%@/%@?uniqueid=%@&appid=%@&mode=%dx%dx%d&additionalStates=1&sops=%d&rikey=%@&rikeyid=%d%@&localAudioPlayMode=%d&surroundAudioInfo=%d&remoteControllersBitmap=%d&gcmap=%d&gcpersist=%d%s", _baseHTTPSURL, verb, _uniqueId, config.appID, config.width, config.height, fps, @@ -286,7 +286,8 @@ config.playAudioOnPC ? 1 : 0, SURROUNDAUDIOINFO_FROM_AUDIO_CONFIGURATION(config.audioConfiguration), config.gamepadMask, config.gamepadMask, - !config.multiController ? 1 : 0]; + !config.multiController ? 1 : 0, + LiGetLaunchUrlQueryParameters()]; Log(LOG_I, @"Requesting: %@", urlString); // This blocks while the app is launching return [self createRequestFromString:urlString timeout:LONG_TIMEOUT_SEC]; diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index 6e9ed871..298f356a 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit 6e9ed871bc3e013386c775b2ee7d31deb1151068 +Subproject commit 298f356acbb57f56863680d41c0d307a2fd5cb91 From 9b28981b59cb44e6b10c4c6ac56b1a54ab351d92 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Mon, 15 Jan 2024 15:21:56 -0600 Subject: [PATCH 10/29] Opt in for video encryption on A10 and later SoCs --- Limelight/Stream/Connection.m | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m index 24433117..a26687aa 100644 --- a/Limelight/Stream/Connection.m +++ b/Limelight/Stream/Connection.m @@ -420,9 +420,16 @@ void ClSetControllerLED(uint16_t controllerNumber, uint8_t r, uint8_t g, uint8_t _streamConfig.supportedVideoFormats = config.supportedVideoFormats; _streamConfig.audioConfiguration = config.audioConfiguration; - // TODO: If/when video encryption is added, we'll probably want to - // limit that to devices that support the ARMv8 AES instructions. - _streamConfig.encryptionFlags = ENCFLG_AUDIO; + // Since we require iOS 12 or above, we're guaranteed to be running + // on a 64-bit device with ARMv8 crypto instructions, so we don't + // need to check for that here. Instead, we'll just check for more + // than 2 cores, which eliminates the early dual-core CPUs (A7-A9). + if (NSProcessInfo.processInfo.processorCount > 2) { + _streamConfig.encryptionFlags = ENCFLG_ALL; + } + else { + _streamConfig.encryptionFlags = ENCFLG_AUDIO; + } if ([Utils isActiveNetworkVPN]) { // Force remote streaming mode when a VPN is connected From 303303bf6b0ad2120cd71f5f190b330bf8ac0606 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Fri, 19 Jan 2024 19:18:21 -0600 Subject: [PATCH 11/29] Update moonlight-common-c with finalized encryption changes --- moonlight-common/moonlight-common-c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index 298f356a..a517f7cb 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit 298f356acbb57f56863680d41c0d307a2fd5cb91 +Subproject commit a517f7cbcaf37ae0003979382d4e6348f37b8b2d From 7465835808262f6f60fccc8f4ad255ceb4209c4b Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 28 Jan 2024 14:37:03 -0600 Subject: [PATCH 12/29] Remove CPU core count check Decryption seems fast enough for all reasonable bitrates even on dual-core devices. --- Limelight/Stream/Connection.m | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m index a26687aa..846add93 100644 --- a/Limelight/Stream/Connection.m +++ b/Limelight/Stream/Connection.m @@ -422,14 +422,8 @@ void ClSetControllerLED(uint16_t controllerNumber, uint8_t r, uint8_t g, uint8_t // Since we require iOS 12 or above, we're guaranteed to be running // on a 64-bit device with ARMv8 crypto instructions, so we don't - // need to check for that here. Instead, we'll just check for more - // than 2 cores, which eliminates the early dual-core CPUs (A7-A9). - if (NSProcessInfo.processInfo.processorCount > 2) { - _streamConfig.encryptionFlags = ENCFLG_ALL; - } - else { - _streamConfig.encryptionFlags = ENCFLG_AUDIO; - } + // need to check for that here. + _streamConfig.encryptionFlags = ENCFLG_ALL; if ([Utils isActiveNetworkVPN]) { // Force remote streaming mode when a VPN is connected From 08279d825cc2d49dac9b20f443d12e41df97a584 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 17 Feb 2024 14:40:01 -0600 Subject: [PATCH 13/29] Update AppVeyor images --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index ab99c2a5..94bfd81f 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -4,11 +4,11 @@ clone_depth: 1 environment: matrix: - - APPVEYOR_BUILD_WORKER_IMAGE: macOS-Monterey + - APPVEYOR_BUILD_WORKER_IMAGE: macOS-Sonoma SCHEME: Moonlight SDK: iphonesimulator PLATFORM: iOS - - APPVEYOR_BUILD_WORKER_IMAGE: macOS-Monterey + - APPVEYOR_BUILD_WORKER_IMAGE: macOS-Sonoma SCHEME: Moonlight TV SDK: appletvsimulator PLATFORM: tvOS From 38259af3f103f755ab7bcb91a6fb8c01be606e45 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 17 Feb 2024 17:17:05 -0600 Subject: [PATCH 14/29] Remove xcpretty in CI --- appveyor.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appveyor.yml b/appveyor.yml index 94bfd81f..91cab2db 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -18,7 +18,7 @@ before_build: - sh: 'xcodebuild -downloadPlatform $PLATFORM' build_script: - - sh: set -o pipefail && xcodebuild -project Moonlight.xcodeproj -scheme "$SCHEME" -configuration Debug -sdk $SDK clean build | xcpretty - - sh: set -o pipefail && xcodebuild -project Moonlight.xcodeproj -scheme "$SCHEME" -configuration Release -sdk $SDK clean build | xcpretty + - sh: xcodebuild -project Moonlight.xcodeproj -scheme "$SCHEME" -configuration Debug -sdk $SDK clean build + - sh: xcodebuild -project Moonlight.xcodeproj -scheme "$SCHEME" -configuration Release -sdk $SDK clean build deploy: off From 796f87713f6911026412dfc7d1550e0287258de2 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 25 Feb 2024 15:44:35 -0600 Subject: [PATCH 15/29] Update moonlight-common-c with RTSP encryption and QoS improvements --- moonlight-common/moonlight-common-c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index a517f7cb..ba1fc336 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit a517f7cbcaf37ae0003979382d4e6348f37b8b2d +Subproject commit ba1fc33672986502651b097a41ca7068aff9acba From dd5d23399312027f274d059d2c0f3829ed05adfe Mon Sep 17 00:00:00 2001 From: Marc Davis Date: Mon, 12 Feb 2024 17:48:01 -0500 Subject: [PATCH 16/29] yes 0x0D is the correct code for Enter according to Microsoft's documentation --- Limelight/Input/KeyboardSupport.m | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Limelight/Input/KeyboardSupport.m b/Limelight/Input/KeyboardSupport.m index fa6601b0..ebf3bd8a 100644 --- a/Limelight/Input/KeyboardSupport.m +++ b/Limelight/Input/KeyboardSupport.m @@ -201,7 +201,7 @@ keyCode = 0x6B; break; case UIKeyboardHIDUsageKeypadEnter: - keyCode = 0x0D; // FIXME: Is this correct? + keyCode = 0x0D; break; case UIKeyboardHIDUsageKeypadPeriod: keyCode = 0x6E; From 855f48b4559156318aef884829658b10383c3a65 Mon Sep 17 00:00:00 2001 From: Marc Davis Date: Mon, 12 Feb 2024 17:52:44 -0500 Subject: [PATCH 17/29] mapped the Globe/Language key to Escape --- Limelight/Input/KeyboardSupport.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Limelight/Input/KeyboardSupport.m b/Limelight/Input/KeyboardSupport.m index ebf3bd8a..8cbf7a33 100644 --- a/Limelight/Input/KeyboardSupport.m +++ b/Limelight/Input/KeyboardSupport.m @@ -248,6 +248,9 @@ case UIKeyboardHIDUsageKeyboardRightAlt: keyCode = 0xA5; break; + case 669: // This value corresponds to the "Globe" or "Language" key on most Apple branded iPad keyboards. + keyCode = 0x1B; // This value corresponds to "Escape", which is missing from most Apple branded iPad keyboards. + break; default: NSLog(@"Unhandled HID usage: %lu", (unsigned long)key.keyCode); assert(0); From 7df349ad7c6669ded659b84bbf75b09332d759dd Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 25 Feb 2024 16:25:56 -0600 Subject: [PATCH 18/29] Improve smooth scrolling precision --- Limelight/Input/StreamView.m | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Limelight/Input/StreamView.m b/Limelight/Input/StreamView.m index 8891a9bc..7dedeb35 100644 --- a/Limelight/Input/StreamView.m +++ b/Limelight/Input/StreamView.m @@ -704,20 +704,21 @@ static const double X1_MOUSE_SPEED_DIVISOR = 2.5; } CGPoint currentScrollTranslation = [gesture translationInView:self]; + const short translationMultiplier = 120 * 20; // WHEEL_DELTA * 20 { - short translationDeltaY = ((currentScrollTranslation.y - lastScrollTranslation.y) / self.bounds.size.height) * 120; // WHEEL_DELTA + short translationDeltaY = ((currentScrollTranslation.y - lastScrollTranslation.y) / self.bounds.size.height) * translationMultiplier; if (translationDeltaY != 0) { - LiSendHighResScrollEvent(translationDeltaY * 20); + LiSendHighResScrollEvent(translationDeltaY); lastScrollTranslation = currentScrollTranslation; } } { - short translationDeltaX = ((currentScrollTranslation.x - lastScrollTranslation.x) / self.bounds.size.width) * 120; // WHEEL_DELTA + short translationDeltaX = ((currentScrollTranslation.x - lastScrollTranslation.x) / self.bounds.size.width) * translationMultiplier; if (translationDeltaX != 0) { // Direction is reversed from vertical scrolling - LiSendHighResHScrollEvent(-translationDeltaX * 20); + LiSendHighResHScrollEvent(-translationDeltaX); lastScrollTranslation = currentScrollTranslation; } } From c3ad7578fe21b70289e4f18b53dee84faa41a314 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 25 Feb 2024 16:44:47 -0600 Subject: [PATCH 19/29] Update moonlight-common-c to resolve build warning --- moonlight-common/moonlight-common-c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index ba1fc336..48d7f1ac 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit ba1fc33672986502651b097a41ca7068aff9acba +Subproject commit 48d7f1ace168d07dad339718f1350979545f15d2 From 557765f2c0b83bcfd722b8965fa87bcb46878f6d Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sun, 25 Feb 2024 16:46:42 -0600 Subject: [PATCH 20/29] Version 9.0.2 --- Moonlight.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Moonlight.xcodeproj/project.pbxproj b/Moonlight.xcodeproj/project.pbxproj index d7279468..517055a1 100644 --- a/Moonlight.xcodeproj/project.pbxproj +++ b/Moonlight.xcodeproj/project.pbxproj @@ -1191,7 +1191,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/tvOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/tvOS-Sim", ); - MARKETING_VERSION = 9.0.1; + MARKETING_VERSION = 9.0.2; MTL_ENABLE_DEBUG_INFO = YES; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1247,7 +1247,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/tvOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/tvOS-Sim", ); - MARKETING_VERSION = 9.0.1; + MARKETING_VERSION = 9.0.2; MTL_ENABLE_DEBUG_INFO = NO; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -1405,7 +1405,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/iOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/iOS-Sim", ); - MARKETING_VERSION = 9.0.1; + MARKETING_VERSION = 9.0.2; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; @@ -1455,7 +1455,7 @@ "$(PROJECT_DIR)/libs/SDL2/lib/iOS-Sim", "$(PROJECT_DIR)/libs/FFmpeg/lib/iOS-Sim", ); - MARKETING_VERSION = 9.0.1; + MARKETING_VERSION = 9.0.2; PRODUCT_BUNDLE_IDENTIFIER = "com.moonlight-stream.Moonlight"; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE = ""; From 555726e4172b15a900db3b55f16cf7bdc6834d50 Mon Sep 17 00:00:00 2001 From: TrueZhuangJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:16:32 +0800 Subject: [PATCH 21/29] Update README.md --- README.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/README.md b/README.md index 6580a883..e896629f 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ +This fork is probably the first one to work properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, and early development by Bilibili uploader 阿西西的日常. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequenly while playing Genshin Imapct. + +To install the ipa file in release, you need to find a way to sideload the app on iOS. + +To Enable native-touch passthrough, just select "Touchscreen" in "Settings -> Touch Mode". + +To check the code go to branch "moonlight-iOS-ZWM". + # Moonlight iOS/tvOS [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/kwv8vpwr457lqn25/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-ios/branch/master) From 600fc5885bdfef1b7fc7d2d5327ce6b4caee32f6 Mon Sep 17 00:00:00 2001 From: TrueZhuangJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:22:08 +0800 Subject: [PATCH 22/29] Update README.md --- README.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index e896629f..aeab12f1 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,6 @@ -This fork is probably the first one to work properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, and early development by Bilibili uploader 阿西西的日常. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequenly while playing Genshin Imapct. +This fork is probably the first one to work properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, moonlight-common-c submodule commited on 2024.2.4, and early modification by Bilibili uploader 阿西西的日常. + +Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. To install the ipa file in release, you need to find a way to sideload the app on iOS. @@ -6,6 +8,7 @@ To Enable native-touch passthrough, just select "Touchscreen" in "Settings -> To To check the code go to branch "moonlight-iOS-ZWM". + # Moonlight iOS/tvOS [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/kwv8vpwr457lqn25/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-ios/branch/master) From af37c253b111cad86993b80c348e8e2194d76895 Mon Sep 17 00:00:00 2001 From: TrueZhuangJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:32:16 +0800 Subject: [PATCH 23/29] Update README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index aeab12f1..18a54cc3 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,15 @@ +这可能是第一个在 iOS 上多点触控模式下可以正常操作的分支。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 + +此外,除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 + +安装 release 中的 ipa 文件,需要先对文件进行自签名,或者先越狱、安装巨魔商店。 + +启用多点触控,只需在“设置 ->触摸模式”中选择“触摸屏”即可。 + +查看代码,请转到分支“moonlight-iOS-ZWM”。 + + + This fork is probably the first one to work properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, moonlight-common-c submodule commited on 2024.2.4, and early modification by Bilibili uploader 阿西西的日常. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. From f997b35b1ad2d3e96f7ef5f1d1e96b7aafbbb594 Mon Sep 17 00:00:00 2001 From: TrueZhuangJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:32:43 +0800 Subject: [PATCH 24/29] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 18a54cc3..c8d99b2f 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -这可能是第一个在 iOS 上多点触控模式下可以正常操作的分支。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 +这可能是第一个在 iOS 多点触控模式下可以正常操作的分支。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 此外,除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 From fe73054771bea76b279d166a795ee6e2bd217b99 Mon Sep 17 00:00:00 2001 From: TrueZhuangJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Sat, 13 Apr 2024 19:34:24 +0800 Subject: [PATCH 25/29] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index c8d99b2f..4a2092c9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ 这可能是第一个在 iOS 多点触控模式下可以正常操作的分支。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 -此外,除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 +除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 安装 release 中的 ipa 文件,需要先对文件进行自签名,或者先越狱、安装巨魔商店。 From 5e35318f07c4670c360c59d9237807e09dd45b87 Mon Sep 17 00:00:00 2001 From: TrueZhuanJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Fri, 19 Apr 2024 14:58:26 +0800 Subject: [PATCH 26/29] Update README.md --- README.md | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 4a2092c9..63045c7a 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ -这可能是第一个在 iOS 多点触控模式下可以正常操作的分支。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 +这是第一个在iOS多点触控模式下可以正常操作的fork。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 -除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 +2023年12月,另一名 Bilibili Up主 aoeas771- (https://github.com/nyht6)发现了原神PC版的隐藏触屏UI模式, 阿西西的日常随后首先在iOS Moonlight上实现了多点触控,当时我在他的QQ群里承担了大部分iOS版的测试。感谢他们两位,实现了从PC串流原生多点触控的米家游戏。 + +几个月后,我尝试搭建了MacOS Xcode开发环境,并解决一个因pointer ID重复导致的奇怪bug. 除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 安装 release 中的 ipa 文件,需要先对文件进行自签名,或者先越狱、安装巨魔商店。 @@ -10,9 +12,11 @@ -This fork is probably the first one to work properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, moonlight-common-c submodule commited on 2024.2.4, and early modification by Bilibili uploader 阿西西的日常. +The first fork published that actually works properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, moonlight-common-c submodule commited on 2024.2.4, and early modification by Bilibili uploader 阿西西的日常. -Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. +In Dec.2023 a hidden touch UI of Genshin Impact PC version was discovered by another Bilibili uploader aoeas771-(https://github.com/nyht6), 阿西西的日常 was the first developer to implement native multi-touch passthrough on iOS while I undertook most part of testing for the modified iOS moonlight in his QQ group. Thanks to both of them we're able to stream Mihoyo Games from PC with native multi-point touch mode, both Android & iOS. + +Months later I managed to setup a MacOS VM with Xcode, and fix a weird bug caused by pointer ID repetition. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. To install the ipa file in release, you need to find a way to sideload the app on iOS. From 164f5bff2ee74dce117a6efd3daba11e8a4f63e3 Mon Sep 17 00:00:00 2001 From: TrueZhuanJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Fri, 19 Apr 2024 14:59:06 +0800 Subject: [PATCH 27/29] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 63045c7a..16130eb5 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ 这是第一个在iOS多点触控模式下可以正常操作的fork。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 -2023年12月,另一名 Bilibili Up主 aoeas771- (https://github.com/nyht6)发现了原神PC版的隐藏触屏UI模式, 阿西西的日常随后首先在iOS Moonlight上实现了多点触控,当时我在他的QQ群里承担了大部分iOS版的测试。感谢他们两位,实现了从PC串流原生多点触控的米家游戏。 +2023年12月,另一名 Bilibili Up主 aoeas771- (https://github.com/nyht6), 发现了原神PC版的隐藏触屏UI模式, 阿西西的日常随后首先在iOS Moonlight上实现了多点触控,当时我在他的QQ群里承担了大部分iOS版的测试。感谢他们两位,实现了从PC串流原生多点触控的米家游戏。 几个月后,我尝试搭建了MacOS Xcode开发环境,并解决一个因pointer ID重复导致的奇怪bug. 除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 From 07af0e44578c6e4a7db993b10448ef5928e4df9d Mon Sep 17 00:00:00 2001 From: TrueZhuanJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:01:38 +0800 Subject: [PATCH 28/29] Update README.md --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 16130eb5..12f11a32 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ 2023年12月,另一名 Bilibili Up主 aoeas771- (https://github.com/nyht6), 发现了原神PC版的隐藏触屏UI模式, 阿西西的日常随后首先在iOS Moonlight上实现了多点触控,当时我在他的QQ群里承担了大部分iOS版的测试。感谢他们两位,实现了从PC串流原生多点触控的米家游戏。 -几个月后,我尝试搭建了MacOS Xcode开发环境,并解决一个因pointer ID重复导致的奇怪bug. 除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 +2024年4月,我尝试搭建MacOS Xcode开发环境,并解决了一个因pointer ID重复导致的奇怪bug. 除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 安装 release 中的 ipa 文件,需要先对文件进行自签名,或者先越狱、安装巨魔商店。 @@ -14,9 +14,9 @@ The first fork published that actually works properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, moonlight-common-c submodule commited on 2024.2.4, and early modification by Bilibili uploader 阿西西的日常. -In Dec.2023 a hidden touch UI of Genshin Impact PC version was discovered by another Bilibili uploader aoeas771-(https://github.com/nyht6), 阿西西的日常 was the first developer to implement native multi-touch passthrough on iOS while I undertook most part of testing for the modified iOS moonlight in his QQ group. Thanks to both of them we're able to stream Mihoyo Games from PC with native multi-point touch mode, both Android & iOS. +In Dec. 2023 a hidden touch UI of Genshin Impact PC version was discovered by another Bilibili uploader aoeas771-(https://github.com/nyht6), 阿西西的日常 was the first developer to implement native multi-touch passthrough on iOS while I undertook most part of testing for the modified iOS moonlight in his QQ group. Thanks to both of them we're able to stream Mihoyo Games from PC with native multi-point touch mode, both Android & iOS. -Months later I managed to setup a MacOS VM with Xcode, and fix a weird bug caused by pointer ID repetition. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. +In Apr. 2024, I managed to setup a MacOS VM with Xcode, and fix a weird bug caused by pointer ID repetition. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. To install the ipa file in release, you need to find a way to sideload the app on iOS. From b451b652517304c63186ca28a96f73a64809848b Mon Sep 17 00:00:00 2001 From: TrueZhuanJia <78474576+TrueZhuangJia@users.noreply.github.com> Date: Fri, 19 Apr 2024 15:10:11 +0800 Subject: [PATCH 29/29] Update README.md --- README.md | 27 --------------------------- 1 file changed, 27 deletions(-) diff --git a/README.md b/README.md index 12f11a32..6580a883 100644 --- a/README.md +++ b/README.md @@ -1,30 +1,3 @@ -这是第一个在iOS多点触控模式下可以正常操作的fork。基于 moonlight-ios 9.0.0 版本,2024.2.4 提交的 moonlight-common-c 子模块,以及 Bilibili Up主 阿西西的日常 的早期修改。 - -2023年12月,另一名 Bilibili Up主 aoeas771- (https://github.com/nyht6), 发现了原神PC版的隐藏触屏UI模式, 阿西西的日常随后首先在iOS Moonlight上实现了多点触控,当时我在他的QQ群里承担了大部分iOS版的测试。感谢他们两位,实现了从PC串流原生多点触控的米家游戏。 - -2024年4月,我尝试搭建MacOS Xcode开发环境,并解决了一个因pointer ID重复导致的奇怪bug. 除了解决多点触控的问题之外,我直接禁用了“从边缘滑动退出会话”功能,防止意外退出会话。这在玩原神时经常发生。 - -安装 release 中的 ipa 文件,需要先对文件进行自签名,或者先越狱、安装巨魔商店。 - -启用多点触控,只需在“设置 ->触摸模式”中选择“触摸屏”即可。 - -查看代码,请转到分支“moonlight-iOS-ZWM”。 - - - -The first fork published that actually works properly in native multi-point passthrough mode on iOS. It's based on moonlight-ios version 9.0.0, moonlight-common-c submodule commited on 2024.2.4, and early modification by Bilibili uploader 阿西西的日常. - -In Dec. 2023 a hidden touch UI of Genshin Impact PC version was discovered by another Bilibili uploader aoeas771-(https://github.com/nyht6), 阿西西的日常 was the first developer to implement native multi-touch passthrough on iOS while I undertook most part of testing for the modified iOS moonlight in his QQ group. Thanks to both of them we're able to stream Mihoyo Games from PC with native multi-point touch mode, both Android & iOS. - -In Apr. 2024, I managed to setup a MacOS VM with Xcode, and fix a weird bug caused by pointer ID repetition. Additionaly, I directly disable the "swipe from edge to exit session" funtion, to prevent accidently quit from session in native-touch passthrough mode, which happens frequently while playing Genshin Imapct. - -To install the ipa file in release, you need to find a way to sideload the app on iOS. - -To Enable native-touch passthrough, just select "Touchscreen" in "Settings -> Touch Mode". - -To check the code go to branch "moonlight-iOS-ZWM". - - # Moonlight iOS/tvOS [![AppVeyor Build Status](https://ci.appveyor.com/api/projects/status/kwv8vpwr457lqn25/branch/master?svg=true)](https://ci.appveyor.com/project/cgutman/moonlight-ios/branch/master)