diff --git a/iosApp/GoogleService-Info.plist b/iosApp/GoogleService-Info.plist
new file mode 100644
index 00000000..ba1ebfcb
--- /dev/null
+++ b/iosApp/GoogleService-Info.plist
@@ -0,0 +1,34 @@
+
+
+
+
+ CLIENT_ID
+ 1074796601956-ibaf9r1sunn4tfm8c9og40ejuhkcvukf.apps.googleusercontent.com
+ REVERSED_CLIENT_ID
+ com.googleusercontent.apps.1074796601956-ibaf9r1sunn4tfm8c9og40ejuhkcvukf
+ API_KEY
+ AIzaSyA-Fg5YNScjNlj_XPwBNeafUoqfZuuCyEk
+ GCM_SENDER_ID
+ 1074796601956
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ io.newm.ios
+ PROJECT_ID
+ projectnewm-38b24
+ STORAGE_BUCKET
+ projectnewm-38b24.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:1074796601956:ios:68c857bcac45cfbd7db571
+
+
\ No newline at end of file
diff --git a/iosApp/Modules/AudioPlayer/PlayQueue/PlayQueue.swift b/iosApp/Modules/AudioPlayer/PlayQueue/PlayQueue.swift
index 66c53f18..b0fc4c01 100644
--- a/iosApp/Modules/AudioPlayer/PlayQueue/PlayQueue.swift
+++ b/iosApp/Modules/AudioPlayer/PlayQueue/PlayQueue.swift
@@ -2,7 +2,6 @@ import Foundation
import shared
import Utilities
-@MainActor
struct PlayQueue {
var originalTracks: Set = [] {
didSet {
@@ -204,5 +203,9 @@ extension PlayQueue {
case queueIsEmpty
case invalidIndex
case trackNotInQueue
+
+ var errorDescription: String? {
+ "There was an error playing the song."
+ }
}
}
diff --git a/iosApp/Modules/AudioPlayer/UI/PlayButton.swift b/iosApp/Modules/AudioPlayer/UI/PlayButton.swift
index ec370138..25b350cc 100644
--- a/iosApp/Modules/AudioPlayer/UI/PlayButton.swift
+++ b/iosApp/Modules/AudioPlayer/UI/PlayButton.swift
@@ -2,6 +2,8 @@ import SwiftUI
import SharedUI
import Resolver
import ModuleLinker
+import shared
+import Analytics
public struct PlayButton: View {
@InjectedObject private var audioPlayer: VLCAudioPlayer
@@ -13,8 +15,10 @@ public struct PlayButton: View {
switch audioPlayer.state {
case .playing:
audioPlayer.pause()
+ logPauseTapped()
case .paused, .stopped:
audioPlayer.play()
+ logPlayTapped()
case .buffering:
break
}
@@ -47,6 +51,30 @@ public struct PlayButton: View {
}
}
+extension PlayButton {
+ private func logPauseTapped() {
+ NEWMAnalytics.trackClickEvent(
+ buttonName: AppScreens.MusicPlayerScreen().PAUSE_BUTTON,
+ screenName: AppScreens.MusicPlayerScreen().name,
+ properties:
+ [
+ "song_id": audioPlayer.currentTrack?.id ?? "",
+ ]
+ )
+ }
+
+ private func logPlayTapped() {
+ NEWMAnalytics.trackClickEvent(
+ buttonName: AppScreens.MusicPlayerScreen().PLAY_BUTTON,
+ screenName: AppScreens.MusicPlayerScreen().name,
+ properties:
+ [
+ "song_id": audioPlayer.currentTrack?.id ?? "",
+ ]
+ )
+ }
+}
+
#Preview {
PlayButton()
.preferredColorScheme(.dark)
diff --git a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/Seconds.swift b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/Seconds.swift
index bde8f725..7855e38d 100644
--- a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/Seconds.swift
+++ b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/Seconds.swift
@@ -1,7 +1,7 @@
import Foundation
import VLCKitSPM
-extension VLCTime {
+public extension VLCTime {
var seconds: Double? {
value.flatMap { $0.doubleValue / 1_000 }
}
diff --git a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+MediaPlayer.swift b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+MediaPlayer.swift
index 1909399e..a76e5ac7 100644
--- a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+MediaPlayer.swift
+++ b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+MediaPlayer.swift
@@ -36,8 +36,8 @@ extension VLCAudioPlayer {
nowPlayingInfo[MPMediaItemPropertyPlaybackDuration] = duration
}
- if let currentTime {
- nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = currentTime
+ if let seconds = currentTime?.seconds {
+ nowPlayingInfo[MPNowPlayingInfoPropertyElapsedPlaybackTime] = seconds
}
MPNowPlayingInfoCenter.default().nowPlayingInfo = nowPlayingInfo
diff --git a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+VLCMediaPlayerDelegate.swift b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+VLCMediaPlayerDelegate.swift
index 71fced88..1e3badef 100644
--- a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+VLCMediaPlayerDelegate.swift
+++ b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/Extensions/VLCAudioPlayer+VLCMediaPlayerDelegate.swift
@@ -9,12 +9,22 @@ class VLCAudioPlayerDelegate: NSObject, VLCMediaPlayerDelegate {
}
private var continuation: AsyncStream.Continuation!
+ private var lastYieldTime: Date?
+ private let throttleInterval: TimeInterval = 1.0// Throttle interval in seconds
func mediaPlayerStateChanged(_ aNotification: Foundation.Notification) {
continuation.yield()
}
func mediaPlayerTimeChanged(_ aNotification: Foundation.Notification) {
+ // Throttle timeChanged calls based on the last yield time
+ let now = Date()
+
+ if let lastTime = lastYieldTime, now.timeIntervalSince(lastTime) < throttleInterval {
+ return // Skip this event if it's within the throttle interval
+ }
+
+ lastYieldTime = now
continuation.yield()
}
diff --git a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/VLCAudioPlayer.swift b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/VLCAudioPlayer.swift
index c9117bf2..bfca07ef 100644
--- a/iosApp/Modules/AudioPlayer/VLCAudioPlayer/VLCAudioPlayer.swift
+++ b/iosApp/Modules/AudioPlayer/VLCAudioPlayer/VLCAudioPlayer.swift
@@ -20,7 +20,11 @@ public class VLCAudioPlayer: ObservableObject {
static let sharedPlayer = VLCAudioPlayer()
private var mediaPlayer: VLCMediaPlayer
- @Published private var playQueue = PlayQueue()
+ private var playQueue = PlayQueue() {
+ didSet {
+ update()
+ }
+ }
@Published private var fileManager = FileManagerService()
lazy private var delegate: VLCAudioPlayerDelegate = VLCAudioPlayerDelegate()
private var cancels = Set()
@@ -30,24 +34,16 @@ public class VLCAudioPlayer: ObservableObject {
private var _errors = PassthroughSubject()
public var errors: AnyPublisher { _errors.eraseToAnyPublisher() }
- public var state: PlaybackState {
- if mediaPlayer.isPlaying {
- return .playing
- } else if mediaPlayer.state == .buffering {
- return .buffering
- } else if mediaPlayer.state == .paused {
- return .paused
- } else {
- return .stopped
- }
- }
- public var duration: TimeInterval? { mediaPlayer.media?.length.seconds }
- public var currentTime: TimeInterval? { mediaPlayer.time.seconds }
- public var percentPlayed: Float? { mediaPlayer.position }
- public var title: String? { mediaPlayer.media?.metaData.title }
- public var artist: String? { mediaPlayer.media?.metaData.artist }
- public var artworkUrl: URL? { mediaPlayer.media?.metaData.artworkURL }
- public var willPlay: Bool { mediaPlayer.willPlay }
+ @Published public var state: PlaybackState = .stopped
+ @Published public var duration: TimeInterval?
+ @Published public var currentTime: VLCTime?
+ @Published public var percentPlayed: Float?
+ @Published public var title: String?
+ @Published public var artist: String?
+ @Published public var artworkUrl: URL?
+ @Published public var currentTrack: NFTTrack?
+ @Published public var isPlaying: Bool = false
+
@Injected var errorReporter: any ErrorReporting
public var textFilter: String? {
@@ -81,7 +77,7 @@ public class VLCAudioPlayer: ObservableObject {
fileManager.objectWillChange
.receive(on: DispatchQueue.main)
.sink { [weak self] in
- self?.objectWillChange.send()
+ self?.update()
}.store(in: &cancels)
NotificationCenter.default.publisher(for: Notification.Name(Notification().walletConnectionStateChanged)).sink { [weak self] _ in
@@ -105,18 +101,36 @@ public class VLCAudioPlayer: ObservableObject {
playCurrentTrackInQueue()
} else if mediaPlayer.state == .error {
_errors.send("Unable to load \(currentTrack?.title ?? "song")")
- }
- DispatchQueue.main.async { [weak self] in
- self?.objectWillChange.send()
+ } else if mediaPlayer.time != currentTime {
+ Task { @MainActor in
+ update()
+ }
}
}
}
}
- public func setTracks(_ tracks: Set) {
- playQueue.originalTracks = tracks
+ private func update() {
+ title = mediaPlayer.media?.metaData.title
+ duration = mediaPlayer.media?.length.seconds
+ currentTime = mediaPlayer.time
+ percentPlayed = mediaPlayer.position
+ title = mediaPlayer.media?.metaData.title
+ artist = mediaPlayer.media?.metaData.artist
+ artworkUrl = mediaPlayer.media?.metaData.artworkURL
+ currentTrack = try? playQueue.currentTrack()
+ isPlaying = state == .playing
+ state = if mediaPlayer.isPlaying {
+ .playing
+ } else if mediaPlayer.state == .buffering {
+ .buffering
+ } else if mediaPlayer.state == .paused {
+ .paused
+ } else {
+ .stopped
+ }
}
-
+
public var hasNextTrack: Bool {
playQueue.hasNextTrack
}
@@ -164,7 +178,7 @@ public class VLCAudioPlayer: ObservableObject {
try await fileManager.download(track: track) { [weak self] progress in
guard let self else { return }
print("progress for [\(track.title)]: \(progress)")
- DispatchQueue.main.async {
+ Task { @MainActor in
self.loadingProgress[track] = progress
}
}
@@ -219,24 +233,12 @@ public class VLCAudioPlayer: ObservableObject {
public func setTracks(_ tracks: Set, playFirstTrack: Bool = true) {
playQueue.originalTracks = tracks
- try! playQueue.seekToFirst()
- if playFirstTrack {
+ if playFirstTrack, tracks.isEmpty == false {
+ try? playQueue.seekToFirst()
playCurrentTrackInQueue()
}
}
- public var isPlaying: Bool {
- state == .playing
- }
-
- public var currentTrack: NFTTrack? {
- try? playQueue.currentTrack()
- }
-
- public func trackIsPlaying(_ track: NFTTrack) -> Bool {
- currentTrack == track
- }
-
public func trackIsDownloaded(_ track: NFTTrack) -> Bool {
fileManager.fileExists(for: URL(string: track.audioUrl)!)
}
@@ -249,8 +251,8 @@ public class VLCAudioPlayer: ObservableObject {
fileManager.clearFiles()
}
- public func removeDownloadedSong(_ song: NFTTrack) {
- fileManager.clearFile(at: URL(string: song.audioUrl)!)
+ public func removeDownloadedSong(_ song: NFTTrack) async {
+ await fileManager.clearFile(at: URL(string: song.audioUrl)!)
}
deinit {
diff --git a/iosApp/Modules/DI/ModuleLinker/Protocols/ErrorReporting.swift b/iosApp/Modules/DI/ModuleLinker/Protocols/ErrorReporting.swift
index 4ff2916c..647d2590 100644
--- a/iosApp/Modules/DI/ModuleLinker/Protocols/ErrorReporting.swift
+++ b/iosApp/Modules/DI/ModuleLinker/Protocols/ErrorReporting.swift
@@ -1,6 +1,6 @@
import Foundation
-public protocol ErrorReporting {
+public protocol ErrorReporting: Sendable {
func logError(_ error: String)
func logError(_ error: Error)
}
diff --git a/iosApp/Modules/DI/ModuleLinker/Protocols/Library.swift b/iosApp/Modules/DI/ModuleLinker/Protocols/Library.swift
index 0d13628b..014a78ee 100644
--- a/iosApp/Modules/DI/ModuleLinker/Protocols/Library.swift
+++ b/iosApp/Modules/DI/ModuleLinker/Protocols/Library.swift
@@ -2,5 +2,6 @@ import Foundation
import SwiftUI
public protocol LibraryViewProviding {
+ @MainActor
func libraryView() -> AnyView
}
diff --git a/iosApp/Modules/DI/ModuleLinker/Protocols/NowPlaying.swift b/iosApp/Modules/DI/ModuleLinker/Protocols/NowPlaying.swift
index dbc827b4..9b96ac92 100644
--- a/iosApp/Modules/DI/ModuleLinker/Protocols/NowPlaying.swift
+++ b/iosApp/Modules/DI/ModuleLinker/Protocols/NowPlaying.swift
@@ -5,6 +5,7 @@ public protocol NowPlayingViewProviding {
func nowPlayingView() -> AnyView
}
+@MainActor
public protocol MiniNowPlayingViewProviding {
func miniNowPlayingView() -> AnyView
}
diff --git a/iosApp/Modules/Helpers/Analytics/AnalyticsModule.swift b/iosApp/Modules/Helpers/Analytics/AnalyticsModule.swift
new file mode 100644
index 00000000..b2c3de81
--- /dev/null
+++ b/iosApp/Modules/Helpers/Analytics/AnalyticsModule.swift
@@ -0,0 +1,24 @@
+import ModuleLinker
+import Foundation
+import Resolver
+import FirebaseCore
+
+final public class AnalyticsModule: Module {
+ public static var shared = AnalyticsModule()
+ private let newmAnalytics = NEWMAnalytics()
+
+ init() {
+ FirebaseApp.configure()
+ NEWMAnalytics().setup()
+ }
+
+ public func registerAllServices() {
+
+ }
+
+#if DEBUG
+ public func registerAllMockedServices(mockResolver: Resolver) {
+
+ }
+#endif
+}
diff --git a/iosApp/Modules/Helpers/Analytics/NEWMAnalytics.swift b/iosApp/Modules/Helpers/Analytics/NEWMAnalytics.swift
new file mode 100644
index 00000000..23288bfc
--- /dev/null
+++ b/iosApp/Modules/Helpers/Analytics/NEWMAnalytics.swift
@@ -0,0 +1,46 @@
+@preconcurrency import shared
+import FirebaseAnalytics
+import Combine
+import Resolver
+import Foundation
+import SharedExtensions
+
+public class NEWMAnalytics {
+ private var cancels: Set = []
+
+ func setup() {
+ NotificationCenter.default.publisher(for: shared.Notification().loginStateChanged)
+ .receive(on: DispatchQueue.main)
+ .sink { _ in
+ Task { @MainActor in
+ let user = Resolver.resolve(UserDetailsUseCase.self)
+ NEWMAnalytics.setUserId(userId: (try? await user.fetchLoggedInUserDetails().id) ?? "")
+ }
+ }
+ .store(in: &cancels)
+
+ Task { @MainActor in
+ let user = Resolver.resolve(UserDetailsUseCase.self)
+ NEWMAnalytics.setUserId(userId: (try? await user.fetchLoggedInUserDetails().id) ?? "")
+ }
+ }
+
+ static public func trackClickEvent(buttonName: String, screenName: String, properties: [String : Any]?) {
+ var properties = properties
+ properties?["button_name"] = buttonName
+ properties?["screen_name"] = screenName
+ Analytics.logEvent("button_click", parameters: properties)
+ }
+
+ static public func trackEvent(eventName: String, properties: [String : Any]?) {
+ Analytics.logEvent(eventName, parameters: properties)
+ }
+
+ static public func setUserId(userId: String) {
+ Analytics.setUserID(userId)
+ }
+
+ static public func setUserProperty(propertyName: String, value: String) {
+ Analytics.setUserProperty(value, forName: propertyName)
+ }
+}
diff --git a/iosApp/Modules/Helpers/Files/FileManagerService.swift b/iosApp/Modules/Helpers/Files/FileManagerService.swift
index 4ebde113..b7c531d4 100644
--- a/iosApp/Modules/Helpers/Files/FileManagerService.swift
+++ b/iosApp/Modules/Helpers/Files/FileManagerService.swift
@@ -50,13 +50,15 @@ public class FileManagerService: ObservableObject {
}
}
- public func clearFile(at url: URL) {
- do {
- try FileManager.default.removeItem(at: try fileURL(forDownloadURL: url))
- objectWillChange.send()
- } catch {
- errorLogger.logError("Error clearing documents directory: \(error)")
- }
+ public func clearFile(at url: URL) async {
+ await Task {
+ do {
+ try FileManager.default.removeItem(at: try fileURL(forDownloadURL: url))
+ objectWillChange.send()
+ } catch {
+ errorLogger.logError("Error clearing documents directory: \(error)")
+ }
+ }.value
}
public func download(url: URL, progressHandler: @escaping ProgressHandler) async throws {
diff --git a/iosApp/Modules/Helpers/Logging/SentryErrorReporter.swift b/iosApp/Modules/Helpers/Logging/SentryErrorReporter.swift
index 3fd2a83f..1e6daada 100644
--- a/iosApp/Modules/Helpers/Logging/SentryErrorReporter.swift
+++ b/iosApp/Modules/Helpers/Logging/SentryErrorReporter.swift
@@ -6,12 +6,16 @@ import shared
class SentryErrorReporter: ErrorReporting {
func logError(_ error: String) {
print("ERROR: \(error)")
+#if !DEBUG
SentrySDK.capture(error: error)
+#endif
}
func logError(_ error: Error) {
print("ERROR: \(error.kmmException?.description() ?? error)")
+#if !DEBUG
SentrySDK.capture(error: error.kmmException ?? error)
+#endif
}
}
diff --git a/iosApp/Modules/Helpers/SharedUI/XPubScannerView.swift b/iosApp/Modules/Helpers/SharedUI/ConnectWalletToAccountScannerView.swift
similarity index 97%
rename from iosApp/Modules/Helpers/SharedUI/XPubScannerView.swift
rename to iosApp/Modules/Helpers/SharedUI/ConnectWalletToAccountScannerView.swift
index b641d688..0b7abab5 100644
--- a/iosApp/Modules/Helpers/SharedUI/XPubScannerView.swift
+++ b/iosApp/Modules/Helpers/SharedUI/ConnectWalletToAccountScannerView.swift
@@ -1,9 +1,10 @@
import SwiftUI
-import shared
+@preconcurrency import shared
import Resolver
import ModuleLinker
import Utilities
import Colors
+import Analytics
@MainActor
public struct ConnectWalletToAccountScannerView: View {
@@ -60,6 +61,7 @@ public struct ConnectWalletToAccountScannerView: View {
.loadingToast(shouldShow: $isLoading)
.toast(shouldShow: $showCopiedToast, type: .copied)
.background(.black)
+ .analyticsScreen(name: AppScreens.ConnectWalletScannerScreen().name)
}
@ViewBuilder
diff --git a/iosApp/Modules/Helpers/SharedUI/QRCodeScannerView.swift b/iosApp/Modules/Helpers/SharedUI/QRCodeScannerView.swift
index 5c90fcef..03af107a 100644
--- a/iosApp/Modules/Helpers/SharedUI/QRCodeScannerView.swift
+++ b/iosApp/Modules/Helpers/SharedUI/QRCodeScannerView.swift
@@ -44,28 +44,3 @@ public struct QRCodeScannerView: UIViewControllerRepresentable {
public func updateUIViewController(_ uiViewController: QRCodeReaderViewController, context: Context) {}
}
-
-private struct ContentView: View {
- @State private var scannedCode: String?
-
- var body: some View {
- VStack {
- if let scannedCode = scannedCode {
- Text("Scanned code is: \(scannedCode)")
- } else {
- QRCodeScannerView {
- switch $0 {
- case .success(let qrCode):
- scannedCode = qrCode
- case .failure:
- fatalError()
- }
- }
- }
- }
- }
-}
-
-#Preview {
- ContentView()
-}
diff --git a/iosApp/Modules/Helpers/SharedUI/Resources/Icon+Generated.swift b/iosApp/Modules/Helpers/SharedUI/Resources/Icon+Generated.swift
index 7088dc85..7ba82206 100644
--- a/iosApp/Modules/Helpers/SharedUI/Resources/Icon+Generated.swift
+++ b/iosApp/Modules/Helpers/SharedUI/Resources/Icon+Generated.swift
@@ -52,9 +52,9 @@ public enum Asset {
public static let royaltiesIcon = ImageAsset(name: "RoyaltiesIcon")
public static let arrowSmallDown = ImageAsset(name: "arrow-small-down")
public static let backArrow = ImageAsset(name: "back-arrow")
- public static let checkboxCircleFill = ImageAsset(name: "checkbox-circle-fill")
public static let checkmark = ImageAsset(name: "checkmark")
public static let download = ImageAsset(name: "download")
+ public static let fileDownloadFill = ImageAsset(name: "file-download-fill")
public static let logo = ImageAsset(name: "logo")
public static let placeholder = ImageAsset(name: "placeholder")
public static let playMiniFill = ImageAsset(name: "play-mini-fill")
diff --git a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/checkbox-circle-fill.imageset/checkbox-circle-fill.svg b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/checkbox-circle-fill.imageset/checkbox-circle-fill.svg
deleted file mode 100644
index bb15efd3..00000000
--- a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/checkbox-circle-fill.imageset/checkbox-circle-fill.svg
+++ /dev/null
@@ -1,10 +0,0 @@
-
diff --git a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/Contents.json b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/Contents.json
index cae44869..8af5b624 100644
--- a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/Contents.json
+++ b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/Contents.json
@@ -1,7 +1,7 @@
{
"images" : [
{
- "filename" : "file-download-fill.svg",
+ "filename" : "download-simple.svg",
"idiom" : "universal"
}
],
diff --git a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/download-simple.svg b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/download-simple.svg
new file mode 100644
index 00000000..f2f0c4a0
--- /dev/null
+++ b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/download-simple.svg
@@ -0,0 +1,10 @@
+
diff --git a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/checkbox-circle-fill.imageset/Contents.json b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/file-download-fill.imageset/Contents.json
similarity index 72%
rename from iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/checkbox-circle-fill.imageset/Contents.json
rename to iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/file-download-fill.imageset/Contents.json
index 49f43cf5..cae44869 100644
--- a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/checkbox-circle-fill.imageset/Contents.json
+++ b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/file-download-fill.imageset/Contents.json
@@ -1,7 +1,7 @@
{
"images" : [
{
- "filename" : "checkbox-circle-fill.svg",
+ "filename" : "file-download-fill.svg",
"idiom" : "universal"
}
],
diff --git a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/file-download-fill.svg b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/file-download-fill.imageset/file-download-fill.svg
similarity index 80%
rename from iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/file-download-fill.svg
rename to iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/file-download-fill.imageset/file-download-fill.svg
index 955facc5..1049aec2 100644
--- a/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/download.imageset/file-download-fill.svg
+++ b/iosApp/Modules/Helpers/SharedUI/Resources/Media.xcassets/file-download-fill.imageset/file-download-fill.svg
@@ -1,9 +1,9 @@