From 825b3bd89c051e7355e4d6ec09cec168b22e45c5 Mon Sep 17 00:00:00 2001 From: Oleksii Kolomiiets Date: Mon, 12 Jan 2026 15:27:59 +0100 Subject: [PATCH 01/13] add lint plugin and format code base --- .swiftformat | 70 +++++++++++++++++++ Package.swift | 17 +++-- Sources/ZeplinPersistence/AppTarget.swift | 2 +- .../NotificationRecord+CoreDataClass.swift | 30 ++++---- .../PersistenceController.swift | 45 ++++++------ .../ZeplinPersistence/TokenRepository.swift | 18 ++--- .../ZeplinPersistenceTests.swift | 1 + 7 files changed, 128 insertions(+), 55 deletions(-) create mode 100644 .swiftformat diff --git a/.swiftformat b/.swiftformat new file mode 100644 index 0000000..57584ae --- /dev/null +++ b/.swiftformat @@ -0,0 +1,70 @@ +{ + "fileScopedDeclarationPrivacy" : { + "accessLevel" : "private" + }, + "indentConditionalCompilationBlocks" : true, + "indentSwitchCaseLabels" : false, + "indentation" : { + "spaces" : 4 + }, + "lineBreakAroundMultilineExpressionChainComponents" : false, + "lineBreakBeforeControlFlowKeywords" : false, + "lineBreakBeforeEachArgument" : false, + "lineBreakBeforeEachGenericRequirement" : false, + "lineLength" : 140, + "maximumBlankLines" : 1, + "multiElementCollectionTrailingCommas" : true, + "noAssignmentInExpressions" : { + "allowedFunctions" : [ + "XCTAssertNoThrow" + ] + }, + "prioritizeKeepingFunctionOutputTogether" : false, + "respectsExistingLineBreaks" : true, + "rules" : { + "AllPublicDeclarationsHaveDocumentation" : false, + "AlwaysUseLiteralForEmptyCollectionInit" : false, + "AlwaysUseLowerCamelCase" : true, + "AmbiguousTrailingClosureOverload" : true, + "BeginDocumentationCommentWithOneLineSummary" : false, + "DoNotUseSemicolons" : true, + "DontRepeatTypeInStaticProperties" : true, + "FileScopedDeclarationPrivacy" : true, + "FullyIndirectEnum" : true, + "GroupNumericLiterals" : true, + "IdentifiersMustBeASCII" : true, + "NeverForceUnwrap" : false, + "NeverUseForceTry" : false, + "NeverUseImplicitlyUnwrappedOptionals" : false, + "NoAccessLevelOnExtensionDeclaration" : true, + "NoAssignmentInExpressions" : true, + "NoBlockComments" : true, + "NoCasesWithOnlyFallthrough" : true, + "NoEmptyTrailingClosureParentheses" : true, + "NoLabelsInCasePatterns" : true, + "NoLeadingUnderscores" : false, + "NoParensAroundConditions" : true, + "NoPlaygroundLiterals" : true, + "NoVoidReturnOnFunctionSignature" : true, + "OmitExplicitReturns" : false, + "OneCasePerLine" : true, + "OneVariableDeclarationPerLine" : true, + "OnlyOneTrailingClosureArgument" : true, + "OrderedImports" : true, + "ReplaceForEachWithForLoop" : true, + "ReturnVoidInsteadOfEmptyTuple" : true, + "TypeNamesShouldBeCapitalized" : true, + "UseEarlyExits" : false, + "UseExplicitNilCheckInConditions" : true, + "UseLetInEveryBoundCaseVariable" : true, + "UseShorthandTypeNames" : true, + "UseSingleLinePropertyGetter" : true, + "UseSynthesizedInitializer" : true, + "UseTripleSlashForDocumentationComments" : true, + "UseWhereClausesInForLoops" : false, + "ValidateDocumentationComments" : false + }, + "spacesAroundRangeFormationOperators" : true, + "tabWidth" : 4, + "version" : 1 +} diff --git a/Package.swift b/Package.swift index f7f862b..c108638 100644 --- a/Package.swift +++ b/Package.swift @@ -1,5 +1,4 @@ // swift-tools-version: 5.6 -// The swift-tools-version declares the minimum version of Swift required to build this package. import PackageDescription @@ -7,29 +6,29 @@ let package = Package( name: "ZeplinPersistence", platforms: [ .iOS(.v14), - .macOS(.v11) + .macOS(.v11), ], products: [ - // Products define the executables and libraries a package produces, and make them visible to other packages. .library( name: "ZeplinPersistence", targets: ["ZeplinPersistence"] - ), + ) ], dependencies: [ - // Dependencies declare other packages that this package depends on. .package(url: "https://github.com/Snapp-Mobile/Fetcher", from: "0.0.2"), .package(url: "https://github.com/Snapp-Mobile/ZeplinKit", from: "0.0.3"), .package(url: "https://github.com/jrendel/SwiftKeychainWrapper", from: "4.0.0"), + .package(url: "https://github.com/Snapp-Mobile/SwiftFormatLintPlugin.git", from: "1.0.4"), ], targets: [ - // Targets are the basic building blocks of a package. A target can define a module or a test suite. - // Targets can depend on other targets in this package, and on products in packages this package depends on. .target( name: "ZeplinPersistence", - dependencies: ["ZeplinKit", "Fetcher", "SwiftKeychainWrapper"]), + dependencies: ["ZeplinKit", "Fetcher", "SwiftKeychainWrapper"], + plugins: [.plugin(name: "Lint", package: "SwiftFormatLintPlugin")], + ), .testTarget( name: "ZeplinPersistenceTests", - dependencies: ["ZeplinPersistence"]), + dependencies: ["ZeplinPersistence"] + ), ] ) diff --git a/Sources/ZeplinPersistence/AppTarget.swift b/Sources/ZeplinPersistence/AppTarget.swift index 5ea70ef..1afff9e 100644 --- a/Sources/ZeplinPersistence/AppTarget.swift +++ b/Sources/ZeplinPersistence/AppTarget.swift @@ -1,6 +1,6 @@ // // AppTarget.swift -// +// // // Created by Ilian Konchev on 5.10.21. // diff --git a/Sources/ZeplinPersistence/NotificationRecord+CoreDataClass.swift b/Sources/ZeplinPersistence/NotificationRecord+CoreDataClass.swift index a2e299d..15ed44f 100644 --- a/Sources/ZeplinPersistence/NotificationRecord+CoreDataClass.swift +++ b/Sources/ZeplinPersistence/NotificationRecord+CoreDataClass.swift @@ -1,6 +1,6 @@ // // NotificationRecord+CoreDataClass.swift -// +// // // Created by Ilian Konchev on 9.10.21. // Copyright © 2021 Ilian Konchev. All rights reserved. @@ -34,7 +34,7 @@ public class NotificationRecord: NSManagedObject { request.propertiesToFetch = [ "actionDescription", "authorName", "authorAvatarURL", "authorEmotar", "created", "contextDescription", "isRead", "lastUpdated", "notificationId", "projectId", - "remoteImageURL", "screenId" + "remoteImageURL", "screenId", ] request.sortDescriptors = [ NSSortDescriptor(key: "created", ascending: false) @@ -90,14 +90,14 @@ public class NotificationRecord: NSManagedObject { } } -public extension NotificationRecord { - static func create(with notification: ZeplinNotification, in context: NSManagedObjectContext) { +extension NotificationRecord { + public static func create(with notification: ZeplinNotification, in context: NSManagedObjectContext) { let record = NotificationRecord(context: context) record.id = UUID() record.update(from: notification) } - func update(from notification: ZeplinNotification) { + public func update(from notification: ZeplinNotification) { created = Date(timeIntervalSince1970: notification.created) notificationId = notification.id let lastUpdatedInterval = notification.updated ?? notification.created @@ -125,17 +125,19 @@ public extension NotificationRecord { } } - var representation: ZeplinNotificationRepresentation { - return ZeplinNotificationRepresentation(id: notificationId, - created: created.timeIntervalSince1970, - lastUpdated: lastUpdated.timeIntervalSince1970, - isRead: isRead) + public var representation: ZeplinNotificationRepresentation { + return ZeplinNotificationRepresentation( + id: notificationId, + created: created.timeIntervalSince1970, + lastUpdated: lastUpdated.timeIntervalSince1970, + isRead: isRead + ) } - func matches(_ searchTerm: String, _ showsOnlyUnread: Bool) -> Bool { + public func matches(_ searchTerm: String, _ showsOnlyUnread: Bool) -> Bool { let term = searchTerm.lowercased() - let termMatched = searchTerm.isEmpty ? true : (actionDescription.lowercased().contains(term) || - contextDescription.lowercased().contains(term)) + let termMatched = + searchTerm.isEmpty ? true : (actionDescription.lowercased().contains(term) || contextDescription.lowercased().contains(term)) if showsOnlyUnread { return termMatched && !isRead } else { @@ -143,7 +145,7 @@ public extension NotificationRecord { } } - func differsFrom(_ notification: ZeplinNotification) -> Bool { + public func differsFrom(_ notification: ZeplinNotification) -> Bool { let date = notification.updated ?? notification.created return lastUpdated.timeIntervalSince1970 != date || created.timeIntervalSince1970 != notification.created } diff --git a/Sources/ZeplinPersistence/PersistenceController.swift b/Sources/ZeplinPersistence/PersistenceController.swift index 647130c..6db43d5 100644 --- a/Sources/ZeplinPersistence/PersistenceController.swift +++ b/Sources/ZeplinPersistence/PersistenceController.swift @@ -1,6 +1,6 @@ // // PersistenceController.swift -// +// // // Created by Ilian Konchev on 5.10.21. // @@ -16,7 +16,8 @@ public struct PersistenceController { public init(target: AppTarget? = nil, inMemory: Bool = false) { if let modelURL = Bundle.module.url(forResource: "Zeplin", withExtension: "momd"), - let model = NSManagedObjectModel(contentsOf: modelURL) { + let model = NSManagedObjectModel(contentsOf: modelURL) + { container = NSPersistentContainer(name: "Zeplin", managedObjectModel: model) } else { container = NSPersistentContainer(name: "Zeplin") @@ -27,38 +28,36 @@ public struct PersistenceController { } else { guard let target = target else { return } #if !os(watchOS) - guard let fileContainer = fileManager.containerURL(forSecurityApplicationGroupIdentifier: target.groupIdentifier) else { - fatalError("Shared file container could not be created.") - } + guard let fileContainer = fileManager.containerURL(forSecurityApplicationGroupIdentifier: target.groupIdentifier) else { + fatalError("Shared file container could not be created.") + } - let storeURL = fileContainer.appendingPathComponent("Zeplin.sqlite") - os_log("DB at %@", log: OSLog.app, type: .debug, storeURL.absoluteString) - let storeDescription = NSPersistentStoreDescription(url: storeURL) - storeDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey) - storeDescription.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey) - container.persistentStoreDescriptions = [storeDescription] + let storeURL = fileContainer.appendingPathComponent("Zeplin.sqlite") + os_log("DB at %@", log: OSLog.app, type: .debug, storeURL.absoluteString) + let storeDescription = NSPersistentStoreDescription(url: storeURL) + storeDescription.setOption(true as NSNumber, forKey: NSPersistentHistoryTrackingKey) + storeDescription.setOption(true as NSNumber, forKey: NSPersistentStoreRemoteChangeNotificationPostOptionKey) + container.persistentStoreDescriptions = [storeDescription] #else - if let location = container.persistentStoreDescriptions.first?.apiURL?.absoluteString { - os_log("DB at %@", log: OSLog.app, type: .debug, location) - } + if let location = container.persistentStoreDescriptions.first?.apiURL?.absoluteString { + os_log("DB at %@", log: OSLog.app, type: .debug, location) + } #endif } - container.loadPersistentStores(completionHandler: { [weak container] _, error in // storeDescription, error + container.loadPersistentStores(completionHandler: { [weak container] _, error in // storeDescription, error if let error = error as NSError? { // Replace this implementation with code to handle the error appropriately. // fatalError() causes the application to generate a crash log and terminate. // You should not use this function in a shipping application, although // it may be useful during development. - /* - Typical reasons for an error here include: - * The parent directory does not exist, cannot be created, or disallows writing. - * The persistent store is not accessible, due to permissions or data protection when the device is locked. - * The device is out of space. - * The store could not be migrated to the current model version. - Check the error message to determine what the actual problem was. - */ + // Typical reasons for an error here include: + // * The parent directory does not exist, cannot be created, or disallows writing. + // * The persistent store is not accessible, due to permissions or data protection when the device is locked. + // * The device is out of space. + // * The store could not be migrated to the current model version. + // Check the error message to determine what the actual problem was. fatalError("Unresolved error \(error), \(error.userInfo)") } diff --git a/Sources/ZeplinPersistence/TokenRepository.swift b/Sources/ZeplinPersistence/TokenRepository.swift index 785a38f..6b0f473 100644 --- a/Sources/ZeplinPersistence/TokenRepository.swift +++ b/Sources/ZeplinPersistence/TokenRepository.swift @@ -1,6 +1,6 @@ // // TokenRepository.swift -// +// // // Created by Ilian Konchev on 26.11.21. // @@ -28,11 +28,13 @@ public actor TokenRepository { /// - accessibility: The accessibility level of the stored data /// - serviceName: The name of the service to set for the keychain item /// - appTarget: The app target whose group identifier is going be used for setting the access group - public init(key: String, - accessibility: KeychainItemAccessibility? = nil, - serviceName: String, - appTarget: AppTarget, - configuration: ZeplinAPIConfiguration) { + public init( + key: String, + accessibility: KeychainItemAccessibility? = nil, + serviceName: String, + appTarget: AppTarget, + configuration: ZeplinAPIConfiguration + ) { self.keychain = KeychainWrapper(serviceName: serviceName, accessGroup: appTarget.groupIdentifier) self.key = key self.accessibility = accessibility @@ -86,7 +88,7 @@ public actor TokenRepository { } if let handle = updateTokenTask { - return try await handle.value + return try await handle.value } let logger = fetcher.environment.apiErrorsLogger @@ -135,7 +137,7 @@ public actor TokenRepository { while attempt < 5 { if await UIApplication.shared.isProtectedDataAvailable { guard let data = keychain.data(forKey: key, withAccessibility: accessibility), - let token = try? JSONDecoder().decode(Token.self, from: data) + let token = try? JSONDecoder().decode(Token.self, from: data) else { await logger?.logMessage("Unable to decode the token from the keychain, returning nil.") return nil diff --git a/Tests/ZeplinPersistenceTests/ZeplinPersistenceTests.swift b/Tests/ZeplinPersistenceTests/ZeplinPersistenceTests.swift index 9bf660d..9f80e74 100644 --- a/Tests/ZeplinPersistenceTests/ZeplinPersistenceTests.swift +++ b/Tests/ZeplinPersistenceTests/ZeplinPersistenceTests.swift @@ -1,4 +1,5 @@ import XCTest + @testable import ZeplinPersistence final class ZeplinPersistenceTests: XCTestCase { From c363d85fa4b45c39afef226aafeb68f198a142f9 Mon Sep 17 00:00:00 2001 From: Oleksii Kolomiiets Date: Mon, 12 Jan 2026 15:29:27 +0100 Subject: [PATCH 02/13] added documentation --- .../ZeplinPersistence.docc/Documentation.md | 17 +++++++++++++++++ .../Resources/ZeplinPersistance-logo.png | Bin 0 -> 26405 bytes .../Resources/ZeplinPersistance-logo@2x.png | Bin 0 -> 63373 bytes .../Resources/ZeplinPersistance-logo@3x.png | Bin 0 -> 62604 bytes 4 files changed, 17 insertions(+) create mode 100644 Sources/ZeplinPersistence/ZeplinPersistence.docc/Documentation.md create mode 100644 Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo.png create mode 100644 Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo@2x.png create mode 100644 Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo@3x.png diff --git a/Sources/ZeplinPersistence/ZeplinPersistence.docc/Documentation.md b/Sources/ZeplinPersistence/ZeplinPersistence.docc/Documentation.md new file mode 100644 index 0000000..4b47c51 --- /dev/null +++ b/Sources/ZeplinPersistence/ZeplinPersistence.docc/Documentation.md @@ -0,0 +1,17 @@ +# ``ZeplinPersistence`` + +@Metadata { + @PageImage(purpose: icon, source:"ZeplinPersistance-logo") +} + +A Swift Package that wraps up a CoreData container for persisting user's notifications + +## Overview + +ZeplinPersistence handles data storage for the Zeplin Mobile app. It wraps CoreData for storing notifications and manages authentication tokens through the iOS keychain. + +The ``PersistenceController`` sets up a CoreData container that uses app groups for sharing data between the main app and extensions. It supports both in-memory stores for testing and persistent stores for production. The ``TokenRepository`` is an actor that handles token storage and refreshing, waiting for protected data availability when the device is locked. + +Different app targets like widgets or notification extensions get their own configuration through ``AppTarget`` to handle security and data sharing. + +## Topics diff --git a/Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo.png b/Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo.png new file mode 100644 index 0000000000000000000000000000000000000000..b2bfe34035ca03ff347597f4b4f017f2ded51429 GIT binary patch literal 26405 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 literal 0 HcmV?d00001 diff --git a/Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo@2x.png b/Sources/ZeplinPersistence/ZeplinPersistence.docc/Resources/ZeplinPersistance-logo@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..04f5ca2e5bf2ffd880a9e45e71a424ffb543f6fd GIT binary patch literal 63373 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