From 7c79fcc6a29fa1366a01a2abbc6b7a9b66a69d5c Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 26 Sep 2026 15:38:07 -0500 Subject: [PATCH 1/6] Raise deployment target for Xcode 27 --- Moonlight.xcodeproj/project.pbxproj | 8 ++++---- .../moonlight-common.xcodeproj/project.pbxproj | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Moonlight.xcodeproj/project.pbxproj b/Moonlight.xcodeproj/project.pbxproj index 6f05557..0fc45fd 100644 --- a/Moonlight.xcodeproj/project.pbxproj +++ b/Moonlight.xcodeproj/project.pbxproj @@ -1022,7 +1022,7 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 12.0; + TVOS_DEPLOYMENT_TARGET = 15.0; }; name = Debug; }; @@ -1078,7 +1078,7 @@ SWIFT_OBJC_INTERFACE_HEADER_NAME = "Moonlight-Swift.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 12.0; + TVOS_DEPLOYMENT_TARGET = 15.0; }; name = Release; }; @@ -1129,7 +1129,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; @@ -1182,7 +1182,7 @@ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; GCC_WARN_UNUSED_FUNCTION = YES; GCC_WARN_UNUSED_VARIABLE = YES; - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; diff --git a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj index 8eed6eb..4de2c5f 100644 --- a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj +++ b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj @@ -510,7 +510,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 12.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VALIDATE_PRODUCT = NO; }; name = Debug; @@ -540,7 +540,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 12.0; + TVOS_DEPLOYMENT_TARGET = 15.0; VALIDATE_PRODUCT = NO; }; name = Release; @@ -678,7 +678,7 @@ "moonlight-common-c/enet/include", "../libs/**", ); - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -696,7 +696,7 @@ "moonlight-common-c/enet/include", "../libs/**", ); - IPHONEOS_DEPLOYMENT_TARGET = 12.0; + IPHONEOS_DEPLOYMENT_TARGET = 15.0; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; From 938f4b45894ecb5576f7e4dab9ade1679ae761cc Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 26 Sep 2026 15:45:47 -0500 Subject: [PATCH 2/6] Update moonlight-common-c --- Limelight/Stream/VideoDecoderRenderer.m | 2 +- moonlight-common/moonlight-common-c | 2 +- .../project.pbxproj | 46 +++++++++++++------ 3 files changed, 33 insertions(+), 17 deletions(-) diff --git a/Limelight/Stream/VideoDecoderRenderer.m b/Limelight/Stream/VideoDecoderRenderer.m index a2adf08..5c89e5a 100644 --- a/Limelight/Stream/VideoDecoderRenderer.m +++ b/Limelight/Stream/VideoDecoderRenderer.m @@ -580,7 +580,7 @@ int DrSubmitDecodeUnit(PDECODE_UNIT decodeUnit); CMSampleBufferRef sampleBuffer; - CMSampleTimingInfo sampleTiming = {kCMTimeInvalid, CMTimeMake(du->presentationTimeMs, 1000), kCMTimeInvalid}; + CMSampleTimingInfo sampleTiming = {kCMTimeInvalid, CMTimeMake(du->presentationTimeUs, 1000000), kCMTimeInvalid}; status = CMSampleBufferCreateReady(kCFAllocatorDefault, frameBlockBuffer, diff --git a/moonlight-common/moonlight-common-c b/moonlight-common/moonlight-common-c index 48d7f1a..f900dd4 160000 --- a/moonlight-common/moonlight-common-c +++ b/moonlight-common/moonlight-common-c @@ -1 +1 @@ -Subproject commit 48d7f1ace168d07dad339718f1350979545f15d2 +Subproject commit f900dd4767759c7b9d0e93bcea666b55c69ea62f diff --git a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj index 4de2c5f..dadda71 100644 --- a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj +++ b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj @@ -9,7 +9,12 @@ /* Begin PBXBuildFile section */ 983091DE24CEB69B00A0835D /* ConnectionTester.c in Sources */ = {isa = PBXBuildFile; fileRef = 983091DD24CEB69B00A0835D /* ConnectionTester.c */; }; 983091DF24CEB69B00A0835D /* ConnectionTester.c in Sources */ = {isa = PBXBuildFile; fileRef = 983091DD24CEB69B00A0835D /* ConnectionTester.c */; }; - 9857AEF01EBE85E10084F99E /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AEEE1EBE85E10084F99E /* rs.c */; }; + 9857AF051EBE85E10084F99E /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AF011EBE85E10084F99E /* rs.c */; }; + 9857AF061EBE85E10084F99E /* oblas_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AF031EBE85E10084F99E /* oblas_common.c */; }; + 9857AF071EBE85E10084F99E /* oblas_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AF041EBE85E10084F99E /* oblas_lite.c */; }; + 9857AF081EBE85E10084F99E /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AF011EBE85E10084F99E /* rs.c */; }; + 9857AF091EBE85E10084F99E /* oblas_common.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AF031EBE85E10084F99E /* oblas_common.c */; }; + 9857AF0A1EBE85E10084F99E /* oblas_lite.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AF041EBE85E10084F99E /* oblas_lite.c */; }; 98AB2E401CAD425A0089BB98 /* AudioStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1A1CAD423B0089BB98 /* AudioStream.c */; }; 98AB2E411CAD425A0089BB98 /* ByteBuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1B1CAD423B0089BB98 /* ByteBuffer.c */; }; 98AB2E421CAD425A0089BB98 /* Connection.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1D1CAD423B0089BB98 /* Connection.c */; }; @@ -44,7 +49,6 @@ 98F145382667D847004018E3 /* RtpVideoQueue.c in Sources */ = {isa = PBXBuildFile; fileRef = 98F145342667D847004018E3 /* RtpVideoQueue.c */; }; F74BEF9F2C1A707200224667 /* OpenSSL in Frameworks */ = {isa = PBXBuildFile; productRef = F74BEF9E2C1A707200224667 /* OpenSSL */; }; F74BEFA22C1A80D000224667 /* OpenSSL in Frameworks */ = {isa = PBXBuildFile; productRef = F74BEFA12C1A80D000224667 /* OpenSSL */; }; - FB1A67F821324F4900507771 /* rs.c in Sources */ = {isa = PBXBuildFile; fileRef = 9857AEEE1EBE85E10084F99E /* rs.c */; }; FB1A67FA21324F4900507771 /* AudioStream.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1A1CAD423B0089BB98 /* AudioStream.c */; }; FB1A67FB21324F4900507771 /* ByteBuffer.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1B1CAD423B0089BB98 /* ByteBuffer.c */; }; FB1A67FC21324F4900507771 /* Connection.c in Sources */ = {isa = PBXBuildFile; fileRef = 98AB2E1D1CAD423B0089BB98 /* Connection.c */; }; @@ -85,8 +89,10 @@ /* Begin PBXFileReference section */ 983091DD24CEB69B00A0835D /* ConnectionTester.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ConnectionTester.c; sourceTree = ""; }; - 9857AEEE1EBE85E10084F99E /* rs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rs.c; path = "moonlight-common-c/reedsolomon/rs.c"; sourceTree = ""; }; - 9857AEEF1EBE85E10084F99E /* rs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rs.h; path = "moonlight-common-c/reedsolomon/rs.h"; sourceTree = ""; }; + 9857AF011EBE85E10084F99E /* rs.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = rs.c; path = "moonlight-common-c/nanors/rs.c"; sourceTree = ""; }; + 9857AF021EBE85E10084F99E /* rs.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = rs.h; path = "moonlight-common-c/nanors/rs.h"; sourceTree = ""; }; + 9857AF031EBE85E10084F99E /* oblas_common.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = oblas_common.c; path = "moonlight-common-c/nanors/deps/obl/oblas_common.c"; sourceTree = ""; }; + 9857AF041EBE85E10084F99E /* oblas_lite.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = oblas_lite.c; path = "moonlight-common-c/nanors/deps/obl/oblas_lite.c"; sourceTree = ""; }; 98AB2DF01CAD422B0089BB98 /* callbacks.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = callbacks.c; sourceTree = ""; }; 98AB2DF11CAD422B0089BB98 /* ChangeLog */ = {isa = PBXFileReference; lastKnownFileType = text; path = ChangeLog; sourceTree = ""; }; 98AB2DF21CAD422B0089BB98 /* CMakeLists.txt */ = {isa = PBXFileReference; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = ""; }; @@ -180,13 +186,15 @@ /* End PBXFrameworksBuildPhase section */ /* Begin PBXGroup section */ - 9857AEED1EBE85D50084F99E /* reedsolomon */ = { + 9857AF001EBE85D50084F99E /* nanors */ = { isa = PBXGroup; children = ( - 9857AEEE1EBE85E10084F99E /* rs.c */, - 9857AEEF1EBE85E10084F99E /* rs.h */, + 9857AF011EBE85E10084F99E /* rs.c */, + 9857AF021EBE85E10084F99E /* rs.h */, + 9857AF031EBE85E10084F99E /* oblas_common.c */, + 9857AF041EBE85E10084F99E /* oblas_lite.c */, ); - name = reedsolomon; + name = nanors; sourceTree = ""; }; 98AB2DEF1CAD422B0089BB98 /* enet */ = { @@ -310,7 +318,7 @@ FB290E2519B37A4E004C83CF = { isa = PBXGroup; children = ( - 9857AEED1EBE85D50084F99E /* reedsolomon */, + 9857AF001EBE85D50084F99E /* nanors */, 98AB2E191CAD423B0089BB98 /* src */, 98AB2DEF1CAD422B0089BB98 /* enet */, FB290E2F19B37A4E004C83CF /* Products */, @@ -411,7 +419,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - FB1A67F821324F4900507771 /* rs.c in Sources */, + 9857AF081EBE85E10084F99E /* rs.c in Sources */, + 9857AF091EBE85E10084F99E /* oblas_common.c in Sources */, + 9857AF0A1EBE85E10084F99E /* oblas_lite.c in Sources */, 98F145362667D847004018E3 /* RtpAudioQueue.c in Sources */, FB1A67FA21324F4900507771 /* AudioStream.c in Sources */, FB1A67FB21324F4900507771 /* ByteBuffer.c in Sources */, @@ -448,6 +458,9 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 9857AF051EBE85E10084F99E /* rs.c in Sources */, + 9857AF061EBE85E10084F99E /* oblas_common.c in Sources */, + 9857AF071EBE85E10084F99E /* oblas_lite.c in Sources */, 98C1FC142184124C0023FDDF /* SimpleStun.c in Sources */, 98F145352667D847004018E3 /* RtpAudioQueue.c in Sources */, 98AB2E401CAD425A0089BB98 /* AudioStream.c in Sources */, @@ -475,7 +488,6 @@ 98AB2E541CAD427A0089BB98 /* packet.c in Sources */, 98AB2E551CAD427A0089BB98 /* peer.c in Sources */, 98AB2E561CAD427A0089BB98 /* protocol.c in Sources */, - 9857AEF01EBE85E10084F99E /* rs.c in Sources */, 98AB2E571CAD427A0089BB98 /* unix.c in Sources */, 98AB2E581CAD427A0089BB98 /* win32.c in Sources */, ); @@ -500,7 +512,8 @@ GCC_C_LANGUAGE_STANDARD = gnu11; HEADER_SEARCH_PATHS = ( "moonlight-common-c/enet/include", - "../libs/**", + "moonlight-common-c/nanors", + "moonlight-common-c/nanors/deps/obl", ); MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; MTL_ENABLE_DEBUG_INFO = YES; @@ -530,7 +543,8 @@ GCC_C_LANGUAGE_STANDARD = gnu11; HEADER_SEARCH_PATHS = ( "moonlight-common-c/enet/include", - "../libs/**", + "moonlight-common-c/nanors", + "moonlight-common-c/nanors/deps/obl", ); MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; MTL_ENABLE_DEBUG_INFO = NO; @@ -676,7 +690,8 @@ EXECUTABLE_PREFIX = lib; HEADER_SEARCH_PATHS = ( "moonlight-common-c/enet/include", - "../libs/**", + "moonlight-common-c/nanors", + "moonlight-common-c/nanors/deps/obl", ); IPHONEOS_DEPLOYMENT_TARGET = 15.0; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; @@ -694,7 +709,8 @@ EXECUTABLE_PREFIX = lib; HEADER_SEARCH_PATHS = ( "moonlight-common-c/enet/include", - "../libs/**", + "moonlight-common-c/nanors", + "moonlight-common-c/nanors/deps/obl", ); IPHONEOS_DEPLOYMENT_TARGET = 15.0; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; From 5cc4076d94f63c4cd46c9b0724dfcea7c3b50464 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 26 Sep 2026 15:47:11 -0500 Subject: [PATCH 3/6] Update project to Xcode 27 recommended settings --- Moonlight.xcodeproj/project.pbxproj | 21 ++++++++++++------- .../project.pbxproj | 12 ++++++----- 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/Moonlight.xcodeproj/project.pbxproj b/Moonlight.xcodeproj/project.pbxproj index 0fc45fd..e686ec1 100644 --- a/Moonlight.xcodeproj/project.pbxproj +++ b/Moonlight.xcodeproj/project.pbxproj @@ -736,8 +736,9 @@ FB290CE619B2C406004C83CF /* Project object */ = { isa = PBXProject; attributes = { + BuildIndependentTargetsInParallel = YES; LastSwiftUpdateCheck = 0730; - LastUpgradeCheck = 1400; + LastUpgradeCheck = 2700; ORGANIZATIONNAME = "Moonlight Game Streaming Project"; TargetAttributes = { FB1A67522132419700507771 = { @@ -984,7 +985,6 @@ CODE_SIGN_STYLE = Automatic; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = dwarf; - DEVELOPMENT_TEAM = DM46QST4M7; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -996,6 +996,7 @@ ); INFOPLIST_FILE = "Moonlight TV/Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games"; + IPHONEOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1022,7 +1023,7 @@ SWIFT_OPTIMIZATION_LEVEL = "-Onone"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 15.0; + TVOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_TVOS_DEPLOYMENT_TARGET)"; }; name = Debug; }; @@ -1040,7 +1041,6 @@ COPY_PHASE_STRIP = NO; CURRENT_PROJECT_VERSION = 1; DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; - DEVELOPMENT_TEAM = DM46QST4M7; GCC_C_LANGUAGE_STANDARD = gnu11; GCC_INCREASE_PRECOMPILED_HEADER_SHARING = NO; GCC_PRECOMPILE_PREFIX_HEADER = YES; @@ -1052,6 +1052,7 @@ ); INFOPLIST_FILE = "Moonlight TV/Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games"; + IPHONEOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1078,7 +1079,7 @@ SWIFT_OBJC_INTERFACE_HEADER_NAME = "Moonlight-Swift.h"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 15.0; + TVOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_TVOS_DEPLOYMENT_TARGET)"; }; name = Release; }; @@ -1112,8 +1113,10 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = NO; + DEVELOPMENT_TEAM = DM46QST4M7; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1132,6 +1135,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 15.0; ONLY_ACTIVE_ARCH = YES; SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1168,8 +1172,10 @@ CLANG_WARN_UNREACHABLE_CODE = YES; CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; COPY_PHASE_STRIP = YES; + DEVELOPMENT_TEAM = DM46QST4M7; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_USER_SCRIPT_SANDBOXING = YES; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_PREPROCESSOR_DEFINITIONS = ( @@ -1185,6 +1191,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 15.0; PROVISIONING_PROFILE = ""; SDKROOT = iphoneos; + STRING_CATALOG_GENERATE_SYMBOLS = YES; SWIFT_OBJC_INTERFACE_HEADER_NAME = ""; SWIFT_VERSION = 4.0; TARGETED_DEVICE_FAMILY = "1,2"; @@ -1200,7 +1207,6 @@ 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 = ( @@ -1212,6 +1218,7 @@ ); INFOPLIST_FILE = "Limelight/Limelight-Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games"; + IPHONEOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", @@ -1250,7 +1257,6 @@ 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 = ( @@ -1262,6 +1268,7 @@ ); INFOPLIST_FILE = "Limelight/Limelight-Info.plist"; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.games"; + IPHONEOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)"; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", diff --git a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj index dadda71..4c56993 100644 --- a/moonlight-common/moonlight-common.xcodeproj/project.pbxproj +++ b/moonlight-common/moonlight-common.xcodeproj/project.pbxproj @@ -383,7 +383,7 @@ isa = PBXProject; attributes = { BuildIndependentTargetsInParallel = YES; - LastUpgradeCheck = 1510; + LastUpgradeCheck = 2700; ORGANIZATIONNAME = "Moonlight Stream"; TargetAttributes = { FB1A67EE21324EE300507771 = { @@ -523,7 +523,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 15.0; + TVOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_TVOS_DEPLOYMENT_TARGET)"; VALIDATE_PRODUCT = NO; }; name = Debug; @@ -554,7 +554,7 @@ SDKROOT = appletvos; SKIP_INSTALL = YES; TARGETED_DEVICE_FAMILY = 3; - TVOS_DEPLOYMENT_TARGET = 15.0; + TVOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_TVOS_DEPLOYMENT_TARGET)"; VALIDATE_PRODUCT = NO; }; name = Release; @@ -620,6 +620,7 @@ ONLY_ACTIVE_ARCH = YES; SDKROOT = macosx; SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; }; name = Debug; }; @@ -680,6 +681,7 @@ PROVISIONING_PROFILE = ""; SDKROOT = macosx; SKIP_INSTALL = YES; + STRING_CATALOG_GENERATE_SYMBOLS = YES; }; name = Release; }; @@ -693,7 +695,7 @@ "moonlight-common-c/nanors", "moonlight-common-c/nanors/deps/obl", ); - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)"; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; @@ -712,7 +714,7 @@ "moonlight-common-c/nanors", "moonlight-common-c/nanors/deps/obl", ); - IPHONEOS_DEPLOYMENT_TARGET = 15.0; + IPHONEOS_DEPLOYMENT_TARGET = "$(RECOMMENDED_IPHONEOS_DEPLOYMENT_TARGET)"; MACOSX_DEPLOYMENT_TARGET = "$(RECOMMENDED_MACOSX_DEPLOYMENT_TARGET)"; ONLY_ACTIVE_ARCH = NO; PRODUCT_NAME = "$(TARGET_NAME)"; From ca0efbdb5b343d2561cb2e8c515baf85cefd41ac Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 26 Sep 2026 16:00:45 -0500 Subject: [PATCH 4/6] Distinguish between Enter and Numpad Enter --- Limelight/Input/KeyboardSupport.m | 1 + 1 file changed, 1 insertion(+) diff --git a/Limelight/Input/KeyboardSupport.m b/Limelight/Input/KeyboardSupport.m index 8cbf7a3..f4b8f5a 100644 --- a/Limelight/Input/KeyboardSupport.m +++ b/Limelight/Input/KeyboardSupport.m @@ -202,6 +202,7 @@ break; case UIKeyboardHIDUsageKeypadEnter: keyCode = 0x0D; + modifierFlags |= MODIFIER_EXTENDED; break; case UIKeyboardHIDUsageKeypadPeriod: keyCode = 0x6E; From 064723092bc8d9329117a4a97c2428dc056de4ba Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 26 Sep 2026 16:01:17 -0500 Subject: [PATCH 5/6] Stringify YUV 4:4:4 video formats --- Limelight/Stream/Connection.m | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/Limelight/Stream/Connection.m b/Limelight/Stream/Connection.m index 8ce40b6..33361fc 100644 --- a/Limelight/Stream/Connection.m +++ b/Limelight/Stream/Connection.m @@ -86,8 +86,12 @@ void DrStop(void) { case VIDEO_FORMAT_H264: return @"H.264"; + case VIDEO_FORMAT_H264_HIGH8_444: + return @"H.264 (4:4:4)"; case VIDEO_FORMAT_H265: return @"HEVC"; + case VIDEO_FORMAT_H265_REXT8_444: + return @"HEVC (4:4:4)"; case VIDEO_FORMAT_H265_MAIN10: if (LiGetCurrentHostDisplayHdrMode()) { return @"HEVC Main 10 HDR"; @@ -95,8 +99,17 @@ void DrStop(void) else { return @"HEVC Main 10 SDR"; } + case VIDEO_FORMAT_H265_REXT10_444: + if (LiGetCurrentHostDisplayHdrMode()) { + return @"HEVC Main 10 HDR (4:4:4)"; + } + else { + return @"HEVC Main 10 SDR (4:4:4)"; + } case VIDEO_FORMAT_AV1_MAIN8: return @"AV1"; + case VIDEO_FORMAT_AV1_HIGH8_444: + return @"AV1 (4:4:4)"; case VIDEO_FORMAT_AV1_MAIN10: if (LiGetCurrentHostDisplayHdrMode()) { return @"AV1 10-bit HDR"; @@ -104,6 +117,13 @@ void DrStop(void) else { return @"AV1 10-bit SDR"; } + case VIDEO_FORMAT_AV1_HIGH10_444: + if (LiGetCurrentHostDisplayHdrMode()) { + return @"AV1 10-bit HDR (4:4:4)"; + } + else { + return @"AV1 10-bit SDR (4:4:4)"; + } default: return @"UNKNOWN"; } From 02dc9780496eeeac6d01c8bbdccb8b6fe71ef28a Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 26 Sep 2026 16:06:48 -0500 Subject: [PATCH 6/6] Switch to GitHub Actions --- .github/workflows/ci.yml | 45 ++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- appveyor.yml | 24 --------------------- 3 files changed, 46 insertions(+), 25 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 appveyor.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..4c75fde --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,45 @@ +name: CI + +on: + push: + pull_request: + branches: + - master + workflow_dispatch: + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build: + name: Build (${{ matrix.platform }}) + runs-on: macos-latest + strategy: + fail-fast: false + matrix: + include: + - scheme: Moonlight + sdk: iphonesimulator + platform: iOS + - scheme: Moonlight TV + sdk: appletvsimulator + platform: tvOS + + steps: + - name: Checkout + uses: actions/checkout@v7 + with: + submodules: recursive + + - name: Download ${{ matrix.platform }} platform + run: xcodebuild -downloadPlatform ${{ matrix.platform }} + + - name: Build Debug + run: xcodebuild -project Moonlight.xcodeproj -scheme "${{ matrix.scheme }}" -configuration Debug -sdk ${{ matrix.sdk }} clean build + + - name: Build Release + run: xcodebuild -project Moonlight.xcodeproj -scheme "${{ matrix.scheme }}" -configuration Release -sdk ${{ matrix.sdk }} clean build diff --git a/README.md b/README.md index 6580a88..4b2cf99 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # 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) +[![CI](https://github.com/moonlight-stream/moonlight-ios/actions/workflows/ci.yml/badge.svg)](https://github.com/moonlight-stream/moonlight-ios/actions/workflows/ci.yml) [Moonlight for iOS/tvOS](https://moonlight-stream.org) is an open source client for [Sunshine](https://github.com/LizardByte/Sunshine) and NVIDIA GameStream. Moonlight for iOS/tvOS allows you to stream your full collection of games and apps from your powerful desktop computer to your iOS device or Apple TV. diff --git a/appveyor.yml b/appveyor.yml deleted file mode 100644 index 91cab2d..0000000 --- a/appveyor.yml +++ /dev/null @@ -1,24 +0,0 @@ -version: 0.0.0.{build} - -clone_depth: 1 - -environment: - matrix: - - APPVEYOR_BUILD_WORKER_IMAGE: macOS-Sonoma - SCHEME: Moonlight - SDK: iphonesimulator - PLATFORM: iOS - - APPVEYOR_BUILD_WORKER_IMAGE: macOS-Sonoma - SCHEME: Moonlight TV - SDK: appletvsimulator - PLATFORM: tvOS - -before_build: - - 'git submodule update --init --recursive' - - sh: 'xcodebuild -downloadPlatform $PLATFORM' - -build_script: - - 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