From 4b8c4c79f0c519c97921c6a5def84caae07060b6 Mon Sep 17 00:00:00 2001 From: robot-divkit Date: Mon, 19 Aug 2024 15:10:10 +0300 Subject: [PATCH] Release 30.14.0 2617baea3792929fad5b7489f67b00c547075332 --- .mapping.json | 5 ++ DivKit/DivBlockStateStorage.swift | 18 ++++- DivKit/DivKitComponents.swift | 1 + DivKit/DivKitInfo.swift | 2 +- .../DivPersistentValuesStorage.swift | 2 +- DivKit/StoredValues/DivStoredValue.swift | 3 +- DivKit/Variables/DivTriggersStorage.swift | 59 ++++++++++++---- DivKit/Views/DivView.swift | 1 - LayoutKit/LayoutKit/Blocks/GalleryBlock.swift | 4 +- ...crollableContentPager+ScrollDelegate.swift | 2 +- .../UI/Base/ScrollableContentPager.swift | 68 ++++++++++++------- .../GestureBlock+UIViewRenderableBlock.swift | 10 +++ .../ViewModels/GalleryViewLayout.swift | 11 +++ Specs/DivKit/30.14.0/DivKit.podspec | 24 +++++++ .../30.14.0/DivKitExtensions.podspec | 22 ++++++ .../30.14.0/DivKit_LayoutKit.podspec | 24 +++++++ .../30.14.0/DivKit_LayoutKitInterface.podspec | 23 +++++++ .../30.14.0/DivKit_Serialization.podspec | 23 +++++++ 18 files changed, 253 insertions(+), 49 deletions(-) create mode 100644 Specs/DivKit/30.14.0/DivKit.podspec create mode 100644 Specs/DivKitExtensions/30.14.0/DivKitExtensions.podspec create mode 100644 Specs/DivKit_LayoutKit/30.14.0/DivKit_LayoutKit.podspec create mode 100644 Specs/DivKit_LayoutKitInterface/30.14.0/DivKit_LayoutKitInterface.podspec create mode 100644 Specs/DivKit_Serialization/30.14.0/DivKit_Serialization.podspec diff --git a/.mapping.json b/.mapping.json index 9e5e3c95..8317aecb 100644 --- a/.mapping.json +++ b/.mapping.json @@ -895,6 +895,7 @@ "Specs/DivKit/30.11.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.11.0/DivKit.podspec", "Specs/DivKit/30.12.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.12.0/DivKit.podspec", "Specs/DivKit/30.13.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.13.0/DivKit.podspec", + "Specs/DivKit/30.14.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.14.0/DivKit.podspec", "Specs/DivKit/30.2.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.2.0/DivKit.podspec", "Specs/DivKit/30.3.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.3.0/DivKit.podspec", "Specs/DivKit/30.4.0/DivKit.podspec":"divkit/public-ios/Specs/DivKit/30.4.0/DivKit.podspec", @@ -960,6 +961,7 @@ "Specs/DivKitExtensions/30.11.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.11.0/DivKitExtensions.podspec", "Specs/DivKitExtensions/30.12.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.12.0/DivKitExtensions.podspec", "Specs/DivKitExtensions/30.13.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.13.0/DivKitExtensions.podspec", + "Specs/DivKitExtensions/30.14.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.14.0/DivKitExtensions.podspec", "Specs/DivKitExtensions/30.2.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.2.0/DivKitExtensions.podspec", "Specs/DivKitExtensions/30.3.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.3.0/DivKitExtensions.podspec", "Specs/DivKitExtensions/30.4.0/DivKitExtensions.podspec":"divkit/public-ios/Specs/DivKitExtensions/30.4.0/DivKitExtensions.podspec", @@ -1007,6 +1009,7 @@ "Specs/DivKit_LayoutKit/30.11.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.11.0/DivKit_LayoutKit.podspec", "Specs/DivKit_LayoutKit/30.12.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.12.0/DivKit_LayoutKit.podspec", "Specs/DivKit_LayoutKit/30.13.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.13.0/DivKit_LayoutKit.podspec", + "Specs/DivKit_LayoutKit/30.14.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.14.0/DivKit_LayoutKit.podspec", "Specs/DivKit_LayoutKit/30.2.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.2.0/DivKit_LayoutKit.podspec", "Specs/DivKit_LayoutKit/30.3.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.3.0/DivKit_LayoutKit.podspec", "Specs/DivKit_LayoutKit/30.4.0/DivKit_LayoutKit.podspec":"divkit/public-ios/Specs/DivKit_LayoutKit/30.4.0/DivKit_LayoutKit.podspec", @@ -1054,6 +1057,7 @@ "Specs/DivKit_LayoutKitInterface/30.11.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.11.0/DivKit_LayoutKitInterface.podspec", "Specs/DivKit_LayoutKitInterface/30.12.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.12.0/DivKit_LayoutKitInterface.podspec", "Specs/DivKit_LayoutKitInterface/30.13.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.13.0/DivKit_LayoutKitInterface.podspec", + "Specs/DivKit_LayoutKitInterface/30.14.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.14.0/DivKit_LayoutKitInterface.podspec", "Specs/DivKit_LayoutKitInterface/30.2.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.2.0/DivKit_LayoutKitInterface.podspec", "Specs/DivKit_LayoutKitInterface/30.3.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.3.0/DivKit_LayoutKitInterface.podspec", "Specs/DivKit_LayoutKitInterface/30.4.0/DivKit_LayoutKitInterface.podspec":"divkit/public-ios/Specs/DivKit_LayoutKitInterface/30.4.0/DivKit_LayoutKitInterface.podspec", @@ -1101,6 +1105,7 @@ "Specs/DivKit_Serialization/30.11.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.11.0/DivKit_Serialization.podspec", "Specs/DivKit_Serialization/30.12.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.12.0/DivKit_Serialization.podspec", "Specs/DivKit_Serialization/30.13.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.13.0/DivKit_Serialization.podspec", + "Specs/DivKit_Serialization/30.14.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.14.0/DivKit_Serialization.podspec", "Specs/DivKit_Serialization/30.2.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.2.0/DivKit_Serialization.podspec", "Specs/DivKit_Serialization/30.3.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.3.0/DivKit_Serialization.podspec", "Specs/DivKit_Serialization/30.4.0/DivKit_Serialization.podspec":"divkit/public-ios/Specs/DivKit_Serialization/30.4.0/DivKit_Serialization.podspec", diff --git a/DivKit/DivBlockStateStorage.swift b/DivKit/DivBlockStateStorage.swift index 8651d48d..3d6b3ba2 100644 --- a/DivKit/DivBlockStateStorage.swift +++ b/DivKit/DivBlockStateStorage.swift @@ -19,11 +19,21 @@ public struct IdAndCardId: Hashable { } public final class DivBlockStateStorage { + public struct ChangeEvent { + public let id: IdAndCardId + public let state: ElementState + } + public private(set) var states: BlocksState private var statesById: [IdAndCardId: ElementState] = [:] private var focusedElement: UIElementPath? private var focusedElementById: IdAndCardId? private let lock = AllocatedUnfairLock() + private let stateUpdatesPipe = SignalPipe() + + var stateUpdates: Signal { + stateUpdatesPipe.signal + } public init(states: BlocksState = [:]) { self.states = states @@ -53,16 +63,20 @@ public final class DivBlockStateStorage { } public func setState(path: UIElementPath, state: ElementState) { + let id = IdAndCardId(path: path) lock.withLock { - statesById[IdAndCardId(path: path)] = nil + statesById[id] = nil states[path] = state } + stateUpdatesPipe.send(ChangeEvent(id: id, state: state)) } public func setState(id: String, cardId: DivCardID, state: ElementState) { + let id = IdAndCardId(id: id, cardId: cardId) lock.withLock { - statesById[IdAndCardId(id: id, cardId: cardId)] = state + statesById[id] = state } + stateUpdatesPipe.send(ChangeEvent(id: id, state: state)) } public func setFocused(isFocused: Bool, element: IdAndCardId) { diff --git a/DivKit/DivKitComponents.swift b/DivKit/DivKitComponents.swift index d82ce011..49af544f 100644 --- a/DivKit/DivKitComponents.swift +++ b/DivKit/DivKitComponents.swift @@ -182,6 +182,7 @@ public final class DivKitComponents { triggersStorage = DivTriggersStorage( variablesStorage: variablesStorage, + stateUpdates: blockStateStorage.stateUpdates, actionHandler: actionHandler, persistentValuesStorage: persistentValuesStorage, reporter: reporter diff --git a/DivKit/DivKitInfo.swift b/DivKit/DivKitInfo.swift index 0f2d26e2..5ef1eb66 100644 --- a/DivKit/DivKitInfo.swift +++ b/DivKit/DivKitInfo.swift @@ -1,3 +1,3 @@ public enum DivKitInfo { - public static let version = "30.13.0" + public static let version = "30.14.0" } diff --git a/DivKit/StoredValues/DivPersistentValuesStorage.swift b/DivKit/StoredValues/DivPersistentValuesStorage.swift index 87ed1703..af5677b4 100644 --- a/DivKit/StoredValues/DivPersistentValuesStorage.swift +++ b/DivKit/StoredValues/DivPersistentValuesStorage.swift @@ -96,7 +96,7 @@ extension DivStoredValue { } else { nil } - case .bool: + case .bool, .boolean: switch value.lowercased() { case "0", "false": .bool(false) diff --git a/DivKit/StoredValues/DivStoredValue.swift b/DivKit/StoredValues/DivStoredValue.swift index 542a43ff..85cec886 100644 --- a/DivKit/StoredValues/DivStoredValue.swift +++ b/DivKit/StoredValues/DivStoredValue.swift @@ -5,7 +5,8 @@ struct DivStoredValue { case string case number case integer - case bool + case boolean + case bool // invalid value, used for backward compatibility case color case url } diff --git a/DivKit/Variables/DivTriggersStorage.swift b/DivKit/Variables/DivTriggersStorage.swift index 42b89599..06e471c5 100644 --- a/DivKit/Variables/DivTriggersStorage.swift +++ b/DivKit/Variables/DivTriggersStorage.swift @@ -34,6 +34,7 @@ public final class DivTriggersStorage { public init( variablesStorage: DivVariablesStorage, + stateUpdates: Signal = .empty, actionHandler: DivActionHandler, persistentValuesStorage: DivPersistentValuesStorage, reporter: DivReporter? = nil @@ -42,6 +43,10 @@ public final class DivTriggersStorage { self.actionHandler = actionHandler self.persistentValuesStorage = persistentValuesStorage self.reporter = reporter ?? DefaultDivReporter() + + stateUpdates.addObserver { [weak self] stateEvent in + self?.handleStateEvent(stateEvent) + }.dispose(in: disposePool) } public func set( @@ -114,19 +119,30 @@ public final class DivTriggersStorage { } func enableTriggers(path: UIElementPath) { - let item = lock.withLock { - let item = triggersByPath[path] - item?.active = true - return item + enableTriggers(predicate: { $0.starts(with: path) }) + } + + func disableTriggers(path: UIElementPath) { + disableTriggers(predicate: { $0.starts(with: path) }) + } + + private func enableTriggers(predicate: (UIElementPath) -> Bool) { + let items = lock.withLock { + let triggers = triggersByPath.filter { predicate($0.key) } + triggers.forEach { $0.value.active = true } + return triggers } - guard let item else { return } - runActions(path: path, item: item, changedVariablesNames: nil) + items.forEach { path, item in + runActions(path: path, item: item, changedVariablesNames: nil) + } } - func disableTriggers(path: UIElementPath) { + private func disableTriggers(predicate: (UIElementPath) -> Bool) { lock.withLock { - triggersByPath[path]?.active = false + triggersByPath + .filter { predicate($0.key) } + .forEach { $0.value.active = false } } } @@ -175,20 +191,24 @@ public final class DivTriggersStorage { } } } -} -extension DivTriggersStorage: ElementStateObserver { - public func elementStateChanged(_ state: ElementState, forPath path: UIElementPath) { - if let tabState = state as? TabViewState { + private func handleStateEvent(_ stateEvent: DivBlockStateStorage.ChangeEvent) { + if let tabState = stateEvent.state as? TabViewState { let activeTab = Int(tabState.selectedPageIndex) for index in 0.. String? { + var currPath: UIElementPath? = self + while let path = currPath { + if path.parent?.leaf == tabsId { + return path.leaf + } + currPath = currPath?.parent + } + return nil + } } diff --git a/DivKit/Views/DivView.swift b/DivKit/Views/DivView.swift index aa8db514..1553cefd 100644 --- a/DivKit/Views/DivView.swift +++ b/DivKit/Views/DivView.swift @@ -214,7 +214,6 @@ public final class DivView: VisibleBoundsTrackingView { extension DivView: ElementStateObserver { public func elementStateChanged(_ state: ElementState, forPath path: UIElementPath) { divKitComponents.blockStateStorage.elementStateChanged(state, forPath: path) - divKitComponents.triggersStorage.elementStateChanged(state, forPath: path) blockProvider?.update(withStates: [path: state]) } diff --git a/LayoutKit/LayoutKit/Blocks/GalleryBlock.swift b/LayoutKit/LayoutKit/Blocks/GalleryBlock.swift index baedfa38..428c4be9 100644 --- a/LayoutKit/LayoutKit/Blocks/GalleryBlock.swift +++ b/LayoutKit/LayoutKit/Blocks/GalleryBlock.swift @@ -43,12 +43,12 @@ public final class GalleryBlock: BlockWithTraits { } } - public func intrinsicContentHeight(forWidth _: CGFloat) -> CGFloat { + public func intrinsicContentHeight(forWidth width: CGFloat) -> CGFloat { switch heightTrait { case let .fixed(value): return value case let .intrinsic(_, minSize, maxSize): - let height = contentSize.height + let height = model.intrinsicSize(width: width).height return clamp(height, min: minSize, max: maxSize) case .weighted: return 0 diff --git a/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager+ScrollDelegate.swift b/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager+ScrollDelegate.swift index dea05944..d5af0701 100644 --- a/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager+ScrollDelegate.swift +++ b/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager+ScrollDelegate.swift @@ -18,7 +18,7 @@ extension ScrollableContentPager: ScrollDelegate { : targetContentOffset.pointee.y if let resultOffset = targetPageOffset( forProposedOffset: proposedOffset, - velocity: velocity.projection(isHorizontal) + isHorizontal: isHorizontal ) { if isHorizontal { targetContentOffset.pointee.x = resultOffset diff --git a/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager.swift b/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager.swift index 5b5cf60b..989e0925 100644 --- a/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager.swift +++ b/LayoutKit/LayoutKit/UI/Base/ScrollableContentPager.swift @@ -20,53 +20,69 @@ public final class ScrollableContentPager: NSObject { currentPageIndex = nil } } - + public func setInitialOffset(_ offset: CGFloat) { guard isPagingEnabled else { return } - - currentPageIndex = pageIndex(forOffset: offset) + + if currentPageIndex == nil, lastContentOffset == nil, indexedPageOrigins.count > 0 { + let initialPageIndex = pageIndex(forOffset: offset) + let pageOrigin = indexedPageOrigins[initialPageIndex].origin + let initialContentOffset = isHorizontal ? CGPoint(x: pageOrigin, y: 0) : CGPoint(x: 0, y: pageOrigin) + + currentPageIndex = initialPageIndex + lastContentOffset = initialContentOffset + } } public private(set) var currentPageIndex: Int? + public private(set) var lastContentOffset: CGPoint? - public func targetPageOffset(forProposedOffset offset: CGFloat, velocity: CGFloat) -> CGFloat? { - guard let startPageIndex = currentPageIndex else { return nil } - + public func targetPageOffset(forProposedOffset offset: CGFloat, isHorizontal: Bool) -> CGFloat? { + guard currentPageIndex != nil, + var newLastContentOffset = lastContentOffset else { + return nil + } + var resultPageIndex = pageIndex(forOffset: offset) - if resultPageIndex == startPageIndex, velocity.isApproximatelyNotEqualTo(0) { - let forcedIndexOffset = (velocity > 0 ? 1 : -1) - resultPageIndex += forcedIndexOffset + var forcedIndexOffset = 0 + if newLastContentOffset.forceIndexOffset(isHorizontal: isHorizontal).isApproximatelyNotEqualTo(offset) { + forcedIndexOffset = newLastContentOffset.forceIndexOffset(isHorizontal: isHorizontal) < offset ? 1 : 0 } + resultPageIndex += forcedIndexOffset + resultPageIndex = clamp( resultPageIndex, min: 0, max: indexedPageOrigins.count - 1 ) - + + let targetPageOffset = indexedPageOrigins[resultPageIndex].origin + if isHorizontal { + newLastContentOffset.x = targetPageOffset + } else { + newLastContentOffset.y = targetPageOffset + } + lastContentOffset = newLastContentOffset currentPageIndex = resultPageIndex - return indexedPageOrigins[resultPageIndex].origin + return targetPageOffset } - + private func pageIndex(forOffset offset: CGFloat) -> Int { - Int(round(intermediatePageIndex(forOffset: offset))) - } - - private func intermediatePageIndex(forOffset offset: CGFloat) -> Float { - guard let rightBound = indexedPageOrigins.first(where: { + guard indexedPageOrigins.first(where: { $0.origin.isApproximatelyGreaterOrEqualThan(offset) - }) else { return Float(indexedPageOrigins.count - 1) } - + }) != nil else { return indexedPageOrigins.count - 1 } + guard let leftBound = indexedPageOrigins.reversed().first(where: { $0.origin.isApproximatelyLessOrEqualThan(offset) }) else { return 0 } + + return leftBound.index + } +} - guard rightBound.index != leftBound.index, - !rightBound.origin.isApproximatelyEqualTo(leftBound.origin) else { - return Float(leftBound.index) +extension CGPoint { + fileprivate func forceIndexOffset(isHorizontal: Bool) -> CGFloat { + isHorizontal ? self.x : self.y } - - let relativePart = (offset - leftBound.origin) / (rightBound.origin - leftBound.origin) - return Float(leftBound.index) + Float(relativePart) - } } diff --git a/LayoutKit/LayoutKit/UI/Blocks/GestureBlock+UIViewRenderableBlock.swift b/LayoutKit/LayoutKit/UI/Blocks/GestureBlock+UIViewRenderableBlock.swift index 507c69e0..4e9233d6 100644 --- a/LayoutKit/LayoutKit/UI/Blocks/GestureBlock+UIViewRenderableBlock.swift +++ b/LayoutKit/LayoutKit/UI/Blocks/GestureBlock+UIViewRenderableBlock.swift @@ -127,6 +127,7 @@ private final class GestureView: BlockView { action: #selector(handleSwipe(_:)) ) recognizer.direction = direction + recognizer.delegate = self return recognizer } } @@ -136,3 +137,12 @@ extension GestureView: VisibleBoundsTrackingContainer { [childView] } } + +extension GestureView: UIGestureRecognizerDelegate { + func gestureRecognizer( + _ gestureRecognizer: UIGestureRecognizer, + shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer + ) -> Bool { + return true + } +} diff --git a/LayoutKit/LayoutKit/ViewModels/GalleryViewLayout.swift b/LayoutKit/LayoutKit/ViewModels/GalleryViewLayout.swift index 121498ea..7c31e65f 100644 --- a/LayoutKit/LayoutKit/ViewModels/GalleryViewLayout.swift +++ b/LayoutKit/LayoutKit/ViewModels/GalleryViewLayout.swift @@ -93,6 +93,17 @@ extension GalleryViewModel { let frames = self.frames(fitting: nil) return contentSize(for: frames, fitting: nil) } + + func intrinsicSize(width: CGFloat) -> CGSize { + switch direction { + case .horizontal: + return intrinsicSize + case .vertical: + let size = CGSize(width: width, height: .infinity) + let frames = self.frames(fitting: size) + return contentSize(for: frames, fitting: size) + } + } } extension GalleryViewModel { diff --git a/Specs/DivKit/30.14.0/DivKit.podspec b/Specs/DivKit/30.14.0/DivKit.podspec new file mode 100644 index 00000000..3b707a11 --- /dev/null +++ b/Specs/DivKit/30.14.0/DivKit.podspec @@ -0,0 +1,24 @@ +Pod::Spec.new do |s| + s.name = 'DivKit' + s.version = '30.14.0' + s.summary = 'DivKit framework' + s.description = 'DivKit is a backend-driven UI framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5.9' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '13.0' } + + s.dependency 'DivKit_LayoutKit', s.version.to_s + s.dependency 'DivKit_Serialization', s.version.to_s + s.dependency 'VGSL', '~> 6.0' + + s.source_files = [ + 'DivKit/**/*' + ] +end diff --git a/Specs/DivKitExtensions/30.14.0/DivKitExtensions.podspec b/Specs/DivKitExtensions/30.14.0/DivKitExtensions.podspec new file mode 100644 index 00000000..ba08b8bf --- /dev/null +++ b/Specs/DivKitExtensions/30.14.0/DivKitExtensions.podspec @@ -0,0 +1,22 @@ +Pod::Spec.new do |s| + s.name = 'DivKitExtensions' + s.version = '30.14.0' + s.summary = 'DivKit framework extensions' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5.9' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '13.0' } + + s.dependency 'DivKit', s.version.to_s + + s.source_files = [ + 'DivKitExtensions/**/*' + ] +end diff --git a/Specs/DivKit_LayoutKit/30.14.0/DivKit_LayoutKit.podspec b/Specs/DivKit_LayoutKit/30.14.0/DivKit_LayoutKit.podspec new file mode 100644 index 00000000..5cce0520 --- /dev/null +++ b/Specs/DivKit_LayoutKit/30.14.0/DivKit_LayoutKit.podspec @@ -0,0 +1,24 @@ +Pod::Spec.new do |s| + s.name = 'DivKit_LayoutKit' + s.module_name = 'LayoutKit' + s.version = '30.14.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5.9' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '13.0' } + + s.dependency 'DivKit_LayoutKitInterface', s.version.to_s + s.dependency 'VGSL', '~> 6.0' + + s.source_files = [ + 'LayoutKit/LayoutKit/**/*' + ] +end diff --git a/Specs/DivKit_LayoutKitInterface/30.14.0/DivKit_LayoutKitInterface.podspec b/Specs/DivKit_LayoutKitInterface/30.14.0/DivKit_LayoutKitInterface.podspec new file mode 100644 index 00000000..28e9a333 --- /dev/null +++ b/Specs/DivKit_LayoutKitInterface/30.14.0/DivKit_LayoutKitInterface.podspec @@ -0,0 +1,23 @@ +Pod::Spec.new do |s| + s.name = 'DivKit_LayoutKitInterface' + s.module_name = 'LayoutKitInterface' + s.version = '30.14.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5.9' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '13.0' } + + s.dependency 'VGSL', '~> 6.0' + + s.source_files = [ + 'LayoutKit/Interface/**/*' + ] +end diff --git a/Specs/DivKit_Serialization/30.14.0/DivKit_Serialization.podspec b/Specs/DivKit_Serialization/30.14.0/DivKit_Serialization.podspec new file mode 100644 index 00000000..2ecbc424 --- /dev/null +++ b/Specs/DivKit_Serialization/30.14.0/DivKit_Serialization.podspec @@ -0,0 +1,23 @@ +Pod::Spec.new do |s| + s.name = 'DivKit_Serialization' + s.module_name = 'Serialization' + s.version = '30.14.0' + s.summary = 'Part of DivKit framework' + s.description = 'Part of DivKit framework' + s.homepage = 'https://divkit.tech' + + s.license = { :type => 'Apache License, Version 2.0', :file => 'LICENSE' } + s.author = { 'divkit' => 'divkit@yandex-team.ru' } + s.source = { :git => 'https://github.com/divkit/divkit-ios.git', :tag => s.version.to_s } + + s.swift_version = '5.9' + s.requires_arc = true + s.prefix_header_file = false + s.platforms = { :ios => '13.0' } + + s.dependency 'VGSL', '~> 6.0' + + s.source_files = [ + 'Serialization/**/*' + ] +end