diff --git a/NearbyShare/Connection/InboundNearbyConnection.swift b/NearbyShare/Connection/InboundNearbyConnection.swift index 1af32a0..effa10f 100644 --- a/NearbyShare/Connection/InboundNearbyConnection.swift +++ b/NearbyShare/Connection/InboundNearbyConnection.swift @@ -511,9 +511,11 @@ class InboundNearbyConnection: NearbyConnection { #endif filesToBeReceived[id]!.progress = progress filesToBeReceived[id]!.created = true - - log("[InboundNearbyConnection \(self.id)] Accepted file with size \(file.meta.size)") } + + let totalBytes = filesToBeReceived.values.reduce(0) { $0 + $1.meta.size } + let gigabytes = Double(totalBytes) / 1_000_000_000 + log("[InboundNearbyConnection \(self.id)] Accepted \(filesToBeReceived.count) file(s) with size \(totalBytes) bytes (\(gigabytes) GB)") var frame = Sharing_Nearby_Frame() frame.version = .v1 diff --git a/NearbyShare/Connection/NearbyConnection.swift b/NearbyShare/Connection/NearbyConnection.swift index e31567f..da4ac2c 100644 --- a/NearbyShare/Connection/NearbyConnection.swift +++ b/NearbyShare/Connection/NearbyConnection.swift @@ -207,8 +207,7 @@ class NearbyConnection { log("[NearbyConnection \(self.id)] Connection closed by peer during receiveFrameAsync(length:)") if let content = content, !content.isEmpty { - log("[NearbyConnection \(self.id)] Connection closed by peer during receiveFrameAsync(length:), but trying to process the frame anyway. Frame length: \(content.count)") - self.processReceivedFrame(frameData: content) + log("[NearbyConnection \(self.id)] Connection closed by peer during receiveFrameAsync(length:), and frame not empty. Frame length: \(content.count)") } else { log("[NearbyConnection \(self.id)] Connection closed by peer during receiveFrameAsync(length:), but no content received anymore (\(String(describing: content))).") @@ -424,7 +423,10 @@ class NearbyConnection { } else if offlineFrame.hasV1, offlineFrame.v1.hasType, case .keepAlive = offlineFrame.v1.type { - log("[NearbyConnection \(self.id)] Sent keep-alive, \(self.bytesTransferred) bytes sent") + let bytesTransferred = self.bytesTransferred + let gigabytesTransferred = Double(bytesTransferred) / 1_000_000_000 + + log("[NearbyConnection \(self.id)] Sent keep-alive, \(self.bytesTransferred) bytes (\(gigabytesTransferred) GB) sent") sendKeepAlive(ack: true) } else { diff --git a/NearbyShare/Util/SaveFilesManager.swift b/NearbyShare/Util/SaveFilesManager.swift index d26fd43..80336be 100644 --- a/NearbyShare/Util/SaveFilesManager.swift +++ b/NearbyShare/Util/SaveFilesManager.swift @@ -33,10 +33,10 @@ public class SaveFilesManager { } if didSomething { - log("Temporary directory cleared.") + log("[SaveFilesManager] Temporary directory cleared.") } } catch { - log("Failed to list contents of temp directory: \(error)") + log("[SaveFilesManager] Failed to list contents of temp directory: \(error)") } } @@ -70,7 +70,7 @@ public class SaveFilesManager { for file in files { if !loggedExecution { - log("Moving pending files to target directory") + log("[SaveFilesManager] Moving pending files to target directory") loggedExecution = true } @@ -78,11 +78,11 @@ public class SaveFilesManager { let destinationURL = target.appendingPathComponent(fileName) if !filesFinishedDownloading.contains(destinationURL) { - log("File \(file) not finished downloading, skipping") + log("[SaveFilesManager] File \(file) not finished downloading, skipping") continue } - log("Moving file: \(file.lastPathComponent) to \(destinationURL.lastPathComponent)") + log("[SaveFilesManager] Moving file: \(file.lastPathComponent) to \(destinationURL.lastPathComponent)") do { try fileManager.copyItem(at: file, to: destinationURL) @@ -106,10 +106,10 @@ public class SaveFilesManager { try fileManager.removeItem(at: file) } catch { - log("Error moving file: \(error)") + log("[SaveFilesManager] Error moving file: \(error)") } } - log("Moved all pending files to target directory") + log("[SaveFilesManager] Moved all pending files to target directory") } catch { // Pending directory doesn't exist or is empty @@ -120,7 +120,7 @@ public class SaveFilesManager { #if os(macOS) if UserDefaults.standard.bool(forKey: UserDefaultsKeys.openFinderAfterReceiving.rawValue) { - log("Opening \(filesFinishedDownloadingSinceLastRun.count) file(s) in Finder.") + log("[SaveFilesManager] Opening \(filesFinishedDownloadingSinceLastRun.count) file(s) in Finder.") NSWorkspace.shared.activateFileViewerSelecting(filesFinishedDownloadingSinceLastRun) } #else @@ -156,7 +156,7 @@ public class SaveFilesManager { return } - log("Stopping access to security scoped resource: \(url)") + log("[SaveFilesManager] Stopping access to security scoped resource: \(url)") url.stopAccessingSecurityScopedResource() securityScopeUrl = nil } @@ -167,7 +167,7 @@ public class SaveFilesManager { // Not supported on iOS #if os(macOS) if let securityScopeUrl = securityScopeUrl { - log("Using existing security scope URL: \(securityScopeUrl)") + log("[SaveFilesManager] Using existing security scope URL: \(securityScopeUrl)") return securityScopeUrl } @@ -179,24 +179,24 @@ public class SaveFilesManager { if !isStale { if url.startAccessingSecurityScopedResource() { - log("Successfully accessed security scoped resource: \(url)") + log("[SaveFilesManager] Successfully accessed security scoped resource: \(url)") securityScopeUrl = url return url } } else { - log("Bookmark is stale, using default downloads folder.") + log("[SaveFilesManager] Bookmark is stale, using default downloads folder.") } } catch { - log("Failed to resolve bookmark: \(error), using default downloads folder.") + log("[SaveFilesManager] Failed to resolve bookmark: \(error), using default downloads folder.") } } do { return try FileManager.default.url(for: .downloadsDirectory, in: .userDomainMask, appropriateFor: nil, create: true).resolvingSymlinksInPath() } catch { - fatalError("Failed to get downloads directory: \(error)") + fatalError("[SaveFilesManager] Failed to get downloads directory: \(error)") } #else // Return the documents directory for iOS diff --git a/QuickDrop.xcodeproj/project.pbxproj b/QuickDrop.xcodeproj/project.pbxproj index 8dcdc4d..31f189a 100644 --- a/QuickDrop.xcodeproj/project.pbxproj +++ b/QuickDrop.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 60; + objectVersion = 70; objects = { /* Begin PBXBuildFile section */ @@ -12,6 +12,7 @@ 699DEBA62AB0573200115D22 /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 699DEBA52AB0573200115D22 /* ShareViewController.swift */; }; 699DEBA92AB0573200115D22 /* ShareViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 699DEBA72AB0573200115D22 /* ShareViewController.xib */; }; 699DEBAE2AB0573200115D22 /* QuickDropShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 699DEBA12AB0573200115D22 /* QuickDropShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; + 69D2C32F29E7898C00EC7E30 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 69D2C32E29E7898C00EC7E30 /* MainMenu.xib */; }; 69DA9A1229E0BF5100A442DA /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A1129E0BF5100A442DA /* AppDelegate.swift */; }; 69DA9A1429E0BF5200A442DA /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; }; EB2F9BFE2DA05F48004010A2 /* BezelNotification in Frameworks */ = {isa = PBXBuildFile; productRef = EB2F9BFD2DA05F48004010A2 /* BezelNotification */; }; @@ -79,95 +80,18 @@ EB5C38402E38C49D0052EFD7 /* LaunchAtLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5C383E2E38C49D0052EFD7 /* LaunchAtLogin.swift */; }; EB5C38412E38C49D0052EFD7 /* LaunchAtLogin.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5C383E2E38C49D0052EFD7 /* LaunchAtLogin.swift */; }; EB6F62D72D91F4AF00534EC2 /* SettingsView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */; }; - EB704A822E4A7BB3008E608F /* DistributionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB704A812E4A7BAE008E608F /* DistributionDetector.swift */; }; - EB704A832E4B10D4008E608F /* DistributionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB704A812E4A7BAE008E608F /* DistributionDetector.swift */; }; - EB704A842E4B10D4008E608F /* DistributionDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB704A812E4A7BAE008E608F /* DistributionDetector.swift */; }; - EB7654782E525ACC006B4AA3 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = EB7654772E525ACC006B4AA3 /* MainMenu.xib */; }; - EB7654A12E53252D006B4AA3 /* AttachmentDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B762E521712002D68FA /* AttachmentDetails.swift */; }; - EB7654C02E534A8E006B4AA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; }; - EB7654C12E534A8E006B4AA3 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; }; - EB7654C42E534E89006B4AA3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB7654C32E534E89006B4AA3 /* InfoPlist.strings */; }; - EB7654C62E534E89006B4AA3 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = EB7654C32E534E89006B4AA3 /* InfoPlist.strings */; }; EB7CD1452D6FB0C300CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; }; EB7CD1462D6FB0E800CB0CB5 /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; }; EB7F54122D78E96000989564 /* TutorialView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7F54112D78E95C00989564 /* TutorialView.swift */; }; EB7F54142D78E9E700989564 /* LicenseWindow.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7F54132D78E9E400989564 /* LicenseWindow.swift */; }; - EB886E522E4E19390052B7D9 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E512E4E19390052B7D9 /* HKDF.swift */; }; - EB886E532E4E19390052B7D9 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E512E4E19390052B7D9 /* HKDF.swift */; }; - EB886E542E4E19390052B7D9 /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E512E4E19390052B7D9 /* HKDF.swift */; }; - EB886E552E4E50F40052B7D9 /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = EB5C36922E34EBBD0052EFD7 /* Localizable.xcstrings */; }; - EB886E582E4E66420052B7D9 /* LUI in Frameworks */ = {isa = PBXBuildFile; productRef = EB886E572E4E66420052B7D9 /* LUI */; }; - EB886E5D2E4F13EB0052B7D9 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC27F82D80C9F70079C478 /* Zip.swift */; }; - EB886E5E2E4F13EB0052B7D9 /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC27F82D80C9F70079C478 /* Zip.swift */; }; - EB886E672E4F2F800052B7D9 /* License.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E662E4F2F7C0052B7D9 /* License.swift */; }; - EB886E682E4F2F800052B7D9 /* License.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E662E4F2F7C0052B7D9 /* License.swift */; }; - EB886E6A2E4F37B90052B7D9 /* ErrorAlertHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C5A2E33936C00EECC18 /* ErrorAlertHandler.swift */; }; - EB950B372E52027F002D68FA /* iOSShareExtension.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = EB950B2D2E52027F002D68FA /* iOSShareExtension.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; - EB950B3E2E52038A002D68FA /* SendModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F902E50CA23008B8C5C /* SendModel.swift */; }; - EB950B3F2E52038A002D68FA /* FilePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8F2E50CA23008B8C5C /* FilePicker.swift */; }; - EB950B402E52038A002D68FA /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8D2E50CA23008B8C5C /* Configuration.swift */; }; - EB950B412E52038A002D68FA /* PieProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F992E50CAA6008B8C5C /* PieProgressView.swift */; }; - EB950B432E52038A002D68FA /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8E2E50CA23008B8C5C /* ContentView.swift */; }; - EB950B442E520414002D68FA /* License.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E662E4F2F7C0052B7D9 /* License.swift */; }; - EB950B452E520436002D68FA /* Helpers.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB2F9BFA2DA04B67004010A2 /* Helpers.swift */; }; - EB950B462E520436002D68FA /* OutboundNearbyConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 691F53BD2ABF03820089FD92 /* OutboundNearbyConnection.swift */; }; - EB950B472E520436002D68FA /* sharing_enums.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */; }; - EB950B482E520436002D68FA /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; - EB950B492E520436002D68FA /* device_to_device_messages.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2A29E18CB500A442DA /* device_to_device_messages.pb.swift */; }; - EB950B4A2E520436002D68FA /* securegcm.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2C29E18CB500A442DA /* securegcm.pb.swift */; }; - EB950B4B2E520436002D68FA /* offline_wire_formats.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2B29E18CB500A442DA /* offline_wire_formats.pb.swift */; }; - EB950B4C2E520436002D68FA /* InboundNearbyConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2229E17F0400A442DA /* InboundNearbyConnection.swift */; }; - EB950B4D2E520436002D68FA /* NearbyConnection.swift in Sources */ = {isa = PBXBuildFile; fileRef = 698DFAE529E2F91A0064F247 /* NearbyConnection.swift */; }; - EB950B4F2E520436002D68FA /* Logger.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */; }; - EB950B502E520436002D68FA /* wire_format.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2929E18CB500A442DA /* wire_format.pb.swift */; }; - EB950B512E520436002D68FA /* securemessage.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2D29E18CB500A442DA /* securemessage.pb.swift */; }; - EB950B522E520436002D68FA /* NearbyConnectionManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A1E29E0C0B300A442DA /* NearbyConnectionManager.swift */; }; - EB950B532E520436002D68FA /* ukey.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = 69DA9A2829E18CB500A442DA /* ukey.pb.swift */; }; - EB950B542E520436002D68FA /* HKDF.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB886E512E4E19390052B7D9 /* HKDF.swift */; }; - EB950B552E520436002D68FA /* SaveFilesManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5C36E62E3544FB0052EFD7 /* SaveFilesManager.swift */; }; - EB950B562E520436002D68FA /* DataModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB5C36E82E3546100052EFD7 /* DataModel.swift */; }; - EB950B572E520591002D68FA /* ErrorAlertHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C5A2E33936C00EECC18 /* ErrorAlertHandler.swift */; }; - EB950B582E5205B4002D68FA /* Zip.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBCC27F82D80C9F70079C478 /* Zip.swift */; }; - EB950B592E520649002D68FA /* AudioManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB36435F2D73A29F009CDFF8 /* AudioManager.swift */; }; - EB950B5A2E52065A002D68FA /* timeIsNow.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EBC05C8A2E33B59E00EECC18 /* timeIsNow.mp3 */; }; - EB950B5B2E52065A002D68FA /* timeIsNow.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EBC05C8A2E33B59E00EECC18 /* timeIsNow.mp3 */; }; - EB950B5C2E52065A002D68FA /* justMaybe.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EB5C38382E38C1F60052EFD7 /* justMaybe.mp3 */; }; - EB950B5D2E52065A002D68FA /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = EB5C36E32E34EC0E0052EFD7 /* License.txt */; }; - EB950B5F2E520671002D68FA /* SwiftProtobuf in Frameworks */ = {isa = PBXBuildFile; productRef = EB950B5E2E520671002D68FA /* SwiftProtobuf */; }; - EB950B612E520674002D68FA /* SwiftECC in Frameworks */ = {isa = PBXBuildFile; productRef = EB950B602E520674002D68FA /* SwiftECC */; }; - EB950B632E52067A002D68FA /* QRCode in Frameworks */ = {isa = PBXBuildFile; productRef = EB950B622E52067A002D68FA /* QRCode */; }; - EB950B652E52067D002D68FA /* LUI in Frameworks */ = {isa = PBXBuildFile; productRef = EB950B642E52067D002D68FA /* LUI */; }; - EB950B672E520680002D68FA /* RNDeviceName in Frameworks */ = {isa = PBXBuildFile; productRef = EB950B662E520680002D68FA /* RNDeviceName */; }; - EB950B6F2E5206E2002D68FA /* ShareViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B6B2E5206E2002D68FA /* ShareViewController.swift */; }; - EB950B702E520734002D68FA /* Localizable.xcstrings in Resources */ = {isa = PBXBuildFile; fileRef = EB5C36922E34EBBD0052EFD7 /* Localizable.xcstrings */; }; - EB950B742E520957002D68FA /* Attachments.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B732E520954002D68FA /* Attachments.swift */; }; - EB950B752E52111C002D68FA /* Attachments.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B732E520954002D68FA /* Attachments.swift */; }; - EB950B772E521712002D68FA /* AttachmentDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B762E521712002D68FA /* AttachmentDetails.swift */; }; - EB950B782E521712002D68FA /* AttachmentDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B762E521712002D68FA /* AttachmentDetails.swift */; }; - EB950B792E521717002D68FA /* AttachmentDetails.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB950B762E521712002D68FA /* AttachmentDetails.swift */; }; EB96ED8B2D7F7CF7004B3FF1 /* SmallSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8A2D7F7CF4004B3FF1 /* SmallSheetView.swift */; }; EB96ED8C2D7F7E7B004B3FF1 /* SmallSheetView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8A2D7F7CF4004B3FF1 /* SmallSheetView.swift */; }; EB96ED8D2D7F7EA3004B3FF1 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 69DA9A1329E0BF5200A442DA /* Assets.xcassets */; }; EB96ED8F2D7F8105004B3FF1 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; EB96ED902D7F8114004B3FF1 /* Localized.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB96ED8E2D7F8103004B3FF1 /* Localized.swift */; }; - EB979F942E50CA23008B8C5C /* Configuration.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8D2E50CA23008B8C5C /* Configuration.swift */; }; - EB979F952E50CA23008B8C5C /* ContentView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8E2E50CA23008B8C5C /* ContentView.swift */; }; - EB979F962E50CA23008B8C5C /* FilePicker.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F8F2E50CA23008B8C5C /* FilePicker.swift */; }; - EB979F972E50CA23008B8C5C /* SendModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F902E50CA23008B8C5C /* SendModel.swift */; }; - EB979F982E50CA23008B8C5C /* QuickDropiOSApp.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F922E50CA23008B8C5C /* QuickDropiOSApp.swift */; }; - EB979F9A2E50CAA6008B8C5C /* PieProgressView.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB979F992E50CAA6008B8C5C /* PieProgressView.swift */; }; - EB97A00F2E511124008B8C5C /* ReceiveModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB97A00E2E511120008B8C5C /* ReceiveModel.swift */; }; - EB97A0102E51CD13008B8C5C /* ReceiveModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB97A00E2E511120008B8C5C /* ReceiveModel.swift */; }; - EB97A0132E51D6B2008B8C5C /* RNDeviceName in Frameworks */ = {isa = PBXBuildFile; productRef = EB97A0122E51D6B2008B8C5C /* RNDeviceName */; }; - EB97A0142E51DD00008B8C5C /* License.txt in Resources */ = {isa = PBXBuildFile; fileRef = EB5C36E32E34EC0E0052EFD7 /* License.txt */; }; - EB97A0152E51DD00008B8C5C /* timeIsNow.mp3 in Resources */ = {isa = PBXBuildFile; fileRef = EBC05C8A2E33B59E00EECC18 /* timeIsNow.mp3 */; }; - EB97A01A2E51EAA2008B8C5C /* UIAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB97A0192E51EA9C008B8C5C /* UIAlert.swift */; }; EB9925802E45D53E00357055 /* sharing_enums.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */; }; EB9925812E45D53E00357055 /* sharing_enums.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */; }; EB9925822E45D53E00357055 /* sharing_enums.pb.swift in Sources */ = {isa = PBXBuildFile; fileRef = EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */; }; - EB9925852E45EF0900357055 /* QRCode in Frameworks */ = {isa = PBXBuildFile; productRef = EB9925842E45EF0900357055 /* QRCode */; }; - EB9925872E45F12F00357055 /* QRCode in Frameworks */ = {isa = PBXBuildFile; productRef = EB9925862E45F12F00357055 /* QRCode */; }; - EB9925892E45F13500357055 /* QRCode in Frameworks */ = {isa = PBXBuildFile; productRef = EB9925882E45F13500357055 /* QRCode */; }; EBC05C5B2E33937200EECC18 /* ErrorAlertHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C5A2E33936C00EECC18 /* ErrorAlertHandler.swift */; }; EBC05C5C2E3394EF00EECC18 /* ErrorAlertHandler.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C5A2E33936C00EECC18 /* ErrorAlertHandler.swift */; }; EBC05C712E33B57D00EECC18 /* Converter.swift in Sources */ = {isa = PBXBuildFile; fileRef = EBC05C6D2E33B57D00EECC18 /* Converter.swift */; }; @@ -199,13 +123,6 @@ remoteGlobalIDString = 699DEBA02AB0573200115D22; remoteInfo = ShareExtension; }; - EB950B352E52027F002D68FA /* PBXContainerItemProxy */ = { - isa = PBXContainerItemProxy; - containerPortal = 69DA9A0629E0BF5100A442DA /* Project object */; - proxyType = 1; - remoteGlobalIDString = EB950B2C2E52027F002D68FA; - remoteInfo = iOSShareExtension; - }; /* End PBXContainerItemProxy section */ /* Begin PBXCopyFilesBuildPhase section */ @@ -250,17 +167,6 @@ name = "Embed Libraries"; runOnlyForDeploymentPostprocessing = 0; }; - EB950B382E52027F002D68FA /* Embed Foundation Extensions */ = { - isa = PBXCopyFilesBuildPhase; - buildActionMask = 2147483647; - dstPath = ""; - dstSubfolderSpec = 13; - files = ( - EB950B372E52027F002D68FA /* iOSShareExtension.appex in Embed Foundation Extensions */, - ); - name = "Embed Foundation Extensions"; - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ @@ -275,6 +181,7 @@ 699DEBA82AB0573200115D22 /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ShareViewController.xib; sourceTree = ""; }; 699DEBAA2AB0573200115D22 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 699DEBAB2AB0573200115D22 /* ShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ShareExtension.entitlements; sourceTree = ""; }; + 69D2C32E29E7898C00EC7E30 /* MainMenu.xib */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = ""; }; 69DA9A0E29E0BF5100A442DA /* QuickDrop.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = QuickDrop.app; sourceTree = BUILT_PRODUCTS_DIR; }; 69DA9A1129E0BF5100A442DA /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = ""; }; 69DA9A1329E0BF5200A442DA /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; }; @@ -299,47 +206,11 @@ EB5C38382E38C1F60052EFD7 /* justMaybe.mp3 */ = {isa = PBXFileReference; lastKnownFileType = audio.mp3; path = justMaybe.mp3; sourceTree = ""; }; EB5C383E2E38C49D0052EFD7 /* LaunchAtLogin.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LaunchAtLogin.swift; sourceTree = ""; }; EB6F62D62D91F4AC00534EC2 /* SettingsView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsView.swift; sourceTree = ""; }; - EB704A812E4A7BAE008E608F /* DistributionDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DistributionDetector.swift; sourceTree = ""; }; - EB7654772E525ACC006B4AA3 /* MainMenu.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = MainMenu.xib; sourceTree = ""; }; - EB7654C22E534E89006B4AA3 /* InfoPlist.strings */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = InfoPlist.strings; path = de.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654C82E534F2C006B4AA3 /* ar */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ar; path = ar.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654C92E534F2D006B4AA3 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/InfoPlist.strings"; sourceTree = ""; }; - EB7654CA2E534F31006B4AA3 /* nl */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = nl; path = nl.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654CB2E534F32006B4AA3 /* fr */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = fr; path = fr.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654CC2E534F33006B4AA3 /* hu */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = hu; path = hu.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654CD2E534F33006B4AA3 /* it */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = it; path = it.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654CE2E534F34006B4AA3 /* ja */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ja; path = ja.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654CF2E534F35006B4AA3 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654D02E534F35006B4AA3 /* pt-BR */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-BR"; path = "pt-BR.lproj/InfoPlist.strings"; sourceTree = ""; }; - EB7654D12E534F41006B4AA3 /* pt-PT */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "pt-PT"; path = "pt-PT.lproj/InfoPlist.strings"; sourceTree = ""; }; - EB7654D22E534F42006B4AA3 /* ro */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ro; path = ro.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654D32E534F43006B4AA3 /* ru */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ru; path = ru.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654D42E534F43006B4AA3 /* es */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = es; path = es.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654D52E534F44006B4AA3 /* th */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = th; path = th.lproj/InfoPlist.strings; sourceTree = ""; }; - EB7654D62E534F45006B4AA3 /* uk */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = uk; path = uk.lproj/InfoPlist.strings; sourceTree = ""; }; EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Logger.swift; sourceTree = ""; }; EB7F54112D78E95C00989564 /* TutorialView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TutorialView.swift; sourceTree = ""; }; EB7F54132D78E9E400989564 /* LicenseWindow.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = LicenseWindow.swift; sourceTree = ""; }; - EB886E512E4E19390052B7D9 /* HKDF.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HKDF.swift; sourceTree = ""; }; - EB886E662E4F2F7C0052B7D9 /* License.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = License.swift; sourceTree = ""; }; - EB950B2D2E52027F002D68FA /* iOSShareExtension.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = iOSShareExtension.appex; sourceTree = BUILT_PRODUCTS_DIR; }; - EB950B682E5206E2002D68FA /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; - EB950B6B2E5206E2002D68FA /* ShareViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ShareViewController.swift; sourceTree = ""; }; - EB950B722E5207AF002D68FA /* iOSShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = iOSShareExtension.entitlements; sourceTree = ""; }; - EB950B732E520954002D68FA /* Attachments.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Attachments.swift; sourceTree = ""; }; - EB950B762E521712002D68FA /* AttachmentDetails.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AttachmentDetails.swift; sourceTree = ""; }; EB96ED8A2D7F7CF4004B3FF1 /* SmallSheetView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SmallSheetView.swift; sourceTree = ""; }; EB96ED8E2D7F8103004B3FF1 /* Localized.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Localized.swift; sourceTree = ""; }; - EB979F8D2E50CA23008B8C5C /* Configuration.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Configuration.swift; sourceTree = ""; }; - EB979F8E2E50CA23008B8C5C /* ContentView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ContentView.swift; sourceTree = ""; }; - EB979F8F2E50CA23008B8C5C /* FilePicker.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilePicker.swift; sourceTree = ""; }; - EB979F902E50CA23008B8C5C /* SendModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SendModel.swift; sourceTree = ""; }; - EB979F912E50CA23008B8C5C /* QuickDropiOS.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = QuickDropiOS.entitlements; sourceTree = ""; }; - EB979F922E50CA23008B8C5C /* QuickDropiOSApp.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QuickDropiOSApp.swift; sourceTree = ""; }; - EB979F992E50CAA6008B8C5C /* PieProgressView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PieProgressView.swift; sourceTree = ""; }; - EB97A00E2E511120008B8C5C /* ReceiveModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReceiveModel.swift; sourceTree = ""; }; - EB97A0162E51DF4F008B8C5C /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist; path = Info.plist; sourceTree = ""; }; - EB97A0192E51EA9C008B8C5C /* UIAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UIAlert.swift; sourceTree = ""; }; EB99257F2E45D53E00357055 /* sharing_enums.pb.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = sharing_enums.pb.swift; sourceTree = ""; }; EBC05C5A2E33936C00EECC18 /* ErrorAlertHandler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ErrorAlertHandler.swift; sourceTree = ""; }; EBC05C6D2E33B57D00EECC18 /* Converter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Converter.swift; sourceTree = ""; }; @@ -357,6 +228,10 @@ EBD2A2162D2860BE00BCB8E2 /* WelcomeScreen.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = WelcomeScreen.swift; sourceTree = ""; }; /* End PBXFileReference section */ +/* Begin PBXFileSystemSynchronizedRootGroup section */ + EB5C37E32E377C2E0052EFD7 /* QuickDropiOS */ = {isa = PBXFileSystemSynchronizedRootGroup; explicitFileTypes = {}; explicitFolders = (); path = QuickDropiOS; sourceTree = ""; }; +/* End PBXFileSystemSynchronizedRootGroup section */ + /* Begin PBXFrameworksBuildPhase section */ 699DEB9E2AB0573200115D22 /* Frameworks */ = { isa = PBXFrameworksBuildPhase; @@ -364,7 +239,6 @@ files = ( EB5C37D82E377ACF0052EFD7 /* SwiftECC in Frameworks */, EB5C37D62E377ACF0052EFD7 /* SwiftProtobuf in Frameworks */, - EB9925852E45EF0900357055 /* QRCode in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -372,7 +246,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB9925872E45F12F00357055 /* QRCode in Frameworks */, EB2F9BFE2DA05F48004010A2 /* BezelNotification in Frameworks */, EB5C37DC2E377AD60052EFD7 /* SwiftECC in Frameworks */, EB5C37DA2E377AD60052EFD7 /* SwiftProtobuf in Frameworks */, @@ -383,23 +256,8 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - EB97A0132E51D6B2008B8C5C /* RNDeviceName in Frameworks */, EB5C37F02E377C3F0052EFD7 /* SwiftECC in Frameworks */, - EB886E582E4E66420052B7D9 /* LUI in Frameworks */, EB5C37EE2E377C3F0052EFD7 /* SwiftProtobuf in Frameworks */, - EB9925892E45F13500357055 /* QRCode in Frameworks */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EB950B2A2E52027F002D68FA /* Frameworks */ = { - isa = PBXFrameworksBuildPhase; - buildActionMask = 2147483647; - files = ( - EB950B672E520680002D68FA /* RNDeviceName in Frameworks */, - EB950B612E520674002D68FA /* SwiftECC in Frameworks */, - EB950B652E52067D002D68FA /* LUI in Frameworks */, - EB950B5F2E520671002D68FA /* SwiftProtobuf in Frameworks */, - EB950B632E52067A002D68FA /* QRCode in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -419,8 +277,7 @@ isa = PBXGroup; children = ( 699DEBA52AB0573200115D22 /* ShareViewController.swift */, - EB950B732E520954002D68FA /* Attachments.swift */, - EB950B762E521712002D68FA /* AttachmentDetails.swift */, + EB5C371F2E3669500052EFD7 /* Util */, EB5C371E2E36693D0052EFD7 /* View */, 699DEBAA2AB0573200115D22 /* Info.plist */, 699DEBAB2AB0573200115D22 /* ShareExtension.entitlements */, @@ -434,8 +291,7 @@ 69DA9A1029E0BF5100A442DA /* QuickDrop */, 699DEBA22AB0573200115D22 /* ShareExtension */, 69DCF4822AB70D0600CBE2CC /* NearbyShare */, - EB979F932E50CA23008B8C5C /* QuickDropiOS */, - EB950B6C2E5206E2002D68FA /* iOSShareExtension */, + EB5C37E32E377C2E0052EFD7 /* QuickDropiOS */, 698DFAEC29E353220064F247 /* Frameworks */, 69DA9A0F29E0BF5100A442DA /* Products */, EBC05C8B2E33B59E00EECC18 /* Resources */, @@ -448,7 +304,6 @@ 69DA9A0E29E0BF5100A442DA /* QuickDrop.app */, 699DEBA12AB0573200115D22 /* QuickDropShareExtension.appex */, EB5C37E22E377C2E0052EFD7 /* QuickDropiOS.app */, - EB950B2D2E52027F002D68FA /* iOSShareExtension.appex */, ); name = Products; sourceTree = ""; @@ -497,8 +352,6 @@ children = ( EB96ED8E2D7F8103004B3FF1 /* Localized.swift */, EB2B41E32DC63AC80070FC39 /* SleepManager.swift */, - EBCC27F82D80C9F70079C478 /* Zip.swift */, - EB886E512E4E19390052B7D9 /* HKDF.swift */, EB7CD1442D6FB0C100CB0CB5 /* Logger.swift */, EB5C36E62E3544FB0052EFD7 /* SaveFilesManager.swift */, EB2F9BFA2DA04B67004010A2 /* Helpers.swift */, @@ -528,6 +381,14 @@ path = View; sourceTree = ""; }; + EB5C371F2E3669500052EFD7 /* Util */ = { + isa = PBXGroup; + children = ( + EBCC27F82D80C9F70079C478 /* Zip.swift */, + ); + path = Util; + sourceTree = ""; + }; EB5C37DD2E377B430052EFD7 /* Model */ = { isa = PBXGroup; children = ( @@ -537,38 +398,10 @@ path = Model; sourceTree = ""; }; - EB950B6C2E5206E2002D68FA /* iOSShareExtension */ = { - isa = PBXGroup; - children = ( - EB950B722E5207AF002D68FA /* iOSShareExtension.entitlements */, - EB950B682E5206E2002D68FA /* Info.plist */, - EB950B6B2E5206E2002D68FA /* ShareViewController.swift */, - ); - path = iOSShareExtension; - sourceTree = ""; - }; - EB979F932E50CA23008B8C5C /* QuickDropiOS */ = { - isa = PBXGroup; - children = ( - EB97A0162E51DF4F008B8C5C /* Info.plist */, - EB7654C32E534E89006B4AA3 /* InfoPlist.strings */, - EB979F8D2E50CA23008B8C5C /* Configuration.swift */, - EB979F8E2E50CA23008B8C5C /* ContentView.swift */, - EB979F8F2E50CA23008B8C5C /* FilePicker.swift */, - EB979F902E50CA23008B8C5C /* SendModel.swift */, - EB97A00E2E511120008B8C5C /* ReceiveModel.swift */, - EB97A0192E51EA9C008B8C5C /* UIAlert.swift */, - EB979F992E50CAA6008B8C5C /* PieProgressView.swift */, - EB979F912E50CA23008B8C5C /* QuickDropiOS.entitlements */, - EB979F922E50CA23008B8C5C /* QuickDropiOSApp.swift */, - ); - path = QuickDropiOS; - sourceTree = ""; - }; EBC05C6A2E33B55100EECC18 /* View */ = { isa = PBXGroup; children = ( - EB7654772E525ACC006B4AA3 /* MainMenu.xib */, + 69D2C32E29E7898C00EC7E30 /* MainMenu.xib */, EBD2A2162D2860BE00BCB8E2 /* WelcomeScreen.swift */, EB7F54112D78E95C00989564 /* TutorialView.swift */, EB7F54132D78E9E400989564 /* LicenseWindow.swift */, @@ -582,7 +415,6 @@ isa = PBXGroup; children = ( EB5C383E2E38C49D0052EFD7 /* LaunchAtLogin.swift */, - EB886E662E4F2F7C0052B7D9 /* License.swift */, EB36435F2D73A29F009CDFF8 /* AudioManager.swift */, EBC05C5A2E33936C00EECC18 /* ErrorAlertHandler.swift */, ); @@ -593,7 +425,6 @@ isa = PBXGroup; children = ( EBC05C6D2E33B57D00EECC18 /* Converter.swift */, - EB704A812E4A7BAE008E608F /* DistributionDetector.swift */, EBC05C6E2E33B57D00EECC18 /* Helper.swift */, EBC05C6F2E33B57D00EECC18 /* PlusView.swift */, ); @@ -673,7 +504,6 @@ EB2F9BFD2DA05F48004010A2 /* BezelNotification */, EB5C37D92E377AD60052EFD7 /* SwiftProtobuf */, EB5C37DB2E377AD60052EFD7 /* SwiftECC */, - EB9925862E45F12F00357055 /* QRCode */, ); productName = NearDrop; productReference = 69DA9A0E29E0BF5100A442DA /* QuickDrop.app */; @@ -686,49 +516,23 @@ EB5C37DE2E377C2E0052EFD7 /* Sources */, EB5C37DF2E377C2E0052EFD7 /* Frameworks */, EB5C37E02E377C2E0052EFD7 /* Resources */, - EB950B382E52027F002D68FA /* Embed Foundation Extensions */, ); buildRules = ( ); dependencies = ( - EB950B362E52027F002D68FA /* PBXTargetDependency */, + ); + fileSystemSynchronizedGroups = ( + EB5C37E32E377C2E0052EFD7 /* QuickDropiOS */, ); name = QuickDropiOS; packageProductDependencies = ( EB5C37ED2E377C3F0052EFD7 /* SwiftProtobuf */, EB5C37EF2E377C3F0052EFD7 /* SwiftECC */, - EB9925882E45F13500357055 /* QRCode */, - EB886E572E4E66420052B7D9 /* LUI */, - EB97A0122E51D6B2008B8C5C /* RNDeviceName */, ); productName = QuickDropiOS; productReference = EB5C37E22E377C2E0052EFD7 /* QuickDropiOS.app */; productType = "com.apple.product-type.application"; }; - EB950B2C2E52027F002D68FA /* iOSShareExtension */ = { - isa = PBXNativeTarget; - buildConfigurationList = EB950B3C2E52027F002D68FA /* Build configuration list for PBXNativeTarget "iOSShareExtension" */; - buildPhases = ( - EB950B292E52027F002D68FA /* Sources */, - EB950B2A2E52027F002D68FA /* Frameworks */, - EB950B2B2E52027F002D68FA /* Resources */, - ); - buildRules = ( - ); - dependencies = ( - ); - name = iOSShareExtension; - packageProductDependencies = ( - EB950B5E2E520671002D68FA /* SwiftProtobuf */, - EB950B602E520674002D68FA /* SwiftECC */, - EB950B622E52067A002D68FA /* QRCode */, - EB950B642E52067D002D68FA /* LUI */, - EB950B662E520680002D68FA /* RNDeviceName */, - ); - productName = iOSShareExtension; - productReference = EB950B2D2E52027F002D68FA /* iOSShareExtension.appex */; - productType = "com.apple.product-type.app-extension"; - }; /* End PBXNativeTarget section */ /* Begin PBXProject section */ @@ -749,9 +553,6 @@ EB5C37E12E377C2E0052EFD7 = { CreatedOnToolsVersion = 16.4; }; - EB950B2C2E52027F002D68FA = { - CreatedOnToolsVersion = 16.4; - }; }; }; buildConfigurationList = 69DA9A0929E0BF5100A442DA /* Build configuration list for PBXProject "QuickDrop" */; @@ -783,9 +584,6 @@ 69DA9A2429E189EF00A442DA /* XCRemoteSwiftPackageReference "swift-protobuf" */, 69DA9A3429E1994C00A442DA /* XCRemoteSwiftPackageReference "SwiftECC" */, EB2F9BFC2DA05F48004010A2 /* XCRemoteSwiftPackageReference "BezelNotification" */, - EB9925832E45EF0900357055 /* XCRemoteSwiftPackageReference "qrcode" */, - EB886E562E4E66420052B7D9 /* XCRemoteSwiftPackageReference "LUI" */, - EB97A0112E51D6B2008B8C5C /* XCRemoteSwiftPackageReference "RNDeviceName" */, ); productRefGroup = 69DA9A0F29E0BF5100A442DA /* Products */; projectDirPath = ""; @@ -794,7 +592,6 @@ 69DA9A0D29E0BF5100A442DA /* QuickDrop */, 699DEBA02AB0573200115D22 /* QuickDropShareExtension */, EB5C37E12E377C2E0052EFD7 /* QuickDropiOS */, - EB950B2C2E52027F002D68FA /* iOSShareExtension */, ); }; /* End PBXProject section */ @@ -810,7 +607,6 @@ 699DEBA92AB0573200115D22 /* ShareViewController.xib in Resources */, EB96ED8D2D7F7EA3004B3FF1 /* Assets.xcassets in Resources */, EB5C383A2E38C1F60052EFD7 /* justMaybe.mp3 in Resources */, - EB950B5A2E52065A002D68FA /* timeIsNow.mp3 in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -822,8 +618,8 @@ EB5C36E42E34EC0E0052EFD7 /* License.txt in Resources */, EB5C36932E34EBBD0052EFD7 /* Localizable.xcstrings in Resources */, EBC05C8C2E33B59E00EECC18 /* timeIsNow.mp3 in Resources */, + 69D2C32F29E7898C00EC7E30 /* MainMenu.xib in Resources */, EB5C38392E38C1F60052EFD7 /* justMaybe.mp3 in Resources */, - EB7654782E525ACC006B4AA3 /* MainMenu.xib in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -832,24 +628,6 @@ buildActionMask = 2147483647; files = ( EB5C383B2E38C1F60052EFD7 /* justMaybe.mp3 in Resources */, - EB7654C42E534E89006B4AA3 /* InfoPlist.strings in Resources */, - EB97A0142E51DD00008B8C5C /* License.txt in Resources */, - EB97A0152E51DD00008B8C5C /* timeIsNow.mp3 in Resources */, - EB886E552E4E50F40052B7D9 /* Localizable.xcstrings in Resources */, - EB7654C02E534A8E006B4AA3 /* Assets.xcassets in Resources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; - EB950B2B2E52027F002D68FA /* Resources */ = { - isa = PBXResourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EB950B5B2E52065A002D68FA /* timeIsNow.mp3 in Resources */, - EB7654C62E534E89006B4AA3 /* InfoPlist.strings in Resources */, - EB950B702E520734002D68FA /* Localizable.xcstrings in Resources */, - EB950B5C2E52065A002D68FA /* justMaybe.mp3 in Resources */, - EB950B5D2E52065A002D68FA /* License.txt in Resources */, - EB7654C12E534A8E006B4AA3 /* Assets.xcassets in Resources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -860,9 +638,7 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - EB704A832E4B10D4008E608F /* DistributionDetector.swift in Sources */, EB96ED902D7F8114004B3FF1 /* Localized.swift in Sources */, - EB886E542E4E19390052B7D9 /* HKDF.swift in Sources */, EBC05C862E33B58300EECC18 /* NetworkFilterIssueView.swift in Sources */, EBC05C872E33B58300EECC18 /* IssueView.swift in Sources */, EBC05C882E33B58300EECC18 /* FirewallIssueView.swift in Sources */, @@ -876,7 +652,6 @@ EB5C37C72E377A780052EFD7 /* wire_format.pb.swift in Sources */, EB5C37C82E377A780052EFD7 /* ukey.pb.swift in Sources */, EB5C37C92E377A780052EFD7 /* device_to_device_messages.pb.swift in Sources */, - EB950B742E520957002D68FA /* Attachments.swift in Sources */, EB5C383C2E38C2D90052EFD7 /* AudioManager.swift in Sources */, EB5C37CA2E377A780052EFD7 /* offline_wire_formats.pb.swift in Sources */, EBC05C5C2E3394EF00EECC18 /* ErrorAlertHandler.swift in Sources */, @@ -885,7 +660,6 @@ 691F53BB2ABB70840089FD92 /* DeviceListCell.swift in Sources */, EB5C383F2E38C49D0052EFD7 /* LaunchAtLogin.swift in Sources */, EB5C37BC2E377A700052EFD7 /* SleepManager.swift in Sources */, - EB950B782E521712002D68FA /* AttachmentDetails.swift in Sources */, EB5C37D02E377A7F0052EFD7 /* OutboundNearbyConnection.swift in Sources */, EB5C37D12E377A7F0052EFD7 /* DataModel.swift in Sources */, EB5C37D22E377A7F0052EFD7 /* NearbyConnection.swift in Sources */, @@ -909,7 +683,6 @@ EB5C37BA2E377A6F0052EFD7 /* Helpers.swift in Sources */, EBC05C5B2E33937200EECC18 /* ErrorAlertHandler.swift in Sources */, EBC05C712E33B57D00EECC18 /* Converter.swift in Sources */, - EB886E5D2E4F13EB0052B7D9 /* Zip.swift in Sources */, EBC05C722E33B57D00EECC18 /* Helper.swift in Sources */, EBC05C732E33B57D00EECC18 /* PlusView.swift in Sources */, EB5C37BF2E377A780052EFD7 /* ukey.pb.swift in Sources */, @@ -918,7 +691,6 @@ EB5C37C22E377A780052EFD7 /* device_to_device_messages.pb.swift in Sources */, EB5C37C32E377A780052EFD7 /* wire_format.pb.swift in Sources */, EB5C37C42E377A780052EFD7 /* securegcm.pb.swift in Sources */, - EB97A0102E51CD13008B8C5C /* ReceiveModel.swift in Sources */, EBC05C782E33B58100EECC18 /* ActiveNetworkInterface.swift in Sources */, EB5C37CB2E377A7F0052EFD7 /* NearbyConnection.swift in Sources */, EB5C37CC2E377A7F0052EFD7 /* DataModel.swift in Sources */, @@ -926,16 +698,12 @@ EB5C37CE2E377A7F0052EFD7 /* InboundNearbyConnection.swift in Sources */, EB5C37CF2E377A7F0052EFD7 /* NearbyConnectionManager.swift in Sources */, EBC05C792E33B58100EECC18 /* ApIsolation6Tester.swift in Sources */, - EB7654A12E53252D006B4AA3 /* AttachmentDetails.swift in Sources */, EBC05C7A2E33B58100EECC18 /* ApIsolationTester.swift in Sources */, - EB886E522E4E19390052B7D9 /* HKDF.swift in Sources */, EB96ED8C2D7F7E7B004B3FF1 /* SmallSheetView.swift in Sources */, - EB886E682E4F2F800052B7D9 /* License.swift in Sources */, EB7F54142D78E9E700989564 /* LicenseWindow.swift in Sources */, 69DA9A1229E0BF5100A442DA /* AppDelegate.swift in Sources */, EB6F62D72D91F4AF00534EC2 /* SettingsView.swift in Sources */, EB7F54122D78E96000989564 /* TutorialView.swift in Sources */, - EB704A822E4A7BB3008E608F /* DistributionDetector.swift in Sources */, EB9925812E45D53E00357055 /* sharing_enums.pb.swift in Sources */, EB96ED8F2D7F8105004B3FF1 /* Localized.swift in Sources */, EB7CD1452D6FB0C300CB0CB5 /* Logger.swift in Sources */, @@ -953,12 +721,9 @@ EB5C37F12E377CE70052EFD7 /* ukey.pb.swift in Sources */, EB5C37F22E377CE70052EFD7 /* NearbyConnection.swift in Sources */, EB5C37F32E377CE70052EFD7 /* SaveFilesManager.swift in Sources */, - EB886E672E4F2F800052B7D9 /* License.swift in Sources */, EB5C37F42E377CE70052EFD7 /* NearbyConnectionManager.swift in Sources */, EB5C37F52E377CE70052EFD7 /* securemessage.pb.swift in Sources */, EB5C37F62E377CE70052EFD7 /* device_to_device_messages.pb.swift in Sources */, - EB704A842E4B10D4008E608F /* DistributionDetector.swift in Sources */, - EB886E532E4E19390052B7D9 /* HKDF.swift in Sources */, EB5C37F82E377CE70052EFD7 /* SleepManager.swift in Sources */, EB5C38012E377DE60052EFD7 /* Localized.swift in Sources */, EB5C37F92E377CE70052EFD7 /* securegcm.pb.swift in Sources */, @@ -967,61 +732,14 @@ EB9925802E45D53E00357055 /* sharing_enums.pb.swift in Sources */, EB5C37FC2E377CE70052EFD7 /* OutboundNearbyConnection.swift in Sources */, EB5C37FD2E377CE70052EFD7 /* Logger.swift in Sources */, - EB97A00F2E511124008B8C5C /* ReceiveModel.swift in Sources */, EB5C37FE2E377CE70052EFD7 /* offline_wire_formats.pb.swift in Sources */, - EB886E6A2E4F37B90052B7D9 /* ErrorAlertHandler.swift in Sources */, - EB886E5E2E4F13EB0052B7D9 /* Zip.swift in Sources */, EB5C383D2E38C2D90052EFD7 /* AudioManager.swift in Sources */, - EB979F942E50CA23008B8C5C /* Configuration.swift in Sources */, - EB979F952E50CA23008B8C5C /* ContentView.swift in Sources */, - EB97A01A2E51EAA2008B8C5C /* UIAlert.swift in Sources */, - EB979F962E50CA23008B8C5C /* FilePicker.swift in Sources */, - EB979F9A2E50CAA6008B8C5C /* PieProgressView.swift in Sources */, - EB979F972E50CA23008B8C5C /* SendModel.swift in Sources */, - EB979F982E50CA23008B8C5C /* QuickDropiOSApp.swift in Sources */, EB5C38402E38C49D0052EFD7 /* LaunchAtLogin.swift in Sources */, EB5C37FF2E377CE70052EFD7 /* wire_format.pb.swift in Sources */, - EB950B792E521717002D68FA /* AttachmentDetails.swift in Sources */, EB5C38002E377CE70052EFD7 /* DataModel.swift in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; - EB950B292E52027F002D68FA /* Sources */ = { - isa = PBXSourcesBuildPhase; - buildActionMask = 2147483647; - files = ( - EB950B452E520436002D68FA /* Helpers.swift in Sources */, - EB950B572E520591002D68FA /* ErrorAlertHandler.swift in Sources */, - EB950B462E520436002D68FA /* OutboundNearbyConnection.swift in Sources */, - EB950B472E520436002D68FA /* sharing_enums.pb.swift in Sources */, - EB950B482E520436002D68FA /* Localized.swift in Sources */, - EB950B492E520436002D68FA /* device_to_device_messages.pb.swift in Sources */, - EB950B4A2E520436002D68FA /* securegcm.pb.swift in Sources */, - EB950B4B2E520436002D68FA /* offline_wire_formats.pb.swift in Sources */, - EB950B4C2E520436002D68FA /* InboundNearbyConnection.swift in Sources */, - EB950B4D2E520436002D68FA /* NearbyConnection.swift in Sources */, - EB950B4F2E520436002D68FA /* Logger.swift in Sources */, - EB950B502E520436002D68FA /* wire_format.pb.swift in Sources */, - EB950B582E5205B4002D68FA /* Zip.swift in Sources */, - EB950B512E520436002D68FA /* securemessage.pb.swift in Sources */, - EB950B522E520436002D68FA /* NearbyConnectionManager.swift in Sources */, - EB950B532E520436002D68FA /* ukey.pb.swift in Sources */, - EB950B542E520436002D68FA /* HKDF.swift in Sources */, - EB950B552E520436002D68FA /* SaveFilesManager.swift in Sources */, - EB950B562E520436002D68FA /* DataModel.swift in Sources */, - EB950B3E2E52038A002D68FA /* SendModel.swift in Sources */, - EB950B772E521712002D68FA /* AttachmentDetails.swift in Sources */, - EB950B3F2E52038A002D68FA /* FilePicker.swift in Sources */, - EB950B402E52038A002D68FA /* Configuration.swift in Sources */, - EB950B412E52038A002D68FA /* PieProgressView.swift in Sources */, - EB950B592E520649002D68FA /* AudioManager.swift in Sources */, - EB950B752E52111C002D68FA /* Attachments.swift in Sources */, - EB950B6F2E5206E2002D68FA /* ShareViewController.swift in Sources */, - EB950B432E52038A002D68FA /* ContentView.swift in Sources */, - EB950B442E520414002D68FA /* License.swift in Sources */, - ); - runOnlyForDeploymentPostprocessing = 0; - }; /* End PBXSourcesBuildPhase section */ /* Begin PBXTargetDependency section */ @@ -1030,11 +748,6 @@ target = 699DEBA02AB0573200115D22 /* QuickDropShareExtension */; targetProxy = 699DEBAC2AB0573200115D22 /* PBXContainerItemProxy */; }; - EB950B362E52027F002D68FA /* PBXTargetDependency */ = { - isa = PBXTargetDependency; - target = EB950B2C2E52027F002D68FA /* iOSShareExtension */; - targetProxy = EB950B352E52027F002D68FA /* PBXContainerItemProxy */; - }; /* End PBXTargetDependency section */ /* Begin PBXVariantGroup section */ @@ -1047,29 +760,6 @@ name = ShareViewController.xib; sourceTree = ""; }; - EB7654C32E534E89006B4AA3 /* InfoPlist.strings */ = { - isa = PBXVariantGroup; - children = ( - EB7654C22E534E89006B4AA3 /* InfoPlist.strings */, - EB7654C82E534F2C006B4AA3 /* ar */, - EB7654C92E534F2D006B4AA3 /* zh-Hans */, - EB7654CA2E534F31006B4AA3 /* nl */, - EB7654CB2E534F32006B4AA3 /* fr */, - EB7654CC2E534F33006B4AA3 /* hu */, - EB7654CD2E534F33006B4AA3 /* it */, - EB7654CE2E534F34006B4AA3 /* ja */, - EB7654CF2E534F35006B4AA3 /* ko */, - EB7654D02E534F35006B4AA3 /* pt-BR */, - EB7654D12E534F41006B4AA3 /* pt-PT */, - EB7654D22E534F42006B4AA3 /* ro */, - EB7654D32E534F43006B4AA3 /* ru */, - EB7654D42E534F43006B4AA3 /* es */, - EB7654D52E534F44006B4AA3 /* th */, - EB7654D62E534F45006B4AA3 /* uk */, - ); - name = InfoPlist.strings; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ @@ -1095,13 +785,11 @@ ); MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop.ShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REGISTER_APP_GROUPS = YES; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) EXTENSION"; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; }; @@ -1129,14 +817,11 @@ ); MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop.ShareExtension; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; REGISTER_APP_GROUPS = YES; SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = EXTENSION; - "SWIFT_ACTIVE_COMPILATION_CONDITIONS[arch=*]" = ""; SWIFT_EMIT_LOC_STRINGS = YES; SWIFT_VERSION = 5.0; }; @@ -1293,7 +978,7 @@ INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSUIElement = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Leon Böttger"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Leon Böttger and NearDrop developers"; INFOPLIST_KEY_NSMainNibFile = MainMenu; INFOPLIST_KEY_NSPrincipalClass = NSApplication; LD_RUNPATH_SEARCH_PATHS = ( @@ -1302,7 +987,6 @@ ); MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1334,7 +1018,7 @@ INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; INFOPLIST_KEY_LSUIElement = YES; - INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Leon Böttger"; + INFOPLIST_KEY_NSHumanReadableCopyright = "Copyright © 2025 Leon Böttger and NearDrop developers"; INFOPLIST_KEY_NSMainNibFile = MainMenu; INFOPLIST_KEY_NSPrincipalClass = NSApplication; LD_RUNPATH_SEARCH_PATHS = ( @@ -1343,7 +1027,6 @@ ); MACOSX_DEPLOYMENT_TARGET = 11.0; MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -1361,28 +1044,22 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = QuickDropiOS/QuickDropiOS.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = "${SHARED_BUILD}"; + CURRENT_PROJECT_VERSION = 1; ENABLE_PREVIEWS = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = QuickDropiOS/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = QuickDrop; - INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES; - INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Local network access is needed to detect devices and transfer files over your Wi-Fi network."; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; + MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1403,28 +1080,22 @@ ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_ENTITLEMENTS = QuickDropiOS/QuickDropiOS.entitlements; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = "${SHARED_BUILD}"; + CURRENT_PROJECT_VERSION = 1; ENABLE_PREVIEWS = YES; GCC_C_LANGUAGE_STANDARD = gnu17; GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = QuickDropiOS/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = QuickDrop; - INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; - INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - INFOPLIST_KEY_LSSupportsOpeningDocumentsInPlace = YES; - INFOPLIST_KEY_NSLocalNetworkUsageDescription = "Local network access is needed to detect devices and transfer files over your Wi-Fi network."; + INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; - INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait; - INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; + INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; IPHONEOS_DEPLOYMENT_TARGET = 16.6; LD_RUNPATH_SEARCH_PATHS = ( "$(inherited)", "@executable_path/Frameworks", ); MACOSX_DEPLOYMENT_TARGET = 11.0; - MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; + MARKETING_VERSION = 1.0; PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop; PRODUCT_NAME = "$(TARGET_NAME)"; SDKROOT = iphoneos; @@ -1438,67 +1109,6 @@ }; name = Release; }; - EB950B392E52027F002D68FA /* Debug */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = iOSShareExtension/iOSShareExtension.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = "${SHARED_BUILD}"; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = iOSShareExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = iOSShareExtension; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 16.6; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop.iOSShareExtension; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = "$(inherited) EXTENSION"; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - }; - name = Debug; - }; - EB950B3A2E52027F002D68FA /* Release */ = { - isa = XCBuildConfiguration; - buildSettings = { - CODE_SIGN_ENTITLEMENTS = iOSShareExtension/iOSShareExtension.entitlements; - CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = "${SHARED_BUILD}"; - GCC_C_LANGUAGE_STANDARD = gnu17; - GENERATE_INFOPLIST_FILE = YES; - INFOPLIST_FILE = iOSShareExtension/Info.plist; - INFOPLIST_KEY_CFBundleDisplayName = iOSShareExtension; - INFOPLIST_KEY_NSHumanReadableCopyright = ""; - IPHONEOS_DEPLOYMENT_TARGET = 16.6; - LD_RUNPATH_SEARCH_PATHS = ( - "$(inherited)", - "@executable_path/Frameworks", - "@executable_path/../../Frameworks", - ); - MARKETING_VERSION = "${SHARED_VERSION}"; - OTHER_SWIFT_FLAGS = ""; - PRODUCT_BUNDLE_IDENTIFIER = com.leonboettger.neardrop.iOSShareExtension; - PRODUCT_NAME = "$(TARGET_NAME)"; - SDKROOT = iphoneos; - SKIP_INSTALL = YES; - SWIFT_ACTIVE_COMPILATION_CONDITIONS = EXTENSION; - SWIFT_EMIT_LOC_STRINGS = YES; - SWIFT_VERSION = 5.0; - TARGETED_DEVICE_FAMILY = "1,2"; - VALIDATE_PRODUCT = YES; - }; - name = Release; - }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -1538,15 +1148,6 @@ defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; }; - EB950B3C2E52027F002D68FA /* Build configuration list for PBXNativeTarget "iOSShareExtension" */ = { - isa = XCConfigurationList; - buildConfigurations = ( - EB950B392E52027F002D68FA /* Debug */, - EB950B3A2E52027F002D68FA /* Release */, - ); - defaultConfigurationIsVisible = 0; - defaultConfigurationName = Release; - }; /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ @@ -1574,30 +1175,6 @@ minimumVersion = 2.1.0; }; }; - EB886E562E4E66420052B7D9 /* XCRemoteSwiftPackageReference "LUI" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/leonboe1/LUI.git"; - requirement = { - branch = main; - kind = branch; - }; - }; - EB97A0112E51D6B2008B8C5C /* XCRemoteSwiftPackageReference "RNDeviceName" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/souzainf3/RNDeviceName"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 2.1.0; - }; - }; - EB9925832E45EF0900357055 /* XCRemoteSwiftPackageReference "qrcode" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/dagronf/qrcode.git"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 26.10.0; - }; - }; /* End XCRemoteSwiftPackageReference section */ /* Begin XCSwiftPackageProductDependency section */ @@ -1636,56 +1213,6 @@ package = 69DA9A3429E1994C00A442DA /* XCRemoteSwiftPackageReference "SwiftECC" */; productName = SwiftECC; }; - EB886E572E4E66420052B7D9 /* LUI */ = { - isa = XCSwiftPackageProductDependency; - package = EB886E562E4E66420052B7D9 /* XCRemoteSwiftPackageReference "LUI" */; - productName = LUI; - }; - EB950B5E2E520671002D68FA /* SwiftProtobuf */ = { - isa = XCSwiftPackageProductDependency; - package = 69DA9A2429E189EF00A442DA /* XCRemoteSwiftPackageReference "swift-protobuf" */; - productName = SwiftProtobuf; - }; - EB950B602E520674002D68FA /* SwiftECC */ = { - isa = XCSwiftPackageProductDependency; - package = 69DA9A3429E1994C00A442DA /* XCRemoteSwiftPackageReference "SwiftECC" */; - productName = SwiftECC; - }; - EB950B622E52067A002D68FA /* QRCode */ = { - isa = XCSwiftPackageProductDependency; - package = EB9925832E45EF0900357055 /* XCRemoteSwiftPackageReference "qrcode" */; - productName = QRCode; - }; - EB950B642E52067D002D68FA /* LUI */ = { - isa = XCSwiftPackageProductDependency; - package = EB886E562E4E66420052B7D9 /* XCRemoteSwiftPackageReference "LUI" */; - productName = LUI; - }; - EB950B662E520680002D68FA /* RNDeviceName */ = { - isa = XCSwiftPackageProductDependency; - package = EB97A0112E51D6B2008B8C5C /* XCRemoteSwiftPackageReference "RNDeviceName" */; - productName = RNDeviceName; - }; - EB97A0122E51D6B2008B8C5C /* RNDeviceName */ = { - isa = XCSwiftPackageProductDependency; - package = EB97A0112E51D6B2008B8C5C /* XCRemoteSwiftPackageReference "RNDeviceName" */; - productName = RNDeviceName; - }; - EB9925842E45EF0900357055 /* QRCode */ = { - isa = XCSwiftPackageProductDependency; - package = EB9925832E45EF0900357055 /* XCRemoteSwiftPackageReference "qrcode" */; - productName = QRCode; - }; - EB9925862E45F12F00357055 /* QRCode */ = { - isa = XCSwiftPackageProductDependency; - package = EB9925832E45EF0900357055 /* XCRemoteSwiftPackageReference "qrcode" */; - productName = QRCode; - }; - EB9925882E45F13500357055 /* QRCode */ = { - isa = XCSwiftPackageProductDependency; - package = EB9925832E45EF0900357055 /* XCRemoteSwiftPackageReference "qrcode" */; - productName = QRCode; - }; /* End XCSwiftPackageProductDependency section */ }; rootObject = 69DA9A0629E0BF5100A442DA /* Project object */; diff --git a/QuickDrop/AppDelegate.swift b/QuickDrop/AppDelegate.swift index a9fe868..ff531df 100644 --- a/QuickDrop/AppDelegate.swift +++ b/QuickDrop/AppDelegate.swift @@ -14,9 +14,10 @@ import SwiftUI import UserNotifications @main -class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate, NSWindowDelegate { +class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDelegate, NSWindowDelegate, MainAppDelegate { private var statusItem: NSStatusItem? + private var activeIncomingTransfers: [String: TransferInfo] = [:] var welcomeWindow: NSWindow? var plusWindow: NSWindow? @@ -26,7 +27,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele private var errorAlertHandler = ErrorAlertHandler.shared private var iapManager: IAPManager? - private var receiveModel: ReceiveModel? var showsFirewallAlert = false var visibleItem: NSMenuItem? = nil @@ -65,6 +65,9 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele statusItem?.menu = menu statusItem?.behavior = .removalAllowed + NearbyConnectionManager.shared.mainAppDelegate = self + NearbyConnectionManager.shared.becomeVisible() + iapManager = IAPManager.sharedInstance iapManager?.startObserving() @@ -109,7 +112,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele let queue2 = DispatchQueue(label: "NetworkConnectionMonitor") hasConnectionMonitor.start(queue: queue2) - + receiveModel = ReceiveModel(controlPlusScreen: { shouldOpen in if shouldOpen { self.openPlusScreen() @@ -118,9 +121,12 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele if let window = self.plusWindow { log("[AppDelegate] Closing plus screen because of error") window.close() + self.plusWindow = nil } } }) + + log("Application did finish launching") } @@ -130,7 +136,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele welcomeWindow = nil NSApp.setActivationPolicy(.accessory) } - } + } func applicationShouldHandleReopen(_: NSApplication, hasVisibleWindows _: Bool) -> Bool { @@ -181,15 +187,8 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele let pasteboard = NSPasteboard.general let clipboardString = pasteboard.string(forType: .string) ?? "" - if clipboardString.isEmpty { - DispatchQueue.main.async { - BezelNotification.show(messageText: "ClipboardEmpty".localized(), icon: .clipboard) - } - } - else { - let sharingService = NSSharingService(named: NSSharingService.Name("com.leonboettger.neardrop.ShareExtension")) - sharingService?.perform(withItems: [clipboardString]) - } + let sharingService = NSSharingService(named: NSSharingService.Name("com.leonboettger.neardrop.ShareExtension")) + sharingService?.perform(withItems: [clipboardString]) } @@ -244,13 +243,14 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele log("Plus screen already open, bringing to front") return } - + log("Opening Plus screen") // Create the welcome screen SwiftUI view let plusView = PlusView(closeView: { log("Closing plus screen") self.plusWindow?.close() + self.plusWindow = nil }) // Create an NSWindow to host the SwiftUI view @@ -318,7 +318,7 @@ class AppDelegate: NSObject, NSApplicationDelegate, UNUserNotificationCenterDele } } - + // MARK: - Helper Functions private func performDeviceToDeviceCheck() { diff --git a/QuickDrop/Localizable.xcstrings b/QuickDrop/Localizable.xcstrings index 935a24e..c22139b 100644 --- a/QuickDrop/Localizable.xcstrings +++ b/QuickDrop/Localizable.xcstrings @@ -1068,434 +1068,6 @@ } } }, - "Available" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "متاح" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verfügbar" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Available" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disponible" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disponible" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elérhető" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disponibile" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "利用可能" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "사용 가능" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Beschikbaar" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disponível" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disponível" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Disponibil" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Доступно" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "พร้อมใช้งาน" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Доступний" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "可用" - } - } - } - }, - "AvailableDevices" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الأجهزة المتاحة" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verfügbare Geräte" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Available Devices" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dispositivos disponibles" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Appareils disponibles" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Elérhető eszközök" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dispositivi disponibili" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "利用可能なデバイス" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "사용 가능한 기기" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Beschikbare apparaten" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dispositivos disponíveis" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dispositivos disponíveis" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dispozitive Disponibile" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Доступные устройства" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "อุปกรณ์ที่พร้อมใช้งาน" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Доступні пристрої" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "可用设备" - } - } - } - }, - "BrowseDownloadedFiles" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تصفح الملفات التي تم تنزيلها" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Heruntergeladene Dateien durchsuchen" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Browse Downloaded Files" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Explorar archivos descargados" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Parcourir les fichiers téléchargés" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Letöltött fájlok böngészése" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sfoglia file scaricati" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ダウンロードしたファイルを表示" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "다운로드된 파일 탐색" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Blader door gedownloade bestanden" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Navegar pelos arquivos baixados" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Procurar Ficheiros Transferidos" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Navigați prin Fișierele Descărcate" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Просмотр загруженных файлов" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เรียกดูไฟล์ที่ดาวน์โหลด" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Переглянути завантажені файли" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "浏览已下载的文件" - } - } - } - }, - "Cancel" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إلغاء" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Abbrechen" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancel" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annuler" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mégse" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annulla" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "キャンセル" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "취소" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Annuleren" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelar" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Cancelar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Anulează" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отмена" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ยกเลิก" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Скасувати" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "取消" - } - } - } - }, "Clipboard" : { "extractionState" : "manual", "localizations" : { @@ -1603,220 +1175,6 @@ } } }, - "ClipboardEmpty" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الحافظة فارغة" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zwischenablage leer" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clipboard Empty" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Portapapeles vacío" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Presse-papiers vide" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vágólap üres" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Appunti Vuoti" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "クリップボードは空です" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "클립보드가 비어 있습니다" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Klembord Leeg" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Área de transferência vazia" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Área de transferência vazia" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Clipboard gol" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Буфер обмена пуст" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คลิปบอร์ดว่างเปล่า" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Буфер обміну порожній" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "剪贴板为空" - } - } - } - }, - "ClipboardEmptyMessage" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يرجى نسخ النص إلى الحافظة، وحاول مرة أخرى." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bitte kopiere Text in die Zwischenablage und versuche es erneut." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Please copy text to the clipboard, and try again." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor, copie el texto al portapapeles y vuelva a intentarlo." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Veuillez copier le texte dans le presse-papiers, puis réessayez." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kérem, másolja a szöveget a vágólapra, majd próbálja újra." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Copia il testo negli appunti e riprova." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "テキストをクリップボードにコピーして、もう一度お試しください。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "클립보드에 텍스트를 복사하고 다시 시도하세요." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kopieer de tekst naar het klembord en probeer opnieuw." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor, copie o texto para a área de transferência e tente novamente." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Por favor, copie o texto para a área de transferência e tente novamente." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Te rog copiază textul în clipboard și încearcă din nou." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Пожалуйста, скопируйте текст в буфер обмена и попробуйте снова." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "โปรดคัดลอกข้อความไปยังคลิปบอร์ด แล้วลองอีกครั้ง" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Скопіюйте текст у буфер обміну та спробуйте ще раз." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "请将文本复制到剪贴板,然后重试。" - } - } - } - }, "CloseAlert" : { "extractionState" : "manual", "localizations" : { @@ -1924,218 +1282,6 @@ } } }, - "ConnectWithQuickDropApp" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الاتصال بتطبيق QuickDrop" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mit QuickDrop-App verbinden" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connect with QuickDrop App" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conectar con la aplicación QuickDrop" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Se connecter avec l'app QuickDrop" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Csatlakozás a QuickDrop alkalmazással" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connetti con l'app QuickDrop" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDropアプリで接続" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop 앱으로 연결" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verbind met de QuickDrop-app" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conectar com o aplicativo QuickDrop" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligar com a app QuickDrop" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conectează-te cu aplicația QuickDrop" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Подключиться с помощью приложения QuickDrop" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เชื่อมต่อด้วยแอป QuickDrop" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Підключитися за допомогою додатка QuickDrop" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "使用 QuickDrop 应用连接" - } - } - } - }, - "ConnectWithoutApp" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "الاتصال بدون تطبيق" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ohne App verbinden" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connect without App" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conectar sin aplicación" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Se connecter sans app" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Csatlakozás alkalmazás nélkül" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Connetti senza app" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "アプリなしで接続" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "앱 없이 연결" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Verbind zonder app" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conectar sem aplicativo" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ligar sem app" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Conectează-te fără aplicație" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Подключиться без приложения" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เชื่อมต่อโดยไม่ใช้แอป" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Підключитися без додатка" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无需应用连接" - } - } - } - }, "Connecting" : { "comment" : "Share Extension", "extractionState" : "manual", @@ -2244,216 +1390,214 @@ } } }, - "CouldNotOpenDocumentsFolder" : { - "extractionState" : "manual", + "ConnectWithoutApp" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "تعذر فتح مجلد QuickDrop" + "value" : "الاتصال بدون تطبيق" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "QuickDrop-Ordner konnte nicht geöffnet werden" + "value" : "Ohne App verbinden" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Could Not Open QuickDrop Folder" + "value" : "Connect without App" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "No se pudo abrir la carpeta QuickDrop" + "value" : "Conectar sin aplicación" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Impossible d'ouvrir le dossier QuickDrop" + "value" : "Se connecter sans app" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nem sikerült megnyitni a QuickDrop mappát" + "value" : "Csatlakozás alkalmazás nélkül" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Impossibile aprire la cartella QuickDrop" + "value" : "Connetti senza app" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "QuickDropフォルダを開けませんでした" + "value" : "アプリなしで接続" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "QuickDrop 폴더를 열 수 없습니다." + "value" : "앱 없이 연결" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kon de QuickDrop-map niet openen" + "value" : "Verbind zonder app" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Não foi possível abrir a pasta QuickDrop" + "value" : "Conectar sem aplicativo" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Não foi possível abrir a pasta QuickDrop" + "value" : "Ligar sem app" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Nu s-a putut deschide folderul QuickDrop" + "value" : "Conectează-te fără aplicație" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Не удалось открыть папку QuickDrop" + "value" : "Подключиться без приложения" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่สามารถเปิดโฟลเดอร์ QuickDrop ได้" + "value" : "เชื่อมต่อโดยไม่ใช้แอป" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Не вдалося відкрити папку QuickDrop" + "value" : "Підключитися без додатка" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "无法打开 QuickDrop 文件夹" + "value" : "无需应用连接" } } } }, - "CouldNotOpenDocumentsFolderDescription" : { - "extractionState" : "manual", + "ConnectWithQuickDropApp" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "يرجى الإبلاغ عن هذه المشكلة للمطور. لعرض ملفاتك المستلمة على أي حال، افتح تطبيق الملفات، واضغط على علامة التبويب \"تصفح\" وانتقل إلى المجلد \"على iPhone الخاص بي\" > \"QuickDrop\"." + "value" : "الاتصال بتطبيق QuickDrop" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Bitte melde dieses Problem dem Entwickler. Um deine empfangenen Dateien dennoch anzusehen, öffne die Dateien-App, klicke auf den Tab „Durchsuchen“ und navigiere zu dem Ordner „Auf meinem iPhone“ > „QuickDrop“." + "value" : "Mit QuickDrop-App verbinden" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Please report this issue to the developer. To view your received files regardless, open the Files app, click on the \"Browse\" tab and navigate to the folder \"On My iPhone\" > \"QuickDrop\"." + "value" : "Connect with QuickDrop App" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Por favor, informe este problema al desarrollador. Para ver tus archivos recibidos de todas formas, abre la app Archivos, haz clic en la pestaña \"Explorar\" y navega a la carpeta \"En mi iPhone\" > \"QuickDrop\"." + "value" : "Conectar con la aplicación QuickDrop" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Veuillez signaler ce problème au développeur. Pour voir vos fichiers reçus malgré cela, ouvrez l'application Fichiers, cliquez sur l'onglet \"Explorer\" et accédez au dossier \"Sur mon iPhone\" > \"QuickDrop\"." + "value" : "Se connecter avec l'app QuickDrop" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Kérjük, jelentse ezt a problémát a fejlesztőnek. A fogadott fájljaik megtekintéséhez nyissa meg a Fájlok alkalmazást, kattintson a „Böngészés” fülre, és navigáljon a „Az iPhone-omon” > „QuickDrop” mappába." + "value" : "Csatlakozás a QuickDrop alkalmazással" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Segnala questo problema allo sviluppatore. Per visualizzare comunque i file ricevuti, apri l'app File, fai clic sulla scheda \"Sfoglia\" e vai alla cartella \"Sul mio iPhone\" > \"QuickDrop\"." + "value" : "Connetti con l'app QuickDrop" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "この問題を開発者に報告してください。それでも受信したファイルを確認するには、ファイルアプリを開き、「ブラウズ」タブをクリックして、「このiPhone内」>「QuickDrop」フォルダに移動してください。" + "value" : "QuickDropアプリで接続" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "이 문제를 개발자에게 보고해주세요. 받은 파일을 보려면 '파일' 앱을 열고, '둘러보기' 탭을 클릭한 후 '내 iPhone 저장 공간' > 'QuickDrop' 폴더로 이동하세요." + "value" : "QuickDrop 앱으로 연결" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Meld dit probleem aan de ontwikkelaar. Om uw ontvangen bestanden toch te bekijken, opent u de Bestanden-app, klikt u op het tabblad \"Bladeren\" en navigeert u naar de map \"Op Mijn iPhone\" > \"QuickDrop\"." + "value" : "Verbind met de QuickDrop-app" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Por favor, informe este problema ao desenvolvedor. Para visualizar seus arquivos recebidos, abra o app Arquivos, clique na aba \"Explorar\" e navegue até a pasta \"No Meu iPhone\" > \"QuickDrop\"." + "value" : "Conectar com o aplicativo QuickDrop" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Por favor, reporte este problema ao programador. Para ver os seus ficheiros recebidos mesmo assim, abra a app Ficheiros, clique no separador \"Explorar\" e navegue até à pasta \"No Meu iPhone\" > \"QuickDrop\"." + "value" : "Ligar com a app QuickDrop" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Te rog să raportezi această problemă dezvoltatorului. Pentru a vizualiza fișierele primite oricum, deschide aplicația Fișiere, mergi la fila \"Răsfoire\" și navighează la folderul \"Pe iPhone-ul meu\" > \"QuickDrop\"." + "value" : "Conectează-te cu aplicația QuickDrop" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Пожалуйста, сообщите об этой проблеме разработчику. Чтобы просмотреть полученные файлы, откройте приложение \"Файлы\", перейдите на вкладку \"Обзор\" и найдите папку \"На моём iPhone\" > \"QuickDrop\"." + "value" : "Подключиться с помощью приложения QuickDrop" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "กรุณาแจ้งปัญหานี้ให้กับผู้พัฒนา ท่านยังสามารถดูไฟล์ที่ได้รับได้โดยเปิดแอป Files คลิกที่แท็บ \"เรียกดู\" และไปที่โฟลเดอร์ \"บน iPhone ของฉัน\" > \"QuickDrop\"" + "value" : "เชื่อมต่อด้วยแอป QuickDrop" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Будь ласка, повідомте про цю проблему розробнику. Щоб переглянути отримані файли все одно, відкрийте програму «Файли», натисніть вкладку «Огляд» і перейдіть до папки «На моєму iPhone» > «QuickDrop»." + "value" : "Підключитися за допомогою додатка QuickDrop" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "请将此问题报告给开发者。若要仍然查看接收的文件,请打开“文件”应用,点击“浏览”标签,然后导航到“在我的 iPhone 上”>“QuickDrop”文件夹。" + "value" : "使用 QuickDrop 应用连接" } } } @@ -3213,103 +2357,103 @@ "ar" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ يريد إدراج \"%2$@\" في الحافظة الخاصة بك." + "value" : "يرغب %1$@ في إدراج \"%2$@\" في حافظة جهاز Mac الخاص بك." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ möchte \"%2$@\" in Deine Zwischenablage einfügen." + "value" : "%1$@ möchte \"%2$@\" in die Zwischenablage deines Macs einfügen." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ wants to insert \"%2$@\" to your clipboard." + "value" : "%1$@ wants to insert \"%2$@\" to your Mac's clipboard." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ quiere insertar \"%2$@\" en tu portapapeles." + "value" : "%1$@ quiere insertar \"%2$@\" en el portapapeles de tu Mac." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ souhaite insérer \"%2$@\" dans votre presse-papiers." + "value" : "%1$@ souhaite insérer \"%2$@\" dans le presse-papiers de votre Mac." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ be szeretné illeszteni a(z) \"%2$@\" elemet a vágólapodra." + "value" : "%1$@ be szeretné illeszteni a(z) \"%2$@\" szöveget a Mac-ed vágólapjára." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ vuole inserire \"%2$@\" negli appunti." + "value" : "%1$@ vuole inserire \"%2$@\" negli appunti del tuo Mac." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@があなたのクリップボードに「%2$@」を挿入しようとしています。" + "value" : "%1$@ が \"%2$@\" をあなたの Mac のクリップボードに挿入しようとしています。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@님이 클립보드에 \"%2$@\"을(를) 삽입하려고 합니다." + "value" : "%1$@이(가) \"%2$@\"을(를) Mac의 클립보드에 삽입하려고 합니다." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ wil \"%2$@\" naar uw klembord kopiëren." + "value" : "%1$@ wil \"%2$@\" in het klembord van je Mac plaatsen." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ deseja inserir \"%2$@\" na sua área de transferência." + "value" : "%1$@ deseja inserir \"%2$@\" na área de transferência do seu Mac." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ quer inserir \"%2$@\" na sua área de transferência." + "value" : "%1$@ pretende inserir \"%2$@\" na área de transferência do seu Mac." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ dorește să insereze \"%2$@\" în clipboard-ul tău." + "value" : "%1$@ dorește să introducă \"%2$@\" în clipboard-ul Mac-ului tău." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ хочет вставить \"%2$@\" в ваш буфер обмена." + "value" : "%1$@ хочет вставить \"%2$@\" в буфер обмена вашего Mac." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ ต้องการเพิ่ม \"%2$@\" ไปยังคลิปบอร์ดของคุณ" + "value" : "%1$@ ต้องการแทรก \"%2$@\" ไปยังคลิปบอร์ดของ Mac ของคุณ" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ хоче вставити \"%2$@\" у ваш буфер обміну." + "value" : "%1$@ хоче вставити \"%2$@\" до буфера обміну вашого Mac." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ 想将“%2$@”插入到你的剪贴板。" + "value" : "%1$@ 想要将 \"%2$@\" 插入到你的 Mac 剪贴板。" } } } @@ -3320,210 +2464,103 @@ "ar" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ يريد فتح \"%2$@\" على هذا الجهاز." + "value" : "يرغب %1$@ في فتح \"%2$@\" على جهاز Mac الخاص بك." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ möchte \"%2$@\" auf diesem Gerät öffnen." + "value" : "%1$@ möchte \"%2$@\" auf deinem Mac öffnen." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ wants to open \"%2$@\" on this device." + "value" : "%1$@ wants to open \"%2$@\" on your Mac." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ quiere abrir \"%2$@\" en este dispositivo." + "value" : "%1$@ quiere abrir \"%2$@\" en tu Mac." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ souhaite ouvrir \"%2$@\" sur cet appareil." + "value" : "%1$@ souhaite ouvrir \"%2$@\" sur votre Mac." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ meg akarja nyitni a(z) \"%2$@\" elemet ezen az eszközön." + "value" : "%1$@ meg szeretné nyitni a(z) \"%2$@\" hivatkozást a Mac-eden." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ vuole aprire \"%2$@\" su questo dispositivo." + "value" : "%1$@ vuole aprire \"%2$@\" sul tuo Mac." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@がこのデバイスで「%2$@」を開こうとしています。" + "value" : "%1$@ があなたの Mac で \"%2$@\" を開こうとしています。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@님이 이 장치에서 \"%2$@\"을(를) 열려고 합니다." + "value" : "%1$@이(가) Mac에서 \"%2$@\"을(를) 열려고 합니다." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ wil \"%2$@\" openen op dit apparaat." + "value" : "%1$@ wil \"%2$@\" openen op je Mac." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ deseja abrir \"%2$@\" neste dispositivo." + "value" : "%1$@ deseja abrir \"%2$@\" no seu Mac." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ quer abrir \"%2$@\" neste dispositivo." + "value" : "%1$@ pretende abrir \"%2$@\" no seu Mac." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ dorește să deschidă \"%2$@\" pe acest dispozitiv." + "value" : "%1$@ dorește să deschidă \"%2$@\" pe Mac-ul tău." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ хочет открыть \"%2$@\" на этом устройстве." + "value" : "%1$@ хочет открыть \"%2$@\" на вашем Mac." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ ต้องการเปิด \"%2$@\" บนอุปกรณ์นี้" + "value" : "%1$@ ต้องการเปิด \"%2$@\" บน Mac ของคุณ" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ хоче відкрити \"%2$@\" на цьому пристрої." + "value" : "%1$@ хоче відкрити \"%2$@\" на вашому Mac." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "%1$@ 想在此设备上打开“%2$@”。" - } - } - } - }, - "DontSeeYourDevice" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لا ترى جهازك؟" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Gerät nicht sichtbar?" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Don't see your device?" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¿No ves tu dispositivo?" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous ne voyez pas votre appareil ?" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nem látja az eszközt?" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Non vedi il tuo dispositivo?" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "デバイスが見つかりませんか?" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "기기를 찾을 수 없나요?" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zie je je apparaat niet?" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Não vê o seu dispositivo?" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Não vê o seu dispositivo?" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nu vezi dispozitivul tău?" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Не видите своё устройство?" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ไม่เห็นอุปกรณ์ของคุณ?" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Не бачите свій пристрій?" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "未找到您的设备?" + "value" : "%1$@ 想要在你的 Mac 上打开 \"%2$@\"。" } } } @@ -3741,113 +2778,6 @@ } } }, - "DownloadQuickDropOnPlayStore" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "قم بتنزيل QuickDrop من App Store أو Play Store لمشاركة الملفات مع أجهزتك." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Lade QuickDrop im App Store oder Play Store herunter, um Dateien mit deinen Geräten zu teilen." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Download QuickDrop on the App Store or the Play Store to share files with your devices." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Descarga QuickDrop en la App Store o Play Store para compartir archivos con tus dispositivos." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Téléchargez QuickDrop sur l'App Store ou le Play Store pour partager des fichiers avec vos appareils." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Töltse le a QuickDrop alkalmazást az App Store-ból vagy a Play Store-ból, hogy fájlokat osszon meg az eszközeivel." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Scarica QuickDrop dall'App Store o dal Play Store per condividere file con i tuoi dispositivi." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "App Store または Play Store から QuickDrop をダウンロードして、デバイス間でファイルを共有しましょう。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "앱 스토어나 플레이 스토어에서 QuickDrop을 다운로드하여 기기와 파일을 공유하세요." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Download QuickDrop in de App Store of de Play Store om bestanden met je apparaten te delen." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Baixe o QuickDrop na App Store ou na Play Store para compartilhar arquivos com seus dispositivos." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Descarregue o QuickDrop na App Store ou na Play Store para partilhar ficheiros com os seus dispositivos." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Descarcă QuickDrop din App Store sau Play Store pentru a partaja fișiere cu dispozitivele tale." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Скачайте QuickDrop в App Store или Play Store, чтобы делиться файлами с вашими устройствами." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ดาวน์โหลด QuickDrop บน App Store หรือ Play Store เพื่อแชร์ไฟล์กับอุปกรณ์ของคุณ" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Завантажте QuickDrop з App Store або Play Store, щоб обмінюватися файлами між вашими пристроями." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "在 App Store 或 Play Store 下载 QuickDrop,与您的设备共享文件。" - } - } - } - }, "DownloadsFolder" : { "extractionState" : "manual", "localizations" : { @@ -5132,113 +4062,6 @@ } } }, - "NFiles" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d ملفات" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d Dateien" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d files" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d archivos" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d fichiers" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d fájl" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d files" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "%dつのファイル" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d개의 파일" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d bestanden" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d arquivos" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d ficheiros" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d fișiere" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d файлов" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d ไฟล์" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d files" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "%d files" - } - } - } - }, "NetworkFilterDescription" : { "extractionState" : "manual", "localizations" : { @@ -5453,323 +4276,109 @@ } } }, - "NoDevicesFound" : { + "NFiles" : { "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "لم يتم العثور على أجهزة" + "value" : "%d ملفات" } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Keine Geräte gefunden" + "value" : "%d Dateien" } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "No devices found" + "value" : "%d files" } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "No se encontraron dispositivos" + "value" : "%d archivos" } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Aucun appareil trouvé" + "value" : "%d fichiers" } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Nincsenek eszközök" + "value" : "%d fájl" } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Nessun dispositivo trovato" + "value" : "%d files" } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "デバイスが見つかりません" + "value" : "%dつのファイル" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "기기를 찾을 수 없습니다" + "value" : "%d개의 파일" } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Geen apparaten gevonden" + "value" : "%d bestanden" } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Nenhum dispositivo encontrado" + "value" : "%d arquivos" } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Nenhum dispositivo encontrado" + "value" : "%d ficheiros" } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Niciun dispozitiv găsit" + "value" : "%d fișiere" } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Устройства не найдены" + "value" : "%d файлов" } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่พบอุปกรณ์" + "value" : "%d ไฟล์" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Пристрої не знайдено" + "value" : "%d files" } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "未找到设备" - } - } - } - }, - "NoLocalNetworkAccessDescription" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لقد رفضت وصول الشبكة المحلية لتطبيق QuickDrop. لا يمكن لتطبيق QuickDrop العمل بدون هذا الإذن. انقر هنا لمنح الوصول إلى الشبكة المحلية." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du hast den lokalen Netzwerkzugriff für QuickDrop verweigert. QuickDrop kann ohne diese Berechtigung nicht funktionieren. Klicke hier, um den lokalen Netzwerkzugriff zu gewähren." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You denied local network access for QuickDrop. QuickDrop cannot work without this permission. Click here to grant local network access." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negaste el acceso a la red local para QuickDrop. QuickDrop no puede funcionar sin este permiso. Haz clic aquí para otorgar acceso a la red local." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous avez refusé l'accès au réseau local pour QuickDrop. QuickDrop ne peut pas fonctionner sans cette autorisation. Cliquez ici pour accorder l'accès au réseau local." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ön megtagadta a helyi hálózathoz való hozzáférést a QuickDrop számára. A QuickDrop nem működik ezen engedély nélkül. Kattintson ide a helyi hálózathoz való hozzáférés engedélyezéséhez." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hai negato l'accesso alla rete locale per QuickDrop. QuickDrop non può funzionare senza questa autorizzazione. Clicca qui per concedere l'accesso alla rete locale." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDropのローカルネットワークアクセスが拒否されました。この権限がないとQuickDropは動作しません。ローカルネットワークアクセスを許可するにはここをクリックしてください。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop에 대한 로컬 네트워크 액세스를 거부했습니다. 이 권한 없이는 QuickDrop이 작동할 수 없습니다. 로컬 네트워크 액세스를 허용하려면 여기를 클릭하세요." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Je hebt toegang tot het lokale netwerk voor QuickDrop geweigerd. QuickDrop kan niet werken zonder deze toestemming. Klik hier om toegang tot het lokale netwerk te verlenen." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você negou o acesso à rede local para o QuickDrop. O QuickDrop não pode funcionar sem essa permissão. Clique aqui para conceder acesso à rede local." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Negou o acesso à rede local para o QuickDrop. O QuickDrop não pode funcionar sem esta permissão. Clique aqui para conceder acesso à rede local." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ați refuzat accesul la rețeaua locală pentru QuickDrop. QuickDrop nu poate funcționa fără această permisiune. Apăsați aici pentru a oferi acces la rețeaua locală." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы отклонили доступ QuickDrop к локальной сети. QuickDrop не может работать без этого разрешения. Нажмите здесь, чтобы предоставить доступ к локальной сети." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณปฏิเสธการเข้าถึงเครือข่ายท้องถิ่นสำหรับ QuickDrop. QuickDrop ไม่สามารถทำงานได้โดยปราศจากสิทธิ์นี้. คลิกที่นี่เพื่ออนุญาตการเข้าถึงเครือข่ายท้องถิ่น." - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви відхилили доступ до локальної мережі для QuickDrop. QuickDrop не може працювати без цього дозволу. Натисніть тут, щоб надати доступ до локальної мережі." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您已拒绝QuickDrop的本地网络访问权限。QuickDrop无法在没有该权限的情况下工作。点击此处授予本地网络访问权限。" - } - } - } - }, - "NoNetworkAccess" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لا يوجد وصول للشبكة" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kein Netzwerkzugriff" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "No Network Access" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sin acceso a red" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Pas d'accès au réseau" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nincs hálózati hozzáférés" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nessun accesso alla rete" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ネットワーク接続なし" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "네트워크 액세스 없음" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Geen netwerktoegang" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sem acesso à rede" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sem acesso à rede" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fără acces la rețea" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нет доступа к сети" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ไม่มีการเข้าถึงเครือข่าย" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Немає мережевого доступу" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "无网络访问权限" + "value" : "%d files" } } } @@ -6308,109 +4917,1384 @@ } } }, - "Preparing" : { - "extractionState" : "manual", + "plusview_description" : { "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "جارٍ التحضير..." + "value" : "قم بفتح QuickDrop+ لمواصلة تبادل الملفات بلا حدود. QuickDrop+ هو شراء لمرة واحدة – لا حاجة للاشتراك. تشمل جميع الميزات الحالية والمستقبلية." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Bereite vor..." + "value" : "Schalte QuickDrop+ frei, um weiterhin Dateien unbegrenzt auszutauschen. QuickDrop+ ist ein Einmalkauf - ein Abonnement ist nicht erforderlich. Alle aktuellen und zukünftigen Funktionen sind enthalten." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Preparing..." + "value" : "Unlock QuickDrop+ to continue exchanging files without limits. QuickDrop+ is a one-time purchase – no subscription required. All current and future features are included." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Preparando..." + "value" : "Desbloquea QuickDrop+ para seguir intercambiando archivos sin límites. QuickDrop+ es una compra única – no se requiere suscripción. Todas las funciones actuales y futuras están incluidas." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Préparation..." + "value" : "Débloquez QuickDrop+ pour continuer à échanger des fichiers sans limites. QuickDrop+ est un achat unique – aucun abonnement requis. Toutes les fonctionnalités actuelles et futures sont incluses." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Előkészítés folyamatban..." + "value" : "Oldd fel a QuickDrop+-t, hogy korlátlanul folytathasd a fájlcserét. A QuickDrop+ egy egyszeri vásárlás – előfizetés nem szükséges. Az összes jelenlegi és jövőbeli funkciót tartalmazza." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Preparazione in corso..." + "value" : "Sblocca QuickDrop+ per continuare a scambiare file senza limiti. QuickDrop+ è un acquisto unico – nessun abbonamento richiesto. Tutte le funzionalità attuali e future sono incluse." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "準備中..." + "value" : "QuickDrop+ をアンロックして、無制限にファイルを交換できます。QuickDrop+ は買い切り型のアプリです。サブスクリプション不要で、現在および将来のすべての機能が含まれます。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "준비 중..." + "value" : "QuickDrop+를 잠금 해제하여 파일을 제한 없이 교환하세요. QuickDrop+는 일회성 구매이며, 구독이 필요하지 않습니다. 모든 현재 및 미래 기능이 포함됩니다." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Voorbereiden..." + "value" : "Ontgrendel QuickDrop+ om bestanden zonder limieten te blijven uitwisselen. QuickDrop+ is een eenmalige aankoop – geen abonnement vereist. Alle huidige en toekomstige functies zijn inbegrepen." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Preparando..." + "value" : "Desbloqueie o QuickDrop+ para continuar trocando arquivos sem limites. QuickDrop+ é uma compra única – sem necessidade de assinatura. Todos os recursos atuais e futuros estão incluídos." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "A preparar..." + "value" : "Desbloqueia o QuickDrop+ para continuar a trocar ficheiros sem limites. QuickDrop+ é uma compra única – não é necessária subscrição. Todas as funcionalidades atuais e futuras estão incluídas." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Se pregătește..." + "value" : "Deblochează QuickDrop+ pentru a continua schimbul de fișiere fără limite. QuickDrop+ este o achiziție unică – nu este necesar abonament. Toate funcțiile curente și viitoare sunt incluse." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Подготовка..." + "value" : "Разблокируйте QuickDrop+, чтобы продолжить обмен файлами без ограничений. QuickDrop+ – это разовая покупка, подписка не требуется. Все текущие и будущие функции включены." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "กำลังเตรียม..." + "value" : "ปลดล็อก QuickDrop+ เพื่อแลกเปลี่ยนไฟล์ได้อย่างไม่จำกัด QuickDrop+ เป็นการซื้อครั้งเดียว – ไม่ต้องสมัครสมาชิก ฟีเจอร์ทั้งหมดทั้งปัจจุบันและอนาคตรวมอยู่ในนี้แล้ว" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Підготовка..." + "value" : "Розблокуйте QuickDrop+, щоб продовжити обмін файлами без обмежень. QuickDrop+ – це одноразова покупка, підписка не потрібна. Всі поточні та майбутні функції включені." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "准备中…" + "value" : "解锁 QuickDrop+ 以无限制地交换文件。QuickDrop+ 是一次性购买 – 无需订阅。所有当前和未来的功能均包含在内。" + } + } + } + }, + "plusview_nothingtorestore" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "لا يوجد شيء لاستعادته!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es gibt nichts wiederherzustellen!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "There is nothing to restore!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡No hay nada que restaurar!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aucun achat à restaurer !" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nincs visszaállítható vásárlás!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Non c'è nulla da ripristinare!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "復元するものがありません!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "복원할 항목이 없습니다!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er is niets om te herstellen!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nada para restaurar!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não há nada para restaurar!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Nu există nimic de restaurat!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Нет покупок для восстановления!" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่มีรายการที่ต้องกู้คืน!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Немає покупок для відновлення!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "没有可恢复的购买!" + } + } + } + }, + "plusview_productRequestFailed" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "تعذر جلب عمليات الشراء داخل التطبيق في الوقت الحالي." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "In-App-Käufe können momentan nicht abgerufen werden." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to fetch In-App Purchases at the moment." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "No se pueden recuperar las compras dentro de la aplicación en este momento." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossible de récupérer les achats intégrés pour le moment." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Jelenleg nem lehet lekérni az alkalmazáson belüli vásárlásokat." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Impossibile recuperare gli acquisti in-app al momento." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "現在、アプリ内購入情報を取得できません。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "현재 인앱 구매 정보를 가져올 수 없습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "In-app aankopen kunnen momenteel niet worden opgehaald." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível recuperar as compras dentro do aplicativo no momento." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Não foi possível recuperar as compras dentro do app no momento." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Momentan, nu se pot obține informații despre achizițiile în aplicație." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Не удалось получить данные о встроенных покупках." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ไม่สามารถดึงข้อมูลการซื้อภายในแอปได้ในขณะนี้" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Наразі неможливо отримати інформацію про покупки в додатку." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "暂时无法获取应用内购买信息。" + } + } + } + }, + "plusview_purchasefailed" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "فشل الشراء" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Kauf fehlgeschlagen" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Purchase failed" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "La compra ha fallado" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Échec de l'achat" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "A vásárlás sikertelen" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acquisto non riuscito" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "購入に失敗しました" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "구매 실패" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aankoop mislukt" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falha na compra" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falha na compra" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Achiziția a eșuat" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ошибка покупки" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "การซื้อล้มเหลว" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Помилка покупки" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "购买失败" + } + } + } + }, + "plusview_purchasefaileddescription" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "إذا ظهر هذا الرسالة بشكل غير متوقع، يرجى التأكد من اتصالك بالإنترنت وأن عمليات الشراء داخل التطبيق مفعّلة على جهازك، ثم حاول مرة أخرى." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Falls diese Nachricht unerwartet erscheint, stelle sicher, dass du mit dem Internet verbunden bist und In-App-Käufe auf deinem Gerät aktiviert sind, und versuche es erneut." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "If this message appeared unexpectedly, please make sure that you are connected to the Internet and In-App-Purchases are enabled for your device and then try again." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si este mensaje apareció inesperadamente, asegúrate de estar conectado a internet y que las compras dentro de la aplicación estén habilitadas en tu dispositivo, luego intenta nuevamente." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si ce message est apparu de manière inattendue, assurez-vous d'être connecté à Internet et que les achats intégrés sont activés sur votre appareil, puis réessayez." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ha ez az üzenet váratlanul jelent meg, ellenőrizd az internetkapcsolatot, és győződj meg róla, hogy az alkalmazáson belüli vásárlások engedélyezve vannak az eszközödön, majd próbáld újra." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se questo messaggio è apparso inaspettatamente, assicurati di essere connesso a Internet e che gli acquisti in-app siano abilitati sul tuo dispositivo, quindi riprova." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "このメッセージが予期せず表示された場合、インターネット接続を確認し、アプリ内購入が有効になっていることを確認した上で再試行してください。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이 메시지가 예상치 않게 나타난 경우, 인터넷에 연결되어 있는지 확인하고 기기에서 인앱 결제가 활성화되어 있는지 확인한 후 다시 시도해 주세요." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Als dit bericht onverwachts verschijnt, controleer dan of je verbonden bent met internet en of in-app aankopen zijn ingeschakeld op je apparaat, en probeer het opnieuw." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se esta mensagem apareceu inesperadamente, verifique se você está conectado à internet e se as compras dentro do app estão ativadas no seu dispositivo e tente novamente." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Se esta mensagem apareceu inesperadamente, certifique-se de estar conectado à Internet e que as compras dentro do app estejam ativadas no seu dispositivo, depois tente novamente." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Dacă acest mesaj a apărut neașteptat, asigură-te că ești conectat la internet și că achizițiile în aplicație sunt activate pe dispozitivul tău, apoi încearcă din nou." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Если это сообщение появилось неожиданно, убедитесь, что у вас есть доступ к интернету и включены встроенные покупки на вашем устройстве, затем попробуйте снова." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "หากข้อความนี้ปรากฏขึ้นโดยไม่คาดคิด โปรดตรวจสอบว่าคุณเชื่อมต่ออินเทอร์เน็ตและเปิดใช้งานการซื้อภายในแอปในอุปกรณ์ของคุณแล้วลองอีกครั้ง" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Якщо це повідомлення з’явилося несподівано, переконайтеся, що у вас є підключення до Інтернету, а покупки в додатках увімкнені на вашому пристрої, і спробуйте ще раз." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "如果此消息意外出现,请确保您已连接到互联网,并且设备已启用应用内购买功能,然后重试。" + } + } + } + }, + "plusview_restorefailed" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حدثت مشكلة أثناء استعادة عملية الشراء" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Es gab ein Problem beim Wiederherstellen deines Kaufs" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "There was a problem restoring your purchase" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hubo un problema al restaurar tu compra" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Un problème est survenu lors de la restauration de votre achat" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Hiba történt a vásárlás visszaállítása során" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Si è verificato un problema durante il ripristino dell'acquisto" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "購入の復元中に問題が発生しました" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "구매 복원 중 문제가 발생했습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Er was een probleem bij het herstellen van je aankoop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Houve um problema ao restaurar sua compra" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Houve um problema ao restaurar sua compra" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "A apărut o problemă la restaurarea achiziției" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Произошла ошибка при восстановлении покупки" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เกิดปัญหาในการกู้คืนการซื้อของคุณ" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Сталася помилка під час відновлення покупки" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "恢复购买时出现问题" + } + } + } + }, + "plusview_restorefailed_proceed" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "موافق" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okay" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Okay" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Aceptar" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Rendben" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ok" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "확인" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Oké" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ok" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "OK" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Окей" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ตกลง" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Гаразд" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "确定" + } + } + } + }, + "plusview_restorepurchase" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "هل اشتريته بالفعل؟" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bereits gekauft?" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Already bought?" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¿Ya lo compraste?" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Déjà acheté ?" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Már megvásároltad?" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Già acquistato?" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "すでに購入済みですか?" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이미 구매하셨나요?" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Al gekocht?" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já comprou?" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Já comprou?" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Deja cumpărat?" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Уже куплено?" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "เคยซื้อแล้ว?" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Вже куплено?" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "已购买?" + } + } + } + }, + "plusview_success_button" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "حسنًا!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Alles klar!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Got it!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Entendido!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "D'accord !" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Értettem!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capito!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "了解!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "알겠습니다!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Begrepen!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entendi!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Entendido!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Înțeles!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Понял!" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "รับทราบ!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Зрозуміло!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "知道了!" + } + } + } + }, + "plusview_success_description" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "يمكنك الآن متابعة استلام الملفات بدون قيود. أي ملفات حاولت إرسالها سابقًا تم حفظها بالفعل على جهازك." + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Du kannst nun weiterhin Dateien ohne Einschränkungen empfangen. Alle Dateien, welche gerade gesendet wurden, wurden bereits gespeichert." + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You can now continue receiving files without restrictions. Any files you tried to send were already saved on your device." + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ahora puedes seguir recibiendo archivos sin restricciones. Todos los archivos que intentaste enviar antes ya se han guardado en tu dispositivo." + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Vous pouvez maintenant continuer à recevoir des fichiers sans restrictions. Tous les fichiers que vous avez essayé d'envoyer précédemment ont déjà été enregistrés sur votre appareil." + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mostantól korlátozások nélkül fogadhat fájlokat. Az összes fájl, amelyet korábban próbált elküldeni, már el lett mentve az eszközére." + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ora puoi continuare a ricevere file senza restrizioni. Tutti i file che hai provato a inviare in precedenza sono già stati salvati sul tuo dispositivo." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "これで、制限なくファイルを受信し続けることができます。以前送信しようとしたファイルはすでにデバイスに保存されています。" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "이제 파일을 제한 없이 계속 받을 수 있습니다. 이전에 전송을 시도한 모든 파일이 이미 기기에 저장되었습니다." + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Je kunt nu bestanden blijven ontvangen zonder beperkingen. Alle bestanden die je eerder probeerde te verzenden, zijn al opgeslagen op je apparaat." + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agora você pode continuar recebendo arquivos sem restrições. Todos os arquivos que você tentou enviar antes já foram salvos no seu dispositivo." + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agora pode continuar a receber ficheiros sem restrições. Todos os ficheiros que tentou enviar antes já foram guardados no seu dispositivo." + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Acum puteți continua să primiți fișiere fără restricții. Toate fișierele pe care ați încercat să le trimiteți anterior au fost deja salvate pe dispozitivul dvs." + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Теперь вы можете продолжать получать файлы без ограничений. Все файлы, которые вы пытались отправить ранее, уже сохранены на вашем устройстве." + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "คุณสามารถรับไฟล์ต่อไปได้โดยไม่มีข้อจำกัด ไฟล์ทั้งหมดที่คุณพยายามส่งก่อนหน้านี้ถูกบันทึกไว้ในอุปกรณ์ของคุณแล้ว" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Тепер ви можете продовжувати отримувати файли без обмежень. Усі файли, які ви намагалися надіслати раніше, вже збережено на вашому пристрої." + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "您现在可以继续无限制地接收文件。您之前尝试发送的所有文件已保存到您的设备上。" + } + } + } + }, + "plusview_success_title" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "شكرًا لشرائك!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Danke für deinen Kauf!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thanks for your purchase!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Gracias por tu compra!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Merci pour votre achat !" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Köszönjük a vásárlást!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grazie per il tuo acquisto!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ご購入ありがとうございます!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "구매해 주셔서 감사합니다!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bedankt voor je aankoop!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrigado pela sua compra!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrigado pela sua compra!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mulțumim pentru achiziție!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Спасибо за покупку!" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ขอบคุณสำหรับการซื้อ!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дякуємо за покупку!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "感谢您的购买!" + } + } + } + }, + "plusview_title" : { + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "شكرًا لاستخدامك QuickDrop!" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Danke, dass du QuickDrop benutzt!" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Thanks for using QuickDrop!" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "¡Gracias por usar QuickDrop!" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Merci d'utiliser QuickDrop !" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Köszönjük, hogy használod a QuickDropot!" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Grazie per aver usato QuickDrop!" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDropをご利用いただきありがとうございます!" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop을 사용해 주셔서 감사합니다!" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Bedankt voor het gebruiken van QuickDrop!" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrigado por usar o QuickDrop!" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Obrigado por usar o QuickDrop!" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Mulțumim că folosești QuickDrop!" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Спасибо за использование QuickDrop!" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "ขอบคุณที่ใช้ QuickDrop!" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Дякуємо за використання QuickDrop!" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "感谢使用 QuickDrop!" + } + } + } + }, + "plusview_unlock_label" : { + "extractionState" : "manual", + "localizations" : { + "ar" : { + "stringUnit" : { + "state" : "translated", + "value" : "ادعم QuickDrop" + } + }, + "de" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unterstütze QuickDrop" + } + }, + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Support QuickDrop" + } + }, + "es" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apoyar QuickDrop" + } + }, + "fr" : { + "stringUnit" : { + "state" : "translated", + "value" : "Soutenir QuickDrop" + } + }, + "hu" : { + "stringUnit" : { + "state" : "translated", + "value" : "Támogasd a QuickDropot" + } + }, + "it" : { + "stringUnit" : { + "state" : "translated", + "value" : "Supporta QuickDrop" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDropをサポート" + } + }, + "ko" : { + "stringUnit" : { + "state" : "translated", + "value" : "QuickDrop 지원하기" + } + }, + "nl" : { + "stringUnit" : { + "state" : "translated", + "value" : "Ondersteun QuickDrop" + } + }, + "pt-BR" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apoie o QuickDrop" + } + }, + "pt-PT" : { + "stringUnit" : { + "state" : "translated", + "value" : "Apoiar QuickDrop" + } + }, + "ro" : { + "stringUnit" : { + "state" : "translated", + "value" : "Susține QuickDrop" + } + }, + "ru" : { + "stringUnit" : { + "state" : "translated", + "value" : "Поддержать QuickDrop" + } + }, + "th" : { + "stringUnit" : { + "state" : "translated", + "value" : "สนับสนุน QuickDrop" + } + }, + "uk" : { + "stringUnit" : { + "state" : "translated", + "value" : "Підтримати QuickDrop" + } + }, + "zh-Hans" : { + "stringUnit" : { + "state" : "translated", + "value" : "支持 QuickDrop" } } } @@ -6737,110 +6621,6 @@ } }, "QuickDrop" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "de" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "es" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "fr" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "hu" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "it" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ja" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "nl" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ro" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ru" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "th" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "uk" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - } - }, "shouldTranslate" : false }, "QuickDropAndroidAppAdvertisement" : { @@ -6950,113 +6730,6 @@ } } }, - "QuickDropWelcomeDescription" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يتيح لك تطبيق QuickDrop نقل الملفات بسهولة وسرعة بين أجهزة iPhone وiPad وMac وAndroid." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop macht es einfach und schnell, Dateien zwischen iPhone, iPad, Mac und Android-Geräten zu übertragen." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop makes it easy and quick to transfer files between iPhone, iPad, Mac, and Android devices." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop facilita y agiliza la transferencia de archivos entre dispositivos iPhone, iPad, Mac y Android." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop facilite et accélère le transfert de fichiers entre iPhone, iPad, Mac et appareils Android." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "A QuickDrop megkönnyíti és felgyorsítja a fájlok átvitelét iPhone, iPad, Mac és Android eszközök között." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop rende facile e veloce il trasferimento di file tra iPhone, iPad, Mac e dispositivi Android." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDropは、iPhone、iPad、Mac、およびAndroidデバイス間でのファイル転送を簡単かつ迅速に行えます。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop은 iPhone, iPad, Mac, Android 기기 간 파일 전송을 쉽고 빠르게 만들어줍니다." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop maakt het eenvoudig en snel om bestanden over te zetten tussen iPhone-, iPad-, Mac- en Android-apparaten." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop torna fácil e rápido transferir arquivos entre dispositivos iPhone, iPad, Mac e Android." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "O QuickDrop facilita e acelera a transferência de ficheiros entre iPhone, iPad, Mac e dispositivos Android." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop face ușor și rapid transferul de fișiere între dispozitive iPhone, iPad, Mac și Android." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop позволяет легко и быстро передавать файлы между iPhone, iPad, Mac и Android-устройствами." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop ทำให้การถ่ายโอนไฟล์ระหว่าง iPhone, iPad, Mac และอุปกรณ์ Android ง่ายและรวดเร็ว" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop дозволяє легко та швидко передавати файли між пристроями iPhone, iPad, Mac та Android." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop让您可以轻松快捷地在iPhone、iPad、Mac和Android设备之间传输文件。" - } - } - } - }, "Quit" : { "extractionState" : "manual", "localizations" : { @@ -7378,113 +7051,6 @@ } } }, - "Receiving" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "جارٍ الاستلام…" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Empfange…" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Receiving…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recibiendo…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Réception…" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Fogadás…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ricevendo..." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "受信中…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "받는 중…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ontvangen…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recebendo…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "A receber…" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Primire…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Получение…" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "กำลังรับ…" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Прийом…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "接收中…" - } - } - } - }, "RecommendedApps" : { "extractionState" : "manual", "localizations" : { @@ -7590,112 +7156,6 @@ "value" : "推荐应用" } } - } - }, - "Reset UD" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "de" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "en" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "es" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "fr" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "hu" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "it" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ja" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ko" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "nl" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ro" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "ru" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "th" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "uk" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "new", - "value" : "" - } - } }, "shouldTranslate" : false }, @@ -8018,113 +7478,6 @@ } } }, - "SearchingForDevices" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "جارٍ البحث عن الأجهزة عبر الواي فاي..." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Suche nach Geräten im WLAN…" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Searching for devices on Wi-Fi…" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Buscando dispositivos en Wi-Fi…" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Recherche des appareils sur le Wi-Fi…" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Eszközök keresése Wi-Fi-n…" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ricerca di dispositivi su Wi-Fi…" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wi-Fiでデバイスを検索中…" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "Wi-Fi에서 장치를 검색 중…" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Zoeken naar apparaten op Wi-Fi…" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Procurando dispositivos no Wi-Fi…" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "A procurar dispositivos na rede Wi-Fi…" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Căutare dispozitive prin Wi-Fi…" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Поиск устройств по Wi-Fi…" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "กำลังค้นหาอุปกรณ์บน Wi-Fi…" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Пошук пристроїв у Wi-Fi…" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "正在通过 Wi-Fi 搜索设备…" - } - } - } - }, "SendClipboard" : { "extractionState" : "manual", "localizations" : { @@ -8446,113 +7799,6 @@ } } }, - "SendImages" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إرسال الصور" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bilder senden" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Send Images" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enviar imágenes" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Envoyer des images" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Képek küldése" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Invia immagini" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "画像を送信" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "이미지 보내기" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Afbeeldingen verzenden" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enviar Imagens" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Enviar Imagens" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trimite Imagini" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Отправить изображения" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ส่งรูปภาพ" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Надіслати зображення" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "发送图片" - } - } - } - }, "Sending" : { "extractionState" : "manual", "localizations" : { @@ -10371,109 +9617,109 @@ } } }, - "Unknown" : { + "UnsupportedFileType" : { "extractionState" : "manual", "localizations" : { "ar" : { "stringUnit" : { "state" : "translated", - "value" : "غير معروف" + "value" : "الملف الذي حاولت إرساله غير مدعوم حالياً. يُرجى إرسال تقرير بالخطأ." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Unbekannt" + "value" : "Die Datei, die du senden wolltest, wird derzeit nicht unterstützt. Bitte sende einen Fehlerbericht." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "Unknown" + "value" : "The file you tried to send is currently not supported. Please send an error report." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "Desconocido" + "value" : "El archivo que intentaste enviar no es compatible actualmente. Por favor, envía un informe de error." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Inconnu" + "value" : "Le fichier que vous avez essayé d'envoyer n'est pas pris en charge actuellement. Veuillez envoyer un rapport d'erreur." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Ismeretlen" + "value" : "A fájl, amelyet megpróbáltál küldeni, jelenleg nem támogatott. Kérjük, küldj hibajelentést." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Sconosciuto" + "value" : "Il file che hai provato a inviare non è attualmente supportato. Invia un rapporto di errore." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "不明" + "value" : "送信しようとしたファイルは現在サポートされていません。エラーレポートを送信してください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "알 수 없음" + "value" : "보내려는 파일은 현재 지원되지 않습니다. 오류 보고서를 보내주세요." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Onbekend" + "value" : "Het bestand dat je probeerde te verzenden, wordt momenteel niet ondersteund. Stuur een foutrapport." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "Desconhecido" + "value" : "O arquivo que você tentou enviar não é compatível no momento. Por favor, envie um relatório de erro." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "Desconhecido" + "value" : "O ficheiro que tentou enviar não é atualmente suportado. Por favor, envie um relatório de erro." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Necunoscut" + "value" : "Fișierul pe care ai încercat să-l trimiți nu este momentan acceptat. Te rugăm să trimiți un raport de eroare." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Неизвестно" + "value" : "Файл, который вы пытались отправить, в настоящее время не поддерживается. Пожалуйста, отправьте отчет об ошибке." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ไม่ทราบ" + "value" : "ไฟล์ที่คุณพยายามส่งยังไม่รองรับในขณะนี้ โปรดส่งรายงานข้อผิดพลาด" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Невідомо" + "value" : "Файл, який ви намагалися надіслати, наразі не підтримується. Будь ласка, надішліть звіт про помилку." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "未知" + "value" : "您尝试发送的文件当前不受支持。请发送错误报告。" } } } @@ -10484,103 +9730,103 @@ "ar" : { "stringUnit" : { "state" : "translated", - "value" : "نوع البيانات المنقولة غير مدعوم حاليًا. يرجى إرسال تقرير بالخطأ." + "value" : "نوع المرفق غير مدعوم. يرجى محاولة إرسال هذا الملف كملف .zip مضغوط." } }, "de" : { "stringUnit" : { "state" : "translated", - "value" : "Der Typ der übertragenen Daten wird derzeit nicht unterstützt. Bitte sende einen Fehlerbericht." + "value" : "Der Anhangstyp wird nicht unterstützt. Versuche stattdessen, die Datei als .zip-Archiv zu senden." } }, "en" : { "stringUnit" : { "state" : "translated", - "value" : "The type of the transferred data is currently not supported. Please send an error report." + "value" : "The attachment type is not supported. Please try to send this file as a compressed .zip file instead." } }, "es" : { "stringUnit" : { "state" : "translated", - "value" : "El tipo de datos transferidos no es compatible actualmente. Por favor, envíe un informe de error." + "value" : "El tipo de archivo no es compatible. Intenta enviar el archivo como un archivo .zip comprimido." } }, "fr" : { "stringUnit" : { "state" : "translated", - "value" : "Le type de données transférées n'est actuellement pas pris en charge. Veuillez envoyer un rapport d'erreur." + "value" : "Le type de pièce jointe n'est pas pris en charge. Veuillez envoyer ce fichier sous forme de fichier .zip compressé." } }, "hu" : { "stringUnit" : { "state" : "translated", - "value" : "Az átvitt adat típusa jelenleg nem támogatott. Kérjük, küldjön hibajelentést." + "value" : "Ez a csatolmánytípus nem támogatott. Próbáld meg tömörített .zip fájlként elküldeni." } }, "it" : { "stringUnit" : { "state" : "translated", - "value" : "Il tipo di dati trasferiti attualmente non è supportato. Si prega di inviare un rapporto di errore." + "value" : "Il tipo di allegato non è supportato. Prova a inviare questo file come archivio compresso .zip." } }, "ja" : { "stringUnit" : { "state" : "translated", - "value" : "転送されたデータの種類は現在サポートされていません。エラーレポートを送信してください。" + "value" : "添付ファイルの形式はサポートされていません。ファイルを.zip形式で圧縮して送信してください。" } }, "ko" : { "stringUnit" : { "state" : "translated", - "value" : "전송된 데이터 유형이 현재 지원되지 않습니다. 오류 보고서를 보내주세요." + "value" : "첨부 파일 형식이 지원되지 않습니다. 파일을 압축된 .zip 형식으로 보내주세요." } }, "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Het type van de overgedragen gegevens wordt momenteel niet ondersteund. Stuur een foutrapport in." + "value" : "Het type bijlage wordt niet ondersteund. Probeer het bestand als een gecomprimeerd .zip-bestand te verzenden." } }, "pt-BR" : { "stringUnit" : { "state" : "translated", - "value" : "O tipo de dados transferidos atualmente não é suportado. Envie um relatório de erro." + "value" : "O tipo de anexo não é compatível. Tente enviar este arquivo como um .zip compactado." } }, "pt-PT" : { "stringUnit" : { "state" : "translated", - "value" : "O tipo de dados transferidos não é atualmente suportado. Por favor, envie um relatório de erro." + "value" : "O tipo de anexo não é suportado. Tenta enviar este ficheiro como um ficheiro .zip comprimido." } }, "ro" : { "stringUnit" : { "state" : "translated", - "value" : "Tipul datelor transferate nu este în prezent acceptat. Vă rugăm să trimiteți un raport de eroare." + "value" : "Tipul de fișier atașat nu este acceptat. Încercați să trimiteți acest fișier ca arhivă .zip." } }, "ru" : { "stringUnit" : { "state" : "translated", - "value" : "Тип переданных данных в данный момент не поддерживается. Пожалуйста, отправьте отчет об ошибке." + "value" : "Тип вложения не поддерживается. Попробуйте отправить файл в виде .zip архива." } }, "th" : { "stringUnit" : { "state" : "translated", - "value" : "ประเภทของข้อมูลที่ส่งไม่รองรับในขณะนี้ โปรดส่งรายงานข้อผิดพลาด" + "value" : "ไม่รองรับประเภทไฟล์แนบ โปรดลองส่งไฟล์นี้เป็น .zip แทน" } }, "uk" : { "stringUnit" : { "state" : "translated", - "value" : "Тип передаваних даних наразі не підтримується. Будь ласка, надішліть звіт про помилку." + "value" : "Тип вкладення не підтримується. Спробуйте надіслати файл у форматі стиснутого .zip." } }, "zh-Hans" : { "stringUnit" : { "state" : "translated", - "value" : "当前不支持传输的数据类型。请发送错误报告。" + "value" : "不支持的附件类型。请尝试将该文件压缩为 .zip 文件后再发送。" } } } @@ -11012,1602 +10258,6 @@ } } } - }, - "YouAreSending" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "أنت ترسل" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du sendest" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You’re sending" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Estás enviando" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous envoyez" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Küldés alatt" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Stai inviando" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "送信中です" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "보내는 중입니다" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Je bent aan het verzenden" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você está enviando" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Está a enviar" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Trimiteți" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы отправляете" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณกำลังส่ง" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ви надсилаєте" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您正在发送" - } - } - } - }, - "YouAreVisibleAs" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "مرئي كـ" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du bist sichtbar als" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You're visible as" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Estás visible como" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous êtes visible en tant que" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Láthatóként szerepelsz mint" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sei visibile come" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "以下の名前で表示されています" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "당신은 다음으로 표시됩니다" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Je bent zichtbaar als" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Você está visível como" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Está visível como" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ești vizibil ca" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вы видимы как" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณมองเห็นได้ในชื่อ" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вас видно як" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您显示为" - } - } - } - }, - "plusview_description" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "قم بفتح QuickDrop+ لمواصلة تبادل الملفات بلا حدود. QuickDrop+ هو شراء لمرة واحدة – لا حاجة للاشتراك. تشمل جميع الميزات الحالية والمستقبلية." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Schalte QuickDrop+ frei, um weiterhin Dateien unbegrenzt auszutauschen. QuickDrop+ ist ein Einmalkauf - ein Abonnement ist nicht erforderlich. Alle aktuellen und zukünftigen Funktionen sind enthalten." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unlock QuickDrop+ to continue exchanging files without limits. QuickDrop+ is a one-time purchase – no subscription required. All current and future features are included." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloquea QuickDrop+ para seguir intercambiando archivos sin límites. QuickDrop+ es una compra única – no se requiere suscripción. Todas las funciones actuales y futuras están incluidas." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Débloquez QuickDrop+ pour continuer à échanger des fichiers sans limites. QuickDrop+ est un achat unique – aucun abonnement requis. Toutes les fonctionnalités actuelles et futures sont incluses." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Oldd fel a QuickDrop+-t, hogy korlátlanul folytathasd a fájlcserét. A QuickDrop+ egy egyszeri vásárlás – előfizetés nem szükséges. Az összes jelenlegi és jövőbeli funkciót tartalmazza." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Sblocca QuickDrop+ per continuare a scambiare file senza limiti. QuickDrop+ è un acquisto unico – nessun abbonamento richiesto. Tutte le funzionalità attuali e future sono incluse." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop+ をアンロックして、無制限にファイルを交換できます。QuickDrop+ は買い切り型のアプリです。サブスクリプション不要で、現在および将来のすべての機能が含まれます。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop+를 잠금 해제하여 파일을 제한 없이 교환하세요. QuickDrop+는 일회성 구매이며, 구독이 필요하지 않습니다. 모든 현재 및 미래 기능이 포함됩니다." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ontgrendel QuickDrop+ om bestanden zonder limieten te blijven uitwisselen. QuickDrop+ is een eenmalige aankoop – geen abonnement vereist. Alle huidige en toekomstige functies zijn inbegrepen." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueie o QuickDrop+ para continuar trocando arquivos sem limites. QuickDrop+ é uma compra única – sem necessidade de assinatura. Todos os recursos atuais e futuros estão incluídos." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Desbloqueia o QuickDrop+ para continuar a trocar ficheiros sem limites. QuickDrop+ é uma compra única – não é necessária subscrição. Todas as funcionalidades atuais e futuras estão incluídas." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deblochează QuickDrop+ pentru a continua schimbul de fișiere fără limite. QuickDrop+ este o achiziție unică – nu este necesar abonament. Toate funcțiile curente și viitoare sunt incluse." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Разблокируйте QuickDrop+, чтобы продолжить обмен файлами без ограничений. QuickDrop+ – это разовая покупка, подписка не требуется. Все текущие и будущие функции включены." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ปลดล็อก QuickDrop+ เพื่อแลกเปลี่ยนไฟล์ได้อย่างไม่จำกัด QuickDrop+ เป็นการซื้อครั้งเดียว – ไม่ต้องสมัครสมาชิก ฟีเจอร์ทั้งหมดทั้งปัจจุบันและอนาคตรวมอยู่ในนี้แล้ว" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Розблокуйте QuickDrop+, щоб продовжити обмін файлами без обмежень. QuickDrop+ – це одноразова покупка, підписка не потрібна. Всі поточні та майбутні функції включені." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "解锁 QuickDrop+ 以无限制地交换文件。QuickDrop+ 是一次性购买 – 无需订阅。所有当前和未来的功能均包含在内。" - } - } - } - }, - "plusview_nothingtorestore" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "لا يوجد شيء لاستعادته!" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Es gibt nichts wiederherzustellen!" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "There is nothing to restore!" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡No hay nada que restaurar!" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aucun achat à restaurer !" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nincs visszaállítható vásárlás!" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Non c'è nulla da ripristinare!" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "復元するものがありません!" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "복원할 항목이 없습니다!" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Er is niets om te herstellen!" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nada para restaurar!" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Não há nada para restaurar!" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Nu există nimic de restaurat!" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Нет покупок для восстановления!" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ไม่มีรายการที่ต้องกู้คืน!" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Немає покупок для відновлення!" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "没有可恢复的购买!" - } - } - } - }, - "plusview_productRequestFailed" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "تعذر جلب عمليات الشراء داخل التطبيق في الوقت الحالي." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "In-App-Käufe können momentan nicht abgerufen werden." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unable to fetch In-App Purchases at the moment." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "No se pueden recuperar las compras dentro de la aplicación en este momento." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Impossible de récupérer les achats intégrés pour le moment." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Jelenleg nem lehet lekérni az alkalmazáson belüli vásárlásokat." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Impossibile recuperare gli acquisti in-app al momento." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "現在、アプリ内購入情報を取得できません。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "현재 인앱 구매 정보를 가져올 수 없습니다." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "In-app aankopen kunnen momenteel niet worden opgehaald." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Não foi possível recuperar as compras dentro do aplicativo no momento." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Não foi possível recuperar as compras dentro do app no momento." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Momentan, nu se pot obține informații despre achizițiile în aplicație." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Не удалось получить данные о встроенных покупках." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ไม่สามารถดึงข้อมูลการซื้อภายในแอปได้ในขณะนี้" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Наразі неможливо отримати інформацію про покупки в додатку." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "暂时无法获取应用内购买信息。" - } - } - } - }, - "plusview_purchasefailed" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "فشل الشراء" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Kauf fehlgeschlagen" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Purchase failed" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "La compra ha fallado" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Échec de l'achat" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "A vásárlás sikertelen" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acquisto non riuscito" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "購入に失敗しました" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "구매 실패" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aankoop mislukt" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Falha na compra" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Falha na compra" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Achiziția a eșuat" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ошибка покупки" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "การซื้อล้มเหลว" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Помилка покупки" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "购买失败" - } - } - } - }, - "plusview_purchasefaileddescription" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "إذا ظهر هذا الرسالة بشكل غير متوقع، يرجى التأكد من اتصالك بالإنترنت وأن عمليات الشراء داخل التطبيق مفعّلة على جهازك، ثم حاول مرة أخرى." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Falls diese Nachricht unerwartet erscheint, stelle sicher, dass du mit dem Internet verbunden bist und In-App-Käufe auf deinem Gerät aktiviert sind, und versuche es erneut." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "If this message appeared unexpectedly, please make sure that you are connected to the Internet and In-App-Purchases are enabled for your device and then try again." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Si este mensaje apareció inesperadamente, asegúrate de estar conectado a internet y que las compras dentro de la aplicación estén habilitadas en tu dispositivo, luego intenta nuevamente." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Si ce message est apparu de manière inattendue, assurez-vous d'être connecté à Internet et que les achats intégrés sont activés sur votre appareil, puis réessayez." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ha ez az üzenet váratlanul jelent meg, ellenőrizd az internetkapcsolatot, és győződj meg róla, hogy az alkalmazáson belüli vásárlások engedélyezve vannak az eszközödön, majd próbáld újra." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Se questo messaggio è apparso inaspettatamente, assicurati di essere connesso a Internet e che gli acquisti in-app siano abilitati sul tuo dispositivo, quindi riprova." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "このメッセージが予期せず表示された場合、インターネット接続を確認し、アプリ内購入が有効になっていることを確認した上で再試行してください。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "이 메시지가 예상치 않게 나타난 경우, 인터넷에 연결되어 있는지 확인하고 기기에서 인앱 결제가 활성화되어 있는지 확인한 후 다시 시도해 주세요." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Als dit bericht onverwachts verschijnt, controleer dan of je verbonden bent met internet en of in-app aankopen zijn ingeschakeld op je apparaat, en probeer het opnieuw." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Se esta mensagem apareceu inesperadamente, verifique se você está conectado à internet e se as compras dentro do app estão ativadas no seu dispositivo e tente novamente." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Se esta mensagem apareceu inesperadamente, certifique-se de estar conectado à Internet e que as compras dentro do app estejam ativadas no seu dispositivo, depois tente novamente." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Dacă acest mesaj a apărut neașteptat, asigură-te că ești conectat la internet și că achizițiile în aplicație sunt activate pe dispozitivul tău, apoi încearcă din nou." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Если это сообщение появилось неожиданно, убедитесь, что у вас есть доступ к интернету и включены встроенные покупки на вашем устройстве, затем попробуйте снова." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "หากข้อความนี้ปรากฏขึ้นโดยไม่คาดคิด โปรดตรวจสอบว่าคุณเชื่อมต่ออินเทอร์เน็ตและเปิดใช้งานการซื้อภายในแอปในอุปกรณ์ของคุณแล้วลองอีกครั้ง" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Якщо це повідомлення з’явилося несподівано, переконайтеся, що у вас є підключення до Інтернету, а покупки в додатках увімкнені на вашому пристрої, і спробуйте ще раз." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "如果此消息意外出现,请确保您已连接到互联网,并且设备已启用应用内购买功能,然后重试。" - } - } - } - }, - "plusview_restorefailed" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حدثت مشكلة أثناء استعادة عملية الشراء" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Es gab ein Problem beim Wiederherstellen deines Kaufs" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "There was a problem restoring your purchase" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hubo un problema al restaurar tu compra" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Un problème est survenu lors de la restauration de votre achat" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Hiba történt a vásárlás visszaállítása során" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Si è verificato un problema durante il ripristino dell'acquisto" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "購入の復元中に問題が発生しました" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "구매 복원 중 문제가 발생했습니다." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Er was een probleem bij het herstellen van je aankoop" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Houve um problema ao restaurar sua compra" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Houve um problema ao restaurar sua compra" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "A apărut o problemă la restaurarea achiziției" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Произошла ошибка при восстановлении покупки" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เกิดปัญหาในการกู้คืนการซื้อของคุณ" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Сталася помилка під час відновлення покупки" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "恢复购买时出现问题" - } - } - } - }, - "plusview_restorefailed_proceed" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "موافق" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Okay" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Okay" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Aceptar" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Rendben" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ok" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "확인" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Oké" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ok" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "OK" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Окей" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ตกลง" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Гаразд" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "确定" - } - } - } - }, - "plusview_restorepurchase" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "هل اشتريته بالفعل؟" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bereits gekauft?" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Already bought?" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¿Ya lo compraste?" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Déjà acheté ?" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Már megvásároltad?" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Già acquistato?" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "すでに購入済みですか?" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "이미 구매하셨나요?" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Al gekocht?" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Já comprou?" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Já comprou?" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Deja cumpărat?" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Уже куплено?" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "เคยซื้อแล้ว?" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Вже куплено?" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "已购买?" - } - } - } - }, - "plusview_success_button" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "حسنًا!" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Alles klar!" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Got it!" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Entendido!" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "D'accord !" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Értettem!" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Capito!" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "了解!" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "알겠습니다!" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Begrepen!" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Entendi!" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Entendido!" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Înțeles!" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Понял!" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "รับทราบ!" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Зрозуміло!" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "知道了!" - } - } - } - }, - "plusview_success_description" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "يمكنك الآن متابعة استلام الملفات بدون قيود. أي ملفات حاولت إرسالها سابقًا تم حفظها بالفعل على جهازك." - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Du kannst nun weiterhin Dateien ohne Einschränkungen empfangen. Alle Dateien, welche gerade gesendet wurden, wurden bereits gespeichert." - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "You can now continue receiving files without restrictions. Any files you tried to send were already saved on your device." - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ahora puedes seguir recibiendo archivos sin restricciones. Todos los archivos que intentaste enviar antes ya se han guardado en tu dispositivo." - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Vous pouvez maintenant continuer à recevoir des fichiers sans restrictions. Tous les fichiers que vous avez essayé d'envoyer précédemment ont déjà été enregistrés sur votre appareil." - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mostantól korlátozások nélkül fogadhat fájlokat. Az összes fájl, amelyet korábban próbált elküldeni, már el lett mentve az eszközére." - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ora puoi continuare a ricevere file senza restrizioni. Tutti i file che hai provato a inviare in precedenza sono già stati salvati sul tuo dispositivo." - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "これで、制限なくファイルを受信し続けることができます。以前送信しようとしたファイルはすでにデバイスに保存されています。" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "이제 파일을 제한 없이 계속 받을 수 있습니다. 이전에 전송을 시도한 모든 파일이 이미 기기에 저장되었습니다." - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Je kunt nu bestanden blijven ontvangen zonder beperkingen. Alle bestanden die je eerder probeerde te verzenden, zijn al opgeslagen op je apparaat." - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agora você pode continuar recebendo arquivos sem restrições. Todos os arquivos que você tentou enviar antes já foram salvos no seu dispositivo." - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Agora pode continuar a receber ficheiros sem restrições. Todos os ficheiros que tentou enviar antes já foram guardados no seu dispositivo." - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Acum puteți continua să primiți fișiere fără restricții. Toate fișierele pe care ați încercat să le trimiteți anterior au fost deja salvate pe dispozitivul dvs." - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Теперь вы можете продолжать получать файлы без ограничений. Все файлы, которые вы пытались отправить ранее, уже сохранены на вашем устройстве." - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "คุณสามารถรับไฟล์ต่อไปได้โดยไม่มีข้อจำกัด ไฟล์ทั้งหมดที่คุณพยายามส่งก่อนหน้านี้ถูกบันทึกไว้ในอุปกรณ์ของคุณแล้ว" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Тепер ви можете продовжувати отримувати файли без обмежень. Усі файли, які ви намагалися надіслати раніше, вже збережено на вашому пристрої." - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "您现在可以继续无限制地接收文件。您之前尝试发送的所有文件已保存到您的设备上。" - } - } - } - }, - "plusview_success_title" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "شكرًا لشرائك!" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Danke für deinen Kauf!" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thanks for your purchase!" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Gracias por tu compra!" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Merci pour votre achat !" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Köszönjük a vásárlást!" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grazie per il tuo acquisto!" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "ご購入ありがとうございます!" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "구매해 주셔서 감사합니다!" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bedankt voor je aankoop!" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obrigado pela sua compra!" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obrigado pela sua compra!" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mulțumim pentru achiziție!" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Спасибо за покупку!" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ขอบคุณสำหรับการซื้อ!" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дякуємо за покупку!" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "感谢您的购买!" - } - } - } - }, - "plusview_title" : { - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "شكرًا لاستخدامك QuickDrop!" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Danke, dass du QuickDrop benutzt!" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Thanks for using QuickDrop!" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "¡Gracias por usar QuickDrop!" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Merci d'utiliser QuickDrop !" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Köszönjük, hogy használod a QuickDropot!" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Grazie per aver usato QuickDrop!" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDropをご利用いただきありがとうございます!" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop을 사용해 주셔서 감사합니다!" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Bedankt voor het gebruiken van QuickDrop!" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obrigado por usar o QuickDrop!" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Obrigado por usar o QuickDrop!" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Mulțumim că folosești QuickDrop!" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Спасибо за использование QuickDrop!" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "ขอบคุณที่ใช้ QuickDrop!" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Дякуємо за використання QuickDrop!" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "感谢使用 QuickDrop!" - } - } - } - }, - "plusview_unlock_label" : { - "extractionState" : "manual", - "localizations" : { - "ar" : { - "stringUnit" : { - "state" : "translated", - "value" : "ادعم QuickDrop" - } - }, - "de" : { - "stringUnit" : { - "state" : "translated", - "value" : "Unterstütze QuickDrop" - } - }, - "en" : { - "stringUnit" : { - "state" : "translated", - "value" : "Support QuickDrop" - } - }, - "es" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apoyar QuickDrop" - } - }, - "fr" : { - "stringUnit" : { - "state" : "translated", - "value" : "Soutenir QuickDrop" - } - }, - "hu" : { - "stringUnit" : { - "state" : "translated", - "value" : "Támogasd a QuickDropot" - } - }, - "it" : { - "stringUnit" : { - "state" : "translated", - "value" : "Supporta QuickDrop" - } - }, - "ja" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDropをサポート" - } - }, - "ko" : { - "stringUnit" : { - "state" : "translated", - "value" : "QuickDrop 지원하기" - } - }, - "nl" : { - "stringUnit" : { - "state" : "translated", - "value" : "Ondersteun QuickDrop" - } - }, - "pt-BR" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apoie o QuickDrop" - } - }, - "pt-PT" : { - "stringUnit" : { - "state" : "translated", - "value" : "Apoiar QuickDrop" - } - }, - "ro" : { - "stringUnit" : { - "state" : "translated", - "value" : "Susține QuickDrop" - } - }, - "ru" : { - "stringUnit" : { - "state" : "translated", - "value" : "Поддержать QuickDrop" - } - }, - "th" : { - "stringUnit" : { - "state" : "translated", - "value" : "สนับสนุน QuickDrop" - } - }, - "uk" : { - "stringUnit" : { - "state" : "translated", - "value" : "Підтримати QuickDrop" - } - }, - "zh-Hans" : { - "stringUnit" : { - "state" : "translated", - "value" : "支持 QuickDrop" - } - } - } } }, "version" : "1.0" diff --git a/QuickDrop/Util/ErrorAlertHandler.swift b/QuickDrop/Util/ErrorAlertHandler.swift index 849ba95..3166c4a 100644 --- a/QuickDrop/Util/ErrorAlertHandler.swift +++ b/QuickDrop/Util/ErrorAlertHandler.swift @@ -178,12 +178,15 @@ func sendLoggingString() { if let url = LogManager.sharedInstance.logFileURL { let appVersion = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String ?? "Unknown" log("Sending logging string with file URL: \(url)") + log("Currently running apps: \(NSWorkspace.shared.runningApplications.map { $0.localizedName ?? "Unknown" })") - sendEmailWithAttachment( - fileURL: url, - recipients: ["quickdrop@leonboettger.com"], - subject: "QuickDrop \(appVersion) - \(getDeviceAndSystem())" - ) + DispatchQueue.main.asyncAfter(deadline: .now() + 0.3, execute: { + sendEmailWithAttachment( + fileURL: url, + recipients: ["quickdrop@leonboettger.com"], + subject: "QuickDrop \(appVersion) - \(getDeviceAndSystem())" + ) + }) } } diff --git a/ShareExtension/ShareViewController.swift b/ShareExtension/ShareViewController.swift index 8e7050f..cdf78fe 100644 --- a/ShareExtension/ShareViewController.swift +++ b/ShareExtension/ShareViewController.swift @@ -8,10 +8,8 @@ import Cocoa import Foundation import SwiftUI -import QRCode -class ShareViewController: NSViewController, OutboundAppDelegate { - +class ShareViewController: NSViewController, ShareExtensionDelegate { private var urls: [URL] = [] private var textToSend: String? = nil private var foundDevices: [RemoteDeviceInfo] = [] @@ -48,12 +46,11 @@ class ShareViewController: NSViewController, OutboundAppDelegate { override func loadView() { - super.loadView() loadAttachments(with: extensionContext, loadedItems: { result in - + log("Loaded attachments: \(result)") - + self.urls = result.urls self.textToSend = result.textToSend self.filesLabel?.stringValue = result.shortDescription @@ -96,7 +93,6 @@ class ShareViewController: NSViewController, OutboundAppDelegate { override func viewDidLoad() { - super.viewDidLoad() dicoverDevices() @@ -132,27 +128,7 @@ class ShareViewController: NSViewController, OutboundAppDelegate { private func openQrCodeView() { if qrCodeSheetView == nil { - - var image: Image? = nil - - do { - let qrKey = NearbyConnectionManager.shared.generateQrCodeKey() - let qrCodeImage = try QRCode.build - .text("https://quickshare.google/qrcode#key=\(qrKey)") - .backgroundColor(CGColor(srgbRed: 1, green: 1, blue: 1, alpha: 0)) - .quietZonePixelCount(3) - .onPixels.shape(.circle()) - .eye.shape(.squircle()) - .errorCorrection(.low) - .generate.image(dimension: 1000) - - image = Image(nsImage: NSImage(cgImage: qrCodeImage, size: qrCodeImage.size)) - } - catch { - log("Error generating QR code: \(error)") - } - - let contentView = SmallSheetView(type: .sendToDeviceQrCode, dynamicQrCode: image) { + let contentView = SmallSheetView(type: .sendToDeviceQrCode) { self.closeQrCodeView() } @@ -185,11 +161,71 @@ class ShareViewController: NSViewController, OutboundAppDelegate { } - func addDevice(device: RemoteDeviceInfo) { - - if chosenDevice != nil { - return + private func zipFolderAndSetUpIcon() { + for url in urls { + if url.isFileURL { + let isDirectory = UnsafeMutablePointer.allocate(capacity: 1) + if FileManager.default.fileExists(atPath: url.path, isDirectory: isDirectory) && isDirectory.pointee.boolValue { + do { + let zipUrl = try createZipAtTmp(zipFilename: url.lastPathComponent, fromDirectory: url) + + let index = urls.firstIndex(of: url) + urls[index!] = zipUrl + } catch { + log("Error creating zip file: \(error)") + + DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) { + log("Canceling share request because URL \(url) is a directory") + + AudioManager.playErrorSound() + let alert = NSAlert() + alert.alertStyle = .critical + + alert.messageText = "TypeNotSupported".localized() + alert.informativeText = "TypeNotSupportedDescription".localized() + alert.addButton(withTitle: "TypeNotSupportedButton".localized()) + + alert.beginSheetModal(for: self.view.window!) { _ in + let cancelError = NSError(domain: NSCocoaErrorDomain, code: NSUserCancelledError, userInfo: nil) + self.extensionContext!.cancelRequest(withError: cancelError) + } + } + + return + } + } + } } + + if let textToSend = textToSend { + let maxLength = 50 + let cleanedText = textToSend.replacingOccurrences(of: "\n", with: " ").replacingOccurrences(of: "\r", with: "") + + if cleanedText.count > maxLength { + let index = cleanedText.index(cleanedText.startIndex, offsetBy: maxLength) + filesLabel!.stringValue = String(cleanedText[.. String { - if let name = device.name, name.count > 1 { - return name + if device.name.count <= 1 { + return "Android" } - - return "Android" + return device.name } }