diff --git a/build-system/Make/BuildEnvironment.py b/build-system/Make/BuildEnvironment.py index 6fa5fe4ee9..8d31133fe1 100644 --- a/build-system/Make/BuildEnvironment.py +++ b/build-system/Make/BuildEnvironment.py @@ -140,6 +140,10 @@ class BuildEnvironmentVersions: raise Exception('Missing xcode version in {}'.format(configuration_path)) else: self.xcode_version = configuration_dict['xcode'] + if configuration_dict['macos'] is None: + raise Exception('Missing macos version in {}'.format(configuration_path)) + else: + self.macos_version = configuration_dict['macos'] class BuildEnvironment: def __init__( @@ -179,3 +183,4 @@ class BuildEnvironment: self.app_version = versions.app_version self.xcode_version = versions.xcode_version self.bazel_version = versions.bazel_version + self.macos_version = versions.macos_version diff --git a/build-system/Make/Make.py b/build-system/Make/Make.py index 3899cdb30f..3f908743df 100644 --- a/build-system/Make/Make.py +++ b/build-system/Make/Make.py @@ -9,7 +9,7 @@ import subprocess import shutil import glob -from BuildEnvironment import resolve_executable, call_executable, run_executable_with_output, BuildEnvironment +from BuildEnvironment import resolve_executable, call_executable, run_executable_with_output, BuildEnvironmentVersions, BuildEnvironment from ProjectGeneration import generate from BazelLocation import locate_bazel from BuildConfiguration import CodesigningSource, GitCodesigningSource, DirectoryCodesigningSource, XcodeManagedCodesigningSource, BuildConfiguration, build_configuration_from_json @@ -1059,6 +1059,8 @@ if __name__ == '__main__': os.makedirs(remote_input_path + '/certs') os.makedirs(remote_input_path + '/profiles') + versions = BuildEnvironmentVersions(base_path=os.getcwd()) + resolve_configuration( base_path=os.getcwd(), bazel_command_line=None, @@ -1071,6 +1073,7 @@ if __name__ == '__main__': RemoteBuild.remote_build( darwin_containers_path=args.darwinContainers, darwin_containers_host=args.darwinContainersHost, + macos_version=versions.macos_version, bazel_cache_host=args.cacheHost, configuration=args.configuration, build_input_data_path=remote_input_path @@ -1105,18 +1108,24 @@ if __name__ == '__main__': print('APPSTORE_CONNECT_PASSWORD environment variable is not set') sys.exit(1) + versions = BuildEnvironmentVersions(base_path=os.getcwd()) + RemoteBuild.remote_deploy_testflight( darwin_containers_path=args.darwinContainers, darwin_containers_host=args.darwinContainersHost, + macos_version=versions.macos_version, ipa_path=args.ipa, dsyms_path=args.dsyms, username=env['APPSTORE_CONNECT_USERNAME'], password=env['APPSTORE_CONNECT_PASSWORD'] ) elif args.commandName == 'remote-ipa-diff': + versions = BuildEnvironmentVersions(base_path=os.getcwd()) + RemoteBuild.remote_ipa_diff( darwin_containers_path=args.darwinContainers, darwin_containers_host=args.darwinContainersHost, + macos_version=versions.macos_version, ipa1_path=args.ipa1, ipa2_path=args.ipa2 ) diff --git a/build-system/Make/RemoteBuild.py b/build-system/Make/RemoteBuild.py index e0a4810bf5..89ed9b0d13 100644 --- a/build-system/Make/RemoteBuild.py +++ b/build-system/Make/RemoteBuild.py @@ -55,9 +55,7 @@ def session_ssh(session, command): return os.system(ssh_command) -def remote_build(darwin_containers_path, darwin_containers_host, bazel_cache_host, configuration, build_input_data_path): - macos_version = '13.0' - +def remote_build(darwin_containers_path, darwin_containers_host, macos_version, bazel_cache_host, configuration, build_input_data_path): DarwinContainers = import_module_from_file('darwin-containers', darwin_containers_path) base_dir = os.getcwd() @@ -181,9 +179,7 @@ def remote_build(darwin_containers_path, darwin_containers_host, bazel_cache_hos ) -def remote_deploy_testflight(darwin_containers_path, darwin_containers_host, ipa_path, dsyms_path, username, password): - macos_version = '13.0' - +def remote_deploy_testflight(darwin_containers_path, darwin_containers_host, macos_version, ipa_path, dsyms_path, username, password): DarwinContainers = import_module_from_file('darwin-containers', darwin_containers_path) configuration_path = 'versions.json' @@ -240,9 +236,7 @@ def remote_deploy_testflight(darwin_containers_path, darwin_containers_host, ipa ) -def remote_ipa_diff(darwin_containers_path, darwin_containers_host, ipa1_path, ipa2_path): - macos_version = '13.0' - +def remote_ipa_diff(darwin_containers_path, darwin_containers_host, macos_version, ipa1_path, ipa2_path): DarwinContainers = import_module_from_file('darwin-containers', darwin_containers_path) configuration_path = 'versions.json' diff --git a/submodules/DebugSettingsUI/Sources/DebugController.swift b/submodules/DebugSettingsUI/Sources/DebugController.swift index 1ddd32ac9b..a1490b6866 100644 --- a/submodules/DebugSettingsUI/Sources/DebugController.swift +++ b/submodules/DebugSettingsUI/Sources/DebugController.swift @@ -71,7 +71,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { case redactSensitiveData(PresentationTheme, Bool) case keepChatNavigationStack(PresentationTheme, Bool) case skipReadHistory(PresentationTheme, Bool) - case unidirectionalSwipeToReply(Bool) + case dustEffect(Bool) case callV2(Bool) case alternativeStoryMedia(Bool) case crashOnSlowQueries(PresentationTheme, Bool) @@ -125,7 +125,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { return DebugControllerSection.logging.rawValue case .webViewInspection, .resetWebViewCache: return DebugControllerSection.web.rawValue - case .keepChatNavigationStack, .skipReadHistory, .unidirectionalSwipeToReply, .callV2, .alternativeStoryMedia, .crashOnSlowQueries, .crashOnMemoryPressure: + case .keepChatNavigationStack, .skipReadHistory, .dustEffect, .callV2, .alternativeStoryMedia, .crashOnSlowQueries, .crashOnMemoryPressure: return DebugControllerSection.experiments.rawValue case .clearTips, .resetNotifications, .crash, .resetData, .resetDatabase, .resetDatabaseAndCache, .resetHoles, .reindexUnread, .resetCacheIndex, .reindexCache, .resetBiometricsData, .optimizeDatabase, .photoPreview, .knockoutWallpaper, .storiesExperiment, .storiesJpegExperiment, .playlistPlayback, .enableQuickReactionSwitch, .voiceConference, .experimentalCompatibility, .enableDebugDataDisplay, .acceleratedStickers, .inlineForums, .localTranscription, .enableReactionOverrides, .restorePurchases: return DebugControllerSection.experiments.rawValue @@ -176,7 +176,7 @@ private enum DebugControllerEntry: ItemListNodeEntry { return 15 case .skipReadHistory: return 16 - case .unidirectionalSwipeToReply: + case .dustEffect: return 17 case .callV2: return 18 @@ -943,11 +943,11 @@ private enum DebugControllerEntry: ItemListNodeEntry { return settings }).start() }) - case let .unidirectionalSwipeToReply(value): - return ItemListSwitchItem(presentationData: presentationData, title: "Legacy swipe to reply", value: value, sectionId: self.section, style: .blocks, updated: { value in + case let .dustEffect(value): + return ItemListSwitchItem(presentationData: presentationData, title: "Dust Debug", value: value, sectionId: self.section, style: .blocks, updated: { value in let _ = updateExperimentalUISettingsInteractively(accountManager: arguments.sharedContext.accountManager, { settings in var settings = settings - settings.unidirectionalSwipeToReply = value + settings.dustEffect = value return settings }).start() }) @@ -1425,7 +1425,7 @@ private func debugControllerEntries(sharedContext: SharedAccountContext, present #if DEBUG entries.append(.skipReadHistory(presentationData.theme, experimentalSettings.skipReadHistory)) #endif - entries.append(.unidirectionalSwipeToReply(experimentalSettings.unidirectionalSwipeToReply)) + entries.append(.dustEffect(experimentalSettings.dustEffect)) entries.append(.callV2(experimentalSettings.callV2)) entries.append(.alternativeStoryMedia(experimentalSettings.alternativeStoryMedia)) } diff --git a/submodules/Display/Source/DisplayLinkAnimator.swift b/submodules/Display/Source/DisplayLinkAnimator.swift index 8a3af9d8c5..c67d08ce94 100644 --- a/submodules/Display/Source/DisplayLinkAnimator.swift +++ b/submodules/Display/Source/DisplayLinkAnimator.swift @@ -1,5 +1,6 @@ import Foundation import UIKit +import Darwin public protocol SharedDisplayLinkDriverLink: AnyObject { var isPaused: Bool { get set } @@ -7,6 +8,24 @@ public protocol SharedDisplayLinkDriverLink: AnyObject { func invalidate() } +private let isIpad: Bool = { + var systemInfo = utsname() + uname(&systemInfo) + let modelCode = withUnsafePointer(to: &systemInfo.machine) { + $0.withMemoryRebound(to: CChar.self, capacity: 1) { + ptr in String.init(validatingUTF8: ptr) + } + } + + if let modelCode { + if modelCode.lowercased().hasPrefix("ipad") { + return true + } + } + + return false +}() + public final class SharedDisplayLinkDriver { public enum FramesPerSecond: Comparable { case fps(Int) @@ -146,7 +165,7 @@ public final class SharedDisplayLinkDriver { if #available(iOS 15.0, *) { let maxFps = Float(UIScreen.main.maximumFramesPerSecond) if maxFps > 61.0 { - let frameRateRange: CAFrameRateRange + var frameRateRange: CAFrameRateRange switch maxFramesPerSecond { case let .fps(fps): if fps > 60 { @@ -157,6 +176,11 @@ public final class SharedDisplayLinkDriver { case .max: frameRateRange = CAFrameRateRange(minimum: 30.0, maximum: 120.0, preferred: 120.0) } + + if isIpad { + frameRateRange = CAFrameRateRange(minimum: 30.0, maximum: 120.0, preferred: 120.0) + } + if displayLink.preferredFrameRateRange != frameRateRange { displayLink.preferredFrameRateRange = frameRateRange print("SharedDisplayLinkDriver: switch to \(frameRateRange)") diff --git a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift index f1c44272d2..599fb613ed 100644 --- a/submodules/TelegramUI/Sources/ChatHistoryListNode.swift +++ b/submodules/TelegramUI/Sources/ChatHistoryListNode.swift @@ -680,6 +680,7 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto private var toLang: String? private var allowDustEffect: Bool = true + private var allowDustEffectForAllMessages: Bool = true private var dustEffectLayer: DustEffectLayer? public init(context: AccountContext, updatedPresentationData: (initial: PresentationData, signal: Signal), chatLocation: ChatLocation, chatLocationContextHolder: Atomic, tagMask: MessageTags?, source: ChatHistoryListSource, subject: ChatControllerSubject?, controllerInteraction: ChatControllerInteraction, selectedMessages: Signal?, NoError>, mode: ChatHistoryListMode = .bubbles, messageTransitionNode: @escaping () -> ChatMessageTransitionNodeImpl?) { @@ -706,6 +707,8 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto } } + self.allowDustEffectForAllMessages = context.sharedContext.immediateExperimentalUISettings.dustEffect + let presentationData = updatedPresentationData.initial self.currentPresentationData = ChatPresentationData(theme: ChatPresentationThemeData(theme: presentationData.theme, wallpaper: presentationData.chatWallpaper), fontSize: presentationData.chatFontSize, strings: presentationData.strings, dateTimeFormat: presentationData.dateTimeFormat, nameDisplayOrder: presentationData.nameDisplayOrder, disableAnimations: true, largeEmoji: presentationData.largeEmoji, chatBubbleCorners: presentationData.chatBubbleCorners, animatedEmojiScale: 1.0) @@ -3010,7 +3013,9 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto expiredMessageStableIds.insert(message.stableId) } } else { - //expiredMessageStableIds.insert(message.stableId) + if self.allowDustEffectForAllMessages { + expiredMessageStableIds.insert(message.stableId) + } } } case let .MessageGroupEntry(_, messages, _): @@ -3028,7 +3033,9 @@ public final class ChatHistoryListNodeImpl: ListView, ChatHistoryNode, ChatHisto expiredMessageStableIds.insert(message.stableId) } } else { - //expiredMessageStableIds.insert(message.stableId) + if self.allowDustEffectForAllMessages { + expiredMessageStableIds.insert(message.stableId) + } } } default: diff --git a/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift b/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift index 189ca331ef..55a80dc035 100644 --- a/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift +++ b/submodules/TelegramUIPreferences/Sources/ExperimentalUISettings.swift @@ -53,7 +53,7 @@ public struct ExperimentalUISettings: Codable, Equatable { public var storiesExperiment: Bool public var storiesJpegExperiment: Bool public var crashOnMemoryPressure: Bool - public var unidirectionalSwipeToReply: Bool + public var dustEffect: Bool public var callV2: Bool public var alternativeStoryMedia: Bool public var allowWebViewInspection: Bool @@ -88,7 +88,7 @@ public struct ExperimentalUISettings: Codable, Equatable { storiesExperiment: false, storiesJpegExperiment: false, crashOnMemoryPressure: false, - unidirectionalSwipeToReply: false, + dustEffect: false, callV2: false, alternativeStoryMedia: false, allowWebViewInspection: false @@ -124,7 +124,7 @@ public struct ExperimentalUISettings: Codable, Equatable { storiesExperiment: Bool, storiesJpegExperiment: Bool, crashOnMemoryPressure: Bool, - unidirectionalSwipeToReply: Bool, + dustEffect: Bool, callV2: Bool, alternativeStoryMedia: Bool, allowWebViewInspection: Bool @@ -157,7 +157,7 @@ public struct ExperimentalUISettings: Codable, Equatable { self.storiesExperiment = storiesExperiment self.storiesJpegExperiment = storiesJpegExperiment self.crashOnMemoryPressure = crashOnMemoryPressure - self.unidirectionalSwipeToReply = unidirectionalSwipeToReply + self.dustEffect = dustEffect self.callV2 = callV2 self.alternativeStoryMedia = alternativeStoryMedia self.allowWebViewInspection = allowWebViewInspection @@ -194,7 +194,7 @@ public struct ExperimentalUISettings: Codable, Equatable { self.storiesExperiment = try container.decodeIfPresent(Bool.self, forKey: "storiesExperiment") ?? false self.storiesJpegExperiment = try container.decodeIfPresent(Bool.self, forKey: "storiesJpegExperiment") ?? false self.crashOnMemoryPressure = try container.decodeIfPresent(Bool.self, forKey: "crashOnMemoryPressure") ?? false - self.unidirectionalSwipeToReply = try container.decodeIfPresent(Bool.self, forKey: "unidirectionalSwipeToReply") ?? false + self.dustEffect = try container.decodeIfPresent(Bool.self, forKey: "dustEffect") ?? false self.callV2 = try container.decodeIfPresent(Bool.self, forKey: "callV2") ?? false self.alternativeStoryMedia = try container.decodeIfPresent(Bool.self, forKey: "alternativeStoryMedia") ?? false self.allowWebViewInspection = try container.decodeIfPresent(Bool.self, forKey: "allowWebViewInspection") ?? false @@ -231,7 +231,7 @@ public struct ExperimentalUISettings: Codable, Equatable { try container.encode(self.storiesExperiment, forKey: "storiesExperiment") try container.encode(self.storiesJpegExperiment, forKey: "storiesJpegExperiment") try container.encode(self.crashOnMemoryPressure, forKey: "crashOnMemoryPressure") - try container.encode(self.unidirectionalSwipeToReply, forKey: "unidirectionalSwipeToReply") + try container.encode(self.dustEffect, forKey: "dustEffect") try container.encode(self.callV2, forKey: "callV2") try container.encode(self.alternativeStoryMedia, forKey: "alternativeStoryMedia") try container.encode(self.allowWebViewInspection, forKey: "allowWebViewInspection") diff --git a/versions.json b/versions.json index 91cbee08f9..459988aabc 100644 --- a/versions.json +++ b/versions.json @@ -1,5 +1,6 @@ { "app": "10.4", "bazel": "6.4.0", - "xcode": "15.0" + "xcode": "15.0", + "macos": "13.0" }