ارفع راسك فوق انته سوري حر ... :green_heart::green_heart:

Skip to content
Snippets Groups Projects
Commit d7936ee8 authored by George's avatar George
Browse files

temp

parent a38617de
Branches
No related tags found
No related merge requests found
Showing
with 431 additions and 120 deletions
......@@ -15,6 +15,8 @@
530080392AF15CE000A05E04 /* TransactionsViewController.xib in Resources */ = {isa = PBXBuildFile; fileRef = 530080372AF15CE000A05E04 /* TransactionsViewController.xib */; };
5300803D2AF1803100A05E04 /* TransactionTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5300803B2AF1803100A05E04 /* TransactionTableViewCell.swift */; };
5300803E2AF1803100A05E04 /* TransactionTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 5300803C2AF1803100A05E04 /* TransactionTableViewCell.xib */; };
5300F2C22AF3BC4E003F2C5F /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 5300F2C12AF3BC4E003F2C5F /* FirebaseAnalytics */; };
5300F2C42AF3BC4E003F2C5F /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 5300F2C32AF3BC4E003F2C5F /* FirebaseMessaging */; };
53157EC32AEE3FF9003C9B6A /* API+Auth.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53157EC22AEE3FF9003C9B6A /* API+Auth.swift */; };
53157EC62AEE4076003C9B6A /* UserModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53157EC52AEE4076003C9B6A /* UserModel.swift */; };
53157EC82AEE4D6E003C9B6A /* SignInModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53157EC72AEE4D6E003C9B6A /* SignInModel.swift */; };
......@@ -107,6 +109,9 @@
53EBC6072AF1A43900601AA7 /* SettingsSwitchTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53EBC6052AF1A43900601AA7 /* SettingsSwitchTableViewCell.xib */; };
53EBC60B2AF1A5C200601AA7 /* SettingsSegmentTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53EBC6092AF1A5C200601AA7 /* SettingsSegmentTableViewCell.swift */; };
53EBC60C2AF1A5C200601AA7 /* SettingsSegmentTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53EBC60A2AF1A5C200601AA7 /* SettingsSegmentTableViewCell.xib */; };
53EBC6102AF3960800601AA7 /* SettingsLogoutTableViewCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53EBC60E2AF3960800601AA7 /* SettingsLogoutTableViewCell.swift */; };
53EBC6112AF3960800601AA7 /* SettingsLogoutTableViewCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 53EBC60F2AF3960800601AA7 /* SettingsLogoutTableViewCell.xib */; };
53EBC6132AF3A1D100601AA7 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 53EBC6122AF3A1D100601AA7 /* GoogleService-Info.plist */; };
53F10AE22AF05C57004D0529 /* KNNavigationController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F10AE12AF05C57004D0529 /* KNNavigationController.swift */; };
53F10AE42AF05E68004D0529 /* AuthenticationStep.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F10AE32AF05E68004D0529 /* AuthenticationStep.swift */; };
53F10AE62AF05E97004D0529 /* AuthenticationCoordinator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 53F10AE52AF05E97004D0529 /* AuthenticationCoordinator.swift */; };
......@@ -125,8 +130,6 @@
5E716A2B1F63A60800A2DBC3 /* ProtocolFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A2A1F63A60800A2DBC3 /* ProtocolFormatter.swift */; };
5E716A2E1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A2D1F63A7A200A2DBC3 /* ProtocolFormatterTests.swift */; };
5E716A301F63A9F600A2DBC3 /* RequestManagerTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5E716A2F1F63A9F600A2DBC3 /* RequestManagerTests.swift */; };
5EE3CA342998948F002C86E4 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 5EE3CA332998948F002C86E4 /* FirebaseAnalytics */; };
5EE3CA362998948F002C86E4 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 5EE3CA352998948F002C86E4 /* FirebaseCrashlytics */; };
5EE3CA39299894B9002C86E4 /* InAppSettingsKit in Frameworks */ = {isa = PBXBuildFile; productRef = 5EE3CA38299894B9002C86E4 /* InAppSettingsKit */; };
CB4197931F674A3E008F301C /* DatabaseHelper.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4197921F674A3E008F301C /* DatabaseHelper.swift */; };
CB4197951F675518008F301C /* CoreDataTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = CB4197941F675518008F301C /* CoreDataTests.swift */; };
......@@ -272,6 +275,9 @@
53EBC6052AF1A43900601AA7 /* SettingsSwitchTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsSwitchTableViewCell.xib; sourceTree = "<group>"; };
53EBC6092AF1A5C200601AA7 /* SettingsSegmentTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsSegmentTableViewCell.swift; sourceTree = "<group>"; };
53EBC60A2AF1A5C200601AA7 /* SettingsSegmentTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsSegmentTableViewCell.xib; sourceTree = "<group>"; };
53EBC60E2AF3960800601AA7 /* SettingsLogoutTableViewCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SettingsLogoutTableViewCell.swift; sourceTree = "<group>"; };
53EBC60F2AF3960800601AA7 /* SettingsLogoutTableViewCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = SettingsLogoutTableViewCell.xib; sourceTree = "<group>"; };
53EBC6122AF3A1D100601AA7 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = "<group>"; };
53F10AE12AF05C57004D0529 /* KNNavigationController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KNNavigationController.swift; sourceTree = "<group>"; };
53F10AE32AF05E68004D0529 /* AuthenticationStep.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationStep.swift; sourceTree = "<group>"; };
53F10AE52AF05E97004D0529 /* AuthenticationCoordinator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticationCoordinator.swift; sourceTree = "<group>"; };
......@@ -351,14 +357,14 @@
files = (
CBDEEB8A1B8EB6A4006BC126 /* SystemConfiguration.framework in Frameworks */,
53D62E432AEFA4DC00C80BAC /* Lottie in Frameworks */,
5300F2C42AF3BC4E003F2C5F /* FirebaseMessaging in Frameworks */,
5326839F2AE9489C00A364C0 /* Reachability in Frameworks */,
CBCE82EF1B8D253600A7318B /* CoreData.framework in Frameworks */,
5EE3CA342998948F002C86E4 /* FirebaseAnalytics in Frameworks */,
5300F2C22AF3BC4E003F2C5F /* FirebaseAnalytics in Frameworks */,
CEDB048717ED50C1000E7EDF /* CoreLocation.framework in Frameworks */,
CED4879917DB1DF4007FCF57 /* MessageUI.framework in Frameworks */,
532683812AE923DE00A364C0 /* Alamofire in Frameworks */,
CED4871C17DB1BF6007FCF57 /* UIKit.framework in Frameworks */,
5EE3CA362998948F002C86E4 /* FirebaseCrashlytics in Frameworks */,
532683C82AEA631800A364C0 /* IQKeyboardManagerSwift in Frameworks */,
5EE3CA39299894B9002C86E4 /* InAppSettingsKit in Frameworks */,
CED4871E17DB1BF6007FCF57 /* Foundation.framework in Frameworks */,
......@@ -660,6 +666,7 @@
53EBC5FB2AF199E200601AA7 /* Cells */ = {
isa = PBXGroup;
children = (
53EBC60D2AF395EA00601AA7 /* SettingsLogoutTableViewCell */,
53EBC6082AF1A5A800601AA7 /* SettingsSegmentTableViewCell */,
53EBC6032AF1A41C00601AA7 /* SettingsSwitchTableViewCell */,
53EBC6022AF1A41000601AA7 /* SettingsTextTableViewCell */,
......@@ -694,6 +701,15 @@
path = SettingsSegmentTableViewCell;
sourceTree = "<group>";
};
53EBC60D2AF395EA00601AA7 /* SettingsLogoutTableViewCell */ = {
isa = PBXGroup;
children = (
53EBC60E2AF3960800601AA7 /* SettingsLogoutTableViewCell.swift */,
53EBC60F2AF3960800601AA7 /* SettingsLogoutTableViewCell.xib */,
);
path = SettingsLogoutTableViewCell;
sourceTree = "<group>";
};
53F10AF12AF0F267004D0529 /* MainViewController */ = {
isa = PBXGroup;
children = (
......@@ -765,6 +781,7 @@
CED4872217DB1BF6007FCF57 /* Supporting Files */ = {
isa = PBXGroup;
children = (
53EBC6122AF3A1D100601AA7 /* GoogleService-Info.plist */,
5326833E2AE91A6200A364C0 /* Fonts */,
CED4872317DB1BF6007FCF57 /* TraccarClient-Info.plist */,
5370B46F2AEFB8A900AE08CC /* splash.json */,
......@@ -814,13 +831,13 @@
);
name = TraccarClient;
packageProductDependencies = (
5EE3CA332998948F002C86E4 /* FirebaseAnalytics */,
5EE3CA352998948F002C86E4 /* FirebaseCrashlytics */,
5EE3CA38299894B9002C86E4 /* InAppSettingsKit */,
532683802AE923DE00A364C0 /* Alamofire */,
5326839E2AE9489C00A364C0 /* Reachability */,
532683C72AEA631800A364C0 /* IQKeyboardManagerSwift */,
53D62E422AEFA4DC00C80BAC /* Lottie */,
5300F2C12AF3BC4E003F2C5F /* FirebaseAnalytics */,
5300F2C32AF3BC4E003F2C5F /* FirebaseMessaging */,
);
productName = TraccarClient;
productReference = CED4871817DB1BF6007FCF57 /* TraccarClient.app */;
......@@ -885,12 +902,12 @@
);
mainGroup = CED4870F17DB1BF6007FCF57;
packageReferences = (
5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
5EE3CA37299894B9002C86E4 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */,
5326837F2AE923DE00A364C0 /* XCRemoteSwiftPackageReference "Alamofire" */,
5326839D2AE9489C00A364C0 /* XCRemoteSwiftPackageReference "Reachability" */,
532683C62AEA631800A364C0 /* XCRemoteSwiftPackageReference "IQKeyboardManager" */,
53D62E412AEFA4DC00C80BAC /* XCRemoteSwiftPackageReference "lottie-ios" */,
5300F2C02AF3BC4E003F2C5F /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */,
);
productRefGroup = CED4871917DB1BF6007FCF57 /* Products */;
projectDirPath = "";
......@@ -935,6 +952,7 @@
53554AE32AED1B480018BAEE /* KNButtonView.xib in Resources */,
5300803E2AF1803100A05E04 /* TransactionTableViewCell.xib in Resources */,
532683542AE91A6F00A364C0 /* Montserrat-LightItalic.ttf in Resources */,
53EBC6112AF3960800601AA7 /* SettingsLogoutTableViewCell.xib in Resources */,
53F10AF52AF0F306004D0529 /* ConnectViewController.xib in Resources */,
5300802F2AF149D400A05E04 /* SettingsViewController.xib in Resources */,
5326835C2AE91A6F00A364C0 /* Montserrat-ThinItalic.ttf in Resources */,
......@@ -947,6 +965,7 @@
5370B4702AEFB8A900AE08CC /* splash.json in Resources */,
532683512AE91A6F00A364C0 /* Montserrat-ExtraLightItalic.ttf in Resources */,
530080392AF15CE000A05E04 /* TransactionsViewController.xib in Resources */,
53EBC6132AF3A1D100601AA7 /* GoogleService-Info.plist in Resources */,
);
runOnlyForDeploymentPostprocessing = 0;
};
......@@ -996,6 +1015,7 @@
532683B52AE98FB600A364C0 /* UIString.swift in Sources */,
5326839C2AE9482300A364C0 /* Network+Error.swift in Sources */,
532683AF2AE94C2F00A364C0 /* NSLayoutConstraints.swift in Sources */,
53EBC6102AF3960800601AA7 /* SettingsLogoutTableViewCell.swift in Sources */,
53EBC6062AF1A43900601AA7 /* SettingsSwitchTableViewCell.swift in Sources */,
CB7ED0821F661B4F00A33FCF /* PositionProvider.swift in Sources */,
5300803D2AF1803100A05E04 /* TransactionTableViewCell.swift in Sources */,
......@@ -1206,8 +1226,7 @@
);
MARKETING_VERSION = 7.0;
OTHER_SWIFT_FLAGS = "-D FIREBASE";
PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.traccar.client.TraccarClien;
PRODUCT_BUNDLE_IDENTIFIER = com.nmo.ai.teamss;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_OBJC_BRIDGING_HEADER = "";
......@@ -1376,8 +1395,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 7.0;
PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.traccar.client.TraccarClien;
PRODUCT_BUNDLE_IDENTIFIER = com.nmo.ai.teamss;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_OBJC_BRIDGING_HEADER = "";
......@@ -1409,8 +1427,7 @@
"@executable_path/Frameworks",
);
MARKETING_VERSION = 7.0;
PRODUCT_BUNDLE_IDENTIFIER = "org.traccar.client.$(PRODUCT_NAME:rfc1034identifier)";
"PRODUCT_BUNDLE_IDENTIFIER[sdk=iphoneos*]" = org.traccar.client.TraccarClien;
PRODUCT_BUNDLE_IDENTIFIER = com.nmo.ai.teamss;
PRODUCT_NAME = "$(TARGET_NAME)";
PROVISIONING_PROFILE = "";
SWIFT_OBJC_BRIDGING_HEADER = "";
......@@ -1535,6 +1552,14 @@
/* End XCConfigurationList section */
/* Begin XCRemoteSwiftPackageReference section */
5300F2C02AF3BC4E003F2C5F /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/firebase/firebase-ios-sdk";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 10.17.0;
};
};
5326837F2AE923DE00A364C0 /* XCRemoteSwiftPackageReference "Alamofire" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/Alamofire/Alamofire";
......@@ -1567,14 +1592,6 @@
minimumVersion = 4.3.3;
};
};
5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/firebase/firebase-ios-sdk";
requirement = {
kind = upToNextMajorVersion;
minimumVersion = 9.0.0;
};
};
5EE3CA37299894B9002C86E4 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */ = {
isa = XCRemoteSwiftPackageReference;
repositoryURL = "https://github.com/futuretap/InAppSettingsKit.git";
......@@ -1586,6 +1603,16 @@
/* End XCRemoteSwiftPackageReference section */
/* Begin XCSwiftPackageProductDependency section */
5300F2C12AF3BC4E003F2C5F /* FirebaseAnalytics */ = {
isa = XCSwiftPackageProductDependency;
package = 5300F2C02AF3BC4E003F2C5F /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseAnalytics;
};
5300F2C32AF3BC4E003F2C5F /* FirebaseMessaging */ = {
isa = XCSwiftPackageProductDependency;
package = 5300F2C02AF3BC4E003F2C5F /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseMessaging;
};
532683802AE923DE00A364C0 /* Alamofire */ = {
isa = XCSwiftPackageProductDependency;
package = 5326837F2AE923DE00A364C0 /* XCRemoteSwiftPackageReference "Alamofire" */;
......@@ -1606,16 +1633,6 @@
package = 53D62E412AEFA4DC00C80BAC /* XCRemoteSwiftPackageReference "lottie-ios" */;
productName = Lottie;
};
5EE3CA332998948F002C86E4 /* FirebaseAnalytics */ = {
isa = XCSwiftPackageProductDependency;
package = 5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseAnalytics;
};
5EE3CA352998948F002C86E4 /* FirebaseCrashlytics */ = {
isa = XCSwiftPackageProductDependency;
package = 5EE3CA322998948F002C86E4 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */;
productName = FirebaseCrashlytics;
};
5EE3CA38299894B9002C86E4 /* InAppSettingsKit */ = {
isa = XCSwiftPackageProductDependency;
package = 5EE3CA37299894B9002C86E4 /* XCRemoteSwiftPackageReference "InAppSettingsKit" */;
......
{
"pins" : [
{
"identity" : "abseil-cpp-swiftpm",
"identity" : "abseil-cpp-binary",
"kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/abseil-cpp-SwiftPM.git",
"location" : "https://github.com/google/abseil-cpp-binary.git",
"state" : {
"revision" : "583de9bd60f66b40e78d08599cc92036c2e7e4e1",
"version" : "0.20220203.2"
"revision" : "bfc0b6f81adc06ce5121eb23f628473638d67c5c",
"version" : "1.2022062300.0"
}
},
{
......@@ -18,22 +18,13 @@
"version" : "5.8.0"
}
},
{
"identity" : "boringssl-swiftpm",
"kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/boringssl-SwiftPM.git",
"state" : {
"revision" : "dd3eda2b05a3f459fc3073695ad1b28659066eab",
"version" : "0.9.1"
}
},
{
"identity" : "firebase-ios-sdk",
"kind" : "remoteSourceControl",
"location" : "https://github.com/firebase/firebase-ios-sdk",
"state" : {
"revision" : "7e80c25b51c2ffa238879b07fbfc5baa54bb3050",
"version" : "9.6.0"
"revision" : "8872dbd7d947acf757abab933da10e83c1842280",
"version" : "10.17.0"
}
},
{
......@@ -41,8 +32,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleAppMeasurement.git",
"state" : {
"revision" : "c1cfde8067668027b23a42c29d11c246152fe046",
"version" : "9.6.0"
"revision" : "6b332152355c372ace9966d8ee76ed191f97025e",
"version" : "10.17.0"
}
},
{
......@@ -59,17 +50,17 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/GoogleUtilities.git",
"state" : {
"revision" : "c38ce365d77b04a9a300c31061c5227589e5597b",
"version" : "7.11.5"
"revision" : "1cd556b33550982ec17f80e358253d905e756f0f",
"version" : "7.11.6"
}
},
{
"identity" : "grpc-ios",
"identity" : "grpc-binary",
"kind" : "remoteSourceControl",
"location" : "https://github.com/grpc/grpc-ios.git",
"location" : "https://github.com/google/grpc-binary.git",
"state" : {
"revision" : "8440b914756e0d26d4f4d054a1c1581daedfc5b6",
"version" : "1.44.3-grpc"
"revision" : "a673bc2937fbe886dd1f99c401b01b6d977a9c98",
"version" : "1.49.1"
}
},
{
......@@ -77,8 +68,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/gtm-session-fetcher.git",
"state" : {
"revision" : "5ccda3981422a84186387dbb763ba739178b529c",
"version" : "2.3.0"
"revision" : "d415594121c9e8a4f9d79cecee0965cf35e74dbd",
"version" : "3.1.1"
}
},
{
......@@ -90,6 +81,15 @@
"revision" : "08ab93cd15759eed534b821c2ea789d97a0fdca0"
}
},
{
"identity" : "interop-ios-for-google-sdks",
"kind" : "remoteSourceControl",
"location" : "https://github.com/google/interop-ios-for-google-sdks.git",
"state" : {
"revision" : "2d12673670417654f08f5f90fdd62926dc3a2648",
"version" : "100.0.0"
}
},
{
"identity" : "iqkeyboardmanager",
"kind" : "remoteSourceControl",
......@@ -149,8 +149,8 @@
"kind" : "remoteSourceControl",
"location" : "https://github.com/apple/swift-protobuf.git",
"state" : {
"revision" : "3c54ab05249f59f2c6641dd2920b8358ea9ed127",
"version" : "1.24.0"
"revision" : "07f7f26ded8df9645c072f220378879c4642e063",
"version" : "1.25.1"
}
}
],
......
......@@ -19,5 +19,15 @@ extension NetworkRequest {
completion(result)
}
}
func logout(_ completion: @escaping ResultClosure) {
request(endpoint: endpoint(.logout), method: .post) { result in
if result.success {
SignInModel.clearUserFromUserDefaults()
UserModel.clearUserFromUserDefaults()
DeviceModel.clearUserFromUserDefaults()
}
completion(result)
}
}
}
......@@ -16,7 +16,8 @@
import UIKit
import CoreData
import Firebase
import FirebaseMessaging
import FirebaseCore
import IQKeyboardManagerSwift
@UIApplicationMain
......@@ -30,15 +31,25 @@ class AppDelegate: UIResponder, UIApplicationDelegate, PositionProviderDelegate
var trackingController: TrackingController?
var positionProvider: PositionProvider?
let gcmMessageIDKey = "gcm.Message_ID"
static var instance: AppDelegate {
return UIApplication.shared.delegate as! AppDelegate
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]?) -> Bool {
#if FIREBASE
FirebaseApp.configure()
#endif
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: { _, _ in }
)
application.registerForRemoteNotifications()
IQKeyboardManager.shared.enable = true
IQKeyboardManager.shared.shouldResignOnTouchOutside = true
IQKeyboardManager.shared.previousNextDisplayMode = .alwaysShow
......@@ -54,6 +65,8 @@ class AppDelegate: UIResponder, UIApplicationDelegate, PositionProviderDelegate
registerDefaultsFromSettingsBundle()
Messaging.messaging().delegate = self
migrateLegacyDefaults()
let modelUrl = Bundle.main.url(forResource: "TraccarClient", withExtension: "momd")
......@@ -200,3 +213,71 @@ class AppDelegate: UIResponder, UIApplicationDelegate, PositionProviderDelegate
}
}
// MARK: - UNUserNotificationCenterDelegate
extension AppDelegate: UNUserNotificationCenterDelegate {
// Receive displayed notifications for iOS 10 devices.
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification) async
-> UNNotificationPresentationOptions {
let userInfo = notification.request.content.userInfo
// With swizzling disabled you must let Messaging know about the message, for Analytics
// Messaging.messaging().appDidReceiveMessage(userInfo)
// ...
// Print full message.
print(userInfo)
// Change this to your preferred presentation option
return [[.alert, .sound]]
}
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse) async {
let userInfo = response.notification.request.content.userInfo
// ...
// With swizzling disabled you must let Messaging know about the message, for Analytics
// Messaging.messaging().appDidReceiveMessage(userInfo)
// Print full message.
print(userInfo)
}
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable: Any]) async
-> UIBackgroundFetchResult {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// With swizzling disabled you must let Messaging know about the message, for Analytics
// Messaging.messaging().appDidReceiveMessage(userInfo)
// Print message ID.
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: \(messageID)")
}
// Print full message.
print(userInfo)
return UIBackgroundFetchResult.newData
}
}
// MARK: - MessagingDelegate
extension AppDelegate: MessagingDelegate {
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("Firebase registration token: \(String(describing: fcmToken))")
let dataDict: [String: String] = ["token": fcmToken ?? ""]
NotificationCenter.default.post(
name: Notification.Name("FCMToken"),
object: nil,
userInfo: dataDict
)
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>API_KEY</key>
<string>AIzaSyCwlmc957R6tpX0vrbVFgKWfmrFytU2foI</string>
<key>GCM_SENDER_ID</key>
<string>139516981582</string>
<key>PLIST_VERSION</key>
<string>1</string>
<key>BUNDLE_ID</key>
<string>com.nmo.ai.teams</string>
<key>PROJECT_ID</key>
<string>nmo-teams</string>
<key>STORAGE_BUCKET</key>
<string>nmo-teams.appspot.com</string>
<key>IS_ADS_ENABLED</key>
<false></false>
<key>IS_ANALYTICS_ENABLED</key>
<false></false>
<key>IS_APPINVITE_ENABLED</key>
<true></true>
<key>IS_GCM_ENABLED</key>
<true></true>
<key>IS_SIGNIN_ENABLED</key>
<true></true>
<key>GOOGLE_APP_ID</key>
<string>1:139516981582:ios:eb22608153a000308e6e1f</string>
</dict>
</plist>
\ No newline at end of file
......@@ -30,6 +30,7 @@ enum Endpoint: String, CaseIterable {
case all
case signin = "fleet-login"
case logout = "logout"
// ///////////////
// get endpoint with resource
......
......@@ -30,8 +30,8 @@ final class NetworkRequest: NSObject {
// MARK: - HTTP Headers
var headers : HTTPHeaders {
var _headers: HTTPHeaders = [:]
_headers["Caontent-Type"] = "application/json"
_headers["Content-Type"] = "application/json"
_headers["Accept"] = "application/json"
_headers["Accept-Language"] = "en"
_headers["X-App-Client"] = "ios"
_headers["x-Company"] = "\(UserDefaults.standard.string(forKey: "xcompany") ?? "")"
......
//
// SettingsLogoutTableViewCell.swift
// TraccarClient
//
// Created by George Makhoul on 02/11/2023.
// Copyright © 2023 Traccar. All rights reserved.
//
import UIKit
protocol SettingsLogoutTableViewCellDelegate {
func logout()
}
class SettingsLogoutTableViewCell: KNTableViewCell {
// MARK: - Outlets
@IBOutlet weak var titleLabel: UILabel!
// MARK: - Properties
var delegate: SettingsLogoutTableViewCellDelegate?
// MARK: - LifeCycle
override func awakeFromNib() {
super.awakeFromNib()
titleLabel.set(text: "", color: .main, font: .semibold(16))
}
@IBAction func logoutTapped(_ sender: UIButton) {
delegate?.logout()
}
func set(title: String) {
titleLabel.set(text: title)
}
}
<?xml version="1.0" encoding="UTF-8"?>
<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="22155" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
<device id="retina6_12" orientation="portrait" appearance="light"/>
<dependencies>
<deployment identifier="iOS"/>
<plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="22131"/>
<capability name="Safe area layout guides" minToolsVersion="9.0"/>
<capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
</dependencies>
<objects>
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
<placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
<tableViewCell contentMode="scaleToFill" selectionStyle="default" indentationWidth="10" rowHeight="51" id="KGk-i7-Jjw" customClass="SettingsLogoutTableViewCell" customModule="TraccarClient" customModuleProvider="target">
<rect key="frame" x="0.0" y="0.0" width="356" height="51"/>
<autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
<tableViewCellContentView key="contentView" opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" tableViewCell="KGk-i7-Jjw" id="H2p-sc-9uM">
<rect key="frame" x="0.0" y="0.0" width="356" height="51"/>
<autoresizingMask key="autoresizingMask"/>
<subviews>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="qgN-Rg-e6W">
<rect key="frame" x="16" y="12" width="324" height="27"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<button opaque="NO" contentMode="scaleToFill" contentHorizontalAlignment="center" contentVerticalAlignment="center" buttonType="system" lineBreakMode="middleTruncation" translatesAutoresizingMaskIntoConstraints="NO" id="dbK-zb-xEj">
<rect key="frame" x="0.0" y="0.0" width="356" height="51"/>
<inset key="imageEdgeInsets" minX="0.0" minY="0.0" maxX="2.2250738585072014e-308" maxY="0.0"/>
<connections>
<action selector="logoutTapped:" destination="KGk-i7-Jjw" eventType="touchUpInside" id="fQZ-53-6gm"/>
</connections>
</button>
</subviews>
<constraints>
<constraint firstItem="qgN-Rg-e6W" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" constant="12" id="2FF-OV-d4W"/>
<constraint firstItem="qgN-Rg-e6W" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" constant="16" id="REK-JA-tCK"/>
<constraint firstItem="dbK-zb-xEj" firstAttribute="leading" secondItem="H2p-sc-9uM" secondAttribute="leading" id="RZd-uO-PNS"/>
<constraint firstAttribute="trailing" secondItem="qgN-Rg-e6W" secondAttribute="trailing" constant="16" id="a8S-Fs-n0R"/>
<constraint firstItem="dbK-zb-xEj" firstAttribute="top" secondItem="H2p-sc-9uM" secondAttribute="top" id="ihi-jr-XmB"/>
<constraint firstAttribute="trailing" secondItem="dbK-zb-xEj" secondAttribute="trailing" id="kHe-Qf-aGN"/>
<constraint firstAttribute="bottom" secondItem="qgN-Rg-e6W" secondAttribute="bottom" constant="12" id="sip-vP-MpV"/>
<constraint firstAttribute="bottom" secondItem="dbK-zb-xEj" secondAttribute="bottom" id="ska-SV-G3f"/>
</constraints>
</tableViewCellContentView>
<viewLayoutGuide key="safeArea" id="njF-e1-oar"/>
<connections>
<outlet property="titleLabel" destination="qgN-Rg-e6W" id="hys-mj-Sbt"/>
</connections>
<point key="canvasLocation" x="166.41221374045801" y="22.183098591549296"/>
</tableViewCell>
</objects>
</document>
......@@ -8,7 +8,7 @@
import UIKit
protocol SettingsSegmentTableViewCellDelegate {
func didUpdateSegment(value: String)
func didUpdateSegment(model: DefaultsModel)
}
class SettingsSegmentTableViewCell: KNTableViewCell {
......@@ -40,16 +40,18 @@ class SettingsSegmentTableViewCell: KNTableViewCell {
@objc private func segmentChanged(_ sender: UISegmentedControl) {
switch sender.selectedSegmentIndex {
case 0:
defaults.set("low", forKey: model?.key ?? "")
model?.value = "low"
case 1:
defaults.set("medium", forKey: model?.key ?? "")
model?.value = "medium"
case 2:
defaults.set("high", forKey: model?.key ?? "")
model?.value = "high"
default:
defaults.set("medium", forKey: model?.key ?? "")
model?.value = "medium"
}
delegate?.didUpdateSegment(value: model?.title ?? "")
delegate?.didUpdateSegment(model: model ?? DefaultsModel())
}
func set(defaultValue: DefaultsModel, index: Int) {
......
......@@ -9,7 +9,7 @@
import UIKit
protocol SettingsSwitchTableViewCellDelegate {
func didUpdateSwitch(value: String)
func didUpdateSwitch(model: DefaultsModel)
}
class SettingsSwitchTableViewCell: KNTableViewCell {
......@@ -35,8 +35,8 @@ class SettingsSwitchTableViewCell: KNTableViewCell {
}
@objc private func switchChanged(_ sender: UISwitch) {
defaults.set(sender.isOn, forKey: model?.key ?? "")
delegate?.didUpdateSwitch(value: model?.title ?? "")
model?.value = sender.isOn
delegate?.didUpdateSwitch(model: model ?? DefaultsModel())
}
func set(defaultValue: DefaultsModel, index: Int) {
......
......@@ -8,7 +8,7 @@
import UIKit
protocol SettingsTextTableViewCellDelegate {
func didUpdateText(value: String)
func didUpdateText(model: DefaultsModel)
}
class SettingsTextTableViewCell: KNTableViewCell {
......@@ -34,7 +34,7 @@ class SettingsTextTableViewCell: KNTableViewCell {
valueField.textAlignment = .center
valueField.textColor = .black
valueField.font = .semibold(16)
valueField.delegate = self
valueField.addTarget(self, action: #selector(textChanged), for: .editingChanged)
}
func set(defaultValue: DefaultsModel, index: Int) {
......@@ -45,11 +45,8 @@ class SettingsTextTableViewCell: KNTableViewCell {
valueField.text = defaultValue.value as? String ?? ""
valueField.keyboardType = defaultValue.keyboardType
}
}
extension SettingsTextTableViewCell: UITextFieldDelegate {
func textFieldDidEndEditing(_ textField: UITextField) {
defaults.set(textField.text, forKey: model?.key ?? "")
delegate?.didUpdateText(value: model?.title ?? "")
@objc func textChanged(_ sender: UITextField) {
model?.value = sender.text
delegate?.didUpdateText(model: model ?? DefaultsModel())
}
}
......@@ -14,21 +14,16 @@ struct DefaultsModel {
var value: Any?
var key: String = ""
var keyboardType: UIKeyboardType = .default
var type: Types
init(title: String, value: Any, keyboardType: UIKeyboardType, type: Types, key: String) {
init() {
}
init(title: String, value: Any, keyboardType: UIKeyboardType, key: String) {
self.title = title
self.value = value
self.keyboardType = keyboardType
self.type = type
self.key = key
}
}
enum Types: String {
case integer
case double
case boolean
case string
}
......@@ -15,11 +15,31 @@ final class SettingsViewController: KNViewController {
@IBOutlet weak var tableView: UITableView!
// MARK: - Properties
private var textDefaults: [DefaultsModel] = [DefaultsModel(title: "Frequency", value: UserDefaults.standard.string(forKey: "frequency_preference") ?? "", keyboardType: .numberPad, type: .integer, key: "frequency_preference"),
DefaultsModel(title: "Distance", value: UserDefaults.standard.string(forKey: "distance_preference") ?? "", keyboardType: .numberPad, type: .double, key: "distance_preference"),
DefaultsModel(title: "Angle", value: UserDefaults.standard.string(forKey: "angle_preference") ?? "", keyboardType: .numberPad, type: .double, key: "angle_preference")]
private var switchDefaults: [DefaultsModel] = [DefaultsModel(title: "Offline buffering", value: UserDefaults.standard.bool(forKey: "buffer_preference") , keyboardType: .default, type: .boolean, key: "buffer_preference")]
private var multiChoicesDefaults: [DefaultsModel] = [DefaultsModel(title: "Accuracy", value: UserDefaults.standard.string(forKey: "accuracy_preference") ?? "", keyboardType: .default, type: .string, key: "accuracy_preference")]
private var textDefaults: [DefaultsModel] = [DefaultsModel(title: "Frequency",
value: UserDefaults.standard.string(forKey: "frequency_preference") ?? "",
keyboardType: .numberPad,
key: "frequency_preference"),
DefaultsModel(title: "Distance",
value: UserDefaults.standard.string(forKey: "distance_preference") ?? "",
keyboardType: .numberPad,
key: "distance_preference"),
DefaultsModel(title: "Angle",
value: UserDefaults.standard.string(forKey: "angle_preference") ?? "",
keyboardType: .numberPad,
key: "angle_preference")]
private var switchDefaults: [DefaultsModel] = [DefaultsModel(title: "Offline buffering",
value: UserDefaults.standard.bool(forKey: "buffer_preference") ,
keyboardType: .default,
key: "buffer_preference")]
private var multiChoicesDefaults: [DefaultsModel] = [DefaultsModel(title: "Accuracy",
value: UserDefaults.standard.string(forKey: "accuracy_preference") ?? "",
keyboardType: .default,
key: "accuracy_preference")]
var trackingController: TrackingController?
......@@ -37,7 +57,8 @@ final class SettingsViewController: KNViewController {
tableView.register(cells: [SettingsTextTableViewCell.self,
SettingsSwitchTableViewCell.self,
SettingsSegmentTableViewCell.self])
SettingsSegmentTableViewCell.self,
SettingsLogoutTableViewCell.self])
tableView.allowsSelection = false
tableView.separatorStyle = .none
......@@ -45,19 +66,55 @@ final class SettingsViewController: KNViewController {
}
extension SettingsViewController: CustomHeaderViewDelegate {
func rightButtonTapped(action: RightButtonAction) {
print("")
view.endEditing(true)
alert(confirm: "Yes", destructive: "No", message: "Are you sure you want to change settings?") {
for item in self.textDefaults {
UserDefaults.standard.setValue(item.value, forKey: item.key)
}
for item in self.switchDefaults {
UserDefaults.standard.setValue(item.value, forKey: item.key)
}
for item in self.multiChoicesDefaults {
UserDefaults.standard.setValue(item.value, forKey: item.key)
}
if AppDelegate.instance.trackingController != nil {
AppDelegate.instance.trackingController = TrackingController()
AppDelegate.instance.trackingController?.start()
}
self.dismiss(animated: true)
self.navigationController?.popViewController(animated: true)
}
}
func leftButtonTapped(action: LeftButtonAction) {
self.navigationController?.popViewController(animated: true)
}
func logoutRequest() {
let spinner = spin()
api.logout { result in
spinner.stop()
if result.success {
if let navigation = self.navigationController {
UserModel.clearUserFromUserDefaults()
DeviceModel.clearUserFromUserDefaults()
SignInModel.clearUserFromUserDefaults()
let coordinator = AuthenticationCoordinator(navigationController: navigation)
coordinator.step = .signin
coordinator.start()
}
} else {
ok(result)
}
}
}
}
// MARK: - UITableViewDelegate
extension SettingsViewController: UITableViewDelegate, UITableViewDataSource {
func numberOfSections(in tableView: UITableView) -> Int {
3
4
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
......@@ -68,6 +125,8 @@ extension SettingsViewController: UITableViewDelegate, UITableViewDataSource {
return multiChoicesDefaults.count
case 2:
return switchDefaults.count
case 3:
return 1
default:
return 0
}
......@@ -93,6 +152,12 @@ extension SettingsViewController: UITableViewDelegate, UITableViewDataSource {
cell.delegate = self
return cell
}
if indexPath.section == 3 {
let cell = tableView.dequeue(withCell: SettingsLogoutTableViewCell.self)
cell.set(title: "Logout")
cell.delegate = self
return cell
}
return UITableViewCell()
}
......@@ -105,27 +170,37 @@ extension SettingsViewController: UITableViewDelegate, UITableViewDataSource {
extension SettingsViewController: SettingsTextTableViewCellDelegate,
SettingsSwitchTableViewCellDelegate,
SettingsSegmentTableViewCellDelegate {
func didUpdateText(value: String) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
TransactionsViewController.addMessage(NSLocalizedString("\(value) changed", comment: ""))
AppDelegate.instance.trackingController = TrackingController()
AppDelegate.instance.trackingController?.start()
func didUpdateText(model: DefaultsModel) {
for (index, item) in textDefaults.enumerated() {
if item.key == model.key {
textDefaults[index].value = model.value
}
}
}
func didUpdateSwitch(value: String) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
TransactionsViewController.addMessage(NSLocalizedString("\(value) changed", comment: ""))
AppDelegate.instance.trackingController = TrackingController()
AppDelegate.instance.trackingController?.start()
func didUpdateSwitch(model: DefaultsModel) {
for (index, item) in switchDefaults.enumerated() {
if item.key == model.key {
switchDefaults[index].value = model.value
}
}
}
func didUpdateSegment(value: String) {
DispatchQueue.main.asyncAfter(deadline: .now() + 0.5) {
TransactionsViewController.addMessage(NSLocalizedString("\(value) changed", comment: ""))
AppDelegate.instance.trackingController = TrackingController()
AppDelegate.instance.trackingController?.start()
func didUpdateSegment(model: DefaultsModel) {
for (index, item) in multiChoicesDefaults.enumerated() {
if item.key == model.key {
multiChoicesDefaults[index].value = model.value
}
}
}
}
// MARK: - SettingsLogoutTableViewCellDelegate
extension SettingsViewController: SettingsLogoutTableViewCellDelegate {
func logout() {
alert(confirm: "Yes", destructive: "No", message: "Are you sure you want to logout?") {
self.dismiss(animated: true)
self.logoutRequest()
}
}
}
......@@ -54,9 +54,6 @@ final class SignInModel: KNObject {
class func clearUserFromUserDefaults() {
let ud = UserDefaults.standard
ud.removeObject(forKey: Keys.User.access_token)
// ud.removeObject(forKey: Keys.User.user)
// ud.removeObject(forKey: Keys.User.device)
}
}
......@@ -22,8 +22,6 @@
<string>????</string>
<key>CFBundleVersion</key>
<string>$(CURRENT_PROJECT_VERSION)</string>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>LSRequiresIPhoneOS</key>
<true/>
<key>NSAppTransportSecurity</key>
......@@ -81,8 +79,13 @@
</array>
<key>UIBackgroundModes</key>
<array>
<string>fetch</string>
<string>location</string>
<string>processing</string>
<string>remote-notification</string>
</array>
<key>UILaunchStoryboardName</key>
<string>LaunchScreen</string>
<key>UIMainStoryboardFile</key>
<string>MainStoryboard</string>
<key>UIMainStoryboardFile~ipad</key>
......
......@@ -11,6 +11,7 @@ import UIKit
class TransactionsViewController: KNViewController {
// MARK: - Outlets
@IBOutlet weak var customHeaderView: CustomHeaderView!
@IBOutlet weak var noDataFoundLabel: UILabel!
@IBOutlet weak var tableView: UITableView!
// MARK: - Properties
......@@ -22,10 +23,13 @@ class TransactionsViewController: KNViewController {
// MARK: - LifeCycle
override func viewDidLoad() {
super.viewDidLoad()
noDataFoundLabel.set(text: "No Transactions to display yet", color: .main, font: .semibold(16))
customHeaderView.set(type: .status, delegate: self)
setupTableView()
}
private func setupTableView() {
tableView.delegate = self
tableView.dataSource = self
......@@ -58,6 +62,11 @@ class TransactionsViewController: KNViewController {
transactionViewController?.tableView.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
noDataFoundLabel.isHidden = !TransactionsViewController.messages.isEmpty
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
TransactionsViewController.transactionViewController = self
......
......@@ -12,6 +12,7 @@
<placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner" customClass="TransactionsViewController" customModule="TraccarClient" customModuleProvider="target">
<connections>
<outlet property="customHeaderView" destination="0s1-YY-Zyj" id="omR-dw-Dw1"/>
<outlet property="noDataFoundLabel" destination="LuB-kQ-hLt" id="XuI-eW-vNd"/>
<outlet property="tableView" destination="tpi-c2-WlY" id="Eim-oG-hC1"/>
<outlet property="view" destination="i5M-Pr-FkT" id="sfx-zR-JGt"/>
</connections>
......@@ -28,14 +29,22 @@
<constraint firstAttribute="height" constant="95" id="bvg-rB-2r1"/>
</constraints>
</view>
<label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="LuB-kQ-hLt">
<rect key="frame" x="196.66666666666666" y="426" width="0.0" height="0.0"/>
<fontDescription key="fontDescription" type="system" pointSize="17"/>
<nil key="textColor"/>
<nil key="highlightedColor"/>
</label>
<tableView clipsSubviews="YES" contentMode="scaleToFill" alwaysBounceVertical="YES" style="plain" separatorStyle="default" rowHeight="-1" estimatedRowHeight="-1" sectionHeaderHeight="-1" estimatedSectionHeaderHeight="-1" sectionFooterHeight="-1" estimatedSectionFooterHeight="-1" translatesAutoresizingMaskIntoConstraints="NO" id="tpi-c2-WlY">
<rect key="frame" x="0.0" y="115" width="393" height="737"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<color key="backgroundColor" white="0.0" alpha="0.0" colorSpace="custom" customColorSpace="genericGamma22GrayColorSpace"/>
</tableView>
</subviews>
<viewLayoutGuide key="safeArea" id="fnl-2z-Ty3"/>
<color key="backgroundColor" systemColor="systemBackgroundColor"/>
<constraints>
<constraint firstItem="LuB-kQ-hLt" firstAttribute="centerY" secondItem="i5M-Pr-FkT" secondAttribute="centerY" id="62l-ws-Q0j"/>
<constraint firstItem="LuB-kQ-hLt" firstAttribute="centerX" secondItem="i5M-Pr-FkT" secondAttribute="centerX" id="EnL-QN-SQ1"/>
<constraint firstItem="0s1-YY-Zyj" firstAttribute="top" secondItem="i5M-Pr-FkT" secondAttribute="top" id="FqS-OM-KRi"/>
<constraint firstItem="0s1-YY-Zyj" firstAttribute="leading" secondItem="fnl-2z-Ty3" secondAttribute="leading" id="G2l-9t-DmM"/>
<constraint firstAttribute="bottom" secondItem="tpi-c2-WlY" secondAttribute="bottom" id="M4B-aE-R7O"/>
......
......@@ -96,7 +96,6 @@ final class UserModel: KNObject {
ud.removeObject(forKey: Keys.User.lastName)
ud.removeObject(forKey: Keys.User.email)
ud.removeObject(forKey: Keys.User.avatar)
// ud.removeObject(forKey: Keys.User.cover)
ud.removeObject(forKey: Keys.User.designation_id)
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment