@shortkitsdk/react-native 0.2.12 → 0.2.15

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 (65) hide show
  1. package/android/src/main/java/com/shortkit/reactnative/ReactCarouselOverlayHost.kt +47 -4
  2. package/android/src/main/java/com/shortkit/reactnative/ReactVideoCarouselOverlayHost.kt +431 -0
  3. package/android/src/main/java/com/shortkit/reactnative/ShortKitBridge.kt +117 -2
  4. package/android/src/main/java/com/shortkit/reactnative/ShortKitModule.kt +7 -5
  5. package/ios/ReactCarouselOverlayHost.swift +67 -35
  6. package/ios/ReactOverlayHost.swift +85 -75
  7. package/ios/ReactVideoCarouselOverlayHost.swift +283 -0
  8. package/ios/ShortKitBridge.swift +122 -20
  9. package/ios/ShortKitModule.mm +15 -5
  10. package/ios/ShortKitSDK.xcframework/Info.plist +5 -4
  11. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +1 -0
  12. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Info.plist +5 -1
  13. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json +2488 -281
  14. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +65 -5
  15. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  16. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface +65 -5
  17. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/ShortKitSDK +0 -0
  18. package/ios/ShortKitSDK.xcframework/ios-arm64/ShortKitSDK.framework/_CodeSignature/CodeResources +168 -0
  19. package/ios/{ShortKitSDK.xcframework.bak/ios-arm64-simulator → ShortKitSDK.xcframework/ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +2 -1
  20. package/ios/ShortKitSDK.xcframework/{ios-arm64-simulator → ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Info.plist +5 -1
  21. package/ios/{ShortKitSDK.xcframework.bak/ios-arm64-simulator → ShortKitSDK.xcframework/ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +8233 -3592
  22. package/ios/{ShortKitSDK.xcframework.bak/ios-arm64-simulator → ShortKitSDK.xcframework/ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +120 -19
  23. package/ios/{ShortKitSDK.xcframework.bak/ios-arm64-simulator → ShortKitSDK.xcframework/ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  24. package/ios/{ShortKitSDK.xcframework.bak/ios-arm64-simulator → ShortKitSDK.xcframework/ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +120 -19
  25. package/ios/ShortKitSDK.xcframework/ios-arm64_x86_64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/x86_64-apple-ios-simulator.abi.json +33558 -0
  26. package/ios/ShortKitSDK.xcframework/ios-arm64_x86_64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/x86_64-apple-ios-simulator.private.swiftinterface +925 -0
  27. package/ios/ShortKitSDK.xcframework/ios-arm64_x86_64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/x86_64-apple-ios-simulator.swiftdoc +0 -0
  28. package/ios/ShortKitSDK.xcframework/ios-arm64_x86_64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/x86_64-apple-ios-simulator.swiftinterface +925 -0
  29. package/ios/ShortKitSDK.xcframework/ios-arm64_x86_64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
  30. package/ios/ShortKitSDK.xcframework/ios-arm64_x86_64-simulator/ShortKitSDK.framework/_CodeSignature/CodeResources +212 -0
  31. package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +1 -1
  32. package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json +7338 -3272
  33. package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface +106 -15
  34. package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc +0 -0
  35. package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface +106 -15
  36. package/ios/ShortKitSDK.xcframework.dev-backup/ios-arm64/ShortKitSDK.framework/ShortKitSDK +0 -0
  37. package/ios/ShortKitSDK.xcframework.dev-backup/ios-arm64/ShortKitSDK.framework/_CodeSignature/CodeResources +168 -0
  38. package/ios/{ShortKitSDK.xcframework → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.abi.json +1838 -206
  39. package/ios/{ShortKitSDK.xcframework → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.private.swiftinterface +51 -1
  40. package/ios/{ShortKitSDK.xcframework → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftdoc +0 -0
  41. package/ios/{ShortKitSDK.xcframework → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Modules/ShortKitSDK.swiftmodule/arm64-apple-ios-simulator.swiftinterface +51 -1
  42. package/ios/ShortKitSDK.xcframework.dev-backup/ios-arm64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
  43. package/ios/ShortKitSDK.xcframework.dev-backup/ios-arm64-simulator/ShortKitSDK.framework/_CodeSignature/CodeResources +168 -0
  44. package/package.json +1 -1
  45. package/src/ShortKitCarouselOverlaySurface.tsx +57 -2
  46. package/src/ShortKitContext.ts +11 -0
  47. package/src/ShortKitFeed.tsx +25 -10
  48. package/src/ShortKitOverlaySurface.tsx +24 -11
  49. package/src/ShortKitProvider.tsx +4 -2
  50. package/src/ShortKitVideoCarouselOverlaySurface.tsx +156 -0
  51. package/src/ShortKitWidget.tsx +3 -3
  52. package/src/index.ts +5 -1
  53. package/src/serialization.ts +7 -0
  54. package/src/specs/NativeShortKitModule.ts +18 -2
  55. package/src/types.ts +48 -3
  56. package/ios/ShortKitSDK.xcframework/ios-arm64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
  57. package/ios/ShortKitSDK.xcframework.bak/ios-arm64/ShortKitSDK.framework/ShortKitSDK +0 -0
  58. package/ios/ShortKitSDK.xcframework.bak/ios-arm64-simulator/ShortKitSDK.framework/ShortKitSDK +0 -0
  59. package/ios/ShortKitSDK.xcframework/{ios-arm64-simulator → ios-arm64_x86_64-simulator}/ShortKitSDK.framework/Modules/module.modulemap +0 -0
  60. package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/Info.plist +4 -4
  61. /package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Info.plist +0 -0
  62. /package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64/ShortKitSDK.framework/Modules/module.modulemap +0 -0
  63. /package/ios/{ShortKitSDK.xcframework → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Headers/ShortKitSDK-Swift.h +0 -0
  64. /package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Info.plist +0 -0
  65. /package/ios/{ShortKitSDK.xcframework.bak → ShortKitSDK.xcframework.dev-backup}/ios-arm64-simulator/ShortKitSDK.framework/Modules/module.modulemap +0 -0
@@ -203,15 +203,17 @@ public struct FeedConfig : Swift.Codable {
203
203
  public var scrollAxis: ShortKitSDK.ScrollAxis
204
204
  public var videoOverlay: ShortKitSDK.VideoOverlayMode
205
205
  public var carouselOverlay: ShortKitSDK.CarouselOverlayMode
206
+ public var videoCarouselOverlay: ShortKitSDK.VideoCarouselOverlayMode
206
207
  public var surveyOverlay: ShortKitSDK.SurveyOverlayMode
207
208
  public var adOverlay: ShortKitSDK.AdOverlayMode
208
209
  public var muteOnStart: Swift.Bool
209
210
  public var autoplay: Swift.Bool
210
211
  public var feedSource: ShortKitSDK.FeedSource
211
212
  public var coldStartEnabled: Swift.Bool
213
+ public var pullToRefreshEnabled: Swift.Bool
212
214
  public var filter: ShortKitSDK.FeedFilter?
213
215
  public var preload: ShortKitSDK.FeedPreload?
214
- public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, scrollAxis: ShortKitSDK.ScrollAxis = .vertical, 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)
216
+ public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, scrollAxis: ShortKitSDK.ScrollAxis = .vertical, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, carouselOverlay: ShortKitSDK.CarouselOverlayMode = .none, videoCarouselOverlay: ShortKitSDK.VideoCarouselOverlayMode = .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, pullToRefreshEnabled: Swift.Bool = true, filter: ShortKitSDK.FeedFilter? = nil, preload: ShortKitSDK.FeedPreload? = nil)
215
217
  public func encode(to encoder: any Swift.Encoder) throws
216
218
  public init(from decoder: any Swift.Decoder) throws
217
219
  }
@@ -240,6 +242,17 @@ extension ShortKitSDK.CarouselOverlayMode : Swift.Codable {
240
242
  public init(from decoder: any Swift.Decoder) throws
241
243
  public func encode(to encoder: any Swift.Encoder) throws
242
244
  }
245
+ public enum VideoCarouselOverlayMode {
246
+ case none
247
+ case custom(@Sendable () -> any UIKit.UIView & ShortKitSDK.VideoCarouselOverlay)
248
+ }
249
+ extension ShortKitSDK.VideoCarouselOverlayMode : Swift.Equatable {
250
+ public static func == (lhs: ShortKitSDK.VideoCarouselOverlayMode, rhs: ShortKitSDK.VideoCarouselOverlayMode) -> Swift.Bool
251
+ }
252
+ extension ShortKitSDK.VideoCarouselOverlayMode : Swift.Codable {
253
+ public init(from decoder: any Swift.Decoder) throws
254
+ public func encode(to encoder: any Swift.Encoder) throws
255
+ }
243
256
  public enum SurveyOverlayMode {
244
257
  case none
245
258
  case custom(@Sendable () -> any UIKit.UIView & ShortKitSDK.SurveyOverlay)
@@ -263,12 +276,12 @@ extension ShortKitSDK.AdOverlayMode : Swift.Codable {
263
276
  public func encode(to encoder: any Swift.Encoder) throws
264
277
  }
265
278
  public protocol ShortKitDelegate : AnyObject {
266
- func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
279
+ func shortKit(_ shortKit: ShortKitSDK.ShortKit, didChangeRefreshState state: ShortKitSDK.ShortKitRefreshState)
267
280
  func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
268
281
  func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
269
282
  }
270
283
  extension ShortKitSDK.ShortKitDelegate {
271
- public func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
284
+ public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didChangeRefreshState state: ShortKitSDK.ShortKitRefreshState)
272
285
  public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
273
286
  public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
274
287
  }
@@ -315,6 +328,7 @@ extension ShortKitSDK.ShortKitFeedViewController : UIKit.UICollectionViewDelegat
315
328
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewWillBeginDragging(_ scrollView: UIKit.UIScrollView)
316
329
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidEndDecelerating(_ scrollView: UIKit.UIScrollView)
317
330
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidEndDragging(_ scrollView: UIKit.UIScrollView, willDecelerate decelerate: Swift.Bool)
331
+ @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidScrollToTop(_ scrollView: UIKit.UIScrollView)
318
332
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidScroll(_ scrollView: UIKit.UIScrollView)
319
333
  }
320
334
  extension ShortKitSDK.ShortKitFeedViewController : UIKit.UICollectionViewDataSourcePrefetching {
@@ -328,6 +342,12 @@ extension ShortKitSDK.ShortKitFeedViewController : ShortKitSDK.ShortKitAdDelegat
328
342
  @_Concurrency.MainActor @preconcurrency public func adDidFail(_ ad: ShortKitSDK.PreparedAd, error: ShortKitSDK.AdError)
329
343
  @_Concurrency.MainActor @preconcurrency public func adDidReceiveClick(_ ad: ShortKitSDK.PreparedAd)
330
344
  }
345
+ public enum ShortKitRefreshState : Swift.Sendable {
346
+ case idle
347
+ case pulling(progress: CoreFoundation.CGFloat)
348
+ case triggered
349
+ case refreshing
350
+ }
331
351
  public enum AdError : Swift.Error, Swift.Equatable {
332
352
  case noFill
333
353
  case timeout
@@ -409,12 +429,14 @@ public struct ContentItem : Swift.Codable, Swift.Equatable, @unchecked Swift.Sen
409
429
  public enum FeedInput : Swift.Sendable {
410
430
  case video(playbackId: Swift.String, fallbackUrl: Swift.String? = nil)
411
431
  case imageCarousel(ShortKitSDK.ImageCarouselItem)
432
+ case videoCarousel(ShortKitSDK.VideoCarouselItem)
412
433
  }
413
434
  public enum FeedItem : Swift.Sendable {
414
435
  case content(ShortKitSDK.ContentItem)
415
436
  case adSlot(ShortKitSDK.AdSlot)
416
437
  case imageCarousel(ShortKitSDK.ImageCarouselItem)
417
438
  case survey(ShortKitSDK.SurveyItem)
439
+ case videoCarousel(ShortKitSDK.VideoCarouselItem)
418
440
  public var isContent: Swift.Bool {
419
441
  get
420
442
  }
@@ -427,6 +449,9 @@ public enum FeedItem : Swift.Sendable {
427
449
  public var isSurvey: Swift.Bool {
428
450
  get
429
451
  }
452
+ public var isVideoCarousel: Swift.Bool {
453
+ get
454
+ }
430
455
  public var isNonVideo: Swift.Bool {
431
456
  get
432
457
  }
@@ -442,6 +467,9 @@ public enum FeedItem : Swift.Sendable {
442
467
  public var surveyItem: ShortKitSDK.SurveyItem? {
443
468
  get
444
469
  }
470
+ public var videoCarouselItem: ShortKitSDK.VideoCarouselItem? {
471
+ get
472
+ }
445
473
  public var id: Swift.String {
446
474
  get
447
475
  }
@@ -545,6 +573,19 @@ public struct VTTCue : Swift.Equatable, Swift.Sendable {
545
573
  public init(startTime: Swift.Double, endTime: Swift.Double, text: Swift.String)
546
574
  public static func == (a: ShortKitSDK.VTTCue, b: ShortKitSDK.VTTCue) -> Swift.Bool
547
575
  }
576
+ public struct VideoCarouselItem : Swift.Codable, Swift.Equatable, Swift.Sendable {
577
+ public let id: Swift.String
578
+ public let videos: [ShortKitSDK.ContentItem]
579
+ public let title: Swift.String?
580
+ public let description: Swift.String?
581
+ public let author: Swift.String?
582
+ public let section: Swift.String?
583
+ public let articleUrl: Swift.String?
584
+ public init(id: Swift.String, videos: [ShortKitSDK.ContentItem], title: Swift.String? = nil, description: Swift.String? = nil, author: Swift.String? = nil, section: Swift.String? = nil, articleUrl: Swift.String? = nil)
585
+ public static func == (a: ShortKitSDK.VideoCarouselItem, b: ShortKitSDK.VideoCarouselItem) -> Swift.Bool
586
+ public func encode(to encoder: any Swift.Encoder) throws
587
+ public init(from decoder: any Swift.Decoder) throws
588
+ }
548
589
  public protocol AdOverlay : AnyObject {
549
590
  func configure(with content: ShortKitSDK.NativeAdContent)
550
591
  func resetState()
@@ -554,6 +595,8 @@ public protocol CarouselOverlay : AnyObject {
554
595
  func configure(with item: ShortKitSDK.ImageCarouselItem)
555
596
  func resetState()
556
597
  var wantsNativeImagePrefetch: Swift.Bool { get }
598
+ func activatePlayback()
599
+ func updateActiveImage(index: Swift.Int)
557
600
  }
558
601
  extension ShortKitSDK.CarouselOverlay {
559
602
  public var cachedImage: ((Swift.String) -> UIKit.UIImage?)? {
@@ -563,6 +606,8 @@ extension ShortKitSDK.CarouselOverlay {
563
606
  public var wantsNativeImagePrefetch: Swift.Bool {
564
607
  get
565
608
  }
609
+ public func activatePlayback()
610
+ public func updateActiveImage(index: Swift.Int)
566
611
  }
567
612
  final public class CellContent : Combine.ObservableObject {
568
613
  @Combine.Published @_projectedValueProperty($item) final public var item: ShortKitSDK.ContentItem? {
@@ -592,6 +637,19 @@ public protocol SurveyOverlay : AnyObject {
592
637
  func configure(with item: ShortKitSDK.SurveyItem)
593
638
  func resetState()
594
639
  }
640
+ public protocol VideoCarouselOverlay : AnyObject {
641
+ func configure(with item: ShortKitSDK.VideoCarouselItem)
642
+ func updateActiveVideo(index: Swift.Int, item: ShortKitSDK.ContentItem)
643
+ func resetState()
644
+ func attach(player: ShortKitSDK.ShortKitPlayer)
645
+ func activatePlayback()
646
+ func deactivatePlayback()
647
+ }
648
+ extension ShortKitSDK.VideoCarouselOverlay {
649
+ public func attach(player: ShortKitSDK.ShortKitPlayer)
650
+ public func activatePlayback()
651
+ public func deactivatePlayback()
652
+ }
595
653
  public struct PlayerTime : Swift.Equatable, Swift.Sendable {
596
654
  public let current: Swift.Double
597
655
  public let duration: Swift.Double
@@ -790,7 +848,8 @@ public struct PlayerConfig {
790
848
  public var loop: Swift.Bool
791
849
  public var muteOnStart: Swift.Bool
792
850
  public var videoOverlay: ShortKitSDK.VideoOverlayMode
793
- public init(cornerRadius: CoreFoundation.CGFloat = 12, clickAction: ShortKitSDK.PlayerClickAction = .feed, autoplay: Swift.Bool = true, loop: Swift.Bool = true, muteOnStart: Swift.Bool = true, videoOverlay: ShortKitSDK.VideoOverlayMode = .none)
851
+ public var feedConfig: ShortKitSDK.FeedConfig
852
+ public init(cornerRadius: CoreFoundation.CGFloat = 12, clickAction: ShortKitSDK.PlayerClickAction = .feed, autoplay: Swift.Bool = true, loop: Swift.Bool = true, muteOnStart: Swift.Bool = true, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, feedConfig: ShortKitSDK.FeedConfig = FeedConfig())
794
853
  }
795
854
  @_Concurrency.MainActor @preconcurrency public struct ShortKitPlayerView : SwiftUI.UIViewControllerRepresentable {
796
855
  @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, config: ShortKitSDK.PlayerConfig = PlayerConfig())
@@ -843,7 +902,8 @@ public struct WidgetConfig {
843
902
  public var rotationInterval: Foundation.TimeInterval
844
903
  public var clickAction: ShortKitSDK.PlayerClickAction
845
904
  public var cardOverlay: ShortKitSDK.VideoOverlayMode
846
- public init(cardCount: Swift.Int = 3, cardSpacing: CoreFoundation.CGFloat = 8, cornerRadius: CoreFoundation.CGFloat = 12, autoplay: Swift.Bool = true, muteOnStart: Swift.Bool = true, loop: Swift.Bool = true, rotationInterval: Foundation.TimeInterval = 10, clickAction: ShortKitSDK.PlayerClickAction = .feed, cardOverlay: ShortKitSDK.VideoOverlayMode = .none)
905
+ public var feedConfig: ShortKitSDK.FeedConfig
906
+ public init(cardCount: Swift.Int = 3, cardSpacing: CoreFoundation.CGFloat = 8, cornerRadius: CoreFoundation.CGFloat = 12, autoplay: Swift.Bool = true, muteOnStart: Swift.Bool = true, loop: Swift.Bool = true, rotationInterval: Foundation.TimeInterval = 10, clickAction: ShortKitSDK.PlayerClickAction = .feed, cardOverlay: ShortKitSDK.VideoOverlayMode = .none, feedConfig: ShortKitSDK.FeedConfig = FeedConfig())
847
907
  }
848
908
  extension ShortKitSDK.AdQuartile : Swift.Equatable {}
849
909
  extension ShortKitSDK.AdQuartile : Swift.Hashable {}
@@ -203,15 +203,17 @@ public struct FeedConfig : Swift.Codable {
203
203
  public var scrollAxis: ShortKitSDK.ScrollAxis
204
204
  public var videoOverlay: ShortKitSDK.VideoOverlayMode
205
205
  public var carouselOverlay: ShortKitSDK.CarouselOverlayMode
206
+ public var videoCarouselOverlay: ShortKitSDK.VideoCarouselOverlayMode
206
207
  public var surveyOverlay: ShortKitSDK.SurveyOverlayMode
207
208
  public var adOverlay: ShortKitSDK.AdOverlayMode
208
209
  public var muteOnStart: Swift.Bool
209
210
  public var autoplay: Swift.Bool
210
211
  public var feedSource: ShortKitSDK.FeedSource
211
212
  public var coldStartEnabled: Swift.Bool
213
+ public var pullToRefreshEnabled: Swift.Bool
212
214
  public var filter: ShortKitSDK.FeedFilter?
213
215
  public var preload: ShortKitSDK.FeedPreload?
214
- public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, scrollAxis: ShortKitSDK.ScrollAxis = .vertical, 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)
216
+ public init(feedHeight: ShortKitSDK.FeedHeight = .fullscreen, scrollAxis: ShortKitSDK.ScrollAxis = .vertical, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, carouselOverlay: ShortKitSDK.CarouselOverlayMode = .none, videoCarouselOverlay: ShortKitSDK.VideoCarouselOverlayMode = .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, pullToRefreshEnabled: Swift.Bool = true, filter: ShortKitSDK.FeedFilter? = nil, preload: ShortKitSDK.FeedPreload? = nil)
215
217
  public func encode(to encoder: any Swift.Encoder) throws
216
218
  public init(from decoder: any Swift.Decoder) throws
217
219
  }
@@ -240,6 +242,17 @@ extension ShortKitSDK.CarouselOverlayMode : Swift.Codable {
240
242
  public init(from decoder: any Swift.Decoder) throws
241
243
  public func encode(to encoder: any Swift.Encoder) throws
242
244
  }
245
+ public enum VideoCarouselOverlayMode {
246
+ case none
247
+ case custom(@Sendable () -> any UIKit.UIView & ShortKitSDK.VideoCarouselOverlay)
248
+ }
249
+ extension ShortKitSDK.VideoCarouselOverlayMode : Swift.Equatable {
250
+ public static func == (lhs: ShortKitSDK.VideoCarouselOverlayMode, rhs: ShortKitSDK.VideoCarouselOverlayMode) -> Swift.Bool
251
+ }
252
+ extension ShortKitSDK.VideoCarouselOverlayMode : Swift.Codable {
253
+ public init(from decoder: any Swift.Decoder) throws
254
+ public func encode(to encoder: any Swift.Encoder) throws
255
+ }
243
256
  public enum SurveyOverlayMode {
244
257
  case none
245
258
  case custom(@Sendable () -> any UIKit.UIView & ShortKitSDK.SurveyOverlay)
@@ -263,12 +276,12 @@ extension ShortKitSDK.AdOverlayMode : Swift.Codable {
263
276
  public func encode(to encoder: any Swift.Encoder) throws
264
277
  }
265
278
  public protocol ShortKitDelegate : AnyObject {
266
- func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
279
+ func shortKit(_ shortKit: ShortKitSDK.ShortKit, didChangeRefreshState state: ShortKitSDK.ShortKitRefreshState)
267
280
  func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
268
281
  func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
269
282
  }
270
283
  extension ShortKitSDK.ShortKitDelegate {
271
- public func shortKitDidRequestRefresh(_ shortKit: ShortKitSDK.ShortKit)
284
+ public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didChangeRefreshState state: ShortKitSDK.ShortKitRefreshState)
272
285
  public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didTapContent contentId: Swift.String, at index: Swift.Int)
273
286
  public func shortKit(_ shortKit: ShortKitSDK.ShortKit, didFetchContentItems items: [ShortKitSDK.ContentItem])
274
287
  }
@@ -315,6 +328,7 @@ extension ShortKitSDK.ShortKitFeedViewController : UIKit.UICollectionViewDelegat
315
328
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewWillBeginDragging(_ scrollView: UIKit.UIScrollView)
316
329
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidEndDecelerating(_ scrollView: UIKit.UIScrollView)
317
330
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidEndDragging(_ scrollView: UIKit.UIScrollView, willDecelerate decelerate: Swift.Bool)
331
+ @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidScrollToTop(_ scrollView: UIKit.UIScrollView)
318
332
  @_Concurrency.MainActor @preconcurrency @objc dynamic public func scrollViewDidScroll(_ scrollView: UIKit.UIScrollView)
319
333
  }
320
334
  extension ShortKitSDK.ShortKitFeedViewController : UIKit.UICollectionViewDataSourcePrefetching {
@@ -328,6 +342,12 @@ extension ShortKitSDK.ShortKitFeedViewController : ShortKitSDK.ShortKitAdDelegat
328
342
  @_Concurrency.MainActor @preconcurrency public func adDidFail(_ ad: ShortKitSDK.PreparedAd, error: ShortKitSDK.AdError)
329
343
  @_Concurrency.MainActor @preconcurrency public func adDidReceiveClick(_ ad: ShortKitSDK.PreparedAd)
330
344
  }
345
+ public enum ShortKitRefreshState : Swift.Sendable {
346
+ case idle
347
+ case pulling(progress: CoreFoundation.CGFloat)
348
+ case triggered
349
+ case refreshing
350
+ }
331
351
  public enum AdError : Swift.Error, Swift.Equatable {
332
352
  case noFill
333
353
  case timeout
@@ -409,12 +429,14 @@ public struct ContentItem : Swift.Codable, Swift.Equatable, @unchecked Swift.Sen
409
429
  public enum FeedInput : Swift.Sendable {
410
430
  case video(playbackId: Swift.String, fallbackUrl: Swift.String? = nil)
411
431
  case imageCarousel(ShortKitSDK.ImageCarouselItem)
432
+ case videoCarousel(ShortKitSDK.VideoCarouselItem)
412
433
  }
413
434
  public enum FeedItem : Swift.Sendable {
414
435
  case content(ShortKitSDK.ContentItem)
415
436
  case adSlot(ShortKitSDK.AdSlot)
416
437
  case imageCarousel(ShortKitSDK.ImageCarouselItem)
417
438
  case survey(ShortKitSDK.SurveyItem)
439
+ case videoCarousel(ShortKitSDK.VideoCarouselItem)
418
440
  public var isContent: Swift.Bool {
419
441
  get
420
442
  }
@@ -427,6 +449,9 @@ public enum FeedItem : Swift.Sendable {
427
449
  public var isSurvey: Swift.Bool {
428
450
  get
429
451
  }
452
+ public var isVideoCarousel: Swift.Bool {
453
+ get
454
+ }
430
455
  public var isNonVideo: Swift.Bool {
431
456
  get
432
457
  }
@@ -442,6 +467,9 @@ public enum FeedItem : Swift.Sendable {
442
467
  public var surveyItem: ShortKitSDK.SurveyItem? {
443
468
  get
444
469
  }
470
+ public var videoCarouselItem: ShortKitSDK.VideoCarouselItem? {
471
+ get
472
+ }
445
473
  public var id: Swift.String {
446
474
  get
447
475
  }
@@ -545,6 +573,19 @@ public struct VTTCue : Swift.Equatable, Swift.Sendable {
545
573
  public init(startTime: Swift.Double, endTime: Swift.Double, text: Swift.String)
546
574
  public static func == (a: ShortKitSDK.VTTCue, b: ShortKitSDK.VTTCue) -> Swift.Bool
547
575
  }
576
+ public struct VideoCarouselItem : Swift.Codable, Swift.Equatable, Swift.Sendable {
577
+ public let id: Swift.String
578
+ public let videos: [ShortKitSDK.ContentItem]
579
+ public let title: Swift.String?
580
+ public let description: Swift.String?
581
+ public let author: Swift.String?
582
+ public let section: Swift.String?
583
+ public let articleUrl: Swift.String?
584
+ public init(id: Swift.String, videos: [ShortKitSDK.ContentItem], title: Swift.String? = nil, description: Swift.String? = nil, author: Swift.String? = nil, section: Swift.String? = nil, articleUrl: Swift.String? = nil)
585
+ public static func == (a: ShortKitSDK.VideoCarouselItem, b: ShortKitSDK.VideoCarouselItem) -> Swift.Bool
586
+ public func encode(to encoder: any Swift.Encoder) throws
587
+ public init(from decoder: any Swift.Decoder) throws
588
+ }
548
589
  public protocol AdOverlay : AnyObject {
549
590
  func configure(with content: ShortKitSDK.NativeAdContent)
550
591
  func resetState()
@@ -554,6 +595,8 @@ public protocol CarouselOverlay : AnyObject {
554
595
  func configure(with item: ShortKitSDK.ImageCarouselItem)
555
596
  func resetState()
556
597
  var wantsNativeImagePrefetch: Swift.Bool { get }
598
+ func activatePlayback()
599
+ func updateActiveImage(index: Swift.Int)
557
600
  }
558
601
  extension ShortKitSDK.CarouselOverlay {
559
602
  public var cachedImage: ((Swift.String) -> UIKit.UIImage?)? {
@@ -563,6 +606,8 @@ extension ShortKitSDK.CarouselOverlay {
563
606
  public var wantsNativeImagePrefetch: Swift.Bool {
564
607
  get
565
608
  }
609
+ public func activatePlayback()
610
+ public func updateActiveImage(index: Swift.Int)
566
611
  }
567
612
  final public class CellContent : Combine.ObservableObject {
568
613
  @Combine.Published @_projectedValueProperty($item) final public var item: ShortKitSDK.ContentItem? {
@@ -592,6 +637,19 @@ public protocol SurveyOverlay : AnyObject {
592
637
  func configure(with item: ShortKitSDK.SurveyItem)
593
638
  func resetState()
594
639
  }
640
+ public protocol VideoCarouselOverlay : AnyObject {
641
+ func configure(with item: ShortKitSDK.VideoCarouselItem)
642
+ func updateActiveVideo(index: Swift.Int, item: ShortKitSDK.ContentItem)
643
+ func resetState()
644
+ func attach(player: ShortKitSDK.ShortKitPlayer)
645
+ func activatePlayback()
646
+ func deactivatePlayback()
647
+ }
648
+ extension ShortKitSDK.VideoCarouselOverlay {
649
+ public func attach(player: ShortKitSDK.ShortKitPlayer)
650
+ public func activatePlayback()
651
+ public func deactivatePlayback()
652
+ }
595
653
  public struct PlayerTime : Swift.Equatable, Swift.Sendable {
596
654
  public let current: Swift.Double
597
655
  public let duration: Swift.Double
@@ -790,7 +848,8 @@ public struct PlayerConfig {
790
848
  public var loop: Swift.Bool
791
849
  public var muteOnStart: Swift.Bool
792
850
  public var videoOverlay: ShortKitSDK.VideoOverlayMode
793
- public init(cornerRadius: CoreFoundation.CGFloat = 12, clickAction: ShortKitSDK.PlayerClickAction = .feed, autoplay: Swift.Bool = true, loop: Swift.Bool = true, muteOnStart: Swift.Bool = true, videoOverlay: ShortKitSDK.VideoOverlayMode = .none)
851
+ public var feedConfig: ShortKitSDK.FeedConfig
852
+ public init(cornerRadius: CoreFoundation.CGFloat = 12, clickAction: ShortKitSDK.PlayerClickAction = .feed, autoplay: Swift.Bool = true, loop: Swift.Bool = true, muteOnStart: Swift.Bool = true, videoOverlay: ShortKitSDK.VideoOverlayMode = .none, feedConfig: ShortKitSDK.FeedConfig = FeedConfig())
794
853
  }
795
854
  @_Concurrency.MainActor @preconcurrency public struct ShortKitPlayerView : SwiftUI.UIViewControllerRepresentable {
796
855
  @_Concurrency.MainActor @preconcurrency public init(shortKit: ShortKitSDK.ShortKit, config: ShortKitSDK.PlayerConfig = PlayerConfig())
@@ -843,7 +902,8 @@ public struct WidgetConfig {
843
902
  public var rotationInterval: Foundation.TimeInterval
844
903
  public var clickAction: ShortKitSDK.PlayerClickAction
845
904
  public var cardOverlay: ShortKitSDK.VideoOverlayMode
846
- public init(cardCount: Swift.Int = 3, cardSpacing: CoreFoundation.CGFloat = 8, cornerRadius: CoreFoundation.CGFloat = 12, autoplay: Swift.Bool = true, muteOnStart: Swift.Bool = true, loop: Swift.Bool = true, rotationInterval: Foundation.TimeInterval = 10, clickAction: ShortKitSDK.PlayerClickAction = .feed, cardOverlay: ShortKitSDK.VideoOverlayMode = .none)
905
+ public var feedConfig: ShortKitSDK.FeedConfig
906
+ public init(cardCount: Swift.Int = 3, cardSpacing: CoreFoundation.CGFloat = 8, cornerRadius: CoreFoundation.CGFloat = 12, autoplay: Swift.Bool = true, muteOnStart: Swift.Bool = true, loop: Swift.Bool = true, rotationInterval: Foundation.TimeInterval = 10, clickAction: ShortKitSDK.PlayerClickAction = .feed, cardOverlay: ShortKitSDK.VideoOverlayMode = .none, feedConfig: ShortKitSDK.FeedConfig = FeedConfig())
847
907
  }
848
908
  extension ShortKitSDK.AdQuartile : Swift.Equatable {}
849
909
  extension ShortKitSDK.AdQuartile : Swift.Hashable {}
@@ -0,0 +1,168 @@
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>files</key>
6
+ <dict>
7
+ <key>Headers/ShortKitSDK-Swift.h</key>
8
+ <data>
9
+ sPBFo6JMKGiSEYfBXQhwdOb2UzQ=
10
+ </data>
11
+ <key>Info.plist</key>
12
+ <data>
13
+ H6W9wSQeXsl3VaugOv7xV0jTyoI=
14
+ </data>
15
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json</key>
16
+ <data>
17
+ YYqFINlTEgYgeMVBETLhWT7A3yo=
18
+ </data>
19
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
20
+ <data>
21
+ uUKC+NjbgWf5a6aDw/N6/Dt9Ebs=
22
+ </data>
23
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc</key>
24
+ <data>
25
+ JKXiL4d/fVvJOKp7tTNEID2myLE=
26
+ </data>
27
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface</key>
28
+ <data>
29
+ uUKC+NjbgWf5a6aDw/N6/Dt9Ebs=
30
+ </data>
31
+ <key>Modules/module.modulemap</key>
32
+ <data>
33
+ QthRxkVp/MRBzYVNLtX05t2Csso=
34
+ </data>
35
+ </dict>
36
+ <key>files2</key>
37
+ <dict>
38
+ <key>Headers/ShortKitSDK-Swift.h</key>
39
+ <dict>
40
+ <key>hash2</key>
41
+ <data>
42
+ TRmw/MDu/LhQLmbWGfeLyMOoRfyBwA9sRbyyn0p3Q3c=
43
+ </data>
44
+ </dict>
45
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.abi.json</key>
46
+ <dict>
47
+ <key>hash2</key>
48
+ <data>
49
+ FQCbqY2O3A384LEZyqkGKF9gcRMamvNt/q/MNtu5V4U=
50
+ </data>
51
+ </dict>
52
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.private.swiftinterface</key>
53
+ <dict>
54
+ <key>hash2</key>
55
+ <data>
56
+ lbmpfDs1PFsVC8eCPY39+KHQnJ8j3rmmrawo9TCrNHc=
57
+ </data>
58
+ </dict>
59
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftdoc</key>
60
+ <dict>
61
+ <key>hash2</key>
62
+ <data>
63
+ DwgcCoxviNZ+lzCyxoAl1xBdY0G1FXpPbvmuISVRSJ4=
64
+ </data>
65
+ </dict>
66
+ <key>Modules/ShortKitSDK.swiftmodule/arm64-apple-ios.swiftinterface</key>
67
+ <dict>
68
+ <key>hash2</key>
69
+ <data>
70
+ lbmpfDs1PFsVC8eCPY39+KHQnJ8j3rmmrawo9TCrNHc=
71
+ </data>
72
+ </dict>
73
+ <key>Modules/module.modulemap</key>
74
+ <dict>
75
+ <key>hash2</key>
76
+ <data>
77
+ K4gZcRkdlvQBo5cnduiRMooPuUS6dWAP1E7dBJRuHL4=
78
+ </data>
79
+ </dict>
80
+ </dict>
81
+ <key>rules</key>
82
+ <dict>
83
+ <key>^.*</key>
84
+ <true/>
85
+ <key>^.*\.lproj/</key>
86
+ <dict>
87
+ <key>optional</key>
88
+ <true/>
89
+ <key>weight</key>
90
+ <real>1000</real>
91
+ </dict>
92
+ <key>^.*\.lproj/locversion.plist$</key>
93
+ <dict>
94
+ <key>omit</key>
95
+ <true/>
96
+ <key>weight</key>
97
+ <real>1100</real>
98
+ </dict>
99
+ <key>^Base\.lproj/</key>
100
+ <dict>
101
+ <key>weight</key>
102
+ <real>1010</real>
103
+ </dict>
104
+ <key>^version.plist$</key>
105
+ <true/>
106
+ </dict>
107
+ <key>rules2</key>
108
+ <dict>
109
+ <key>.*\.dSYM($|/)</key>
110
+ <dict>
111
+ <key>weight</key>
112
+ <real>11</real>
113
+ </dict>
114
+ <key>^(.*/)?\.DS_Store$</key>
115
+ <dict>
116
+ <key>omit</key>
117
+ <true/>
118
+ <key>weight</key>
119
+ <real>2000</real>
120
+ </dict>
121
+ <key>^.*</key>
122
+ <true/>
123
+ <key>^.*\.lproj/</key>
124
+ <dict>
125
+ <key>optional</key>
126
+ <true/>
127
+ <key>weight</key>
128
+ <real>1000</real>
129
+ </dict>
130
+ <key>^.*\.lproj/locversion.plist$</key>
131
+ <dict>
132
+ <key>omit</key>
133
+ <true/>
134
+ <key>weight</key>
135
+ <real>1100</real>
136
+ </dict>
137
+ <key>^Base\.lproj/</key>
138
+ <dict>
139
+ <key>weight</key>
140
+ <real>1010</real>
141
+ </dict>
142
+ <key>^Info\.plist$</key>
143
+ <dict>
144
+ <key>omit</key>
145
+ <true/>
146
+ <key>weight</key>
147
+ <real>20</real>
148
+ </dict>
149
+ <key>^PkgInfo$</key>
150
+ <dict>
151
+ <key>omit</key>
152
+ <true/>
153
+ <key>weight</key>
154
+ <real>20</real>
155
+ </dict>
156
+ <key>^embedded\.provisionprofile$</key>
157
+ <dict>
158
+ <key>weight</key>
159
+ <real>20</real>
160
+ </dict>
161
+ <key>^version\.plist$</key>
162
+ <dict>
163
+ <key>weight</key>
164
+ <real>20</real>
165
+ </dict>
166
+ </dict>
167
+ </dict>
168
+ </plist>
@@ -360,12 +360,13 @@ SWIFT_CLASS("_TtC11ShortKitSDK26ShortKitFeedViewController")
360
360
  - (void)scrollViewWillBeginDragging:(UIScrollView * _Nonnull)scrollView;
361
361
  - (void)scrollViewDidEndDecelerating:(UIScrollView * _Nonnull)scrollView;
362
362
  - (void)scrollViewDidEndDragging:(UIScrollView * _Nonnull)scrollView willDecelerate:(BOOL)decelerate;
363
+ - (void)scrollViewDidScrollToTop:(UIScrollView * _Nonnull)scrollView;
363
364
  - (void)scrollViewDidScroll:(UIScrollView * _Nonnull)scrollView;
364
365
  @end
365
366
 
366
367
  /// Public single-video player view controller.
367
368
  /// Starts in thumbnail-only mode and borrows an AVPlayer from the shared
368
- /// <code>TilePlayerPool</code> when activated. Call <code>activate()</code> when the tile becomes
369
+ /// <code>PlayerPool</code> tile slots when activated. Call <code>activate()</code> when the tile becomes
369
370
  /// visible and <code>deactivate()</code> when it scrolls offscreen.
370
371
  SWIFT_CLASS("_TtC11ShortKitSDK28ShortKitPlayerViewController")
371
372
  @interface ShortKitPlayerViewController : UIViewController
@@ -11,6 +11,10 @@
11
11
  <key>CFBundlePackageType</key>
12
12
  <string>FMWK</string>
13
13
  <key>CFBundleVersion</key>
14
- <string>1</string>
14
+ <string>0.2.15</string>
15
+ <key>CFBundleShortVersionString</key>
16
+ <string>0.2.15</string>
17
+ <key>MinimumOSVersion</key>
18
+ <string>16.0</string>
15
19
  </dict>
16
20
  </plist>