Переглянути джерело

update mab and floating button MODE_VERTICAL_SIDE_TAB

alqindiirsyam 7 місяців тому
батько
коміт
cbf0b32e5a

BIN
AppBuilder/.DS_Store


+ 25 - 25
AppBuilder/AppBuilder.xcodeproj/project.pbxproj

@@ -8,6 +8,7 @@
 
 /* Begin PBXBuildFile section */
 		12960AE02892361000A467DD /* FourthTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 12960ADF2892361000A467DD /* FourthTabViewController.swift */; };
+		1B042B9C5A5E392F94271F20 /* Pods_AppBuilder.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 0719E53065C7EDC744AB34E2 /* Pods_AppBuilder.framework */; };
 		2401CE9A275490DB00B323BB /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2401CE99275490DB00B323BB /* AppDelegate.swift */; };
 		2401CE9C275490DB00B323BB /* SceneDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2401CE9B275490DB00B323BB /* SceneDelegate.swift */; };
 		2401CE9E275490DB00B323BB /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2401CE9D275490DB00B323BB /* ViewController.swift */; };
@@ -18,7 +19,6 @@
 		A42ED92227F30BA200B0FAB7 /* FirstTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42ED92127F30BA200B0FAB7 /* FirstTabViewController.swift */; };
 		A42ED92427F3FC2F00B0FAB7 /* SecondTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42ED92327F3FC2F00B0FAB7 /* SecondTabViewController.swift */; };
 		A42ED92627F439A200B0FAB7 /* ThirdTabViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = A42ED92527F439A200B0FAB7 /* ThirdTabViewController.swift */; };
-		C11E68605CFBACF560F5A037 /* Pods_AppBuilder.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 169CB3023A5723F0238D7145 /* Pods_AppBuilder.framework */; };
 		CD9D59D92BEE1D30008014B4 /* digisales_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9D59CE2BEE1D2F008014B4 /* digisales_icon.png */; };
 		CD9D59DA2BEE1D30008014B4 /* ikn_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9D59CF2BEE1D2F008014B4 /* ikn_icon.png */; };
 		CD9D59DB2BEE1D30008014B4 /* gudeg_icon.png in Resources */ = {isa = PBXBuildFile; fileRef = CD9D59D02BEE1D2F008014B4 /* gudeg_icon.png */; };
@@ -69,8 +69,8 @@
 /* End PBXCopyFilesBuildPhase section */
 
 /* Begin PBXFileReference section */
+		0719E53065C7EDC744AB34E2 /* Pods_AppBuilder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AppBuilder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		12960ADF2892361000A467DD /* FourthTabViewController.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FourthTabViewController.swift; sourceTree = "<group>"; };
-		169CB3023A5723F0238D7145 /* Pods_AppBuilder.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_AppBuilder.framework; sourceTree = BUILT_PRODUCTS_DIR; };
 		2401CE96275490DB00B323BB /* AppBuilder.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = AppBuilder.app; sourceTree = BUILT_PRODUCTS_DIR; };
 		2401CE99275490DB00B323BB /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
 		2401CE9B275490DB00B323BB /* SceneDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SceneDelegate.swift; sourceTree = "<group>"; };
@@ -79,10 +79,12 @@
 		2401CEA2275490E600B323BB /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
 		2401CEA5275490E600B323BB /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = "<group>"; };
 		2401CEA7275490E600B323BB /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		87BCB77207993B1D420B80AD /* Pods-AppBuilder.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBuilder.debug.xcconfig"; path = "Target Support Files/Pods-AppBuilder/Pods-AppBuilder.debug.xcconfig"; sourceTree = "<group>"; };
 		A413B18627EACB20006D16EB /* PrefsUtil.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrefsUtil.swift; sourceTree = "<group>"; };
 		A42ED92127F30BA200B0FAB7 /* FirstTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FirstTabViewController.swift; sourceTree = "<group>"; };
 		A42ED92327F3FC2F00B0FAB7 /* SecondTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecondTabViewController.swift; sourceTree = "<group>"; };
 		A42ED92527F439A200B0FAB7 /* ThirdTabViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ThirdTabViewController.swift; sourceTree = "<group>"; };
+		B4AFB9116A375B2DDA6535EA /* Pods-AppBuilder.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBuilder.release.xcconfig"; path = "Target Support Files/Pods-AppBuilder/Pods-AppBuilder.release.xcconfig"; sourceTree = "<group>"; };
 		CD9D59CE2BEE1D2F008014B4 /* digisales_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = digisales_icon.png; sourceTree = "<group>"; };
 		CD9D59CF2BEE1D2F008014B4 /* ikn_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = ikn_icon.png; sourceTree = "<group>"; };
 		CD9D59D02BEE1D2F008014B4 /* gudeg_icon.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = gudeg_icon.png; sourceTree = "<group>"; };
@@ -97,8 +99,6 @@
 		CDEE3DC929B06E1E00B420E5 /* NotificationService.appex */ = {isa = PBXFileReference; explicitFileType = "wrapper.app-extension"; includeInIndex = 0; path = NotificationService.appex; sourceTree = BUILT_PRODUCTS_DIR; };
 		CDEE3DCB29B06E1E00B420E5 /* NotificationService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NotificationService.swift; sourceTree = "<group>"; };
 		CDEE3DCD29B06E1E00B420E5 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
-		F29D18BB0B372CE96BE45B5F /* Pods-AppBuilder.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBuilder.debug.xcconfig"; path = "Target Support Files/Pods-AppBuilder/Pods-AppBuilder.debug.xcconfig"; sourceTree = "<group>"; };
-		F8112E05F6E80E4B82AE18CE /* Pods-AppBuilder.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-AppBuilder.release.xcconfig"; path = "Target Support Files/Pods-AppBuilder/Pods-AppBuilder.release.xcconfig"; sourceTree = "<group>"; };
 /* End PBXFileReference section */
 
 /* Begin PBXFrameworksBuildPhase section */
@@ -106,7 +106,7 @@
 			isa = PBXFrameworksBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
-				C11E68605CFBACF560F5A037 /* Pods_AppBuilder.framework in Frameworks */,
+				1B042B9C5A5E392F94271F20 /* Pods_AppBuilder.framework in Frameworks */,
 			);
 			runOnlyForDeploymentPostprocessing = 0;
 		};
@@ -127,7 +127,7 @@
 				CDEE3DCA29B06E1E00B420E5 /* NotificationService */,
 				2401CE97275490DB00B323BB /* Products */,
 				6E32BCCF4DE50EE1A90E8AAE /* Pods */,
-				EB3AD86EF0270518F84092C6 /* Frameworks */,
+				8F138C7F9FCE9D00F90F18E0 /* Frameworks */,
 			);
 			sourceTree = "<group>";
 		};
@@ -173,27 +173,27 @@
 		6E32BCCF4DE50EE1A90E8AAE /* Pods */ = {
 			isa = PBXGroup;
 			children = (
-				F29D18BB0B372CE96BE45B5F /* Pods-AppBuilder.debug.xcconfig */,
-				F8112E05F6E80E4B82AE18CE /* Pods-AppBuilder.release.xcconfig */,
+				87BCB77207993B1D420B80AD /* Pods-AppBuilder.debug.xcconfig */,
+				B4AFB9116A375B2DDA6535EA /* Pods-AppBuilder.release.xcconfig */,
 			);
 			path = Pods;
 			sourceTree = "<group>";
 		};
-		CDEE3DCA29B06E1E00B420E5 /* NotificationService */ = {
+		8F138C7F9FCE9D00F90F18E0 /* Frameworks */ = {
 			isa = PBXGroup;
 			children = (
-				CDEE3DCB29B06E1E00B420E5 /* NotificationService.swift */,
-				CDEE3DCD29B06E1E00B420E5 /* Info.plist */,
+				0719E53065C7EDC744AB34E2 /* Pods_AppBuilder.framework */,
 			);
-			path = NotificationService;
+			name = Frameworks;
 			sourceTree = "<group>";
 		};
-		EB3AD86EF0270518F84092C6 /* Frameworks */ = {
+		CDEE3DCA29B06E1E00B420E5 /* NotificationService */ = {
 			isa = PBXGroup;
 			children = (
-				169CB3023A5723F0238D7145 /* Pods_AppBuilder.framework */,
+				CDEE3DCB29B06E1E00B420E5 /* NotificationService.swift */,
+				CDEE3DCD29B06E1E00B420E5 /* Info.plist */,
 			);
-			name = Frameworks;
+			path = NotificationService;
 			sourceTree = "<group>";
 		};
 /* End PBXGroup section */
@@ -203,13 +203,13 @@
 			isa = PBXNativeTarget;
 			buildConfigurationList = 2401CEC0275490E600B323BB /* Build configuration list for PBXNativeTarget "AppBuilder" */;
 			buildPhases = (
-				59A167444AFEF3E3735EB5CB /* [CP] Check Pods Manifest.lock */,
+				3EF53623E2CC0AAC0BE4F88F /* [CP] Check Pods Manifest.lock */,
 				2401CE92275490DB00B323BB /* Sources */,
 				2401CE93275490DB00B323BB /* Frameworks */,
 				2401CE94275490DB00B323BB /* Resources */,
 				247E0A722796969200430E5F /* Embed Frameworks */,
 				CDEE3DD129B06E1E00B420E5 /* Embed Foundation Extensions */,
-				C75656FBE6F44FE88E2B122C /* [CP] Embed Pods Frameworks */,
+				D805B354B862DD13E4C53AC1 /* [CP] Embed Pods Frameworks */,
 			);
 			buildRules = (
 			);
@@ -306,7 +306,7 @@
 /* End PBXResourcesBuildPhase section */
 
 /* Begin PBXShellScriptBuildPhase section */
-		59A167444AFEF3E3735EB5CB /* [CP] Check Pods Manifest.lock */ = {
+		3EF53623E2CC0AAC0BE4F88F /* [CP] Check Pods Manifest.lock */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -328,7 +328,7 @@
 			shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n    # print error to STDERR\n    echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n    exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
 			showEnvVarsInLog = 0;
 		};
-		C75656FBE6F44FE88E2B122C /* [CP] Embed Pods Frameworks */ = {
+		D805B354B862DD13E4C53AC1 /* [CP] Embed Pods Frameworks */ = {
 			isa = PBXShellScriptBuildPhase;
 			buildActionMask = 2147483647;
 			files = (
@@ -519,7 +519,7 @@
 		};
 		2401CEC1275490E600B323BB /* Debug */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = F29D18BB0B372CE96BE45B5F /* Pods-AppBuilder.debug.xcconfig */;
+			baseConfigurationReference = 87BCB77207993B1D420B80AD /* Pods-AppBuilder.debug.xcconfig */;
 			buildSettings = {
 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -541,7 +541,7 @@
 					"@executable_path/Frameworks",
 				);
 				MARKETING_VERSION = 2.2.9;
-				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilders;
+				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilder1;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SWIFT_VERSION = 5.0;
@@ -551,7 +551,7 @@
 		};
 		2401CEC2275490E600B323BB /* Release */ = {
 			isa = XCBuildConfiguration;
-			baseConfigurationReference = F8112E05F6E80E4B82AE18CE /* Pods-AppBuilder.release.xcconfig */;
+			baseConfigurationReference = B4AFB9116A375B2DDA6535EA /* Pods-AppBuilder.release.xcconfig */;
 			buildSettings = {
 				ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES;
 				ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
@@ -573,7 +573,7 @@
 					"@executable_path/Frameworks",
 				);
 				MARKETING_VERSION = 2.2.9;
-				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilders;
+				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilder1;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				PROVISIONING_PROFILE_SPECIFIER = "";
 				SWIFT_VERSION = 5.0;
@@ -600,7 +600,7 @@
 					"@executable_path/../../Frameworks",
 				);
 				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilders.NotificationService;
+				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilder1.NotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				SWIFT_EMIT_LOC_STRINGS = YES;
@@ -628,7 +628,7 @@
 					"@executable_path/../../Frameworks",
 				);
 				MARKETING_VERSION = 1.0;
-				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilders.NotificationService;
+				PRODUCT_BUNDLE_IDENTIFIER = io.newuniverse.AppBuilder1.NotificationService;
 				PRODUCT_NAME = "$(TARGET_NAME)";
 				SKIP_INSTALL = YES;
 				SWIFT_EMIT_LOC_STRINGS = YES;

+ 14 - 14
AppBuilder/AppBuilder/FirstTabViewController.swift

@@ -597,20 +597,20 @@ extension FirstTabViewController: WKUIDelegate, WKNavigationDelegate {
         }
         decisionHandler(.allow)
     }
-    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
-        guard let serverTrust = challenge.protectionSpace.serverTrust else {
-            completionHandler(.cancelAuthenticationChallenge, nil)
-            return
-        }
-        if let serverCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0),
-           let pinnedCertificateHash = getCertificateHash(from: serverCertificate),
-           pinnedCertificateHash == Utils.getCertificatePinningWebview() {
-            let credential = URLCredential(trust: serverTrust)
-            completionHandler(.useCredential, credential) // Certificate matches, proceed
-        } else {
-            completionHandler(.cancelAuthenticationChallenge, nil) // Certificate doesn't match, cancel
-        }
-    }
+//    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
+//        guard let serverTrust = challenge.protectionSpace.serverTrust else {
+//            completionHandler(.cancelAuthenticationChallenge, nil)
+//            return
+//        }
+//        if let serverCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0),
+//           let pinnedCertificateHash = getCertificateHash(from: serverCertificate),
+//           pinnedCertificateHash == Utils.getCertificatePinningWebview() {
+//            let credential = URLCredential(trust: serverTrust)
+//            completionHandler(.useCredential, credential) // Certificate matches, proceed
+//        } else {
+//            completionHandler(.cancelAuthenticationChallenge, nil) // Certificate doesn't match, cancel
+//        }
+//    }
     
     private func getCertificateHash(from certificate: SecCertificate) -> String? {
         guard let publicKey = getPublicKey(from: certificate) else { return nil }

+ 100 - 100
AppBuilder/AppBuilder/Info.plist

@@ -10,91 +10,91 @@
 	<string>$(DEVELOPMENT_LANGUAGE)</string>
 	<key>CFBundleDisplayName</key>
 	<string>AppBuilder</string>
-    <key>CFBundleIcons</key>
-    <dict>
-        <key>CFBundleAlternateIcons</key>
-        <dict>
-            <key>digisales_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>digisales_icon</string>
-                </array>
-            </dict>
-            <key>nu_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>nu_icon</string>
-                </array>
-            </dict>
-            <key>ikn_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>ikn_icon</string>
-                </array>
-            </dict>
-            <key>diginets_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>diginets_icon</string>
-                </array>
-            </dict>
-            <key>bi_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>bi_icon</string>
-                </array>
-            </dict>
-            <key>nxcook_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>nxcook_icon</string>
-                </array>
-            </dict>
-            <key>nxsport_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>nxsport_icon</string>
-                </array>
-            </dict>
-            <key>bpkh_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>bpkh_icon</string>
-                </array>
-            </dict>
-            <key>disini_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>disini_icon</string>
-                </array>
-            </dict>
-            <key>gudeg_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>gudeg_icon</string>
-                </array>
-            </dict>
-            <key>kmi_icon</key>
-            <dict>
-                <key>CFBundleIconFiles</key>
-                <array>
-                    <string>kmi_icon</string>
-                </array>
-            </dict>
-        </dict>
-    </dict>
 	<key>CFBundleExecutable</key>
 	<string>$(EXECUTABLE_NAME)</string>
+	<key>CFBundleIcons</key>
+	<dict>
+		<key>CFBundleAlternateIcons</key>
+		<dict>
+			<key>bi_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>bi_icon</string>
+				</array>
+			</dict>
+			<key>bpkh_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>bpkh_icon</string>
+				</array>
+			</dict>
+			<key>diginets_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>diginets_icon</string>
+				</array>
+			</dict>
+			<key>digisales_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>digisales_icon</string>
+				</array>
+			</dict>
+			<key>disini_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>disini_icon</string>
+				</array>
+			</dict>
+			<key>gudeg_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>gudeg_icon</string>
+				</array>
+			</dict>
+			<key>ikn_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>ikn_icon</string>
+				</array>
+			</dict>
+			<key>kmi_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>kmi_icon</string>
+				</array>
+			</dict>
+			<key>nu_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>nu_icon</string>
+				</array>
+			</dict>
+			<key>nxcook_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>nxcook_icon</string>
+				</array>
+			</dict>
+			<key>nxsport_icon</key>
+			<dict>
+				<key>CFBundleIconFiles</key>
+				<array>
+					<string>nxsport_icon</string>
+				</array>
+			</dict>
+		</dict>
+	</dict>
 	<key>CFBundleIdentifier</key>
 	<string>$(PRODUCT_BUNDLE_IDENTIFIER)</string>
 	<key>CFBundleInfoDictionaryVersion</key>
@@ -107,18 +107,31 @@
 	<string>$(MARKETING_VERSION)</string>
 	<key>CFBundleVersion</key>
 	<string>$(CURRENT_PROJECT_VERSION)</string>
+	<key>LSApplicationQueriesSchemes</key>
+	<array>
+		<string>whatsapp</string>
+		<string>googlegmail</string>
+		<string>ms-outlook</string>
+		<string>readdle-spark</string>
+		<string>ymail</string>
+	</array>
 	<key>LSRequiresIPhoneOS</key>
 	<true/>
+	<key>NSAppTransportSecurity</key>
+	<dict>
+		<key>NSAllowsArbitraryLoads</key>
+		<true/>
+	</dict>
 	<key>NSCameraUsageDescription</key>
 	<string>Video Call, Conference Room, Content Creation and Live Streaming.</string>
-    <key>NSLocationWhenInUseUsageDescription</key>
-    <string>Access Location For Multiple Login.</string>
-    <key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
-    <string>Access Location For Multiple Login.</string>
 	<key>NSContactsUsageDescription</key>
 	<string>Get File Contact from Local Dictionary for Send Message.</string>
 	<key>NSDocumentsFolderUsageDescription</key>
 	<string>Get File from Local Dictionary for Send Message.</string>
+	<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
+	<string>Access Location For Multiple Login.</string>
+	<key>NSLocationWhenInUseUsageDescription</key>
+	<string>Access Location For Multiple Login.</string>
 	<key>NSMicrophoneUsageDescription</key>
 	<string>VoIP Call, Video Call, Conference Room, and Live Streaming.</string>
 	<key>NSMotionUsageDescription</key>
@@ -129,23 +142,10 @@
 	<string>Get File Photos from Local Dictionary for Send Message and Content Creation.</string>
 	<key>NSSpeechRecognitionUsageDescription</key>
 	<string>Used for speech recognition features.</string>
-    <key>NSAppTransportSecurity</key>
-    <dict>
-    <key>NSAllowsArbitraryLoads</key>
-    <true/>
-    </dict>
 	<key>NSUserActivityTypes</key>
 	<array>
 		<string>INSendMessageIntent</string>
 	</array>
-    <key>LSApplicationQueriesSchemes</key>
-    <array>
-         <string>whatsapp</string>
-         <string>googlegmail</string>
-         <string>ms-outlook</string>
-         <string>readdle-spark</string>
-         <string>ymail</string>
-    </array>
 	<key>UIAppFonts</key>
 	<array>
 		<string>Poppins-Light.ttf</string>

+ 1 - 1
AppBuilder/AppBuilder/PrefsUtil.swift

@@ -17,7 +17,7 @@ class PrefsUtil {
     static let DEFAULT_CPAAS_MODE = CPAAS_MODE_DOCKED
     
     static func getCpaasMode() -> Int {
-        let mode: Int! = SecureUserDefaults.shared.value(forKey: "cpaas_mode")
+        let mode: Int! = SecureUserDefaults.shared.value(forKey: "cpaas_mode") ?? 0
         if(mode != 0) {
             return mode - 1
         }

+ 14 - 14
AppBuilder/AppBuilder/ThirdTabViewController.swift

@@ -606,20 +606,20 @@ extension ThirdTabViewController: WKUIDelegate {
         }
         decisionHandler(.allow)
     }
-    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
-        guard let serverTrust = challenge.protectionSpace.serverTrust else {
-            completionHandler(.cancelAuthenticationChallenge, nil)
-            return
-        }
-        if let serverCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0),
-           let pinnedCertificateHash = getCertificateHash(from: serverCertificate),
-           pinnedCertificateHash == Utils.getCertificatePinningWebview() {
-            let credential = URLCredential(trust: serverTrust)
-            completionHandler(.useCredential, credential) // Certificate matches, proceed
-        } else {
-            completionHandler(.cancelAuthenticationChallenge, nil) // Certificate doesn't match, cancel
-        }
-    }
+//    func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
+//        guard let serverTrust = challenge.protectionSpace.serverTrust else {
+//            completionHandler(.cancelAuthenticationChallenge, nil)
+//            return
+//        }
+//        if let serverCertificate = SecTrustGetCertificateAtIndex(serverTrust, 0),
+//           let pinnedCertificateHash = getCertificateHash(from: serverCertificate),
+//           pinnedCertificateHash == Utils.getCertificatePinningWebview() {
+//            let credential = URLCredential(trust: serverTrust)
+//            completionHandler(.useCredential, credential) // Certificate matches, proceed
+//        } else {
+//            completionHandler(.cancelAuthenticationChallenge, nil) // Certificate doesn't match, cancel
+//        }
+//    }
     
     private func getCertificateHash(from certificate: SecCertificate) -> String? {
         guard let publicKey = getPublicKey(from: certificate) else { return nil }

+ 10 - 8
NexilisLite/NexilisLite/Source/FloatingButton/FloatingButton.swift

@@ -173,9 +173,11 @@ public class FloatingButton: UIView {
         addSubview(scrollView)
         
         if configModeFB == MODE_VERTICAL_SIDE_TAB {
-            let bgImage = resizeImage(image: UIImage(named: "pb_button_background_vtcst", in: Bundle.resourceBundle(for: Nexilis.self), with: nil)!, targetSize: CGSize(width: widthVerticalSideTab, height: heightVerticalSideTab))
-            scrollView.backgroundColor = UIColor.init(patternImage: bgImage)
-            
+            scrollView.backgroundColor = UIColor.white.withAlphaComponent(0.8)
+            scrollView.layer.borderColor = UIColor.gray.cgColor
+            scrollView.layer.borderWidth = 0.2
+            scrollView.layer.cornerRadius = 5.0
+            scrollView.layer.masksToBounds = true
             scrollView.leftAnchor.constraint(equalTo: nexilis_button.rightAnchor).isActive = true
             scrollView.centerYAnchor.constraint(equalTo: nexilis_button.centerYAnchor).isActive = true
             scrollView.widthAnchor.constraint(equalToConstant: widthVerticalSideTab).isActive = true
@@ -214,11 +216,10 @@ public class FloatingButton: UIView {
         scrollView.addSubview(groupView)
 
         if configModeFB == MODE_VERTICAL_SIDE_TAB {
-            groupView.spacing = 10.0
-            groupView.centerYAnchor.constraint(equalTo: scrollView.centerYAnchor).isActive = true
+            groupView.spacing = 20.0
+            groupView.topAnchor.constraint(equalTo: scrollView.topAnchor, constant: 10).isActive = true
+            groupView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor, constant: -10).isActive = true
             groupView.centerXAnchor.constraint(equalTo: scrollView.centerXAnchor).isActive = true
-            groupView.heightAnchor.constraint(equalToConstant: heightVerticalSideTab - 20).isActive = true
-            groupView.widthAnchor.constraint(equalToConstant: 30).isActive = true
         } else if configModeFB == MODE_HORIZONTAL_SIDE_TAB {
             groupView.leftAnchor.constraint(equalTo: scrollView.leftAnchor).isActive = true
             groupView.rightAnchor.constraint(equalTo: scrollView.rightAnchor).isActive = true
@@ -407,7 +408,8 @@ public class FloatingButton: UIView {
                                     newButton.widthAnchor.constraint(equalToConstant: defaultWidthHeightMenuFB).isActive = true
                                     newButton.heightAnchor.constraint(equalToConstant: defaultWidthHeightMenuFB).isActive = true
                                 } else if mode == MODE_VERTICAL_SIDE_TAB {
-                                    newButton.imageView?.contentMode = .scaleAspectFit
+                                    newButton.widthAnchor.constraint(equalToConstant: 30).isActive = true
+                                    newButton.heightAnchor.constraint(equalToConstant: 25).isActive = true
                                 } else {
                                     newButton.heightAnchor.constraint(equalToConstant: defaultWidthHeightMenuFB).isActive = true
                                 }