@shortkitsdk/react-native 0.2.5 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. package/ShortKitReactNative.podspec +1 -0
  2. package/android/build.gradle.kts +5 -1
  3. package/android/src/main/java/com/shortkit/reactnative/ReactCarouselOverlayHost.kt +319 -0
  4. package/android/src/main/java/com/shortkit/reactnative/ReactLoadingHost.kt +40 -0
  5. package/android/src/main/java/com/shortkit/reactnative/ReactOverlayHost.kt +559 -0
  6. package/android/src/main/java/com/shortkit/reactnative/ShortKitBridge.kt +984 -0
  7. package/android/src/main/java/com/shortkit/reactnative/ShortKitFeedView.kt +88 -220
  8. package/android/src/main/java/com/shortkit/reactnative/ShortKitFeedViewManager.kt +12 -3
  9. package/android/src/main/java/com/shortkit/reactnative/ShortKitModule.kt +126 -706
  10. package/android/src/main/java/com/shortkit/reactnative/ShortKitPlayerNativeView.kt +2 -2
  11. package/android/src/main/java/com/shortkit/reactnative/ShortKitWidgetNativeView.kt +2 -2
  12. package/ios/ReactCarouselOverlayHost.swift +177 -0
  13. package/ios/ReactLoadingHost.swift +38 -0
  14. package/ios/ReactOverlayHost.swift +458 -0
  15. package/ios/SKFabricSurfaceWrapper.h +18 -0
  16. package/ios/SKFabricSurfaceWrapper.mm +57 -0
  17. package/ios/ShortKitBridge.swift +266 -65
  18. package/ios/ShortKitFeedView.swift +63 -207
  19. package/ios/ShortKitFeedViewManager.mm +3 -2
  20. package/ios/ShortKitModule.mm +86 -32
  21. package/ios/ShortKitPlayerNativeView.swift +39 -8
  22. package/ios/ShortKitReactNative-Bridging-Header.h +2 -0
  23. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +2 -1
  24. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json +3998 -962
  25. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +85 -24
  26. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  27. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface +85 -24
  28. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/ShortKitSDK +0 -0
  29. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +2 -1
  30. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +3998 -962
  31. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +85 -24
  32. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  33. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +85 -24
  34. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
  35. package/ios/ShortKitSDK.xcframework.bak/Info.plist +43 -0
  36. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +418 -0
  37. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Info.plist +16 -0
  38. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json +28917 -0
  39. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +824 -0
  40. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  41. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface +824 -0
  42. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/Modules/module.modulemap +4 -0
  43. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/ShortKitSDK +0 -0
  44. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +418 -0
  45. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Info.plist +16 -0
  46. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +28917 -0
  47. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +824 -0
  48. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  49. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +824 -0
  50. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/Modules/module.modulemap +4 -0
  51. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
  52. package/ios/ShortKitWidgetNativeView.swift +3 -3
  53. package/package.json +1 -1
  54. package/src/ShortKitCarouselOverlaySurface.tsx +55 -0
  55. package/src/ShortKitCommands.ts +31 -0
  56. package/src/ShortKitContext.ts +11 -25
  57. package/src/ShortKitFeed.tsx +110 -41
  58. package/src/ShortKitLoadingSurface.tsx +24 -0
  59. package/src/ShortKitOverlaySurface.tsx +205 -0
  60. package/src/ShortKitPlayer.tsx +6 -7
  61. package/src/ShortKitProvider.tsx +65 -250
  62. package/src/index.ts +9 -4
  63. package/src/serialization.ts +22 -42
  64. package/src/specs/NativeShortKitModule.ts +67 -53
  65. package/src/specs/ShortKitFeedViewNativeComponent.ts +3 -2
  66. package/src/types.ts +104 -19
  67. package/src/useShortKit.ts +1 -3
  68. package/src/useShortKitPlayer.ts +7 -8
  69. package/android/src/main/java/com/shortkit/reactnative/ShortKitCarouselOverlayBridge.kt +0 -48
  70. package/android/src/main/java/com/shortkit/reactnative/ShortKitOverlayBridge.kt +0 -128
  71. package/ios/ShortKitCarouselOverlayBridge.swift +0 -54
  72. package/ios/ShortKitOverlayBridge.swift +0 -113
  73. package/src/CarouselOverlayManager.tsx +0 -71
  74. package/src/OverlayManager.tsx +0 -87
  75. package/src/useShortKitCarousel.ts +0 -29
@@ -1,12 +1,13 @@
1
1
  // swift-interface-format-version: 1.0
2
2
  // swift-compiler-version: Apple Swift version 6.1 effective-5.10 (swiftlang-6.1.0.110.21 clang-1700.0.13.3)
3
- // swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -O -module-name ShortKitSDK -package-name swift_sdk
3
+ // swift-module-flags: -target arm64-apple-ios15.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -O -module-name ShortKitSDK -package-name swift_sdk
4
4
  // swift-module-flags-ignorable: -interface-compiler-version 6.1
5
5
  import AVFoundation
6
6
  import Combine
7
7
  import CoreGraphics
8
8
  import Foundation
9
9
  import Network
10
+ import QuartzCore
10
11
  import Swift
11
12
  import SwiftUI
12
13
  import UIKit
@@ -159,7 +160,6 @@ final public class SegmentPrefetcher : ShortKitSDK.SegmentPrefetcherProtocol {
159
160
  final public func updateCurrentIndex(_ index: Swift.Int, feedItems: [ShortKitSDK.FeedItem])
160
161
  final public func pause()
161
162
  final public func resume()
162
- public static func selectTargets(currentIndex: Swift.Int, feedItems: [ShortKitSDK.FeedItem], cache: any ShortKitSDK.SegmentCacheProtocol, maxCount: Swift.Int) -> [ShortKitSDK.ContentItem]
163
163
  @objc deinit
164
164
  }
165
165
  public enum FeedHeight : Swift.Codable, Swift.Equatable, Swift.Sendable {
@@ -178,6 +178,17 @@ public enum FeedSource : Swift.String, Swift.Codable, Swift.Equatable, Swift.Sen
178
178
  get
179
179
  }
180
180
  }
181
+ public struct FeedFilter : Swift.Codable, Swift.Equatable, Swift.Sendable {
182
+ public var tags: [Swift.String]?
183
+ public var section: Swift.String?
184
+ public var author: Swift.String?
185
+ public var contentType: Swift.String?
186
+ public var metadata: [Swift.String : Swift.String]?
187
+ public init(tags: [Swift.String]? = nil, section: Swift.String? = nil, author: Swift.String? = nil, contentType: Swift.String? = nil, metadata: [Swift.String : Swift.String]? = nil)
188
+ public static func == (a: ShortKitSDK.FeedFilter, b: ShortKitSDK.FeedFilter) -> Swift.Bool
189
+ public func encode(to encoder: any Swift.Encoder) throws
190
+ public init(from decoder: any Swift.Decoder) throws
191
+ }
181
192
  public struct FeedConfig : Swift.Codable {
182
193
  public var feedHeight: ShortKitSDK.FeedHeight
183
194
  public var videoOverlay: ShortKitSDK.VideoOverlayMode
@@ -185,9 +196,12 @@ public struct FeedConfig : Swift.Codable {
185
196
  public var surveyOverlay: ShortKitSDK.SurveyOverlayMode
186
197
  public var adOverlay: ShortKitSDK.AdOverlayMode
187
198
  public var muteOnStart: Swift.Bool
199
+ public var autoplay: Swift.Bool
188
200
  public var feedSource: ShortKitSDK.FeedSource
189
201
  public var coldStartEnabled: Swift.Bool
190
- public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, carouselOverlay: ShortKitSDK.CarouselOverlayMode = .none, surveyOverlay: ShortKitSDK.SurveyOverlayMode = .none, adOverlay: ShortKitSDK.AdOverlayMode = .none, muteOnStart: Swift.Bool = true, feedSource: ShortKitSDK.FeedSource = .algorithmic, coldStartEnabled: Swift.Bool? = nil)
202
+ public var filter: ShortKitSDK.FeedFilter?
203
+ public var preload: ShortKitSDK.FeedPreload?
204
+ public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, carouselOverlay: ShortKitSDK.CarouselOverlayMode = .none, surveyOverlay: ShortKitSDK.SurveyOverlayMode = .none, adOverlay: ShortKitSDK.AdOverlayMode = .none, muteOnStart: Swift.Bool = true, autoplay: Swift.Bool = true, feedSource: ShortKitSDK.FeedSource = .algorithmic, coldStartEnabled: Swift.Bool = false, filter: ShortKitSDK.FeedFilter? = nil, preload: ShortKitSDK.FeedPreload? = nil)
191
205
  public func encode(to encoder: any Swift.Encoder) throws
192
206
  public init(from decoder: any Swift.Decoder) throws
193
207
  }
@@ -195,6 +209,9 @@ public enum VideoOverlayMode {
195
209
  case none
196
210
  case custom(@Sendable () -> any UIKit.UIView & ShortKitSDK.FeedOverlay)
197
211
  }
212
+ extension ShortKitSDK.VideoOverlayMode {
213
+ public static func swiftUI<Content>(@SwiftUICore.ViewBuilder content: @escaping @Sendable (ShortKitSDK.ShortKitPlayer, ShortKitSDK.CellContent) -> Content) -> ShortKitSDK.VideoOverlayMode where Content : SwiftUICore.View
214
+ }
198
215
  extension ShortKitSDK.VideoOverlayMode : Swift.Equatable {
199
216
  public static func == (lhs: ShortKitSDK.VideoOverlayMode, rhs: ShortKitSDK.VideoOverlayMode) -> Swift.Bool
200
217
  }
@@ -238,23 +255,37 @@ extension ShortKitSDK.AdOverlayMode : Swift.Codable {
238
255
  public protocol ShortKitDelegate : AnyObject {
239
256
  func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
240
257
  func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
258
+ func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
241
259
  }
242
260
  extension ShortKitSDK.ShortKitDelegate {
243
261
  public func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
244
262
  public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
263
+ public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
264
+ }
265
+ @_hasMissingDesignatedInitializers final public class FeedPreload : @unchecked Swift.Sendable {
266
+ @objc deinit
245
267
  }
246
268
  @_Concurrency.MainActor @preconcurrency public struct ShortKitFeedView : SwiftUI.UIViewControllerRepresentable {
247
- @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit)
269
+ @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, config: ShortKitSDK.FeedConfig)
270
+ @_Concurrency.MainActor @preconcurrency public func makeCoordinator() -> ShortKitSDK.ShortKitFeedView.Coordinator
248
271
  @_Concurrency.MainActor @preconcurrency public func makeUIViewController(context: ShortKitSDK.ShortKitFeedView.Context) -> ShortKitSDK.ShortKitFeedViewController
249
272
  @_Concurrency.MainActor @preconcurrency public func updateUIViewController(_ uiViewController: ShortKitSDK.ShortKitFeedViewController, context: ShortKitSDK.ShortKitFeedView.Context)
273
+ @_hasMissingDesignatedInitializers final public class Coordinator {
274
+ weak final public var feedViewController: ShortKitSDK.ShortKitFeedViewController?
275
+ @objc deinit
276
+ }
250
277
  public typealias Body = Swift.Never
251
- public typealias Coordinator = Swift.Void
252
278
  public typealias UIViewControllerType = ShortKitSDK.ShortKitFeedViewController
253
279
  }
254
280
  @objc @_hasMissingDesignatedInitializers @_Concurrency.MainActor @preconcurrency public class ShortKitFeedViewController : UIKit.UIViewController {
255
281
  @_Concurrency.MainActor @preconcurrency public var onDismiss: (() -> Swift.Void)?
256
- @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, startAtItemId: Swift.String? = nil)
282
+ @_Concurrency.MainActor @preconcurrency public var onRemainingContentCountChange: ((Swift.Int) -> Swift.Void)?
283
+ @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, config: ShortKitSDK.FeedConfig, startAtItemId: Swift.String? = nil)
284
+ @_Concurrency.MainActor public func setFeedItems(_ items: [ShortKitSDK.FeedInput])
285
+ @_Concurrency.MainActor public func appendFeedItems(_ items: [ShortKitSDK.FeedInput])
286
+ @_Concurrency.MainActor public func applyFilter(_ filter: ShortKitSDK.FeedFilter?)
257
287
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidLoad()
288
+ @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidLayoutSubviews()
258
289
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewWillAppear(_ animated: Swift.Bool)
259
290
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidAppear(_ animated: Swift.Bool)
260
291
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewWillDisappear(_ animated: Swift.Bool)
@@ -356,12 +387,13 @@ public struct ContentItem : Swift.Codable, Swift.Equatable, @unchecked Swift.Sen
356
387
  public let author: Swift.String?
357
388
  public let articleUrl: Swift.String?
358
389
  public let commentCount: Swift.Int?
390
+ public var fallbackUrl: Swift.String?
359
391
  public static func == (a: ShortKitSDK.ContentItem, b: ShortKitSDK.ContentItem) -> Swift.Bool
360
392
  public func encode(to encoder: any Swift.Encoder) throws
361
393
  public init(from decoder: any Swift.Decoder) throws
362
394
  }
363
- public enum CustomFeedItem : Swift.Sendable {
364
- case video(playbackId: Swift.String)
395
+ public enum FeedInput : Swift.Sendable {
396
+ case video(playbackId: Swift.String, fallbackUrl: Swift.String? = nil)
365
397
  case imageCarousel(ShortKitSDK.ImageCarouselItem)
366
398
  }
367
399
  public enum FeedItem : Swift.Sendable {
@@ -414,14 +446,13 @@ extension ShortKitSDK.FeedItem : Swift.Codable {
414
446
  public struct ImageCarouselItem : Swift.Codable, Swift.Equatable, Swift.Sendable {
415
447
  public let id: Swift.String
416
448
  public let images: [ShortKitSDK.CarouselImage]
417
- public let autoScrollInterval: Swift.Double?
418
449
  public let caption: Swift.String?
419
450
  public let title: Swift.String?
420
451
  public let description: Swift.String?
421
452
  public let author: Swift.String?
422
453
  public let section: Swift.String?
423
454
  public let articleUrl: Swift.String?
424
- public init(id: Swift.String, images: [ShortKitSDK.CarouselImage], autoScrollInterval: Swift.Double? = nil, caption: Swift.String? = nil, title: Swift.String? = nil, description: Swift.String? = nil, author: Swift.String? = nil, section: Swift.String? = nil, articleUrl: Swift.String? = nil)
455
+ public init(id: Swift.String, images: [ShortKitSDK.CarouselImage], caption: Swift.String? = nil, title: Swift.String? = nil, description: Swift.String? = nil, author: Swift.String? = nil, section: Swift.String? = nil, articleUrl: Swift.String? = nil)
425
456
  public static func == (a: ShortKitSDK.ImageCarouselItem, b: ShortKitSDK.ImageCarouselItem) -> Swift.Bool
426
457
  public func encode(to encoder: any Swift.Encoder) throws
427
458
  public init(from decoder: any Swift.Decoder) throws
@@ -503,30 +534,49 @@ public struct VTTCue : Swift.Equatable, Swift.Sendable {
503
534
  public protocol AdOverlay : AnyObject {
504
535
  func configure(with content: ShortKitSDK.NativeAdContent)
505
536
  func resetState()
506
- func fadeOutForTransition()
507
- func restoreFromTransition()
508
537
  }
509
538
  public protocol CarouselOverlay : AnyObject {
539
+ var cachedImage: ((Swift.String) -> UIKit.UIImage?)? { get set }
510
540
  func configure(with item: ShortKitSDK.ImageCarouselItem)
511
541
  func resetState()
512
- func fadeOutForTransition()
513
- func restoreFromTransition()
542
+ var wantsNativeImagePrefetch: Swift.Bool { get }
543
+ }
544
+ extension ShortKitSDK.CarouselOverlay {
545
+ public var cachedImage: ((Swift.String) -> UIKit.UIImage?)? {
546
+ get
547
+ set
548
+ }
549
+ public var wantsNativeImagePrefetch: Swift.Bool {
550
+ get
551
+ }
552
+ }
553
+ final public class CellContent : Combine.ObservableObject {
554
+ @Combine.Published @_projectedValueProperty($item) final public var item: ShortKitSDK.ContentItem? {
555
+ get
556
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
557
+ set
558
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
559
+ _modify
560
+ }
561
+ final public var $item: Combine.Published<ShortKitSDK.ContentItem?>.Publisher {
562
+ get
563
+ @available(iOS 14.0, tvOS 14.0, watchOS 7.0, macOS 11.0, *)
564
+ set
565
+ }
566
+ public init()
567
+ public typealias ObjectWillChangePublisher = Combine.ObservableObjectPublisher
568
+ @objc deinit
514
569
  }
515
570
  public protocol FeedOverlay : AnyObject {
516
571
  func attach(player: ShortKitSDK.ShortKitPlayer)
517
572
  func configure(with item: ShortKitSDK.ContentItem)
518
- func resetPlaybackProgress()
519
573
  func activatePlayback()
520
- func fadeOutForTransition()
521
- func restoreFromTransition()
522
574
  }
523
575
  public protocol SurveyOverlay : AnyObject {
524
576
  var onSurveyResponse: ((Swift.String, ShortKitSDK.SurveyOption) -> Swift.Void)? { get set }
525
577
  var onAutoAdvance: (() -> Swift.Void)? { get set }
526
578
  func configure(with item: ShortKitSDK.SurveyItem)
527
579
  func resetState()
528
- func fadeOutForTransition()
529
- func restoreFromTransition()
530
580
  }
531
581
  public struct PlayerTime : Swift.Equatable, Swift.Sendable {
532
582
  public let current: Swift.Double
@@ -582,6 +632,11 @@ public struct FormatChangeEvent : Swift.Equatable, Swift.Sendable {
582
632
  public let toResolution: Swift.String
583
633
  public static func == (a: ShortKitSDK.FormatChangeEvent, b: ShortKitSDK.FormatChangeEvent) -> Swift.Bool
584
634
  }
635
+ public enum FeedScrollPhase : Swift.Equatable, Swift.Sendable {
636
+ case dragging(from: Swift.String)
637
+ case settled
638
+ public static func == (a: ShortKitSDK.FeedScrollPhase, b: ShortKitSDK.FeedScrollPhase) -> Swift.Bool
639
+ }
585
640
  public enum ContentSignal : Swift.Equatable, Swift.Sendable {
586
641
  case positive
587
642
  case negative
@@ -607,6 +662,9 @@ public enum ContentSignal : Swift.Equatable, Swift.Sendable {
607
662
  final public var feedTransition: Combine.AnyPublisher<ShortKitSDK.FeedTransitionEvent, Swift.Never> {
608
663
  get
609
664
  }
665
+ final public var feedScrollPhase: Combine.AnyPublisher<ShortKitSDK.FeedScrollPhase, Swift.Never> {
666
+ get
667
+ }
610
668
  final public var formatChange: Combine.AnyPublisher<ShortKitSDK.FormatChangeEvent, Swift.Never> {
611
669
  get
612
670
  }
@@ -631,6 +689,9 @@ public enum ContentSignal : Swift.Equatable, Swift.Sendable {
631
689
  final public var remainingContentCount: Combine.AnyPublisher<Swift.Int, Swift.Never> {
632
690
  get
633
691
  }
692
+ final public var feedReady: Combine.AnyPublisher<Swift.Void, Swift.Never> {
693
+ get
694
+ }
634
695
  final public var currentItemValue: ShortKitSDK.ContentItem? {
635
696
  get
636
697
  }
@@ -690,13 +751,13 @@ public enum ShortKitVersion {
690
751
  final public class ShortKit {
691
752
  final public let player: ShortKitSDK.ShortKitPlayer
692
753
  weak final public var delegate: (any ShortKitSDK.ShortKitDelegate)?
693
- public init(apiKey: Swift.String, config: ShortKitSDK.FeedConfig, embedId: Swift.String? = nil, userId: Swift.String? = nil, adProvider: (any ShortKitSDK.ShortKitAdProvider)? = nil, clientAppName: Swift.String? = nil, clientAppVersion: Swift.String? = nil, customDimensions: [Swift.String : Swift.String]? = nil, feedItems: [ShortKitSDK.CustomFeedItem]? = nil)
694
- final public func fetchContent(limit: Swift.Int = 10) async throws -> [ShortKitSDK.ContentItem]
754
+ final public var loadingViewProvider: (() -> UIKit.UIView)?
755
+ public init(apiKey: Swift.String, userId: Swift.String? = nil, adProvider: (any ShortKitSDK.ShortKitAdProvider)? = nil, clientAppName: Swift.String? = nil, clientAppVersion: Swift.String? = nil, customDimensions: [Swift.String : Swift.String]? = nil, loadingViewProvider: (() -> UIKit.UIView)? = nil)
756
+ final public func preloadFeed(filter: ShortKitSDK.FeedFilter? = nil, limit: Swift.Int = 10) -> ShortKitSDK.FeedPreload
757
+ final public func fetchContent(limit: Swift.Int = 10, filter: ShortKitSDK.FeedFilter? = nil) async throws -> [ShortKitSDK.ContentItem]
695
758
  final public func setUserId(_ id: Swift.String)
696
759
  final public func clearUserId()
697
- @_Concurrency.MainActor final public func setFeedItems(_ items: [ShortKitSDK.CustomFeedItem])
698
- @_Concurrency.MainActor final public func appendFeedItems(_ items: [ShortKitSDK.CustomFeedItem])
699
- @_Concurrency.MainActor final public func setColdStartQueue(_ items: [ShortKitSDK.CustomFeedItem])
760
+ @_Concurrency.MainActor final public func setColdStartQueue(_ items: [ShortKitSDK.FeedInput])
700
761
  final public func clearColdStartCache()
701
762
  @objc deinit
702
763
  }
@@ -1,12 +1,13 @@
1
1
  // swift-interface-format-version: 1.0
2
2
  // swift-compiler-version: Apple Swift version 6.1 effective-5.10 (swiftlang-6.1.0.110.21 clang-1700.0.13.3)
3
- // swift-module-flags: -target arm64-apple-ios16.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -O -module-name ShortKitSDK -package-name swift_sdk
3
+ // swift-module-flags: -target arm64-apple-ios15.0-simulator -enable-objc-interop -enable-library-evolution -swift-version 5 -O -module-name ShortKitSDK -package-name swift_sdk
4
4
  // swift-module-flags-ignorable: -interface-compiler-version 6.1
5
5
  import AVFoundation
6
6
  import Combine
7
7
  import CoreGraphics
8
8
  import Foundation
9
9
  import Network
10
+ import QuartzCore
10
11
  import Swift
11
12
  import SwiftUI
12
13
  import UIKit
@@ -159,7 +160,6 @@ final public class SegmentPrefetcher : ShortKitSDK.SegmentPrefetcherProtocol {
159
160
  final public func updateCurrentIndex(_ index: Swift.Int, feedItems: [ShortKitSDK.FeedItem])
160
161
  final public func pause()
161
162
  final public func resume()
162
- public static func selectTargets(currentIndex: Swift.Int, feedItems: [ShortKitSDK.FeedItem], cache: any ShortKitSDK.SegmentCacheProtocol, maxCount: Swift.Int) -> [ShortKitSDK.ContentItem]
163
163
  @objc deinit
164
164
  }
165
165
  public enum FeedHeight : Swift.Codable, Swift.Equatable, Swift.Sendable {
@@ -178,6 +178,17 @@ public enum FeedSource : Swift.String, Swift.Codable, Swift.Equatable, Swift.Sen
178
178
  get
179
179
  }
180
180
  }
181
+ public struct FeedFilter : Swift.Codable, Swift.Equatable, Swift.Sendable {
182
+ public var tags: [Swift.String]?
183
+ public var section: Swift.String?
184
+ public var author: Swift.String?
185
+ public var contentType: Swift.String?
186
+ public var metadata: [Swift.String : Swift.String]?
187
+ public init(tags: [Swift.String]? = nil, section: Swift.String? = nil, author: Swift.String? = nil, contentType: Swift.String? = nil, metadata: [Swift.String : Swift.String]? = nil)
188
+ public static func == (a: ShortKitSDK.FeedFilter, b: ShortKitSDK.FeedFilter) -> Swift.Bool
189
+ public func encode(to encoder: any Swift.Encoder) throws
190
+ public init(from decoder: any Swift.Decoder) throws
191
+ }
181
192
  public struct FeedConfig : Swift.Codable {
182
193
  public var feedHeight: ShortKitSDK.FeedHeight
183
194
  public var videoOverlay: ShortKitSDK.VideoOverlayMode
@@ -185,9 +196,12 @@ public struct FeedConfig : Swift.Codable {
185
196
  public var surveyOverlay: ShortKitSDK.SurveyOverlayMode
186
197
  public var adOverlay: ShortKitSDK.AdOverlayMode
187
198
  public var muteOnStart: Swift.Bool
199
+ public var autoplay: Swift.Bool
188
200
  public var feedSource: ShortKitSDK.FeedSource
189
201
  public var coldStartEnabled: Swift.Bool
190
- public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, carouselOverlay: ShortKitSDK.CarouselOverlayMode = .none, surveyOverlay: ShortKitSDK.SurveyOverlayMode = .none, adOverlay: ShortKitSDK.AdOverlayMode = .none, muteOnStart: Swift.Bool = true, feedSource: ShortKitSDK.FeedSource = .algorithmic, coldStartEnabled: Swift.Bool? = nil)
202
+ public var filter: ShortKitSDK.FeedFilter?
203
+ public var preload: ShortKitSDK.FeedPreload?
204
+ public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, carouselOverlay: ShortKitSDK.CarouselOverlayMode = .none, surveyOverlay: ShortKitSDK.SurveyOverlayMode = .none, adOverlay: ShortKitSDK.AdOverlayMode = .none, muteOnStart: Swift.Bool = true, autoplay: Swift.Bool = true, feedSource: ShortKitSDK.FeedSource = .algorithmic, coldStartEnabled: Swift.Bool = false, filter: ShortKitSDK.FeedFilter? = nil, preload: ShortKitSDK.FeedPreload? = nil)
191
205
  public func encode(to encoder: any Swift.Encoder) throws
192
206
  public init(from decoder: any Swift.Decoder) throws
193
207
  }
@@ -195,6 +209,9 @@ public enum VideoOverlayMode {
195
209
  case none
196
210
  case custom(@Sendable () -> any UIKit.UIView & ShortKitSDK.FeedOverlay)
197
211
  }
212
+ extension ShortKitSDK.VideoOverlayMode {
213
+ public static func swiftUI<Content>(@SwiftUICore.ViewBuilder content: @escaping @Sendable (ShortKitSDK.ShortKitPlayer, ShortKitSDK.CellContent) -> Content) -> ShortKitSDK.VideoOverlayMode where Content : SwiftUICore.View
214
+ }
198
215
  extension ShortKitSDK.VideoOverlayMode : Swift.Equatable {
199
216
  public static func == (lhs: ShortKitSDK.VideoOverlayMode, rhs: ShortKitSDK.VideoOverlayMode) -> Swift.Bool
200
217
  }
@@ -238,23 +255,37 @@ extension ShortKitSDK.AdOverlayMode : Swift.Codable {
238
255
  public protocol ShortKitDelegate : AnyObject {
239
256
  func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
240
257
  func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
258
+ func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
241
259
  }
242
260
  extension ShortKitSDK.ShortKitDelegate {
243
261
  public func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
244
262
  public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
263
+ public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
264
+ }
265
+ @_hasMissingDesignatedInitializers final public class FeedPreload : @unchecked Swift.Sendable {
266
+ @objc deinit
245
267
  }
246
268
  @_Concurrency.MainActor @preconcurrency public struct ShortKitFeedView : SwiftUI.UIViewControllerRepresentable {
247
- @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit)
269
+ @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, config: ShortKitSDK.FeedConfig)
270
+ @_Concurrency.MainActor @preconcurrency public func makeCoordinator() -> ShortKitSDK.ShortKitFeedView.Coordinator
248
271
  @_Concurrency.MainActor @preconcurrency public func makeUIViewController(context: ShortKitSDK.ShortKitFeedView.Context) -> ShortKitSDK.ShortKitFeedViewController
249
272
  @_Concurrency.MainActor @preconcurrency public func updateUIViewController(_ uiViewController: ShortKitSDK.ShortKitFeedViewController, context: ShortKitSDK.ShortKitFeedView.Context)
273
+ @_hasMissingDesignatedInitializers final public class Coordinator {
274
+ weak final public var feedViewController: ShortKitSDK.ShortKitFeedViewController?
275
+ @objc deinit
276
+ }
250
277
  public typealias Body = Swift.Never
251
- public typealias Coordinator = Swift.Void
252
278
  public typealias UIViewControllerType = ShortKitSDK.ShortKitFeedViewController
253
279
  }
254
280
  @objc @_hasMissingDesignatedInitializers @_Concurrency.MainActor @preconcurrency public class ShortKitFeedViewController : UIKit.UIViewController {
255
281
  @_Concurrency.MainActor @preconcurrency public var onDismiss: (() -> Swift.Void)?
256
- @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, startAtItemId: Swift.String? = nil)
282
+ @_Concurrency.MainActor @preconcurrency public var onRemainingContentCountChange: ((Swift.Int) -> Swift.Void)?
283
+ @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, config: ShortKitSDK.FeedConfig, startAtItemId: Swift.String? = nil)
284
+ @_Concurrency.MainActor public func setFeedItems(_ items: [ShortKitSDK.FeedInput])
285
+ @_Concurrency.MainActor public func appendFeedItems(_ items: [ShortKitSDK.FeedInput])
286
+ @_Concurrency.MainActor public func applyFilter(_ filter: ShortKitSDK.FeedFilter?)
257
287
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidLoad()
288
+ @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidLayoutSubviews()
258
289
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewWillAppear(_ animated: Swift.Bool)
259
290
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewDidAppear(_ animated: Swift.Bool)
260
291
  @_Concurrency.MainActor @preconcurrency @objc override dynamic public func viewWillDisappear(_ animated: Swift.Bool)
@@ -356,12 +387,13 @@ public struct ContentItem : Swift.Codable, Swift.Equatable, @unchecked Swift.Sen
356
387
  public let author: Swift.String?
357
388
  public let articleUrl: Swift.String?
358
389
  public let commentCount: Swift.Int?
390
+ public var fallbackUrl: Swift.String?
359
391
  public static func == (a: ShortKitSDK.ContentItem, b: ShortKitSDK.ContentItem) -> Swift.Bool
360
392
  public func encode(to encoder: any Swift.Encoder) throws
361
393
  public init(from decoder: any Swift.Decoder) throws
362
394
  }
363
- public enum CustomFeedItem : Swift.Sendable {
364
- case video(playbackId: Swift.String)
395
+ public enum FeedInput : Swift.Sendable {
396
+ case video(playbackId: Swift.String, fallbackUrl: Swift.String? = nil)
365
397
  case imageCarousel(ShortKitSDK.ImageCarouselItem)
366
398
  }
367
399
  public enum FeedItem : Swift.Sendable {
@@ -414,14 +446,13 @@ extension ShortKitSDK.FeedItem : Swift.Codable {
414
446
  public struct ImageCarouselItem : Swift.Codable, Swift.Equatable, Swift.Sendable {
415
447
  public let id: Swift.String
416
448
  public let images: [ShortKitSDK.CarouselImage]
417
- public let autoScrollInterval: Swift.Double?
418
449
  public let caption: Swift.String?
419
450
  public let title: Swift.String?
420
451
  public let description: Swift.String?
421
452
  public let author: Swift.String?
422
453
  public let section: Swift.String?
423
454
  public let articleUrl: Swift.String?
424
- public init(id: Swift.String, images: [ShortKitSDK.CarouselImage], autoScrollInterval: Swift.Double? = nil, caption: Swift.String? = nil, title: Swift.String? = nil, description: Swift.String? = nil, author: Swift.String? = nil, section: Swift.String? = nil, articleUrl: Swift.String? = nil)
455
+ public init(id: Swift.String, images: [ShortKitSDK.CarouselImage], caption: Swift.String? = nil, title: Swift.String? = nil, description: Swift.String? = nil, author: Swift.String? = nil, section: Swift.String? = nil, articleUrl: Swift.String? = nil)
425
456
  public static func == (a: ShortKitSDK.ImageCarouselItem, b: ShortKitSDK.ImageCarouselItem) -> Swift.Bool
426
457
  public func encode(to encoder: any Swift.Encoder) throws
427
458
  public init(from decoder: any Swift.Decoder) throws
@@ -503,30 +534,49 @@ public struct VTTCue : Swift.Equatable, Swift.Sendable {
503
534
  public protocol AdOverlay : AnyObject {
504
535
  func configure(with content: ShortKitSDK.NativeAdContent)
505
536
  func resetState()
506
- func fadeOutForTransition()
507
- func restoreFromTransition()
508
537
  }
509
538
  public protocol CarouselOverlay : AnyObject {
539
+ var cachedImage: ((Swift.String) -> UIKit.UIImage?)? { get set }
510
540
  func configure(with item: ShortKitSDK.ImageCarouselItem)
511
541
  func resetState()
512
- func fadeOutForTransition()
513
- func restoreFromTransition()
542
+ var wantsNativeImagePrefetch: Swift.Bool { get }
543
+ }
544
+ extension ShortKitSDK.CarouselOverlay {
545
+ public var cachedImage: ((Swift.String) -> UIKit.UIImage?)? {
546
+ get
547
+ set
548
+ }
549
+ public var wantsNativeImagePrefetch: Swift.Bool {
550
+ get
551
+ }
552
+ }
553
+ final public class CellContent : Combine.ObservableObject {
554
+ @Combine.Published @_projectedValueProperty($item) final public var item: ShortKitSDK.ContentItem? {
555
+ get
556
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
557
+ set
558
+ @available(iOS 13.0, tvOS 13.0, watchOS 6.0, macOS 10.15, *)
559
+ _modify
560
+ }
561
+ final public var $item: Combine.Published<ShortKitSDK.ContentItem?>.Publisher {
562
+ get
563
+ @available(iOS 14.0, tvOS 14.0, watchOS 7.0, macOS 11.0, *)
564
+ set
565
+ }
566
+ public init()
567
+ public typealias ObjectWillChangePublisher = Combine.ObservableObjectPublisher
568
+ @objc deinit
514
569
  }
515
570
  public protocol FeedOverlay : AnyObject {
516
571
  func attach(player: ShortKitSDK.ShortKitPlayer)
517
572
  func configure(with item: ShortKitSDK.ContentItem)
518
- func resetPlaybackProgress()
519
573
  func activatePlayback()
520
- func fadeOutForTransition()
521
- func restoreFromTransition()
522
574
  }
523
575
  public protocol SurveyOverlay : AnyObject {
524
576
  var onSurveyResponse: ((Swift.String, ShortKitSDK.SurveyOption) -> Swift.Void)? { get set }
525
577
  var onAutoAdvance: (() -> Swift.Void)? { get set }
526
578
  func configure(with item: ShortKitSDK.SurveyItem)
527
579
  func resetState()
528
- func fadeOutForTransition()
529
- func restoreFromTransition()
530
580
  }
531
581
  public struct PlayerTime : Swift.Equatable, Swift.Sendable {
532
582
  public let current: Swift.Double
@@ -582,6 +632,11 @@ public struct FormatChangeEvent : Swift.Equatable, Swift.Sendable {
582
632
  public let toResolution: Swift.String
583
633
  public static func == (a: ShortKitSDK.FormatChangeEvent, b: ShortKitSDK.FormatChangeEvent) -> Swift.Bool
584
634
  }
635
+ public enum FeedScrollPhase : Swift.Equatable, Swift.Sendable {
636
+ case dragging(from: Swift.String)
637
+ case settled
638
+ public static func == (a: ShortKitSDK.FeedScrollPhase, b: ShortKitSDK.FeedScrollPhase) -> Swift.Bool
639
+ }
585
640
  public enum ContentSignal : Swift.Equatable, Swift.Sendable {
586
641
  case positive
587
642
  case negative
@@ -607,6 +662,9 @@ public enum ContentSignal : Swift.Equatable, Swift.Sendable {
607
662
  final public var feedTransition: Combine.AnyPublisher<ShortKitSDK.FeedTransitionEvent, Swift.Never> {
608
663
  get
609
664
  }
665
+ final public var feedScrollPhase: Combine.AnyPublisher<ShortKitSDK.FeedScrollPhase, Swift.Never> {
666
+ get
667
+ }
610
668
  final public var formatChange: Combine.AnyPublisher<ShortKitSDK.FormatChangeEvent, Swift.Never> {
611
669
  get
612
670
  }
@@ -631,6 +689,9 @@ public enum ContentSignal : Swift.Equatable, Swift.Sendable {
631
689
  final public var remainingContentCount: Combine.AnyPublisher<Swift.Int, Swift.Never> {
632
690
  get
633
691
  }
692
+ final public var feedReady: Combine.AnyPublisher<Swift.Void, Swift.Never> {
693
+ get
694
+ }
634
695
  final public var currentItemValue: ShortKitSDK.ContentItem? {
635
696
  get
636
697
  }
@@ -690,13 +751,13 @@ public enum ShortKitVersion {
690
751
  final public class ShortKit {
691
752
  final public let player: ShortKitSDK.ShortKitPlayer
692
753
  weak final public var delegate: (any ShortKitSDK.ShortKitDelegate)?
693
- public init(apiKey: Swift.String, config: ShortKitSDK.FeedConfig, embedId: Swift.String? = nil, userId: Swift.String? = nil, adProvider: (any ShortKitSDK.ShortKitAdProvider)? = nil, clientAppName: Swift.String? = nil, clientAppVersion: Swift.String? = nil, customDimensions: [Swift.String : Swift.String]? = nil, feedItems: [ShortKitSDK.CustomFeedItem]? = nil)
694
- final public func fetchContent(limit: Swift.Int = 10) async throws -> [ShortKitSDK.ContentItem]
754
+ final public var loadingViewProvider: (() -> UIKit.UIView)?
755
+ public init(apiKey: Swift.String, userId: Swift.String? = nil, adProvider: (any ShortKitSDK.ShortKitAdProvider)? = nil, clientAppName: Swift.String? = nil, clientAppVersion: Swift.String? = nil, customDimensions: [Swift.String : Swift.String]? = nil, loadingViewProvider: (() -> UIKit.UIView)? = nil)
756
+ final public func preloadFeed(filter: ShortKitSDK.FeedFilter? = nil, limit: Swift.Int = 10) -> ShortKitSDK.FeedPreload
757
+ final public func fetchContent(limit: Swift.Int = 10, filter: ShortKitSDK.FeedFilter? = nil) async throws -> [ShortKitSDK.ContentItem]
695
758
  final public func setUserId(_ id: Swift.String)
696
759
  final public func clearUserId()
697
- @_Concurrency.MainActor final public func setFeedItems(_ items: [ShortKitSDK.CustomFeedItem])
698
- @_Concurrency.MainActor final public func appendFeedItems(_ items: [ShortKitSDK.CustomFeedItem])
699
- @_Concurrency.MainActor final public func setColdStartQueue(_ items: [ShortKitSDK.CustomFeedItem])
760
+ @_Concurrency.MainActor final public func setColdStartQueue(_ items: [ShortKitSDK.FeedInput])
700
761
  final public func clearColdStartCache()
701
762
  @objc deinit
702
763
  }
@@ -0,0 +1,43 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>AvailableLibraries</key>
6
+ <array>
7
+ <dict>
8
+ <key>BinaryPath</key>
9
+ <string>ShortKitSDK.framework/ShortKitSDK</string>
10
+ <key>LibraryIdentifier</key>
11
+ <string>ios-arm64-simulator</string>
12
+ <key>LibraryPath</key>
13
+ <string>ShortKitSDK.framework</string>
14
+ <key>SupportedArchitectures</key>
15
+ <array>
16
+ <string>arm64</string>
17
+ </array>
18
+ <key>SupportedPlatform</key>
19
+ <string>ios</string>
20
+ <key>SupportedPlatformVariant</key>
21
+ <string>simulator</string>
22
+ </dict>
23
+ <dict>
24
+ <key>BinaryPath</key>
25
+ <string>ShortKitSDK.framework/ShortKitSDK</string>
26
+ <key>LibraryIdentifier</key>
27
+ <string>ios-arm64</string>
28
+ <key>LibraryPath</key>
29
+ <string>ShortKitSDK.framework</string>
30
+ <key>SupportedArchitectures</key>
31
+ <array>
32
+ <string>arm64</string>
33
+ </array>
34
+ <key>SupportedPlatform</key>
35
+ <string>ios</string>
36
+ </dict>
37
+ </array>
38
+ <key>CFBundlePackageType</key>
39
+ <string>XFWK</string>
40
+ <key>XCFrameworkFormatVersion</key>
41
+ <string>1.0</string>
42
+ </dict>
43
+ </plist>