Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MBX-3703: SwiftLint #454

Merged
merged 13 commits into from
Oct 17, 2024
145 changes: 145 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,145 @@
# Directory and file filters
included: # paths to include during linting. `--path` is ignored if present.
- Mindbox
- MindboxLogger
- MindboxNotifications
- MindboxTests
- MindboxNotificationsTests
excluded: # paths to ignore during linting. Takes precedence over `included`.

only_rules: # default rules
- closing_brace
- closure_parameter_position
- colon
- comma
- comment_spacing
- compiler_protocol_init
- computed_accessors_order
- control_statement
- cyclomatic_complexity
- deployment_target
- discouraged_direct_init
- duplicate_conditions
- duplicate_enum_cases
- duplicate_imports
- empty_enum_arguments
- empty_parameters
- empty_parentheses_with_trailing_closure
- file_length
- for_where
- force_cast
- force_try
- function_body_length
- function_parameter_count
- generic_type_name
- implicit_getter
- inclusive_language
- invalid_swiftlint_command
- is_disjoint
- large_tuple
- leading_whitespace
- legacy_cggeometry_functions
- legacy_constant
- legacy_constructor
- legacy_hashing
- legacy_nsgeometry_functions
- legacy_random
- line_length
- mark
- multiple_closures_with_trailing_closure
- no_space_in_method_call
- non_optional_string_data_conversion
- notification_center_detachment
- ns_number_init_as_function_reference
- nsobject_prefer_isequal
- opening_brace
- operator_whitespace
- optional_data_string_conversion
- orphaned_doc_comment
- prefer_type_checking
- private_unit_test
- protocol_property_accessors_order
- reduce_boolean
- redundant_discardable_let
- redundant_objc_attribute
- redundant_optional_initialization
- redundant_set_access_control
- redundant_string_enum_value
- redundant_void_return
- return_arrow_whitespace
- self_in_property_initialization
- shorthand_operator
- statement_position
- static_over_final_class
- superfluous_disable_command
- syntactic_sugar
- trailing_comma
- trailing_newline
- trailing_semicolon
- trailing_whitespace
- unavailable_condition
- unneeded_break_in_switch
- unneeded_override
- unneeded_synthesized_initializer
- unused_closure_parameter
- unused_control_flow_label
- unused_enumerated
- unused_optional_binding
- unused_setter_value
- vertical_parameter_alignment
- vertical_whitespace
- void_function_in_ternary
- void_return
- xctfail_message

# opt_in_rules
- attributes
- closure_body_length
- closure_end_indentation
- closure_spacing
- discouraged_object_literal
- empty_count
- empty_string
- fatal_error_message
- first_where
- force_unwrapping
- last_where
- modifier_order
- operator_usage_whitespace
- private_outlet
- redundant_type_annotation
- toggle_bool
- unneeded_parentheses_in_closure_argument
- vertical_whitespace_closing_braces
- weak_delegate
- yoda_condition

# Default Rules Setup

cyclomatic_complexity:
ignores_case_statements: true

file_length:
warning: 400
error: 800
ignore_comment_only_lines: true

function_body_length:
warning: 150
error: 250

large_tuple:
warning: 3
error: 4

line_length:
warning: 220
error: 300
ignores_comments: true
ignores_function_declarations: true

# Opt-in Rules Setup

closure_body_length:
warning: 30
error: 50
23 changes: 23 additions & 0 deletions Mindbox.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -3162,6 +3162,7 @@
buildPhases = (
313B232B25ADEA0F00A1CB72 /* Headers */,
313B232C25ADEA0F00A1CB72 /* Sources */,
47DCEB3C2CBD154E0096593C /* Run Script SwiftLint */,
313B232D25ADEA0F00A1CB72 /* Frameworks */,
313B232E25ADEA0F00A1CB72 /* Resources */,
3159FFB425B5AAF300EE80E9 /* Increment Build Number Script */,
Expand Down Expand Up @@ -3499,6 +3500,26 @@
shellPath = /bin/sh;
shellScript = "buildNumber=$(/usr/libexec/PlistBuddy -c \"Print CFBundleVersion\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\")\nbuildNumber=$(($buildNumber + 1))\n/usr/libexec/PlistBuddy -c \"Set :CFBundleVersion $buildNumber\" \"${PROJECT_DIR}/${INFOPLIST_FILE}\"\n";
};
47DCEB3C2CBD154E0096593C /* Run Script SwiftLint */ = {
isa = PBXShellScriptBuildPhase;
alwaysOutOfDate = 1;
buildActionMask = 2147483647;
files = (
);
inputFileListPaths = (
);
inputPaths = (
);
name = "Run Script SwiftLint";
outputFileListPaths = (
);
outputPaths = (
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/zsh;
shellScript = "export PATH=\"$PATH:/opt/homebrew/bin\"\n\nif which swiftlint >/dev/null; then\n CONFIG_FILE=\"${SRCROOT}/.swiftlint.yml\"\n if [ -f $CONFIG_FILE ]; then\n swiftlint --config $CONFIG_FILE\n else\n echo \"warning: SwiftLint configuration file not found at ${CONFIG_FILE}\"\n swiftlint\n fi\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n";
showEnvVarsInLog = 0;
};
/* End PBXShellScriptBuildPhase section */

/* Begin PBXSourcesBuildPhase section */
Expand Down Expand Up @@ -4146,6 +4167,7 @@
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_MODULE_VERIFIER = YES;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Mindbox/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
Expand Down Expand Up @@ -4178,6 +4200,7 @@
DYLIB_CURRENT_VERSION = 1;
DYLIB_INSTALL_NAME_BASE = "@rpath";
ENABLE_MODULE_VERIFIER = YES;
ENABLE_USER_SCRIPT_SANDBOXING = NO;
INFOPLIST_FILE = Mindbox/Info.plist;
INSTALL_PATH = "$(LOCAL_LIBRARY_DIR)/Frameworks";
LD_RUNPATH_SEARCH_PATHS = (
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ import Foundation
import UserNotifications

final class ClickNotificationManager {

private let databaseRepository: MBDatabaseRepository

init(
databaseRepository: MBDatabaseRepository
) {
self.databaseRepository = databaseRepository
}

func track(uniqueKey: String, buttonUniqueKey: String? = nil) throws {
var trackMobilePushClick: TrackClick?
if let buttonUniqueKey = buttonUniqueKey {
Expand All @@ -36,11 +36,10 @@ final class ClickNotificationManager {
let event = Event(type: .trackClick, body: BodyEncoder(encodable: encodable).body)
try databaseRepository.create(event: event)
}

func track(response: UNNotificationResponse) throws {
let decoder = try NotificationDecoder<NotificationsPayloads.Click>(response: response)
let payload = try decoder.decode()
try track(uniqueKey: payload.uniqueKey, buttonUniqueKey: response.actionIdentifier)
}

}
26 changes: 13 additions & 13 deletions Mindbox/CoreController/CoreController.swift
Original file line number Diff line number Diff line change
Expand Up @@ -25,27 +25,27 @@ final class CoreController {
var controllerQueue: DispatchQueue

func initialization(configuration: MBConfiguration) {

controllerQueue.async {
SessionTemporaryStorage.shared.isInstalledFromPersistenceStorageBeforeInitSDK = self.persistenceStorage.isInstalled
SessionTemporaryStorage.shared.isInitializationCalled = true

DI.injectOrFail(MigrationManagerProtocol.self).migrate()

self.configValidation.compare(configuration, self.persistenceStorage.configuration)
self.persistenceStorage.configuration = configuration
if !self.persistenceStorage.isInstalled {
self.primaryInitialization(with: configuration)
} else {
self.repeatInitialization(with: configuration)
}

self.guaranteedDeliveryManager.canScheduleOperations = true

let appStateMessage = "[App State]: \(UIApplication.shared.appStateDescription)"
Logger.common(message: appStateMessage, level: .info, category: .general)
}

Logger.common(message: "[Configuration]: \(configuration)", level: .info, category: .general)
Logger.common(message: "[SDK Version]: \(self.utilitiesFetcher.sdkVersion ?? "null")", level: .info, category: .general)
Logger.common(message: "[APNS Token]: \(self.persistenceStorage.apnsToken ?? "null")", level: .info, category: .general)
Expand All @@ -55,15 +55,15 @@ final class CoreController {
func apnsTokenDidUpdate(token: String) {
controllerQueue.async {
let isNotificationsEnabled = self.notificationStatus()

if self.persistenceStorage.needUpdateInfoOnce ?? true {
self.updateInfo(apnsToken: token, isNotificationsEnabled: isNotificationsEnabled)
self.persistenceStorage.isNotificationsEnabled = isNotificationsEnabled
self.persistenceStorage.apnsToken = token
self.persistenceStorage.needUpdateInfoOnce = false
return
}

if self.persistenceStorage.isInstalled {
self.updateInfo(
apnsToken: token,
Expand Down Expand Up @@ -107,15 +107,15 @@ final class CoreController {

private func generateDeviceUUID() -> String {
let lock = DispatchSemaphore(value: 0)
var deviceUUID: String?
var deviceUUID = String()
let start = CFAbsoluteTimeGetCurrent()
utilitiesFetcher.getDeviceUUID {
deviceUUID = $0
lock.signal()
}
lock.wait()
Logger.common(message: "It took \(CFAbsoluteTimeGetCurrent() - start) seconds to generate deviceUUID", level: .debug, category: .general)
return deviceUUID!
return deviceUUID
}

private func primaryInitialization(with configutaion: MBConfiguration) {
Expand All @@ -133,7 +133,7 @@ final class CoreController {
Logger.common(message: "Unable to find deviceUUID in persistenceStorage", level: .error, category: .general)
return
}

if configValidation.changedState != .none {
Logger.common(message: "Mindbox Configuration changed", level: .info, category: .general)
install(
Expand Down Expand Up @@ -272,13 +272,13 @@ final class CoreController {
}
}
}

let timer = DI.injectOrFail(TimerManager.self)
timer.configurate(trackEvery: 20 * 60) {
Logger.common(message: "Scheduled Time tracker started")
sessionManager.trackForeground()
}

timer.setupTimer()
}
}
Loading