Commit 2ccbdddd authored by shigemi miura's avatar shigemi miura

Merge origin/feature-gps2 into develop

parents 13ed1e3f f89be70e
...@@ -88,6 +88,9 @@ ...@@ -88,6 +88,9 @@
D52D213A2AEBAC0500324D58 /* HttpRequestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21392AEBAC0500324D58 /* HttpRequestType.swift */; }; D52D213A2AEBAC0500324D58 /* HttpRequestType.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21392AEBAC0500324D58 /* HttpRequestType.swift */; };
D52D213F2AEBB7D700324D58 /* RegisteredEca.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */; }; D52D213F2AEBB7D700324D58 /* RegisteredEca.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */; };
D52D21412AEDE18F00324D58 /* EcaCoordinatesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */; }; D52D21412AEDE18F00324D58 /* EcaCoordinatesTable.swift in Sources */ = {isa = PBXBuildFile; fileRef = D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */; };
D5384AFC2B306CEF006228C6 /* TermsView.html in Resources */ = {isa = PBXBuildFile; fileRef = D5384AFB2B306CEF006228C6 /* TermsView.html */; };
D5384AFE2B3121F2006228C6 /* PrivacyView.html in Resources */ = {isa = PBXBuildFile; fileRef = D5384AFD2B3121F2006228C6 /* PrivacyView.html */; };
D5384B012B312F2D006228C6 /* MenuLocalHtmlView.swift in Sources */ = {isa = PBXBuildFile; fileRef = D5384B002B312F2D006228C6 /* MenuLocalHtmlView.swift */; };
D545FC742B09C74300F206D0 /* AlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545FC732B09C74300F206D0 /* AlertManager.swift */; }; D545FC742B09C74300F206D0 /* AlertManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545FC732B09C74300F206D0 /* AlertManager.swift */; };
D545FC762B09C81300F206D0 /* PushNotificationTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545FC752B09C81300F206D0 /* PushNotificationTypes.swift */; }; D545FC762B09C81300F206D0 /* PushNotificationTypes.swift in Sources */ = {isa = PBXBuildFile; fileRef = D545FC752B09C81300F206D0 /* PushNotificationTypes.swift */; };
D55135202B15B030007B66B1 /* SetEcaArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = D551351F2B15B030007B66B1 /* SetEcaArea.swift */; }; D55135202B15B030007B66B1 /* SetEcaArea.swift in Sources */ = {isa = PBXBuildFile; fileRef = D551351F2B15B030007B66B1 /* SetEcaArea.swift */; };
...@@ -240,6 +243,9 @@ ...@@ -240,6 +243,9 @@
D52D21392AEBAC0500324D58 /* HttpRequestType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HttpRequestType.swift; path = Sailassist/Http/HttpRequestType.swift; sourceTree = SOURCE_ROOT; }; D52D21392AEBAC0500324D58 /* HttpRequestType.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = HttpRequestType.swift; path = Sailassist/Http/HttpRequestType.swift; sourceTree = SOURCE_ROOT; };
D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RegisteredEca.swift; path = Sailassist/ECA/RegisteredEca.swift; sourceTree = SOURCE_ROOT; }; D52D213E2AEBB7D700324D58 /* RegisteredEca.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = RegisteredEca.swift; path = Sailassist/ECA/RegisteredEca.swift; sourceTree = SOURCE_ROOT; };
D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EcaCoordinatesTable.swift; path = Sailassist/ECA/EcaCoordinatesTable.swift; sourceTree = SOURCE_ROOT; }; D52D21402AEDE18F00324D58 /* EcaCoordinatesTable.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = EcaCoordinatesTable.swift; path = Sailassist/ECA/EcaCoordinatesTable.swift; sourceTree = SOURCE_ROOT; };
D5384AFB2B306CEF006228C6 /* TermsView.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = TermsView.html; path = SailAssist/html/TermsView.html; sourceTree = SOURCE_ROOT; };
D5384AFD2B3121F2006228C6 /* PrivacyView.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; name = PrivacyView.html; path = SailAssist/html/PrivacyView.html; sourceTree = SOURCE_ROOT; };
D5384B002B312F2D006228C6 /* MenuLocalHtmlView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MenuLocalHtmlView.swift; path = Sailassist/Menu/View/MenuLocalHtmlView.swift; sourceTree = SOURCE_ROOT; };
D53ACA752B0AECF8008DCB18 /* Sailassist.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Sailassist.entitlements; path = Sailassist/Sailassist.entitlements; sourceTree = "<group>"; }; D53ACA752B0AECF8008DCB18 /* Sailassist.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Sailassist.entitlements; path = Sailassist/Sailassist.entitlements; sourceTree = "<group>"; };
D545FC732B09C74300F206D0 /* AlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AlertManager.swift; path = Sailassist/VoiceManager/AlertManager.swift; sourceTree = SOURCE_ROOT; }; D545FC732B09C74300F206D0 /* AlertManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = AlertManager.swift; path = Sailassist/VoiceManager/AlertManager.swift; sourceTree = SOURCE_ROOT; };
D545FC752B09C81300F206D0 /* PushNotificationTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PushNotificationTypes.swift; path = Sailassist/DataSource/PushNotificationTypes.swift; sourceTree = SOURCE_ROOT; }; D545FC752B09C81300F206D0 /* PushNotificationTypes.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = PushNotificationTypes.swift; path = Sailassist/DataSource/PushNotificationTypes.swift; sourceTree = SOURCE_ROOT; };
...@@ -328,6 +334,7 @@ ...@@ -328,6 +334,7 @@
020B98122AD8C3140029DE4C /* SailAssist */ = { 020B98122AD8C3140029DE4C /* SailAssist */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
D5384AFF2B3121FA006228C6 /* html */,
D545FC722B09C6DA00F206D0 /* VoiceManager */, D545FC722B09C6DA00F206D0 /* VoiceManager */,
D51AA4052B099F6D00EBBDD4 /* DataSource */, D51AA4052B099F6D00EBBDD4 /* DataSource */,
D51AA4022B099DA600EBBDD4 /* SignalR */, D51AA4022B099DA600EBBDD4 /* SignalR */,
...@@ -597,6 +604,7 @@ ...@@ -597,6 +604,7 @@
D5E008732B2ADD3F00C4070A /* MenuManualECDISView.swift */, D5E008732B2ADD3F00C4070A /* MenuManualECDISView.swift */,
D5E008752B2ADD5900C4070A /* MenuManualRADARView.swift */, D5E008752B2ADD5900C4070A /* MenuManualRADARView.swift */,
D5E008772B2B022200C4070A /* MenuAboutAppView.swift */, D5E008772B2B022200C4070A /* MenuAboutAppView.swift */,
D5384B002B312F2D006228C6 /* MenuLocalHtmlView.swift */,
); );
path = View; path = View;
sourceTree = "<group>"; sourceTree = "<group>";
...@@ -690,6 +698,15 @@ ...@@ -690,6 +698,15 @@
path = ECA; path = ECA;
sourceTree = "<group>"; sourceTree = "<group>";
}; };
D5384AFF2B3121FA006228C6 /* html */ = {
isa = PBXGroup;
children = (
D5384AFB2B306CEF006228C6 /* TermsView.html */,
D5384AFD2B3121F2006228C6 /* PrivacyView.html */,
);
path = html;
sourceTree = "<group>";
};
D545FC722B09C6DA00F206D0 /* VoiceManager */ = { D545FC722B09C6DA00F206D0 /* VoiceManager */ = {
isa = PBXGroup; isa = PBXGroup;
children = ( children = (
...@@ -833,6 +850,8 @@ ...@@ -833,6 +850,8 @@
isa = PBXResourcesBuildPhase; isa = PBXResourcesBuildPhase;
buildActionMask = 2147483647; buildActionMask = 2147483647;
files = ( files = (
D5384AFE2B3121F2006228C6 /* PrivacyView.html in Resources */,
D5384AFC2B306CEF006228C6 /* TermsView.html in Resources */,
020B981B2AD8C3190029DE4C /* Preview Assets.xcassets in Resources */, 020B981B2AD8C3190029DE4C /* Preview Assets.xcassets in Resources */,
020B98182AD8C3190029DE4C /* Assets.xcassets in Resources */, 020B98182AD8C3190029DE4C /* Assets.xcassets in Resources */,
); );
...@@ -1009,6 +1028,7 @@ ...@@ -1009,6 +1028,7 @@
D5E008762B2ADD5900C4070A /* MenuManualRADARView.swift in Sources */, D5E008762B2ADD5900C4070A /* MenuManualRADARView.swift in Sources */,
D59908C62B19EA70000E13DD /* ResPushHistory.swift in Sources */, D59908C62B19EA70000E13DD /* ResPushHistory.swift in Sources */,
020B986C2ADD3E810029DE4C /* InTextLib.swift in Sources */, 020B986C2ADD3E810029DE4C /* InTextLib.swift in Sources */,
D5384B012B312F2D006228C6 /* MenuLocalHtmlView.swift in Sources */,
02C3E5D12AFCC16800AF7837 /* ChatTitleView.swift in Sources */, 02C3E5D12AFCC16800AF7837 /* ChatTitleView.swift in Sources */,
024EDE1D2B0C42F70013BAC8 /* MenuGpsSelectView.swift in Sources */, 024EDE1D2B0C42F70013BAC8 /* MenuGpsSelectView.swift in Sources */,
020B98472AD8FEE30029DE4C /* ColorSet.swift in Sources */, 020B98472AD8FEE30029DE4C /* ColorSet.swift in Sources */,
...@@ -1195,8 +1215,8 @@ ...@@ -1195,8 +1215,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UIRequiresFullScreen = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
IPHONEOS_DEPLOYMENT_TARGET = 16.4; IPHONEOS_DEPLOYMENT_TARGET = 16.4;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
...@@ -1238,8 +1258,8 @@ ...@@ -1238,8 +1258,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UIRequiresFullScreen = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
IPHONEOS_DEPLOYMENT_TARGET = 16.4; IPHONEOS_DEPLOYMENT_TARGET = 16.4;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
...@@ -1424,8 +1444,8 @@ ...@@ -1424,8 +1444,8 @@
INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES;
INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES;
INFOPLIST_KEY_UILaunchScreen_Generation = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPad = "UIInterfaceOrientationPortrait UIInterfaceOrientationPortraitUpsideDown UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UIRequiresFullScreen = YES;
INFOPLIST_KEY_UISupportedInterfaceOrientations_iPhone = "UIInterfaceOrientationPortrait UIInterfaceOrientationLandscapeLeft UIInterfaceOrientationLandscapeRight"; INFOPLIST_KEY_UISupportedInterfaceOrientations = UIInterfaceOrientationPortrait;
IPHONEOS_DEPLOYMENT_TARGET = 16.4; IPHONEOS_DEPLOYMENT_TARGET = 16.4;
LD_RUNPATH_SEARCH_PATHS = ( LD_RUNPATH_SEARCH_PATHS = (
"$(inherited)", "$(inherited)",
......
{ {
"images" : [ "images" : [
{ {
"filename" : "h1_signin.svg", "filename" : "logo_b.svg",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"value" : "dark" "value" : "dark"
} }
], ],
"filename" : "h1_signin_Dark.svg", "filename" : "logo_w.svg",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },
......
<?xml version="1.0" encoding="UTF-8"?><svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 21.94"><defs><style>.cls-1{stroke-width:0px;}</style></defs><g id="_レイヤー_3"><path class="cls-1" d="m94.41,13.96l1.33-1.33c1.98,1.52,3.88,2.27,6.52,2.27s4.24-1.15,4.24-2.73v-.05c0-1.49-.95-2.34-4.94-3.05-4.37-.8-6.38-2-6.38-4.64v-.05c0-2.53,2.63-4.39,6.25-4.39,2.77,0,4.75.67,6.68,1.97l-1.25,1.4c-1.77-1.22-3.53-1.74-5.49-1.74-2.47,0-4.05,1.15-4.05,2.59v.05c0,1.52.98,2.36,5.16,3.12,4.24.78,6.19,2.09,6.19,4.55v.05c0,2.76-2.72,4.55-6.49,4.55-3.01,0-5.49-.85-7.77-2.57Z"/><path class="cls-1" d="m113.82,16.69h-2.09V2.09l2.09,1.14v13.46Zm2.09-9.82s1.38-.89,3.8-.89c3.4,0,5.38,1.83,5.38,4.29v6.42h-2.09v-6.04c0-1.92-1.41-3.12-3.88-3.12s-3.2,1.1-3.2,1.1v-1.76Z"/><path class="cls-1" d="m171.99,17.56h-2.17l-8.18-16.19h2.39l6.76,13.84,1.19,2.34Zm-.04-4.75l5.64-11.44h2.31l-6.94,13.63-1-2.19Z"/><path class="cls-1" d="m194.78,16.68c1.93,0,3.29-.58,4.43-1.46l1.3.86c-1.41,1.16-3.12,1.94-5.79,1.94-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-8.98l-.6-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z"/><path class="cls-1" d="m232.15,16.61c1.93,0,3.29-.58,4.43-1.46,0,0,.44,1.03.59,1.39-1.28.86-2.84,1.41-5.08,1.41-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-9.05l-.53-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z"/><path class="cls-1" d="m209.52,17.79h-2l-4.92-10.42h2.23l4.68,10.42Zm9.3,0h-1.87l-3.78-8.16-2.66,5.68-.84-2.12,2.64-5.86h1.74l4.78,10.46Zm.12-4.58l2.6-5.84h2.17l-3.85,7.96-.92-2.12Z"/><path class="cls-1" d="m129.64,7.32h2.09v9.34h-2.09V7.32Z"/><path class="cls-1" d="m138.02,21.94h-2.09V7.26l2.09,1.05v13.64Zm2.1-8.25s1.73,2.11,5.38,2.11c3.02,0,4.74-1.4,4.74-3.58s-1.77-3.89-4.62-3.89c-3.05,0-3.78,1.08-3.78,1.08l-1.81-.71s1.24-1.92,5.77-1.92c3.9,0,6.53,2.42,6.53,5.42s-2.63,5.14-6.89,5.14c-3.02,0-5.32-1.67-5.32-1.67v-1.99Z"/><path class="cls-1" d="m0,14.58l1.33-1.33c1.99,1.52,3.89,2.28,6.53,2.28s4.24-1.15,4.24-2.74v-.05c0-1.49-.95-2.35-4.95-3.06C2.77,8.87.76,7.68.76,5.03v-.05C.76,2.46,3.4.6,7.02.6c2.78,0,4.76.67,6.69,1.98l-1.25,1.4c-1.77-1.22-3.54-1.75-5.5-1.75-2.48,0-4.05,1.15-4.05,2.6v.05c0,1.52.98,2.37,5.17,3.13,4.24.78,6.2,2.09,6.2,4.55v.05c0,2.76-2.72,4.55-6.5,4.55-3.02,0-5.5-.85-7.78-2.58Z"/><path class="cls-1" d="m19.92,17.36h-2.09V7l2.09,1.06v9.3Zm1.93-8.82s1.01-.68,3.27-.68,3.75.9,4.52,2.06c1.01-1.14,2.5-2.06,4.95-2.06,3.24,0,5.22,1.6,5.22,4.17v5.34h-2.09v-4.98c0-2-1.36-3.13-3.65-3.13-2.12,0-3.89,1.16-3.89,3.2v4.9h-2.07v-5.02c0-1.94-1.15-3.08-3.38-3.08-.88,0-1.17.13-1.17.13l-1.71-.85Z"/><path class="cls-1" d="m62.47,12.46c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z"/><path class="cls-1" d="m242.16,12.73c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z"/><path class="cls-1" d="m55.21,8v1.8c-.95-1.26-2.91-2-5.06-2-3.56,0-6.45,2.02-6.45,4.87s2.91,4.89,6.45,4.89c2.12,0,4.11-.74,5.06-2.02v.8l2.08,1.03.02-8.31-2.1-1.05Zm-4.91,8.01c-2.5,0-4.53-1.49-4.53-3.34s2.03-3.34,4.53-3.34,4.53,1.49,4.53,3.34-2.03,3.34-4.53,3.34Z"/><path class="cls-1" d="m79.06,17.36h-2.1v-8.88h-2.08l-3.17-1.55h5.25v-2.66l2.1,1.02v1.64l2.06.03,3.13,1.51h-5.2s0,8.88,0,8.88Z"/><path class="cls-1" d="m182,8.44h2.09v9.34h-2.09v-9.34Z"/><circle class="cls-1" cx="130.75" cy="4.18" r="1.65"/><circle class="cls-1" cx="183.16" cy="4.18" r="1.65"/></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 250 21.94" fill="#fff">
<defs>
<style>.cls-1{stroke-width:0px;}</style>
</defs>
<g id="_レイヤー_3">
<path class="cls-1"
d="m94.41,13.96l1.33-1.33c1.98,1.52,3.88,2.27,6.52,2.27s4.24-1.15,4.24-2.73v-.05c0-1.49-.95-2.34-4.94-3.05-4.37-.8-6.38-2-6.38-4.64v-.05c0-2.53,2.63-4.39,6.25-4.39,2.77,0,4.75.67,6.68,1.97l-1.25,1.4c-1.77-1.22-3.53-1.74-5.49-1.74-2.47,0-4.05,1.15-4.05,2.59v.05c0,1.52.98,2.36,5.16,3.12,4.24.78,6.19,2.09,6.19,4.55v.05c0,2.76-2.72,4.55-6.49,4.55-3.01,0-5.49-.85-7.77-2.57Z" />
<path class="cls-1"
d="m113.82,16.69h-2.09V2.09l2.09,1.14v13.46Zm2.09-9.82s1.38-.89,3.8-.89c3.4,0,5.38,1.83,5.38,4.29v6.42h-2.09v-6.04c0-1.92-1.41-3.12-3.88-3.12s-3.2,1.1-3.2,1.1v-1.76Z" />
<path class="cls-1"
d="m171.99,17.56h-2.17l-8.18-16.19h2.39l6.76,13.84,1.19,2.34Zm-.04-4.75l5.64-11.44h2.31l-6.94,13.63-1-2.19Z" />
<path class="cls-1"
d="m194.78,16.68c1.93,0,3.29-.58,4.43-1.46l1.3.86c-1.41,1.16-3.12,1.94-5.79,1.94-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-8.98l-.6-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z" />
<path class="cls-1"
d="m232.15,16.61c1.93,0,3.29-.58,4.43-1.46,0,0,.44,1.03.59,1.39-1.28.86-2.84,1.41-5.08,1.41-3.86,0-7.01-2.18-7.01-5.4,0-3,2.98-5.4,6.86-5.4,4.16,0,6.77,2.44,6.77,5.48,0,.14,0,.3-.03.54h-9.05l-.53-1.24h7.49c-.24-1.88-1.93-3.48-4.7-3.48s-4.88,2.01-4.88,4.07,2.11,4.09,5.14,4.09Z" />
<path class="cls-1"
d="m209.52,17.79h-2l-4.92-10.42h2.23l4.68,10.42Zm9.3,0h-1.87l-3.78-8.16-2.66,5.68-.84-2.12,2.64-5.86h1.74l4.78,10.46Zm.12-4.58l2.6-5.84h2.17l-3.85,7.96-.92-2.12Z" />
<path class="cls-1" d="m129.64,7.32h2.09v9.34h-2.09V7.32Z" />
<path class="cls-1"
d="m138.02,21.94h-2.09V7.26l2.09,1.05v13.64Zm2.1-8.25s1.73,2.11,5.38,2.11c3.02,0,4.74-1.4,4.74-3.58s-1.77-3.89-4.62-3.89c-3.05,0-3.78,1.08-3.78,1.08l-1.81-.71s1.24-1.92,5.77-1.92c3.9,0,6.53,2.42,6.53,5.42s-2.63,5.14-6.89,5.14c-3.02,0-5.32-1.67-5.32-1.67v-1.99Z" />
<path class="cls-1"
d="m0,14.58l1.33-1.33c1.99,1.52,3.89,2.28,6.53,2.28s4.24-1.15,4.24-2.74v-.05c0-1.49-.95-2.35-4.95-3.06C2.77,8.87.76,7.68.76,5.03v-.05C.76,2.46,3.4.6,7.02.6c2.78,0,4.76.67,6.69,1.98l-1.25,1.4c-1.77-1.22-3.54-1.75-5.5-1.75-2.48,0-4.05,1.15-4.05,2.6v.05c0,1.52.98,2.37,5.17,3.13,4.24.78,6.2,2.09,6.2,4.55v.05c0,2.76-2.72,4.55-6.5,4.55-3.02,0-5.5-.85-7.78-2.58Z" />
<path class="cls-1"
d="m19.92,17.36h-2.09V7l2.09,1.06v9.3Zm1.93-8.82s1.01-.68,3.27-.68,3.75.9,4.52,2.06c1.01-1.14,2.5-2.06,4.95-2.06,3.24,0,5.22,1.6,5.22,4.17v5.34h-2.09v-4.98c0-2-1.36-3.13-3.65-3.13-2.12,0-3.89,1.16-3.89,3.2v4.9h-2.07v-5.02c0-1.94-1.15-3.08-3.38-3.08-.88,0-1.17.13-1.17.13l-1.71-.85Z" />
<path class="cls-1"
d="m62.47,12.46c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z" />
<path class="cls-1"
d="m242.16,12.73c0-4.48,4.44-5.29,5.1-5.29l2.73,1.31h-.16c-3.07,0-5.58,1.62-5.58,4.75v4.13h-2.09v-4.9Z" />
<path class="cls-1"
d="m55.21,8v1.8c-.95-1.26-2.91-2-5.06-2-3.56,0-6.45,2.02-6.45,4.87s2.91,4.89,6.45,4.89c2.12,0,4.11-.74,5.06-2.02v.8l2.08,1.03.02-8.31-2.1-1.05Zm-4.91,8.01c-2.5,0-4.53-1.49-4.53-3.34s2.03-3.34,4.53-3.34,4.53,1.49,4.53,3.34-2.03,3.34-4.53,3.34Z" />
<path class="cls-1"
d="m79.06,17.36h-2.1v-8.88h-2.08l-3.17-1.55h5.25v-2.66l2.1,1.02v1.64l2.06.03,3.13,1.51h-5.2s0,8.88,0,8.88Z" />
<path class="cls-1" d="m182,8.44h2.09v9.34h-2.09v-9.34Z" />
<circle class="cls-1" cx="130.75" cy="4.18" r="1.65" />
<circle class="cls-1" cx="183.16" cy="4.18" r="1.65" />
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200.58 28.83">
<defs>
<style>.cls-1{stroke-width:0px;}</style>
</defs>
<g>
<path class="cls-1" d="m17.32,16c-.76-.58-1.58-1.06-2.46-1.44-.88-.38-1.73-.69-2.53-.93-1.74-.5-3.12-1-4.13-1.52-1.01-.51-1.73-1.06-2.16-1.64-.43-.58-.64-1.22-.64-1.91,0-.81.37-1.54,1.11-2.19.74-.65,1.93-.98,3.55-.98,1.17,0,2.16.19,2.98.57.81.38,1.5.87,2.08,1.46.57.59,1.04,1.2,1.41,1.82l3.12-1.5c-.49-.88-1.16-1.72-2.01-2.52-.86-.8-1.89-1.45-3.1-1.96-1.21-.51-2.63-.77-4.26-.77s-3.18.28-4.5.84c-1.31.56-2.34,1.33-3.08,2.3-.74.98-1.11,2.08-1.11,3.32,0,1.14.26,2.1.79,2.89.53.79,1.21,1.45,2.03,1.98.83.54,1.7.98,2.61,1.32.91.34,1.74.62,2.48.84,1.14.33,2.22.71,3.23,1.12,1.01.42,1.83.96,2.46,1.62.63.67.94,1.56.94,2.68s-.49,2.08-1.46,2.82c-.97.74-2.25,1.11-3.85,1.11-1.2,0-2.27-.21-3.21-.64-.94-.43-1.79-1.02-2.55-1.78-.76-.76-1.48-1.64-2.16-2.64l-2.91,1.64c.66,1.09,1.5,2.12,2.55,3.09,1.04.96,2.25,1.74,3.64,2.32,1.38.58,2.89.87,4.52.87,1.2,0,2.35-.17,3.45-.5s2.08-.81,2.95-1.43c.87-.62,1.56-1.37,2.05-2.25.5-.88.75-1.87.75-2.96s-.24-2.12-.73-2.94c-.49-.82-1.11-1.52-1.86-2.11Z"/>
<rect class="cls-1" x="51.84" y="11.46" width="3.42" height="16.41"/>
<rect class="cls-1" x="64.61" width="3.42" height="27.83"/>
<path class="cls-1" d="m127.4,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m147.93,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m181.88,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<polygon class="cls-1" points="200.58 11.42 197.37 11.42 197.37 6.71 193.95 5.71 193.95 11.42 190.74 11.42 190.74 14.09 193.95 14.09 193.95 27.83 197.37 28.83 197.37 14.09 200.58 14.09 200.58 11.42"/>
<path class="cls-1" d="m39.45,13.34c-1.53-1.41-3.56-2.28-5.8-2.28-4.73,0-8.56,3.83-8.56,8.56s3.83,8.56,8.56,8.56c2.24,0,4.27-.87,5.8-2.28v.97l3.4,1V11.75l-3.4-1v2.59Zm-5.8,11.85c-3.07,0-5.56-2.49-5.56-5.56s2.49-5.56,5.56-5.56,5.56,2.49,5.56,5.56-2.49,5.56-5.56,5.56Z"/>
<path class="cls-1" d="m86.12,26.43l3.37,1.76,3.87-7.38h10.9l3.87,7.38,3.37-1.76-12.68-24.21-12.68,24.21Zm8.8-8.62l3.88-7.41,3.88,7.41h-7.76Z"/>
<circle class="cls-1" cx="53.65" cy="5.18" r="2.5"/>
<rect class="cls-1" x="158.84" y="11.46" width="3.42" height="16.41"/>
<path class="cls-1" d="m160.65,2.31c-1.38,0-2.5,1.12-2.5,2.5,0,.06.01.12.02.18,0,.06-.02.12-.02.18,0,1.38,1.12,2.5,2.5,2.5s2.5-1.12,2.5-2.5c0-.06-.01-.12-.02-.18,0-.06.02-.12.02-.18,0-1.38-1.12-2.5-2.5-2.5Z"/>
</g>
</svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 200.58 28.83">
<defs>
<style>.cls-1{fill:#fff;stroke-width:0px;}</style>
</defs>
<g>
<path class="cls-1" d="m17.32,16c-.76-.58-1.58-1.06-2.46-1.44-.88-.38-1.73-.69-2.53-.93-1.74-.5-3.12-1-4.13-1.52-1.01-.51-1.73-1.06-2.16-1.64-.43-.58-.64-1.22-.64-1.91,0-.81.37-1.54,1.11-2.19.74-.65,1.93-.98,3.55-.98,1.17,0,2.16.19,2.98.57.81.38,1.5.87,2.08,1.46.57.59,1.04,1.2,1.41,1.82l3.12-1.5c-.49-.88-1.16-1.72-2.01-2.52-.86-.8-1.89-1.45-3.1-1.96-1.21-.51-2.63-.77-4.26-.77s-3.18.28-4.5.84c-1.31.56-2.34,1.33-3.08,2.3-.74.98-1.11,2.08-1.11,3.32,0,1.14.26,2.1.79,2.89.53.79,1.21,1.45,2.03,1.98.83.54,1.7.98,2.61,1.32.91.34,1.74.62,2.48.84,1.14.33,2.22.71,3.23,1.12,1.01.42,1.83.96,2.46,1.62.63.67.94,1.56.94,2.68s-.49,2.08-1.46,2.82c-.97.74-2.25,1.11-3.85,1.11-1.2,0-2.27-.21-3.21-.64-.94-.43-1.79-1.02-2.55-1.78-.76-.76-1.48-1.64-2.16-2.64l-2.91,1.64c.66,1.09,1.5,2.12,2.55,3.09,1.04.96,2.25,1.74,3.64,2.32,1.38.58,2.89.87,4.52.87,1.2,0,2.35-.17,3.45-.5s2.08-.81,2.95-1.43c.87-.62,1.56-1.37,2.05-2.25.5-.88.75-1.87.75-2.96s-.24-2.12-.73-2.94c-.49-.82-1.11-1.52-1.86-2.11Z"/>
<rect class="cls-1" x="51.84" y="11.46" width="3.42" height="16.41"/>
<rect class="cls-1" x="64.61" width="3.42" height="27.83"/>
<path class="cls-1" d="m127.4,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m147.93,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<path class="cls-1" d="m181.88,19.21c-.94-.44-1.98-.85-3.12-1.23-.68-.24-1.34-.49-1.97-.75-.63-.26-1.14-.56-1.54-.89-.4-.33-.6-.71-.6-1.14,0-.55.26-.95.77-1.21.51-.26,1.13-.39,1.84-.39,1.03,0,1.95.2,2.76.61.81.41,1.49.92,2.03,1.53l2.74-1.46c-.4-.62-.96-1.17-1.67-1.64-.71-.48-1.53-.86-2.46-1.14-.93-.29-1.92-.43-2.98-.43s-2.08.16-3.06.46c-.98.31-1.78.78-2.4,1.43-.61.64-.92,1.45-.92,2.43s.29,1.74.88,2.37c.58.63,1.31,1.14,2.18,1.53.87.39,1.73.73,2.59,1.02.77.24,1.5.49,2.18.77.69.27,1.25.61,1.69,1,.44.39.66.87.66,1.45,0,.64-.28,1.15-.83,1.52-.56.37-1.32.55-2.29.55-.8,0-1.53-.12-2.2-.38-.67-.25-1.26-.59-1.78-1.02s-.97-.89-1.37-1.39l-2.7,1.39c.37.64.92,1.27,1.65,1.89.73.62,1.62,1.12,2.68,1.52,1.06.39,2.24.59,3.55.59,2.03,0,3.66-.48,4.9-1.43,1.24-.95,1.86-2.14,1.86-3.57,0-.97-.28-1.77-.83-2.39s-1.31-1.15-2.25-1.59Z"/>
<polygon class="cls-1" points="200.58 11.42 197.37 11.42 197.37 6.71 193.95 5.71 193.95 11.42 190.74 11.42 190.74 14.09 193.95 14.09 193.95 27.83 197.37 28.83 197.37 14.09 200.58 14.09 200.58 11.42"/>
<path class="cls-1" d="m39.45,13.34c-1.53-1.41-3.56-2.28-5.8-2.28-4.73,0-8.56,3.83-8.56,8.56s3.83,8.56,8.56,8.56c2.24,0,4.27-.87,5.8-2.28v.97l3.4,1V11.75l-3.4-1v2.59Zm-5.8,11.85c-3.07,0-5.56-2.49-5.56-5.56s2.49-5.56,5.56-5.56,5.56,2.49,5.56,5.56-2.49,5.56-5.56,5.56Z"/>
<path class="cls-1" d="m86.12,26.43l3.37,1.76,3.87-7.38h10.9l3.87,7.38,3.37-1.76-12.68-24.21-12.68,24.21Zm8.8-8.62l3.88-7.41,3.88,7.41h-7.76Z"/>
<circle class="cls-1" cx="53.65" cy="5.18" r="2.5"/>
<rect class="cls-1" x="158.84" y="11.46" width="3.42" height="16.41"/>
<path class="cls-1" d="m160.65,2.31c-1.38,0-2.5,1.12-2.5,2.5,0,.06.01.12.02.18,0,.06-.02.12-.02.18,0,1.38,1.12,2.5,2.5,2.5s2.5-1.12,2.5-2.5c0-.06-.01-.12-.02-.18,0-.06.02-.12.02-.18,0-1.38-1.12-2.5-2.5-2.5Z"/>
</g>
</svg>
\ No newline at end of file
{ {
"images" : [ "images" : [
{ {
"filename" : "logo_signin.svg", "filename" : "img_b.svg",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
"value" : "dark" "value" : "dark"
} }
], ],
"filename" : "logo_signin_Dark.svg", "filename" : "img_w.svg",
"idiom" : "universal", "idiom" : "universal",
"scale" : "1x" "scale" : "1x"
}, },
......
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 485 201" style="enable-background:new 0 0 485 201;" xml:space="preserve">
<g>
<path d="M0,170.8c146-6.9,275.9-18.1,389.8-33.6C241.9,153.1,114.4,165.4,7,162L0,170.8L0,170.8z"/>
<polygon points="71.5,125.9 229,64.1 228.8,77.8 "/>
<path d="M416,170l69-87c-76.3-10.9-148.8-9-230,5l-6.4,21.7L40,144l221-20l10-21c52.6-10,104.3-13.3,155-9
C416.9,122,413.2,147.5,416,170z"/>
<polygon points="414,184 35,190 429,201 "/>
<polygon points="229,24 55,115 55,136 62,114 229,0 "/>
<polygon points="234,7 234,24 370,39 370,70 360,30 "/>
<path d="M31,132.8c-0.8,0-1.5-0.7-1.5-1.5V67.8c0-0.2,0-0.4,0.1-0.7l5.6-11.5c0.2-0.5,0.8-0.8,1.3-0.8h78.8c0.8,0,1.5,0.7,1.5,1.5
v11.5c0,0.8-0.7,1.5-1.5,1.5s-1.5-0.7-1.5-1.5v-10H37.5l-5,10.3v63.2C32.5,132.1,31.8,132.8,31,132.8z"/>
<rect x="50.5" y="67" width="3.5" height="3"/>
<path d="M84.4,70h-7.6v-3h7.6V70z M69.2,70h-7.6v-3h7.6V70z"/>
<rect x="92" y="67" width="3.5" height="3"/>
<rect x="50.5" y="76" width="3.5" height="3"/>
<path d="M84.4,79h-7.6v-3h7.6V79z M69.2,79h-7.6v-3h7.6V79z"/>
<rect x="92" y="76" width="3.5" height="3"/>
</g>
</svg>
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 28.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" viewBox="0 0 485 201" style="enable-background:new 0 0 485 201;" xml:space="preserve">
<style type="text/css">
.st0{fill:#FFFFFF;}
</style>
<g>
<path class="st0" d="M0,170.8c146-6.9,275.9-18.1,389.8-33.6C241.9,153.1,114.4,165.4,7,162L0,170.8L0,170.8z"/>
<polygon class="st0" points="71.5,125.9 229,64.1 228.8,77.8 "/>
<path class="st0" d="M416,170l69-87c-76.3-10.9-148.8-9-230,5l-6.4,21.7L40,144l221-20l10-21c52.6-10,104.3-13.3,155-9
C416.9,122,413.2,147.5,416,170z"/>
<polygon class="st0" points="414,184 35,190 429,201 "/>
<polygon class="st0" points="229,24 55,115 55,136 62,114 229,0 "/>
<polygon class="st0" points="234,7 234,24 370,39 370,70 360,30 "/>
<path class="st0" d="M31,132.8c-0.8,0-1.5-0.7-1.5-1.5V67.8c0-0.2,0-0.4,0.1-0.7l5.6-11.5c0.2-0.5,0.8-0.8,1.3-0.8h78.8
c0.8,0,1.5,0.7,1.5,1.5v11.5c0,0.8-0.7,1.5-1.5,1.5s-1.5-0.7-1.5-1.5v-10H37.5l-5,10.3v63.2C32.5,132.1,31.8,132.8,31,132.8z"/>
<rect x="50.5" y="67" class="st0" width="3.5" height="3"/>
<path class="st0" d="M84.4,70h-7.6v-3h7.6V70z M69.2,70h-7.6v-3h7.6V70z"/>
<rect x="92" y="67" class="st0" width="3.5" height="3"/>
<rect x="50.5" y="76" class="st0" width="3.5" height="3"/>
<path class="st0" d="M84.4,79h-7.6v-3h7.6V79z M69.2,79h-7.6v-3h7.6V79z"/>
<rect x="92" y="76" class="st0" width="3.5" height="3"/>
</g>
</svg>
<?xml version="1.0" encoding="UTF-8"?><svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135 66.85"><defs><style>.cls-1{stroke-width:0px;}</style></defs><g id="_レイヤー_3"><path class="cls-1" d="m76.98,16.14C44.95,3.88,28.77,9.65,6.32,26.43c26.59-14.38,41.57-16.83,70.66-10.3Z"/><path class="cls-1" d="m12.26,12.7C27.08-.15,28.19-4.7,57.15,5.89,29.09-.04,28.66,2.56,12.26,12.7Z"/><path class="cls-1" d="m110.48,53.56c8.34-9.48,15.04-26.48,17.05-34.65-14.49-2.18-58.08,2.56-127.54,20.38C61.62,17.88,113.64,10.44,135,15.89c-2.62,6.78-14.38,32.69-24.52,37.67Z"/><path class="cls-1" d="m21.56,59.86c9.2-1.3,18.54,1.26,23.92,3.03,7.27,2.39,20.12,2.98,24.24,2.8-1.92.79-16.73,2.43-25.2-.53-6.12-2.14-15.55-5.32-22.96-5.3Z"/><path class="cls-1" d="m9.37,47.57c27.02-1.31,47.29,5.67,63.41,8.5,29.86,5.25,58.99.82,59.27.65-.51.4-32.02,6.89-61.23,2.07-22.45-3.7-39.66-11.66-61.45-11.22Z"/></g></svg>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<svg id="_レイヤー_2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 135 66.85" fill="#fff">
<defs>
<style>.cls-1{stroke-width:0px;}</style>
</defs>
<g id="_レイヤー_3">
<path class="cls-1"
d="m76.98,16.14C44.95,3.88,28.77,9.65,6.32,26.43c26.59-14.38,41.57-16.83,70.66-10.3Z" />
<path class="cls-1"
d="m12.26,12.7C27.08-.15,28.19-4.7,57.15,5.89,29.09-.04,28.66,2.56,12.26,12.7Z" />
<path class="cls-1"
d="m110.48,53.56c8.34-9.48,15.04-26.48,17.05-34.65-14.49-2.18-58.08,2.56-127.54,20.38C61.62,17.88,113.64,10.44,135,15.89c-2.62,6.78-14.38,32.69-24.52,37.67Z" />
<path class="cls-1"
d="m21.56,59.86c9.2-1.3,18.54,1.26,23.92,3.03,7.27,2.39,20.12,2.98,24.24,2.8-1.92.79-16.73,2.43-25.2-.53-6.12-2.14-15.55-5.32-22.96-5.3Z" />
<path class="cls-1"
d="m9.37,47.57c27.02-1.31,47.29,5.67,63.41,8.5,29.86,5.25,58.99.82,59.27.65-.51.4-32.02,6.89-61.23,2.07-22.45-3.7-39.66-11.66-61.45-11.22Z" />
</g>
</svg>
\ No newline at end of file
...@@ -16,8 +16,6 @@ struct ContentView: View { ...@@ -16,8 +16,6 @@ struct ContentView: View {
@EnvironmentObject private var sceneDelegate: SceneDelegate @EnvironmentObject private var sceneDelegate: SceneDelegate
let selectedTabModel = SelectedTabModel() let selectedTabModel = SelectedTabModel()
let signalRService = SignalRService()
let locationViewModel = LocationViewModel()
var body: some View { var body: some View {
MainTabView() MainTabView()
...@@ -39,7 +37,7 @@ struct ContentView: View { ...@@ -39,7 +37,7 @@ struct ContentView: View {
selectedTabModel.activeTab = .task selectedTabModel.activeTab = .task
}, content: { }, content: {
LoginView(isLogin: $loginViewModel.isLogin) LoginView(isLogin: $loginViewModel.isLogin)
.environmentObject(locationViewModel) .environmentObject(selectedTabModel)
}) })
} }
} }
......
...@@ -8,7 +8,7 @@ ...@@ -8,7 +8,7 @@
import Foundation import Foundation
import CoreLocation import CoreLocation
#if false #if true
//ECA Coordinates China //ECA Coordinates China
var chinaShore:[CLLocationCoordinate2D] = [ var chinaShore:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 39.82805556, longitude: 124.16833333), CLLocationCoordinate2D(latitude: 39.82805556, longitude: 124.16833333),
...@@ -96,8 +96,8 @@ var chinaHainan:[CLLocationCoordinate2D] = [ ...@@ -96,8 +96,8 @@ var chinaHainan:[CLLocationCoordinate2D] = [
] ]
var chinaYangtziShuifuYunnan:[CLLocationCoordinate2D] = [ var chinaYangtziShuifuYunnan:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 28.63858333, longitude: 104.40744444), CLLocationCoordinate2D(latitude: 28.63331667, longitude: 104.40085000),
CLLocationCoordinate2D(latitude: 28.64013889, longitude: 104.40858333) CLLocationCoordinate2D(latitude: 28.65005667, longitude: 104.40801667)
] ]
var chinaYangtziLiuhekouJiangsu1:[CLLocationCoordinate2D] = [ var chinaYangtziLiuhekouJiangsu1:[CLLocationCoordinate2D] = [
...@@ -111,13 +111,13 @@ var chinaYangtziLiuhekouJiangsu2:[CLLocationCoordinate2D] = [ ...@@ -111,13 +111,13 @@ var chinaYangtziLiuhekouJiangsu2:[CLLocationCoordinate2D] = [
] ]
var chinaXijiangNanningGuangxi:[CLLocationCoordinate2D] = [ var chinaXijiangNanningGuangxi:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 22.80719444, longitude: 108.30938889), CLLocationCoordinate2D(latitude: 22.80305000, longitude: 108.31303333),
CLLocationCoordinate2D(latitude: 22.80947222, longitude: 108.30750000) CLLocationCoordinate2D(latitude: 22.81383333, longitude: 108.29880000)
] ]
var chinaXijiangNanningGuangdong:[CLLocationCoordinate2D] = [ var chinaXijiangNanningGuangdong:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 23.14583333, longitude: 112.80833333), CLLocationCoordinate2D(latitude: 23.12575000, longitude: 112.77791667),
CLLocationCoordinate2D(latitude: 23.13361111, longitude: 112.78861111) CLLocationCoordinate2D(latitude: 23.13218333, longitude: 112.81671667)
] ]
//ECA Coordinates Iceland //ECA Coordinates Iceland
...@@ -4083,9 +4083,9 @@ var unitesStatesCaribbean:[CLLocationCoordinate2D] = [ ...@@ -4083,9 +4083,9 @@ var unitesStatesCaribbean:[CLLocationCoordinate2D] = [
] ]
var northSea1:[CLLocationCoordinate2D] = [ var northSea1:[CLLocationCoordinate2D] = [
CLLocationCoordinate2D(latitude: 62.00000000, longitude: 4.99708333),
CLLocationCoordinate2D(latitude: 58.56666667, longitude: -4.00000000), CLLocationCoordinate2D(latitude: 58.56666667, longitude: -4.00000000),
CLLocationCoordinate2D(latitude: 62.00000000, longitude: -4.00000000) CLLocationCoordinate2D(latitude: 62.00000000, longitude: -4.00000000),
CLLocationCoordinate2D(latitude: 62.00000000, longitude: 4.99708333)
] ]
var northSea2:[CLLocationCoordinate2D] = [ var northSea2:[CLLocationCoordinate2D] = [
...@@ -4313,26 +4313,26 @@ class EcaCoordinatesTable : NSObject { ...@@ -4313,26 +4313,26 @@ class EcaCoordinatesTable : NSObject {
} }
var ecaDataTable:[ecaData] = [ var ecaDataTable:[ecaData] = [
// ecaData(id: 1, name: "Iceland", table: iceland), ecaData(id: 1, name: "Iceland", table: iceland),
// ecaData(id: 11, name: "North American Atlantic Coasts", table: northAmericanAtlanticCoasts), ecaData(id: 11, name: "North American Atlantic Coasts", table: northAmericanAtlanticCoasts),
// ecaData(id: 12, name: "North American Hawai", table: northAmericanHawai), ecaData(id: 12, name: "North American Hawai", table: northAmericanHawai),
// ecaData(id: 13, name: "North American Pacific Coasts", table: northAmericanPacificCoasts), ecaData(id: 13, name: "North American Pacific Coasts", table: northAmericanPacificCoasts),
// ecaData(id: 21, name: "North Sea 1", table: northSea1), //err ecaData(id: 21, name: "North Sea 1", table: northSea1),
// ecaData(id: 22, name: "North Sea 2", table: northSea2), ecaData(id: 22, name: "North Sea 2", table: northSea2),
// ecaData(id: 31, name: "Unites States Caribbean", table: unitesStatesCaribbean), ecaData(id: 31, name: "Unites States Caribbean", table: unitesStatesCaribbean),
// ecaData(id: 41, name: "China Shore", table: chinaShore), ecaData(id: 41, name: "China Shore", table: chinaShore),
// ecaData(id: 42, name: "China Hainan", table: chinaHainan), ecaData(id: 42, name: "China Hainan", table: chinaHainan),
// ecaData(id: 43, name: "China Yangtzi Shuifu,Yunnan", table: chinaYangtziShuifuYunnan), //err ecaData(id: 43, name: "China Yangtzi Shuifu,Yunnan", table: chinaYangtziShuifuYunnan),
// ecaData(id: 44, name: "China Yangtzi Liuhekou,Jiangsu1", table: chinaYangtziLiuhekouJiangsu1), ecaData(id: 44, name: "China Yangtzi Liuhekou,Jiangsu1", table: chinaYangtziLiuhekouJiangsu1),
// ecaData(id: 45, name: "China Yangtzi Liuhekou,Jiangsu2", table: chinaYangtziLiuhekouJiangsu2), ecaData(id: 45, name: "China Yangtzi Liuhekou,Jiangsu2", table: chinaYangtziLiuhekouJiangsu2),
// ecaData(id: 46, name: "China Xijiang Nanning,Guangxi", table: chinaXijiangNanningGuangxi), //err ecaData(id: 46, name: "China Xijiang Nanning,Guangxi", table: chinaXijiangNanningGuangxi),
// ecaData(id: 47, name: "China Xijiang Zhaoqing,Guangdong", table: chinaXijiangNanningGuangdong), //err ecaData(id: 47, name: "China Xijiang Zhaoqing,Guangdong", table: chinaXijiangNanningGuangdong),
// ecaData(id: 51, name: "Korea Incheon, PyeongtaekDangjin Port", table: incheonPyeongtaekDanjinPort), ecaData(id: 51, name: "Korea Incheon, PyeongtaekDangjin Port", table: incheonPyeongtaekDanjinPort),
// ecaData(id: 52, name: "Korea Yeosu, Gwangyang Port", table: yeosuGwangyangPort), ecaData(id: 52, name: "Korea Yeosu, Gwangyang Port", table: yeosuGwangyangPort),
// ecaData(id: 53, name: "Korea Busan Port", table: koreaBusanPort), ecaData(id: 53, name: "Korea Busan Port", table: koreaBusanPort),
// ecaData(id: 54, name: "Korea Busan Port West", table: koreaBusanPortWest), ecaData(id: 54, name: "Korea Busan Port West", table: koreaBusanPortWest),
// ecaData(id: 55, name: "Korea Ulsan Port", table: koreaUlsanPort), ecaData(id: 55, name: "Korea Ulsan Port", table: koreaUlsanPort),
// ecaData(id: 61, name: "Panama Canal Atlantic Entrance", table: panamaCanalAtlanticEntrance), ecaData(id: 61, name: "Panama Canal Atlantic Entrance", table: panamaCanalAtlanticEntrance),
ecaData(id: 62, name: "Panama Canal Pacific Entrance", table: panamaCanalPacificEntrance) ecaData(id: 62, name: "Panama Canal Pacific Entrance", table: panamaCanalPacificEntrance)
] ]
......
...@@ -37,7 +37,7 @@ class GetEcaList { ...@@ -37,7 +37,7 @@ class GetEcaList {
value.isRunning = false value.isRunning = false
value.status = EcaState.register value.status = EcaState.register
} }
ecaData.ecaArea.updateValue(value, forKey: ecaList.taskName) ecaData.setEcaArea(key: ecaList.taskName, value: value)
} }
} }
} }
......
...@@ -10,11 +10,11 @@ import Foundation ...@@ -10,11 +10,11 @@ import Foundation
// TODO: サイトのアドレスを変更 // TODO: サイトのアドレスを変更
#if CANARY #if CANARY
enum HttpRequestType : String { enum HttpRequestType : String {
case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D" // case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
case RegisterLogin = "https://ssv-canary-web.azurewebsites.net/sailassistlogin" case RegisterLogin = "https://ssv-canary-web.azurewebsites.net/sailassistlogin"
case SitePolicy = "https://ssv-canary-web.azurewebsites.net/sitepolicy" case SitePolicy = "https://ssv-canary-web.azurewebsites.net/sitepolicy"
case CookiePolicy = "https://ssv-canary-web.azurewebsites.net/cookiepolicy" case CookiePolicy = "https://ssv-canary-web.azurewebsites.net/cookiepolicy"
case PrivacyPolicy = "https://ssv-canary-web.azurewebsites.net/inapp?" //+バージョン番号 // case PrivacyPolicy = "https://ssv-canary-web.azurewebsites.net/inapp?" //+バージョン番号
case TaskList = "https://ssv-canary-web.azurewebsites.net/api/sailassist/tasklist/XXXXX" case TaskList = "https://ssv-canary-web.azurewebsites.net/api/sailassist/tasklist/XXXXX"
case EcaArea = "https://ssv-canary-web.azurewebsites.net/api/sailassist/ecaarea/XXXXX" case EcaArea = "https://ssv-canary-web.azurewebsites.net/api/sailassist/ecaarea/XXXXX"
case ShipStatus = "https://ssv-canary-web.azurewebsites.net/api/sailassist/shipstatus/XXXXX" case ShipStatus = "https://ssv-canary-web.azurewebsites.net/api/sailassist/shipstatus/XXXXX"
...@@ -27,14 +27,16 @@ enum HttpRequestType : String { ...@@ -27,14 +27,16 @@ enum HttpRequestType : String {
case HubName = "ssv-canary-sailassist-notification" case HubName = "ssv-canary-sailassist-notification"
case storage = "https://ssvcanarystorage.z1.web.core.windows.net/" case storage = "https://ssvcanarystorage.z1.web.core.windows.net/"
case GetManualUrl = "https://ssv-canary-web.azurewebsites.net/api/constantdata/manual?filter=SailAssist" case GetManualUrl = "https://ssv-canary-web.azurewebsites.net/api/constantdata/manual?filter=SailAssist"
case ContactPage = "https://www.jmarinecloud.com/eng/contact.php?type=ssv_mobile"
case ApachLicens = "https://raw.githubusercontent.com/Azure/azure-notificationhubs-ios/main/LICENSE"
} }
#elseif QC #elseif QC
enum HttpRequestType : String { enum HttpRequestType : String {
case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D" // case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
case RegisterLogin = "https://ssv-qc-web.azurewebsites.net/sailassistlogin" case RegisterLogin = "https://ssv-qc-web.azurewebsites.net/sailassistlogin"
case SitePolicy = "https://ssv-qc-web.azurewebsites.net/sitepolicy" case SitePolicy = "https://ssv-qc-web.azurewebsites.net/sitepolicy"
case CookiePolicy = "https://ssv-qc-web.azurewebsites.net/cookiepolicy" case CookiePolicy = "https://ssv-qc-web.azurewebsites.net/cookiepolicy"
case PrivacyPolicy = "https://ssv-qc-web.azurewebsites.net/inapp?" //+バージョン番号 // case PrivacyPolicy = "https://ssv-qc-web.azurewebsites.net/inapp?" //+バージョン番号
case TaskList = "https://ssv-qc-web.azurewebsites.net/api/sailassist/tasklist/XXXXX" case TaskList = "https://ssv-qc-web.azurewebsites.net/api/sailassist/tasklist/XXXXX"
case EcaArea = "https://ssv-qc-web.azurewebsites.net/api/sailassist/ecaarea" case EcaArea = "https://ssv-qc-web.azurewebsites.net/api/sailassist/ecaarea"
case ShipStatus = "https://ssv-qc-web.azurewebsites.net/api/sailassist/shipstatus/XXXXX" case ShipStatus = "https://ssv-qc-web.azurewebsites.net/api/sailassist/shipstatus/XXXXX"
...@@ -47,15 +49,17 @@ enum HttpRequestType : String { ...@@ -47,15 +49,17 @@ enum HttpRequestType : String {
case HubName = "ssv-qc-sailassist-notification" case HubName = "ssv-qc-sailassist-notification"
case storage = "https://tacmiquaritycheckstorage.z31.web.core.windows.net/" case storage = "https://tacmiquaritycheckstorage.z31.web.core.windows.net/"
case GetManualUrl = "https://ssv-qc-web.azurewebsites.net/api/constantdata/manual?filter=SailAssist" case GetManualUrl = "https://ssv-qc-web.azurewebsites.net/api/constantdata/manual?filter=SailAssist"
case ContactPage = "https://www.jmarinecloud.com/eng/contact.php?type=ssv_mobile"
case ApachLicens = "https://raw.githubusercontent.com/Azure/azure-notificationhubs-ios/main/LICENSE"
} }
#else #else
//MARK: 運用サーバー用 //MARK: 運用サーバー用
enum HttpRequestType : String { enum HttpRequestType : String {
case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D" // case Terms = "https://tacmistorage.blob.core.windows.net/$web/terms/terms.mobile.html?sv=2021-10-04&st=2023-11-22T06%3A26%3A32Z&se=2023-11-23T06%3A26%3A32Z&sr=b&sp=r&sig=wS6kbbT5SvNVTkRsnRk%2BiDceZAsQ3Y56vrqTUO1X50E%3D"
case RegisterLogin = "https://ssv.jmarinecloud.com/sailassistlogin" case RegisterLogin = "https://ssv.jmarinecloud.com/sailassistlogin"
case SitePolicy = "https://ssv.jmarinecloud.com/sitepolicy" case SitePolicy = "https://ssv.jmarinecloud.com/sitepolicy"
case CookiePolicy = "https://ssv.jmarinecloud.com/cookiepolicy" case CookiePolicy = "https://ssv.jmarinecloud.com/cookiepolicy"
case PrivacyPolicy = "https://ssv.jmarinecloud.com/inapp?" //+バージョン番号 // case PrivacyPolicy = "https://ssv.jmarinecloud.com/inapp?" //+バージョン番号
case TaskList = "https://ssv.jmarinecloud.com/api/sailassist/tasklist/XXXXX" case TaskList = "https://ssv.jmarinecloud.com/api/sailassist/tasklist/XXXXX"
case EcaArea = "https://ssv.jmarinecloud.com/api/sailassist/ecaarea" case EcaArea = "https://ssv.jmarinecloud.com/api/sailassist/ecaarea"
case ShipStatus = "https://ssv.jmarinecloud.com/api/sailassist/shipstatus/XXXXX" case ShipStatus = "https://ssv.jmarinecloud.com/api/sailassist/shipstatus/XXXXX"
...@@ -68,5 +72,7 @@ enum HttpRequestType : String { ...@@ -68,5 +72,7 @@ enum HttpRequestType : String {
case HubName = "ssv-sailassist-notification" case HubName = "ssv-sailassist-notification"
case storage = "https://tacmistorage.z31.web.core.windows.net/" case storage = "https://tacmistorage.z31.web.core.windows.net/"
case GetManualUrl = "https://ssv.jmarinecloud.com/api/constantdata/manual?filter=SailAssist" case GetManualUrl = "https://ssv.jmarinecloud.com/api/constantdata/manual?filter=SailAssist"
case ContactPage = "https://www.jmarinecloud.com/eng/contact.php?type=ssv_mobile"
case ApachLicens = "https://raw.githubusercontent.com/Azure/azure-notificationhubs-ios/main/LICENSE"
} }
#endif #endif
...@@ -9,7 +9,8 @@ import CoreLocation ...@@ -9,7 +9,8 @@ import CoreLocation
class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate { class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
@Published var authorizationStatus: CLAuthorizationStatus @Published var authorizationStatus: CLAuthorizationStatus
@Published var lastSeenLocation: CLLocation? var lastSeenLocation: CLLocation?
var serverLocationInterval: Int64 = 0
private let locationManager: CLLocationManager private let locationManager: CLLocationManager
let ecaTask = EcaTask() let ecaTask = EcaTask()
...@@ -21,9 +22,8 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate { ...@@ -21,9 +22,8 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
super.init() super.init()
} }
func requestPermission() -> (alert: Bool, type: AlertType) { func requestPermission() -> Bool {
var alert = false var alert = true
let type: AlertType = .gpsPermission
locationManager.requestWhenInUseAuthorization() locationManager.requestWhenInUseAuthorization()
locationManager.requestAlwaysAuthorization() // バックグラウンド実行中も座標取得する場合はこちら locationManager.requestAlwaysAuthorization() // バックグラウンド実行中も座標取得する場合はこちら
...@@ -31,16 +31,16 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate { ...@@ -31,16 +31,16 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
let status = CLLocationManager().authorizationStatus let status = CLLocationManager().authorizationStatus
switch status { switch status {
case .authorizedAlways : case .authorizedAlways :
print(debug: "authorizationStatus : .authorizedAlways") alert = false
print(debug: "authorizationStatus : .authorizedAlways") //常に利用許可
case .notDetermined: case .notDetermined:
alert = true print(debug: "authorizationStatus : .notDetermined") //一度だけ許可
print(debug: "authorizationStatus : .notDetermined")
case .restricted: case .restricted:
print(debug: "authorizationStatus : .restricted") print(debug: "authorizationStatus : .restricted") //ペアレンタルコントロールなどの影響で制限中
case .denied: case .denied:
print(debug: "authorizationStatus : .denied") print(debug: "authorizationStatus : .denied") //利用拒否
case .authorizedWhenInUse: case .authorizedWhenInUse:
print(debug: "authorizationStatus : .authorizedWhenInUse") print(debug: "authorizationStatus : .authorizedWhenInUse") //使用中のみ利用許可
@unknown default: @unknown default:
print(debug: "authorizationStatus : Unknown") print(debug: "authorizationStatus : Unknown")
} }
...@@ -59,7 +59,7 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate { ...@@ -59,7 +59,7 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
locationManager.startUpdatingLocation() locationManager.startUpdatingLocation()
} }
return(alert, type) return alert
} }
func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) { func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) {
...@@ -85,10 +85,13 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate { ...@@ -85,10 +85,13 @@ class LocationViewModel: NSObject, ObservableObject, CLLocationManagerDelegate {
} }
if Preferences.LocationType == 1 { if Preferences.LocationType == 1 {
if serverLocationInterval <= DateTextLib.Date2UnixTime(date: Date()) {
let eca = EcaTask() let eca = EcaTask()
eca.start() eca.start()
ecaTask.checkEca() self.ecaTask.checkEca()
serverLocationInterval = DateTextLib.Date2UnixTime(date: Date()) + Int64(TimerInterval)
}
} }
} }
......
...@@ -18,8 +18,9 @@ enum LoginViewMode: String{ ...@@ -18,8 +18,9 @@ enum LoginViewMode: String{
enum AlertType: String { enum AlertType: String {
case loginFailure case loginFailure
case QrFailure
case ClientError
case Expired case Expired
case gpsPermission
} }
class LoginViewParam: ObservableObject{ class LoginViewParam: ObservableObject{
...@@ -33,6 +34,7 @@ let TimerInterval = 60.0 * 10.0 ...@@ -33,6 +34,7 @@ let TimerInterval = 60.0 * 10.0
struct LoginView: View { struct LoginView: View {
@ObservedObject var scannerViewModel = ScannerViewModel() @ObservedObject var scannerViewModel = ScannerViewModel()
@EnvironmentObject var locationViewModel: LocationViewModel @EnvironmentObject var locationViewModel: LocationViewModel
@EnvironmentObject var selectedTabModel: SelectedTabModel
@Binding var isLogin: Bool @Binding var isLogin: Bool
@State var isQrRead: Bool = false @State var isQrRead: Bool = false
@State var viewMode: LoginViewMode = .SelectType @State var viewMode: LoginViewMode = .SelectType
...@@ -85,7 +87,10 @@ struct LoginView: View { ...@@ -85,7 +87,10 @@ struct LoginView: View {
if !isProgressView { if !isProgressView {
Link("Site policy", destination: URL(string: HttpRequestType.SitePolicy.rawValue)!) Link("Site policy", destination: URL(string: HttpRequestType.SitePolicy.rawValue)!)
Link("Cookie policy", destination: URL(string: HttpRequestType.CookiePolicy.rawValue)!) Link("Cookie policy", destination: URL(string: HttpRequestType.CookiePolicy.rawValue)!)
Link("Privacy policy", destination: URL(string: HttpRequestType.PrivacyPolicy.rawValue)!) if let htmlPath = Bundle.main.path(forResource: "PrivacyView", ofType: "html") {
Link("Privacy policy", destination: URL(fileURLWithPath: htmlPath))
}
// Link("Privacy policy", destination: URL(string: HttpRequestType.CookiePolicy.rawValue)!)
} else { } else {
EmptyView() EmptyView()
} }
...@@ -101,20 +106,25 @@ struct LoginView: View { ...@@ -101,20 +106,25 @@ struct LoginView: View {
.alert(isPresented: $isAlert) { .alert(isPresented: $isAlert) {
switch alertType { switch alertType {
case .loginFailure: case .loginFailure:
return Alert(title: Text("error"), return Alert(title: Text("Error"),
message: Text("Ship ID or Password is incorrect."), message: Text("Ship ID or Password is incorrect."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType}) dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
) )
case .QrFailure:
return Alert(title: Text("Error"),
message: Text("QR code is incorrect."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
)
case .ClientError:
return Alert(title: Text("Error"),
message: Text("Not connected to network."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
)
case .Expired: case .Expired:
return Alert(title: Text("error"), return Alert(title: Text("Error"),
message: Text("Expired."), message: Text("Expired."),
dismissButton: .default(Text("OK"), action: {viewMode = .SelectType}) dismissButton: .default(Text("OK"), action: {viewMode = .SelectType})
) )
case .gpsPermission:
return Alert(title: Text("location"),
message: Text("Allow use of location information."),
dismissButton: .default(Text("Next"), action: {locationViewModel.requestPermission()})
)
} }
} }
} }
...@@ -125,9 +135,7 @@ struct LoginView: View { ...@@ -125,9 +135,7 @@ struct LoginView: View {
}) })
.onAppear() { .onAppear() {
LoginCheck() LoginCheck()
let result = locationViewModel.requestPermission() selectedTabModel.isLocationAlert = locationViewModel.requestPermission()
isAlert = result.alert
alertType = result.type
} }
.preferredColorScheme(.dark) .preferredColorScheme(.dark)
} }
...@@ -168,6 +176,9 @@ struct LoginView: View { ...@@ -168,6 +176,9 @@ struct LoginView: View {
SharingData.my.mmsi = res.mmsi SharingData.my.mmsi = res.mmsi
Preferences.shipId = res.shipId Preferences.shipId = res.shipId
let notificationTags = NotificationTags()
notificationTags.addTags()
} }
Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date()) Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
...@@ -197,9 +208,16 @@ struct LoginView: View { ...@@ -197,9 +208,16 @@ struct LoginView: View {
case .failure(let errorCode): case .failure(let errorCode):
print(debug: errorCode) print(debug: errorCode)
switch errorCode {
case .clientError:
alertType = .ClientError
case .serverError:
alertType = .QrFailure
default:
alertType = .QrFailure
}
isLogin = false isLogin = false
isAlert = true isAlert = true
alertType = .loginFailure
break break
} }
isProgressView = false isProgressView = false
...@@ -218,6 +236,9 @@ struct LoginView: View { ...@@ -218,6 +236,9 @@ struct LoginView: View {
SharingData.my.mmsi = res.mmsi SharingData.my.mmsi = res.mmsi
Preferences.shipId = res.shipId Preferences.shipId = res.shipId
let notificationTags = NotificationTags()
notificationTags.addTags()
} }
Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date()) Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
...@@ -247,9 +268,16 @@ struct LoginView: View { ...@@ -247,9 +268,16 @@ struct LoginView: View {
case .failure(let errorCode): case .failure(let errorCode):
print(debug: errorCode) print(debug: errorCode)
switch errorCode {
case .clientError:
alertType = .ClientError
case .serverError:
alertType = .loginFailure
default:
alertType = .loginFailure
}
isLogin = false isLogin = false
isAlert = true isAlert = true
alertType = .loginFailure
break break
} }
isProgressView = false isProgressView = false
...@@ -270,4 +298,5 @@ fileprivate struct Triangle: Shape{ ...@@ -270,4 +298,5 @@ fileprivate struct Triangle: Shape{
#Preview { #Preview {
LoginView(isLogin: .constant(false)) LoginView(isLogin: .constant(false))
.environmentObject(SelectedTabModel())
} }
...@@ -86,7 +86,7 @@ struct InputIdPassWordView: View { ...@@ -86,7 +86,7 @@ struct InputIdPassWordView: View {
.background(ColorSet.LoginBk01.color) .background(ColorSet.LoginBk01.color)
}) })
.alert(isPresented: $isIdPassWordEmpty, content: { .alert(isPresented: $isIdPassWordEmpty, content: {
Alert(title: Text("error"), Alert(title: Text("Error"),
message: Text("Ship ID or Password is incorrect.") message: Text("Ship ID or Password is incorrect.")
) )
}) })
...@@ -110,6 +110,9 @@ struct InputIdPassWordView: View { ...@@ -110,6 +110,9 @@ struct InputIdPassWordView: View {
SharingData.my.mmsi = res.mmsi SharingData.my.mmsi = res.mmsi
Preferences.shipId = res.shipId Preferences.shipId = res.shipId
let notificationTags = NotificationTags()
notificationTags.addTags()
} }
Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date()) Preferences.lastLoginDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
...@@ -139,9 +142,16 @@ struct InputIdPassWordView: View { ...@@ -139,9 +142,16 @@ struct InputIdPassWordView: View {
case .failure(let errorCode): case .failure(let errorCode):
print(debug: errorCode) print(debug: errorCode)
switch errorCode {
case .clientError:
alertType = .ClientError
case .serverError:
alertType = .loginFailure
default:
alertType = .loginFailure
}
isLogin = false isLogin = false
isAlert = true isAlert = true
alertType = .loginFailure
break break
} }
isProgressView = false isProgressView = false
......
...@@ -61,7 +61,7 @@ struct InputUserNameView: View { ...@@ -61,7 +61,7 @@ struct InputUserNameView: View {
.background(ColorSet.LoginBk01.color) .background(ColorSet.LoginBk01.color)
}) })
.alert(isPresented: $isEmptyAlert) { .alert(isPresented: $isEmptyAlert) {
return Alert(title: Text("error"), return Alert(title: Text("Error"),
message: Text("User Nmae not entered.") message: Text("User Nmae not entered.")
) )
} }
......
...@@ -35,8 +35,11 @@ struct EcaSettingView: View { ...@@ -35,8 +35,11 @@ struct EcaSettingView: View {
Divider() Divider()
.frame(height: 1) .frame(height: 1)
.background(ColorSet.LineColor04.color) .background(ColorSet.LineColor04.color)
Button(action: { Button(action: {
SharingData.eca.editEcaArea(key: edittingEca.name, value: edittingEca, type: EcaOperation.Change) var ecaData = edittingEca
ecaData.isEnable = true
SharingData.eca.editEcaArea(key: edittingEca.name, value: ecaData, type: EcaOperation.Change)
isShowSettingEca = false isShowSettingEca = false
}, label: { }, label: {
Text("Register") Text("Register")
......
...@@ -82,10 +82,10 @@ struct TaskSwitchingMenuView: View { ...@@ -82,10 +82,10 @@ struct TaskSwitchingMenuView: View {
.alert(isPresented: $isEcaAlert) { .alert(isPresented: $isEcaAlert) {
switch ecaAlertType { switch ecaAlertType {
case .ecaDelete: case .ecaDelete:
return Alert(title: Text("delete"), return Alert(title: Text("Delete"),
message: Text("Do you delete " + eca.name), message: Text("Do you delete " + eca.name + "?"),
primaryButton: .default(Text("cancel")), primaryButton: .default(Text("No")),
secondaryButton: .cancel(Text("delete"), action: { secondaryButton: .cancel(Text("Yes"), action: {
if let ecaArea = taskViewModel.edittingEcaArea { if let ecaArea = taskViewModel.edittingEcaArea {
var newData = ecaArea var newData = ecaArea
newData.isEnable = false newData.isEnable = false
...@@ -97,10 +97,10 @@ struct TaskSwitchingMenuView: View { ...@@ -97,10 +97,10 @@ struct TaskSwitchingMenuView: View {
taskViewModel.edittingEcaArea = nil taskViewModel.edittingEcaArea = nil
})) }))
case .ecaRunningStop: case .ecaRunningStop:
return Alert(title: Text("stop"), return Alert(title: Text("Stop"),
message: Text("Do you want to stop " + eca.name), message: Text("Do you want to stop " + eca.name + "?"),
primaryButton: .default(Text("cancel")), primaryButton: .default(Text("Cancel")),
secondaryButton: .cancel(Text("stop"), action: { secondaryButton: .cancel(Text("Stop"), action: {
if let ecaArea = taskViewModel.edittingEcaArea { if let ecaArea = taskViewModel.edittingEcaArea {
var newData = ecaArea var newData = ecaArea
newData.isRunning = false newData.isRunning = false
......
...@@ -184,6 +184,14 @@ struct MenuView: View { ...@@ -184,6 +184,14 @@ struct MenuView: View {
}else if goto == .AboutApp{ }else if goto == .AboutApp{
MenuAboutAppView(path: $path) MenuAboutAppView(path: $path)
.navigationBarHidden(true) .navigationBarHidden(true)
}else if goto == .TermsOfUse{
MenuLocalHtmlView(path: $path)
.navigationBarHidden(true)
}else if goto == .PrivacyStatement{
MenuLocalHtmlView(path: $path)
.navigationBarHidden(true)
}else if goto == .ContactUs{
WebView(isLoading: .constant(false), url: HttpRequestType.ContactPage.rawValue)
}else{ }else{
VStack(spacing: 0) { VStack(spacing: 0) {
MenuTitleView(path: $path, title: goto.title) MenuTitleView(path: $path, title: goto.title)
...@@ -199,17 +207,15 @@ struct MenuView: View { ...@@ -199,17 +207,15 @@ struct MenuView: View {
} }
} }
.alert(isPresented: $isSignout) { .alert("Sign Out", isPresented: $isSignout) {
return Alert(title: Text("Sign Out"), Button("Yes") {
message: Text("Are you sure?"),
primaryButton: .default(Text("No")), secondaryButton: .cancel(Text("Yes"), action: {
Preferences.Id = "" Preferences.Id = ""
Preferences.Password = "" Preferences.Password = ""
Preferences.UserName = ""
loginViewModel.isLogin = false loginViewModel.isLogin = false
sceneDelegate.tabWindow?.isHidden = true sceneDelegate.tabWindow?.isHidden = true
}))
} }
Button("No") {}
} message: { Text("Are you sure?") }
} }
} }
} }
......
...@@ -18,11 +18,11 @@ struct MenuAboutAppView: View { ...@@ -18,11 +18,11 @@ struct MenuAboutAppView: View {
HStack { HStack {
VStack(alignment: .leading, spacing: 10){ VStack(alignment: .leading, spacing: 10){
Text("Version") Text("Version")
.font(FontStyle.EmphasisText.font) .font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.BodyDescriptiion.color) .foregroundColor(ColorSet.BodyDescriptiion.color)
#if CANARY #if CANARY
Text("\(version)" + " Canary") Text("\(version)" + " Canary")
.font(FontStyle.EmphasisText.font) .font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.Body.color) .foregroundColor(ColorSet.Body.color)
#elseif QC #elseif QC
Text("\(version)" + " QC") Text("\(version)" + " QC")
...@@ -44,7 +44,7 @@ struct MenuAboutAppView: View { ...@@ -44,7 +44,7 @@ struct MenuAboutAppView: View {
Spacer().frame(height: 50) Spacer().frame(height: 50)
Text("Policy") Text("Policy")
.font(FontStyle.EmphasisText.font) .font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.BodyDescriptiion.color) .foregroundColor(ColorSet.BodyDescriptiion.color)
.frame(maxWidth: .infinity, alignment: .leading) .frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 30) .padding(.leading, 30)
...@@ -64,7 +64,7 @@ struct MenuAboutAppView: View { ...@@ -64,7 +64,7 @@ struct MenuAboutAppView: View {
Spacer().frame(height: 50) Spacer().frame(height: 50)
Text("Open Source Licenses") Text("Open Source Licenses")
.font(FontStyle.EmphasisText.font) .font(FontStyle.SupplementText.font)
.foregroundColor(ColorSet.BodyDescriptiion.color) .foregroundColor(ColorSet.BodyDescriptiion.color)
.frame(maxWidth: .infinity, alignment: .leading) .frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 30) .padding(.leading, 30)
...@@ -77,6 +77,11 @@ struct MenuAboutAppView: View { ...@@ -77,6 +77,11 @@ struct MenuAboutAppView: View {
.foregroundColor(ColorSet.Body.color) .foregroundColor(ColorSet.Body.color)
.frame(maxWidth: .infinity, alignment: .leading) .frame(maxWidth: .infinity, alignment: .leading)
.padding(.leading, 30) .padding(.leading, 30)
VStack(spacing: 30) {
Link("https://github.com/Azure/azure-notificationhubs-ios/blob/main/LICENSE", destination: URL(string: HttpRequestType.ApachLicens.rawValue)!)
}
.font(FontStyle.RadioButtonText.font)
.foregroundColor(ColorSet.Body.color)
Spacer() Spacer()
} }
.background(ColorSet.BackgroundPrimary.color) .background(ColorSet.BackgroundPrimary.color)
......
//
// MenuLocalHtmlView.swift
// Sailassist
//
// Created by 三浦薫巳 on 2023/12/19.
//
import Foundation
import SwiftUI
struct MenuLocalHtmlView: View {
@State var isAlert: Bool = false
@Binding var path : [MenuPath]
var body: some View {
VStack{
let aaa = path
MenuTitleView(path: $path, title: MenuPath.ManualRADAR.title)
// if content.rawValue != "TermsOfUse" {
// if let htmlPath = Bundle.main.path(forResource: "TermsView", ofType: "html") {
// WebView(isLoading: .constant(false), url: htmlPath)
// }
// } else if content.rawValue != "PrivacyStatement" {
// if let htmlPath = Bundle.main.path(forResource: "PrivacyView", ofType: "html") {
// WebView(isLoading: .constant(false), url: htmlPath)
// }
// }
Spacer()
}
.background(ColorSet.BackgroundPrimary.color)
.alert("delete", isPresented: $isAlert) {
Button(role: .destructive) {
} label: {
Text("delete")
}
} message: {
Text("eca delete")
}
}
}
#Preview {
MenuLocalHtmlView(path: .constant([.ManualRADAR]))
}
...@@ -15,12 +15,16 @@ struct SailassistApp: App { ...@@ -15,12 +15,16 @@ struct SailassistApp: App {
@State private var isTermsAgree = Preferences.termsAgreeDate != nil @State private var isTermsAgree = Preferences.termsAgreeDate != nil
@State private var isPrivAgree = Preferences.privacyPolicyAgreeDate != nil @State private var isPrivAgree = Preferences.privacyPolicyAgreeDate != nil
let locationViewModel = LocationViewModel()
let signalRService = SignalRService()
var body: some Scene { var body: some Scene {
WindowGroup { WindowGroup {
if !isTermsAgree{ if !isTermsAgree{
VStack(spacing: 0){ VStack(spacing: 0){
WebView(isLoading: .constant(false), url: HttpRequestType.Terms.rawValue) if let htmlPath = Bundle.main.path(forResource: "TermsView", ofType: "html") {
WebView(isLoading: .constant(false), url: htmlPath)
}
YesNoButtons(yesTitle: "Accept", noTitle: "Cancel") { YesNoButtons(yesTitle: "Accept", noTitle: "Cancel") {
Preferences.termsAgreeDate_Int64 = DateTextLib.Date2UnixTime(date: Date()) Preferences.termsAgreeDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
...@@ -33,7 +37,9 @@ struct SailassistApp: App { ...@@ -33,7 +37,9 @@ struct SailassistApp: App {
}else if !isPrivAgree{ }else if !isPrivAgree{
VStack(spacing: 0){ VStack(spacing: 0){
WebView(isLoading: .constant(false), url: HttpRequestType.Terms.rawValue) if let htmlPath = Bundle.main.path(forResource: "PrivacyView", ofType: "html") {
WebView(isLoading: .constant(false), url: htmlPath)
}
YesNoButtons(yesTitle: "Accept", noTitle: "Cancel") { YesNoButtons(yesTitle: "Accept", noTitle: "Cancel") {
Preferences.privacyPolicyAgreeDate_Int64 = DateTextLib.Date2UnixTime(date: Date()) Preferences.privacyPolicyAgreeDate_Int64 = DateTextLib.Date2UnixTime(date: Date())
...@@ -49,6 +55,7 @@ struct SailassistApp: App { ...@@ -49,6 +55,7 @@ struct SailassistApp: App {
.onAppear(perform: { .onAppear(perform: {
getManualUrl() getManualUrl()
}) })
.environmentObject(locationViewModel)
} }
} }
...@@ -76,19 +83,19 @@ struct SailassistApp: App { ...@@ -76,19 +83,19 @@ struct SailassistApp: App {
} }
} }
//class notificationTags: NSObject { class NotificationTags: NSObject {
// func addTags() { func addTags() {
// if Preferences.shipId != 0 { if Preferences.shipId != 0 {
// let shipId = String(Preferences.shipId) let shipId = String(Preferences.shipId)
// let testTag = "aaa" let routeTag = "route-" + shipId
// let routeTag = "route-" + shipId let bamTag = "bam-" + shipId
// let bamTag = "bam-" + shipId let taskAlertTag = "taskalert-" + shipId
// let taskAlertTag = "taskalert-" + shipId let sailassistTag = "sailassist-" + shipId
// let sailassistTag = "sailassist-" + shipId MSNotificationHub.addTags([routeTag, bamTag, taskAlertTag, sailassistTag])
// MSNotificationHub.addTags([testTag, routeTag, bamTag, taskAlertTag, sailassistTag]) }
// } }
// } }
//}
class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, MSInstallationLifecycleDelegate { class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, MSInstallationLifecycleDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool { func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
...@@ -105,7 +112,6 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M ...@@ -105,7 +112,6 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M
MSNotificationHub.setDelegate(self) MSNotificationHub.setDelegate(self)
MSNotificationHub.start(connectionString: HttpRequestType.ConnectionString.rawValue, hubName: HttpRequestType.HubName.rawValue) MSNotificationHub.start(connectionString: HttpRequestType.ConnectionString.rawValue, hubName: HttpRequestType.HubName.rawValue)
self.addTags()
} }
} }
application.registerForRemoteNotifications() application.registerForRemoteNotifications()
...@@ -120,19 +126,6 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M ...@@ -120,19 +126,6 @@ class AppDelegate: NSObject, UIApplicationDelegate ,MSNotificationHubDelegate, M
return config return config
} }
func addTags() {
if Preferences.shipId != 0 {
let shipId = String(Preferences.shipId)
// let shipId = "10000083"
let routeTag = "route-" + shipId
let bamTag = "bam-" + shipId
let taskAlertTag = "taskalert-" + shipId
let sailassistTag = "sailassist-" + shipId
MSNotificationHub.addTags([routeTag, bamTag, taskAlertTag, sailassistTag])
MSNotificationHub.addTags([routeTag])
}
}
// Push通知を受信した時(サイレントプッシュ) // Push通知を受信した時(サイレントプッシュ)
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
print(debug: "called \(userInfo)") print(debug: "called \(userInfo)")
......
...@@ -8,7 +8,9 @@ ...@@ -8,7 +8,9 @@
import SwiftUI import SwiftUI
enum Tab: String, CaseIterable{ enum Tab: String, CaseIterable{
#if CANARY
case chat = "tab_chat" case chat = "tab_chat"
#endif
case task = "tab_task" case task = "tab_task"
case alert = "tab_notification" case alert = "tab_notification"
case menu = "tab_menu" case menu = "tab_menu"
...@@ -36,9 +38,10 @@ struct MainTabView: View { ...@@ -36,9 +38,10 @@ struct MainTabView: View {
@State var isTabShow: Bool = sceneDelegate.tabWindow != nil @State var isTabShow: Bool = sceneDelegate.tabWindow != nil
@State var isTaskSel: Bool = selectedTabModel.activeTab == .task @State var isTaskSel: Bool = selectedTabModel.activeTab == .task
TabView(selection: $selectedTabModel.activeTab){ TabView(selection: $selectedTabModel.activeTab){
#if CANARY
ChatView() ChatView()
.tag(Tab.chat) .tag(Tab.chat)
#endif
MapRepresentable() MapRepresentable()
.ignoresSafeArea() .ignoresSafeArea()
.tag(Tab.task) .tag(Tab.task)
...@@ -65,6 +68,8 @@ struct MainTabView: View { ...@@ -65,6 +68,8 @@ struct MainTabView: View {
struct CustomTabBar: View { struct CustomTabBar: View {
@EnvironmentObject private var selectedTabModel: SelectedTabModel @EnvironmentObject private var selectedTabModel: SelectedTabModel
@State var isLocationAlert = false
var body: some View { var body: some View {
VStack(spacing: 0){ VStack(spacing: 0){
Divider() Divider()
...@@ -105,6 +110,12 @@ struct CustomTabBar: View { ...@@ -105,6 +110,12 @@ struct CustomTabBar: View {
} message: { } message: {
Text("Do you change an emargency mode?") Text("Do you change an emargency mode?")
} }
.alert("location", isPresented: $selectedTabModel.isLocationAlert) {
Button("OK") {
}
} message: {
Text("To use ECA,set the permission to use location information to ALWAYS.")
}
} }
} }
......
...@@ -11,4 +11,5 @@ import SwiftUI ...@@ -11,4 +11,5 @@ import SwiftUI
class SelectedTabModel: ObservableObject { class SelectedTabModel: ObservableObject {
@Published var activeTab: Tab = .task @Published var activeTab: Tab = .task
@Published var isShowChangeEmrMode: Bool = false @Published var isShowChangeEmrMode: Bool = false
@Published var isLocationAlert: Bool = false
} }
...@@ -13,7 +13,13 @@ struct WebView: UIViewRepresentable { ...@@ -13,7 +13,13 @@ struct WebView: UIViewRepresentable {
var url : String var url : String
func makeUIView(context: Context) -> WKWebView { func makeUIView(context: Context) -> WKWebView {
let request = URLRequest(url: URL(string: url)!) var address: URL
if url.contains("https://") {
address = URL(string: url)!
} else {
address = URL(fileURLWithPath: url)
}
let request = URLRequest(url: address)
let webView = WKWebView() let webView = WKWebView()
webView.navigationDelegate = context.coordinator webView.navigationDelegate = context.coordinator
webView.load(request) webView.load(request)
......
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>Privacy Statement</title>
</head>
<body>
<h1>Privacy Statement</h1>
</body>
</html>
\ No newline at end of file
This diff is collapsed.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment