Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
S
Sailassist
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
1
Issues
1
List
Board
Labels
Milestones
Merge Requests
54
Merge Requests
54
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
gr-ssv
Sailassist
Commits
b579eb2b
Commit
b579eb2b
authored
Oct 15, 2026
by
shigemi miura
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
iOS27 iPhoneでタブボタンが押せない不具合を修正
通信処理の見直し
parent
1734c216
Show whitespace changes
Inline
Side-by-side
Showing
22 changed files
with
171 additions
and
221 deletions
+171
-221
project.pbxproj
Seilassist/Pods/Pods.xcodeproj/project.pbxproj
+14
-11
GetPushHistory.swift
Seilassist/Sailassist/Alert/GetPushHistory.swift
+1
-1
GetMessage.swift
Seilassist/Sailassist/Chat/GetMessage.swift
+1
-1
ChatInputViewModel.swift
...assist/Sailassist/Chat/ViewModel/ChatInputViewModel.swift
+2
-2
EcaArea.swift
Seilassist/Sailassist/ECA/EcaArea.swift
+1
-1
EcaTask.swift
Seilassist/Sailassist/ECA/EcaTask.swift
+1
-1
GetEcaList.swift
Seilassist/Sailassist/ECA/GetEcaList.swift
+1
-1
LoginView.swift
Seilassist/Sailassist/Login/LoginView.swift
+5
-1
InputUserNameView.swift
Seilassist/Sailassist/Login/View/InputUserNameView.swift
+1
-1
MonitoringRoute.swift
Seilassist/Sailassist/Map/MonitoringRoute.swift
+1
-1
EcaListMainView.swift
Seilassist/Sailassist/Map/Task/View/EcaListMainView.swift
+2
-2
EcaListView.swift
Seilassist/Sailassist/Map/Task/View/EcaListView.swift
+15
-6
EcaSettingMainView.swift
Seilassist/Sailassist/Map/Task/View/EcaSettingMainView.swift
+2
-2
FuelSwitchingMainView.swift
...sist/Sailassist/Map/Task/View/FuelSwitchingMainView.swift
+2
-2
MenuMainView.swift
Seilassist/Sailassist/Map/Task/View/MenuMainView.swift
+1
-1
NgaNotificationMainView.swift
...st/Sailassist/Map/Task/View/NgaNotificationMainView.swift
+2
-2
NgaSettingMainView.swift
Seilassist/Sailassist/Map/Task/View/NgaSettingMainView.swift
+2
-2
GetManualUrl.swift
Seilassist/Sailassist/Menu/GetManualUrl.swift
+1
-1
GetNgaList.swift
Seilassist/Sailassist/NGA/GetNgaList.swift
+1
-1
GetInformation.swift
Seilassist/Sailassist/ServerSession/GetInformation.swift
+1
-1
ServerSession.swift
Seilassist/Sailassist/ServerSession/ServerSession.swift
+71
-171
MainTabView.swift
Seilassist/Sailassist/Tab/View/MainTabView.swift
+43
-9
No files found.
Seilassist/Pods/Pods.xcodeproj/project.pbxproj
View file @
b579eb2b
...
...
@@ -16,6 +16,7 @@
dependencies
=
(
);
name
=
"AzureNotificationHubs-iOS"
;
productName
=
"AzureNotificationHubs-iOS"
;
};
/* End PBXAggregateTarget section */
...
...
@@ -121,7 +122,7 @@
99743ABC5876BBF855E5EE7D4D9BBFBC
/* HubConnection.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
HubConnection.swift
;
path
=
Sources/SignalRClient/HubConnection.swift
;
sourceTree
=
"<group>"
;
};
998C647A59261C90EA8DF5F841F81ED8
/* Pods-Sailassist-umbrella.h */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
"Pods-Sailassist-umbrella.h"
;
sourceTree
=
"<group>"
;
};
9A23C67D0548DF810D1712CBE602461B
/* LongPollingTransport.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
LongPollingTransport.swift
;
path
=
Sources/SignalRClient/LongPollingTransport.swift
;
sourceTree
=
"<group>"
;
};
9D940727FF8FB9C785EB98E56350EF41
/* Podfile */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
text.script.ruby
;
includeInIndex
=
1
;
indentWidth
=
2
;
lastKnownFileType
=
text
;
name
=
Podfile
;
path
=
../Podfile
;
sourceTree
=
SOURCE_ROOT
;
tabWidth
=
2
;
xcLanguageSpecificationIdentifier
=
xcode.lang.ruby
;
};
9D940727FF8FB9C785EB98E56350EF41
/* Podfile */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
text.script.ruby
;
includeInIndex
=
1
;
indentWidth
=
2
;
name
=
Podfile
;
path
=
../Podfile
;
sourceTree
=
SOURCE_ROOT
;
tabWidth
=
2
;
xcLanguageSpecificationIdentifier
=
xcode.lang.ruby
;
};
9F9AF6D4F29B01D2A9287D1F02E85155
/* JSONHubProtocol.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
JSONHubProtocol.swift
;
path
=
Sources/SignalRClient/JSONHubProtocol.swift
;
sourceTree
=
"<group>"
;
};
A347F728F5AAA8B41DAFE3AD233425B1
/* SwiftSignalRClient-Info.plist */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
text.plist.xml
;
path
=
"SwiftSignalRClient-Info.plist"
;
sourceTree
=
"<group>"
;
};
B1C92344570F3702174B6CD251E58E9E
/* Pods-SailAssistTests-acknowledgements.plist */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
text.plist.xml
;
path
=
"Pods-SailAssistTests-acknowledgements.plist"
;
sourceTree
=
"<group>"
;
};
...
...
@@ -131,7 +132,7 @@
B718183D31FC6004F71844FA616C449A
/* HandshakeProtocol.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
HandshakeProtocol.swift
;
path
=
Sources/SignalRClient/HandshakeProtocol.swift
;
sourceTree
=
"<group>"
;
};
C0A0244A30A292024A7AB96104039BFB
/* HubConnectionExtensions.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
HubConnectionExtensions.swift
;
path
=
Sources/SignalRClient/HubConnectionExtensions.swift
;
sourceTree
=
"<group>"
;
};
C99CC2D377D211487E80F9DC15293987
/* NegotiationResponse.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
NegotiationResponse.swift
;
path
=
Sources/SignalRClient/NegotiationResponse.swift
;
sourceTree
=
"<group>"
;
};
CA2C16F20715BBB5C1E288B9406F6303
/* WindowsAzureMessaging.xcframework */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
name
=
WindowsAzureMessaging.xcframework
;
path
=
"WindowsAzureMessaging-SDK-Apple/WindowsAzureMessaging.xcframework"
;
sourceTree
=
"<group>"
;
};
CA2C16F20715BBB5C1E288B9406F6303
/* WindowsAzureMessaging.xcframework */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
wrapper.xcframework
;
name
=
WindowsAzureMessaging.xcframework
;
path
=
"WindowsAzureMessaging-SDK-Apple/WindowsAzureMessaging.xcframework"
;
sourceTree
=
"<group>"
;
};
CB2414C9D8D9290C1D5F4211D6FC4E26
/* Logger.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
Logger.swift
;
path
=
Sources/SignalRClient/Logger.swift
;
sourceTree
=
"<group>"
;
};
D1D56B5309D1F749EC584E7F5D901428
/* HubConnectionDelegate.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
HubConnectionDelegate.swift
;
path
=
Sources/SignalRClient/HubConnectionDelegate.swift
;
sourceTree
=
"<group>"
;
};
D282F486E6C5E74D2F27BF5ED45ADD47
/* Pods-SailAssistTests-umbrella.h */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
"Pods-SailAssistTests-umbrella.h"
;
sourceTree
=
"<group>"
;
};
...
...
@@ -143,7 +144,7 @@
DFFD42573E1097252DD74B9B8686713D
/* ServerInvocationHandler.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
ServerInvocationHandler.swift
;
path
=
Sources/SignalRClient/ServerInvocationHandler.swift
;
sourceTree
=
"<group>"
;
};
E04B4C3FF284BC409C8436B3C844044C
/* SwiftSignalRClient-prefix.pch */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.c.h
;
path
=
"SwiftSignalRClient-prefix.pch"
;
sourceTree
=
"<group>"
;
};
E347DFCE3670A0953EA7E9880C7723D0
/* SignalRError.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
SignalRError.swift
;
path
=
Sources/SignalRClient/SignalRError.swift
;
sourceTree
=
"<group>"
;
};
E7AFB048F72A32D1AB967A9164E20741
/* SwiftSignalRClient
*/
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
includeInIndex
=
0
;
name
=
SwiftSignalRClient
;
path
=
SwiftSignalRClient.framework
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
E7AFB048F72A32D1AB967A9164E20741
/* SwiftSignalRClient
.framework */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
includeInIndex
=
0
;
path
=
SwiftSignalRClient.framework
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
F04040FA4924616899E5F9CD0D5FEF94
/* HttpConnection.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
HttpConnection.swift
;
path
=
Sources/SignalRClient/HttpConnection.swift
;
sourceTree
=
"<group>"
;
};
F371DF14209E4C63D0D1BFF890B0E44D
/* Pods-SailAssistTests */
=
{
isa
=
PBXFileReference
;
explicitFileType
=
wrapper.framework
;
includeInIndex
=
0
;
name
=
"Pods-SailAssistTests"
;
path
=
Pods_SailAssistTests.framework
;
sourceTree
=
BUILT_PRODUCTS_DIR
;
};
FAD4FBDFB36028046481AC609256BC25
/* Connection.swift */
=
{
isa
=
PBXFileReference
;
includeInIndex
=
1
;
lastKnownFileType
=
sourcecode.swift
;
name
=
Connection.swift
;
path
=
Sources/SignalRClient/Connection.swift
;
sourceTree
=
"<group>"
;
};
...
...
@@ -287,7 +288,7 @@
children
=
(
32C8F03288ABF8CB2E1A04518F1394B9
/* Pods-Sailassist */
,
F371DF14209E4C63D0D1BFF890B0E44D
/* Pods-SailAssistTests */
,
E7AFB048F72A32D1AB967A9164E20741
/* SwiftSignalRClient */
,
E7AFB048F72A32D1AB967A9164E20741
/* SwiftSignalRClient
.framework
*/
,
);
name
=
Products
;
sourceTree
=
"<group>"
;
...
...
@@ -327,7 +328,6 @@
09BBFD81D450AA2C354BDC78D4AF50E6
/* WebsocketsTransport.swift */
,
C80DDBE8FD00464F8F959003EF78F8BF
/* Support Files */
,
);
name
=
SwiftSignalRClient
;
path
=
SwiftSignalRClient
;
sourceTree
=
"<group>"
;
};
...
...
@@ -346,7 +346,6 @@
1187AA037CB2DE219A69DE3350C6828B
/* Frameworks */
,
6AAA309192D5B46A98CB622F6E79D3D7
/* Support Files */
,
);
name
=
"AzureNotificationHubs-iOS"
;
path
=
"AzureNotificationHubs-iOS"
;
sourceTree
=
"<group>"
;
};
...
...
@@ -434,7 +433,7 @@
);
name
=
SwiftSignalRClient
;
productName
=
SwiftSignalRClient
;
productReference
=
E7AFB048F72A32D1AB967A9164E20741
/* SwiftSignalRClient */
;
productReference
=
E7AFB048F72A32D1AB967A9164E20741
/* SwiftSignalRClient
.framework
*/
;
productType
=
"com.apple.product-type.framework"
;
};
/* End PBXNativeTarget section */
...
...
@@ -500,10 +499,14 @@
inputFileListPaths
=
(
"${PODS_ROOT}/Target Support Files/AzureNotificationHubs-iOS/AzureNotificationHubs-iOS-xcframeworks-input-files.xcfilelist"
,
);
inputPaths
=
(
);
name
=
"[CP] Copy XCFrameworks"
;
outputFileListPaths
=
(
"${PODS_ROOT}/Target Support Files/AzureNotificationHubs-iOS/AzureNotificationHubs-iOS-xcframeworks-output-files.xcfilelist"
,
);
outputPaths
=
(
);
runOnlyForDeploymentPostprocessing
=
0
;
shellPath
=
/bin/sh
;
shellScript
=
"\"${PODS_ROOT}/Target Support Files/AzureNotificationHubs-iOS/AzureNotificationHubs-iOS-xcframeworks.sh\"\n"
;
...
...
@@ -698,7 +701,7 @@
GCC_PREFIX_HEADER
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-prefix.pch"
;
INFOPLIST_FILE
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-Info.plist"
;
INSTALL_PATH
=
"$(LOCAL_LIBRARY_DIR)/Frameworks"
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
1.0
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
5.6
;
LD_RUNPATH_SEARCH_PATHS
=
(
"$(inherited)"
,
"@executable_path/Frameworks"
,
...
...
@@ -857,7 +860,7 @@
GCC_PREFIX_HEADER
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-prefix.pch"
;
INFOPLIST_FILE
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-Info.plist"
;
INSTALL_PATH
=
"$(LOCAL_LIBRARY_DIR)/Frameworks"
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
1.0
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
5.6
;
LD_RUNPATH_SEARCH_PATHS
=
(
"$(inherited)"
,
"@executable_path/Frameworks"
,
...
...
@@ -929,7 +932,7 @@
GCC_PREFIX_HEADER
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-prefix.pch"
;
INFOPLIST_FILE
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-Info.plist"
;
INSTALL_PATH
=
"$(LOCAL_LIBRARY_DIR)/Frameworks"
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
1.0
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
5.6
;
LD_RUNPATH_SEARCH_PATHS
=
(
"$(inherited)"
,
"@executable_path/Frameworks"
,
...
...
@@ -1046,7 +1049,7 @@
GCC_PREFIX_HEADER
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-prefix.pch"
;
INFOPLIST_FILE
=
"Target Support Files/SwiftSignalRClient/SwiftSignalRClient-Info.plist"
;
INSTALL_PATH
=
"$(LOCAL_LIBRARY_DIR)/Frameworks"
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
1.0
;
IPHONEOS_DEPLOYMENT_TARGET
=
1
5.6
;
LD_RUNPATH_SEARCH_PATHS
=
(
"$(inherited)"
,
"@executable_path/Frameworks"
,
...
...
Seilassist/Sailassist/Alert/GetPushHistory.swift
View file @
b579eb2b
...
...
@@ -20,7 +20,7 @@ class GetPushHistory {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
[
ResPushHistory
]
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
[
ResPushHistory
]
.
self
)
if
let
res
=
resjson
{
for
push
in
res
{
if
let
id
=
push
.
id
{
...
...
Seilassist/Sailassist/Chat/GetMessage.swift
View file @
b579eb2b
...
...
@@ -17,7 +17,7 @@ class GetMessage {
switch
response
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
ResGetMessages
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
ResGetMessages
.
self
)
if
let
res
=
resjson
{
if
res
.
mode
==
1
{
SharingData
.
message
.
mode
=
true
...
...
Seilassist/Sailassist/Chat/ViewModel/ChatInputViewModel.swift
View file @
b579eb2b
...
...
@@ -96,7 +96,7 @@ class ChatInputViewModel: ObservableObject {
print
(
debug
:
"Upload success:
\(
response
)
"
)
let
serverSession
=
ServerSession
()
_
=
serverSession
.
fromJSON
(
resultData
:
response
,
resltType
:
ResLogin
.
self
)
_
=
serverSession
.
fromJSON
(
resultData
:
response
,
res
u
ltType
:
ResLogin
.
self
)
sessionUploadImage
.
progress
=
0.0
// 完了後リセット
isUploadingDialogPresented
=
false
...
...
@@ -120,7 +120,7 @@ class ChatInputViewModel: ObservableObject {
print
(
debug
:
"Video upload success:
\(
response
)
"
)
let
serverSession
=
ServerSession
()
_
=
serverSession
.
fromJSON
(
resultData
:
response
,
resltType
:
ResLogin
.
self
)
_
=
serverSession
.
fromJSON
(
resultData
:
response
,
res
u
ltType
:
ResLogin
.
self
)
SessionUploadImage
.
OnlyOne
.
progress
=
0.0
isUploadingDialogPresented
=
false
...
...
Seilassist/Sailassist/ECA/EcaArea.swift
View file @
b579eb2b
...
...
@@ -70,7 +70,7 @@ class EcaArea {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
[
ResEcaArea
]
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
[
ResEcaArea
]
.
self
)
if
let
res
=
resjson
{
print
(
debug
:
res
)
for
ecaList
in
res
{
...
...
Seilassist/Sailassist/ECA/EcaTask.swift
View file @
b579eb2b
...
...
@@ -35,7 +35,7 @@ class EcaTask {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
ResShipStatus
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
ResShipStatus
.
self
)
if
let
res
=
resjson
{
SharingData
.
location
.
status
=
SharingData
.
location
.
setShipStatus
(
status
:
res
.
status
)
SharingData
.
location
.
totalRmsAlarm
=
SharingData
.
location
.
setTotalRmsAlarm
(
alarm
:
res
.
totalRmsAlarm
)
...
...
Seilassist/Sailassist/ECA/GetEcaList.swift
View file @
b579eb2b
...
...
@@ -22,7 +22,7 @@ class GetEcaList {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
[
ReqTaskList
]
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
[
ReqTaskList
]
.
self
)
if
let
res
=
resjson
{
var
ecaAreas
=
ecaData
.
ecaArea
for
ares
in
ecaData
.
ecaArea
{
...
...
Seilassist/Sailassist/Login/LoginView.swift
View file @
b579eb2b
...
...
@@ -137,6 +137,10 @@ struct LoginView: View {
)
}
}
.
onDisappear
{
timer
?
.
invalidate
()
timer
=
nil
}
}
}
.
background
(
ColorSet
.
BackgroundPrimary
.
color
)
...
...
@@ -186,7 +190,7 @@ struct LoginView: View {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
ResLogin
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
ResLogin
.
self
)
if
let
res
=
resjson
{
SharingData
.
my
.
id
=
res
.
id
SharingData
.
my
.
shipId
=
res
.
shipId
...
...
Seilassist/Sailassist/Login/View/InputUserNameView.swift
View file @
b579eb2b
...
...
@@ -95,7 +95,7 @@ struct InputUserNameView: View {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
ResLogin
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
ResLogin
.
self
)
if
let
res
=
resjson
{
SharingData
.
my
.
id
=
res
.
id
SharingData
.
my
.
shipName
=
res
.
shipName
...
...
Seilassist/Sailassist/Map/MonitoringRoute.swift
View file @
b579eb2b
...
...
@@ -21,7 +21,7 @@ class MonitoringRoute {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
ResMonitoringRoute
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
ResMonitoringRoute
.
self
)
if
let
res
=
resjson
{
SharingData
.
map
.
wayPoints
=
[]
if
let
wayPoint
=
res
.
wayPoints
{
...
...
Seilassist/Sailassist/Map/Task/View/EcaListMainView.swift
View file @
b579eb2b
...
...
@@ -40,8 +40,8 @@ struct EcaListMainView: View {
}
}
Spacer
()
.
frame
(
height
:
55
)
//
Spacer()
//
.frame(height: 55)
}
}
...
...
Seilassist/Sailassist/Map/Task/View/EcaListView.swift
View file @
b579eb2b
...
...
@@ -11,8 +11,16 @@ struct EcaListView: View {
@ObservedObject
var
taskViewModel
:
TaskViewModel
@ObservedObject
var
ecaData
=
SharingData
.
eca
private
enum
Layout
{
static
let
rowHeight
:
CGFloat
=
62
static
let
horizontalPadding
:
CGFloat
=
30
static
let
iconSize
:
CGFloat
=
12
static
let
buttonSize
:
CGFloat
=
28
}
var
body
:
some
View
{
ForEach
(
ecaData
.
ecaArea
.
map
{
$0
.
1
}
.
sorted
{
$0
.
areaId
<
$1
.
areaId
},
id
:
\
.
name
){
eca
in
VStack
{
ForEach
(
ecaData
.
ecaArea
.
map
{
$0
.
1
}
.
sorted
{
$0
.
areaId
<
$1
.
areaId
},
id
:
\
.
areaId
){
eca
in
HStack
{
Text
(
eca
.
name
)
.
font
(
FontStyle
.
DefaultText
.
font
)
...
...
@@ -26,16 +34,16 @@ struct EcaListView: View {
var
newData
=
eca
newData
.
isEnable
.
toggle
()
ecaData
.
editEcaArea
(
key
:
eca
.
areaId
,
value
:
newData
,
type
:
EcaOperation
.
Insert
)
taskViewModel
.
viewMode
=
.
FuelSwitching
//
taskViewModel.viewMode = .FuelSwitching
taskViewModel
.
edittingEcaArea
=
eca
taskViewModel
.
viewMode
=
.
EcaSetting
},
label
:
{
Image
(
"icon_plus"
)
.
resizable
()
.
frame
(
width
:
12
,
height
:
12
)
.
frame
(
width
:
Layout
.
iconSize
,
height
:
Layout
.
iconSize
)
.
padding
(
8
)
})
.
frame
(
width
:
28
,
height
:
28
)
.
frame
(
width
:
Layout
.
buttonSize
,
height
:
Layout
.
buttonSize
)
.
background
(
.
primaryActiveIcon
)
.
cornerRadius
(
50
)
.
padding
()
...
...
@@ -51,13 +59,14 @@ struct EcaListView: View {
}
}
.
frame
(
height
:
62
)
.
padding
(
.
horizontal
,
30
)
.
frame
(
height
:
Layout
.
rowHeight
)
.
padding
(
.
horizontal
,
Layout
.
horizontalPadding
)
Divider
()
.
background
(
.
white
)
}
}
}
}
#Preview {
...
...
Seilassist/Sailassist/Map/Task/View/EcaSettingMainView.swift
View file @
b579eb2b
...
...
@@ -43,8 +43,8 @@ struct EcaSettingMainView: View {
}
}
Spacer
()
.
frame
(
height
:
55
)
//
Spacer()
//
.frame(height: 55)
}
}
...
...
Seilassist/Sailassist/Map/Task/View/FuelSwitchingMainView.swift
View file @
b579eb2b
...
...
@@ -41,8 +41,8 @@ struct FuelSwitchingMainView: View {
}
}
Spacer
()
.
frame
(
height
:
55
)
//
Spacer()
//
.frame(height: 55)
}
}
...
...
Seilassist/Sailassist/Map/Task/View/MenuMainView.swift
View file @
b579eb2b
...
...
@@ -36,7 +36,7 @@ struct MenuMainView: View {
}
}
Spacer
()
.
frame
(
height
:
55
)
//
Spacer().frame(height: 55)
}
.
padding
(
EdgeInsets
(
top
:
10
,
leading
:
8
,
bottom
:
13
,
trailing
:
17
))
}
...
...
Seilassist/Sailassist/Map/Task/View/NgaNotificationMainView.swift
View file @
b579eb2b
...
...
@@ -41,8 +41,8 @@ struct NgaNotificationMainView: View {
}
}
Spacer
()
.
frame
(
height
:
55
)
//
Spacer()
//
.frame(height: 55)
}
}
...
...
Seilassist/Sailassist/Map/Task/View/NgaSettingMainView.swift
View file @
b579eb2b
...
...
@@ -50,8 +50,8 @@ struct NgaSettingMainView: View {
}
}
Spacer
()
.
frame
(
height
:
55
)
//
Spacer()
//
.frame(height: 55)
}
}
...
...
Seilassist/Sailassist/Menu/GetManualUrl.swift
View file @
b579eb2b
...
...
@@ -17,7 +17,7 @@ class GetManualUrl {
case
.
success
(
let
resultData
):
print
(
debug
:
String
(
data
:
resultData
,
encoding
:
.
utf8
)
as
Any
)
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
[
ResGetManualUrl
]
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
[
ResGetManualUrl
]
.
self
)
if
var
res
=
resjson
{
for
index
in
res
.
indices
{
let
convert
=
res
[
index
]
.
path
.
replacingOccurrences
(
of
:
" "
,
with
:
"%20"
)
...
...
Seilassist/Sailassist/NGA/GetNgaList.swift
View file @
b579eb2b
...
...
@@ -21,7 +21,7 @@ class GetNgaList {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
[
ReqNgaList
]
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
[
ReqNgaList
]
.
self
)
// if let res = resjson {
// var ngaTmp: Dictionary<UUID, RegisteredNga> = [:]
// for ngaList in res {
...
...
Seilassist/Sailassist/ServerSession/GetInformation.swift
View file @
b579eb2b
...
...
@@ -20,7 +20,7 @@ class GetInformation {
switch
result
{
case
.
success
(
let
resultData
):
let
serverSession
=
ServerSession
()
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
resltType
:
[
ResInformation
]
.
self
)
let
resjson
=
serverSession
.
fromJSON
(
resultData
:
resultData
,
res
u
ltType
:
[
ResInformation
]
.
self
)
SharingData
.
information
.
content
=
[]
if
let
res
=
resjson
{
SharingData
.
information
.
content
=
res
...
...
Seilassist/Sailassist/ServerSession/ServerSession.swift
View file @
b579eb2b
...
...
@@ -9,225 +9,125 @@ import Foundation
typealias
SessionResponse
=
Result
<
Data
,
APIError
>
enum
HTTPMethod
:
String
{
case
get
=
"GET"
case
post
=
"POST"
case
delete
=
"DELETE"
}
class
ServerSession
{
private
let
session
:
URLSession
/// JSON 文字列に変換
func
toJSON
<
T
>
(
_
reqparam
:
T
)
->
Data
!
where
T
:
Encodable
{
let
Jencoder
=
JSONEncoder
()
var
postdata
:
Data
!
do
{
postdata
=
try
Jencoder
.
encode
(
reqparam
)
}
catch
{
return
nil
init
(
session
:
URLSession
=
.
shared
)
{
self
.
session
=
session
}
return
postdata
func
postJson
(
_
reqURL
:
URL
,
_
postdata
:
Data
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
request
(
reqURL
:
reqURL
,
method
:
.
post
,
body
:
postdata
,
completion
:
completion
)
}
/// JSON 文字列から変換
func
fromJSON
<
T
>
(
resultData
:
Data
,
resltType
:
T
.
Type
)
->
T
!
where
T
:
Decodable
{
do
{
let
decoder
=
JSONDecoder
()
let
resjson
:
T
=
try
decoder
.
decode
(
resltType
.
self
,
from
:
resultData
)
return
resjson
}
catch
{
let
jsonstr
=
String
(
data
:
resultData
,
encoding
:
.
utf8
)
!
print
(
debug
:
"
\(
jsonstr
)
"
)
return
nil
func
getJson
(
_
reqURL
:
URL
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
request
(
reqURL
:
reqURL
,
method
:
.
get
,
body
:
nil
,
completion
:
completion
)
}
func
deleteJson
(
_
reqURL
:
URL
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
request
(
reqURL
:
reqURL
,
method
:
.
delete
,
body
:
nil
,
completion
:
completion
)
}
func
postJson
(
_
req_url
:
URL
,
_
postdata
:
Data
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
var
req
=
URLRequest
(
url
:
req_url
)
req
.
httpMethod
=
"POST"
func
request
(
reqURL
:
URL
,
method
:
HTTPMethod
,
body
:
Data
?,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
var
req
=
URLRequest
(
url
:
reqURL
)
req
.
httpMethod
=
method
.
rawValue
req
.
httpBody
=
body
req
.
addValue
(
"application/json"
,
forHTTPHeaderField
:
"Content-Type"
)
req
.
httpBody
=
postdata
req
.
timeoutInterval
=
20
// タイムアウト3秒 → Amedasでタイムアウトエラー20秒に変更
req
.
timeoutInterval
=
20
// サーバー送信
let
session
=
URLSession
(
configuration
:
.
default
,
delegate
:
nil
,
delegateQueue
:
OperationQueue
.
main
)
session
.
dataTask
(
with
:
req
,
completionHandler
:
{(
data
,
response
,
error
)
in
session
.
finishTasksAndInvalidate
()
session
.
dataTask
(
with
:
req
,
completionHandler
:
{(
data
,
response
,
error
)
in
do
{
if
error
!=
nil
{
print
(
debug
:
"clientError:
\(
String
(
describing
:
error
)
)
"
)
throw
APIError
.
clientError
}
guard
let
indata
=
data
,
let
inresponse
=
response
as?
HTTPURLResponse
else
{
throw
APIError
.
responseError
}
if
inresponse
.
statusCode
!=
200
{
// let statusCode = inresponse.statusCode
// print(debug: "serverError: \(statusCode)")
throw
APIError
.
serverError
}
//Cookieを保存
if
let
fields
=
inresponse
.
allHeaderFields
as?
[
String
:
String
],
let
url
=
inresponse
.
url
{
for
cookie
in
HTTPCookie
.
cookies
(
withResponseHeaderFields
:
fields
,
for
:
url
)
{
HTTPCookieStorage
.
shared
.
setCookie
(
cookie
)
}
}
DispatchQueue
.
main
.
async
{
completion
(
.
success
(
indata
))
}
}
catch
{
if
error
as?
APIError
!=
nil
{
completion
(
.
failure
(
error
as!
APIError
))
completion
(
.
failure
(
.
clientError
))
}
else
{
completion
(
.
failure
(
.
unknown
))
return
}
guard
let
indata
=
data
,
let
inresponse
=
response
as?
HTTPURLResponse
else
{
print
(
debug
:
"responseError"
)
DispatchQueue
.
main
.
async
{
completion
(
.
failure
(
.
responseError
))
}
})
.
resume
()
return
}
func
postForm
(
boundary
:
String
,
_
req_url
:
URL
,
_
postdata
:
Data
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
var
req
=
URLRequest
(
url
:
req_url
)
req
.
httpMethod
=
"POST"
req
.
setValue
(
"multipart/form-data; boundary=
\(
boundary
)
"
,
forHTTPHeaderField
:
"Content-Type"
)
req
.
setValue
(
"
\(
postdata
.
count
)
"
,
forHTTPHeaderField
:
"Content-Length"
)
req
.
httpBody
=
postdata
// req.timeoutInterval = 20 // タイムアウト3秒 → Amedasでタイムアウトエラー20秒に変更
// let session = URLSession(configuration: .default, delegate: nil, delegateQueue: OperationQueue.main)
URLSession
.
shared
.
dataTask
(
with
:
req
)
{(
data
,
response
,
error
)
in
// var req = URLRequest(url: req_url)
// req.httpMethod = "POST"
// let headers = ["Content-Type":"multipart/form-data; boundary=\(boundary)"]
// let urlConfig = URLSessionConfiguration.default
// urlConfig.httpAdditionalHeaders = headers
//
// // サーバー送信
// let session = URLSession(configuration: urlConfig)
// session.uploadTask(with: req, from: postdata, completionHandler: {(data, response, error) in
do
{
if
error
!=
nil
{
// print(debug: "clientError: \(error)")
completion
(
.
failure
(
.
unknown
))
throw
APIError
.
clientError
}
guard
let
indata
=
data
,
let
inresponse
=
response
as?
HTTPURLResponse
else
{
completion
(
.
failure
(
.
unknown
))
throw
APIError
.
responseError
guard
(
200
...
299
)
.
contains
(
inresponse
.
statusCode
)
else
{
let
statusCode
=
inresponse
.
statusCode
print
(
debug
:
"serverError:
\(
statusCode
)
"
)
DispatchQueue
.
main
.
async
{
completion
(
.
failure
(
.
serverError
))
}
if
inresponse
.
statusCode
!=
200
{
completion
(
.
failure
(
.
unknown
))
// let statusCode = inresponse.statusCode
// print(debug: "serverError: \(statusCode)")
throw
APIError
.
serverError
return
}
//Cookieを保存
if
let
fields
=
inresponse
.
allHeaderFields
as?
[
String
:
String
],
let
url
=
inresponse
.
url
{
if
method
==
.
post
{
if
let
httpResponse
=
response
as?
HTTPURLResponse
{
if
let
fields
=
httpResponse
.
allHeaderFields
as?
[
String
:
String
],
let
url
=
inresponse
.
url
{
for
cookie
in
HTTPCookie
.
cookies
(
withResponseHeaderFields
:
fields
,
for
:
url
)
{
HTTPCookieStorage
.
shared
.
setCookie
(
cookie
)
}
}
DispatchQueue
.
main
.
async
{
completion
(
.
success
(
indata
))
}
}
catch
{
if
error
as?
APIError
!=
nil
{
completion
(
.
failure
(
error
as!
APIError
))
}
else
{
completion
(
.
failure
(
.
unknown
))
}
}
}
.
resume
()
}
func
getJson
(
_
req_url
:
URL
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
var
req
=
URLRequest
(
url
:
req_url
)
req
.
addValue
(
"application/json"
,
forHTTPHeaderField
:
"Content-Type"
)
req
.
timeoutInterval
=
20
// タイムアウト3秒 → Amedasでタイムアウトエラー20秒に変更
// サーバー送信
let
session
=
URLSession
(
configuration
:
.
default
,
delegate
:
nil
,
delegateQueue
:
OperationQueue
.
main
)
session
.
dataTask
(
with
:
req
,
completionHandler
:
{(
data
,
response
,
error
)
in
session
.
finishTasksAndInvalidate
()
do
{
if
error
!=
nil
{
// print(debug: "clientError: \(error)")
completion
(
.
failure
(
.
unknown
))
throw
APIError
.
clientError
}
guard
let
indata
=
data
,
let
inresponse
=
response
as?
HTTPURLResponse
else
{
completion
(
.
failure
(
.
unknown
))
throw
APIError
.
responseError
DispatchQueue
.
main
.
async
{
completion
(
.
success
(
indata
))
}
if
inresponse
.
statusCode
!=
200
{
completion
(
.
failure
(
.
unknown
))
// let statusCode = inresponse.statusCode
// print(debug: "serverError: \(statusCode)")
throw
APIError
.
serverError
}
catch
let
apiError
as
APIError
{
DispatchQueue
.
main
.
async
{
completion
(
.
success
(
indata
))
completion
(
.
failure
(
apiError
))
}
}
catch
{
if
error
as?
APIError
!=
nil
{
completion
(
.
failure
(
error
as!
APIError
))
}
else
{
catch
{
DispatchQueue
.
main
.
async
{
completion
(
.
failure
(
.
unknown
))
}
}
})
.
resume
()
}
func
deleteJson
(
_
req_url
:
URL
,
completion
:
@escaping
(
SessionResponse
)
->
Void
){
var
req
=
URLRequest
(
url
:
req_url
)
req
.
httpMethod
=
"DELETE"
req
.
addValue
(
"application/json"
,
forHTTPHeaderField
:
"Content-Type"
)
req
.
timeoutInterval
=
20
// タイムアウト3秒 → Amedasでタイムアウトエラー20秒に変更
// サーバー送信
let
session
=
URLSession
(
configuration
:
.
default
,
delegate
:
nil
,
delegateQueue
:
OperationQueue
.
main
)
session
.
dataTask
(
with
:
req
,
completionHandler
:
{(
data
,
response
,
error
)
in
session
.
finishTasksAndInvalidate
()
do
{
if
error
!=
nil
{
_
=
APIError
.
clientError
throw
APIError
.
clientError
}
guard
let
indata
=
data
,
let
inresponse
=
response
as?
HTTPURLResponse
else
{
throw
APIError
.
responseError
}
if
inresponse
.
statusCode
!=
200
{
throw
APIError
.
serverError
}
DispatchQueue
.
main
.
async
{
completion
(
.
success
(
indata
))
}
}
catch
{
if
error
as?
APIError
!=
nil
{
completion
(
.
failure
(
error
as!
APIError
))
// MARK: - JSON 文字列に変換
func
toJSON
<
T
>
(
_
reqparam
:
T
)
->
Data
?
where
T
:
Encodable
{
let
encoder
=
JSONEncoder
()
var
postdata
:
Data
do
{
postdata
=
try
encoder
.
encode
(
reqparam
)
}
catch
{
return
nil
}
else
{
completion
(
.
failure
(
.
unknown
))
return
postdata
}
// MARK: - JSON 文字列から変換
func
fromJSON
<
T
>
(
resultData
:
Data
,
resultType
:
T
.
Type
)
->
T
?
where
T
:
Decodable
{
do
{
let
decoder
=
JSONDecoder
()
let
resjson
:
T
=
try
decoder
.
decode
(
resultType
.
self
,
from
:
resultData
)
return
resjson
}
catch
{
let
jsonstr
=
String
(
data
:
resultData
,
encoding
:
.
utf8
)
??
"invalid data"
print
(
debug
:
"
\(
jsonstr
)
"
)
return
nil
}
})
.
resume
()
}
// HTTPCookieStorageに特定のCookieが保存されているかを調べる
//
MARK: -
HTTPCookieStorageに特定のCookieが保存されているかを調べる
func
isCookieSet
(
name
:
String
,
url
:
URL
)
->
Bool
{
if
let
cookies
=
HTTPCookieStorage
.
shared
.
cookies
(
for
:
url
)
{
for
cookie
in
cookies
{
if
(
cookie
.
name
==
name
)
{
return
true
}
}
return
cookies
.
contains
(
where
:
{
cookie
in
cookie
.
name
==
name
})
}
return
false
}
...
...
Seilassist/Sailassist/Tab/View/MainTabView.swift
View file @
b579eb2b
...
...
@@ -30,6 +30,15 @@ struct MainTabView: View {
@State
private
var
offset
=
CGSize
.
zero
@State
var
isSignout
=
false
@State
private
var
sheetHeight
:
CGFloat
=
100
@State
private
var
dragStartHeight
:
CGFloat
=
100
@State
private
var
bottomInset
:
CGFloat
=
0
let
minHeight
:
CGFloat
=
100
let
midHeight
:
CGFloat
=
300
let
maxHeight
:
CGFloat
=
600
var
isTabWindowActive
:
Bool
{
sceneDelegate
.
tabWindow
!=
nil
}
...
...
@@ -46,6 +55,14 @@ struct MainTabView: View {
padView
}
}
.
background
(
GeometryReader
{
proxy
in
Color
.
clear
.
onAppear
{
bottomInset
=
proxy
.
safeAreaInsets
.
bottom
}
}
)
.
onAppear
{
SharingData
.
location
.
focusOwnShip
=
true
configureTabBarAppearance
()
...
...
@@ -53,7 +70,8 @@ struct MainTabView: View {
}
private
var
phoneView
:
some
View
{
ZStack
(
alignment
:
.
bottom
)
{
let
tabBarHeight
:
CGFloat
=
bottomInset
return
ZStack
(
alignment
:
.
bottom
)
{
TabView
(
selection
:
$
selectedTabModel
.
activeTab
)
{
mapTab
if
SharingData
.
my
.
isCommunication
{
...
...
@@ -62,18 +80,34 @@ struct MainTabView: View {
NotificationView
()
.
tag
(
Tab
.
alert
)
MenuView
(
isSignout
:
$
isSignout
)
.
tag
(
Tab
.
menu
)
}
.
sheet
(
isPresented
:
.
constant
(
isTaskSel
&&
isTabWindowActive
))
{
.
overlay
(
alignment
:
.
bottom
)
{
if
selectedTabModel
.
activeTab
==
.
map
{
MenuTaskView
()
.
zIndex
(
0
)
.
presentationDragIndicator
(
.
hidden
)
.
presentationDetents
([
.
height
(
150
),
.
medium
,
.
fraction
(
0.99
)])
.
presentationCornerRadius
(
15
)
.
presentationBackgroundInteraction
(
.
enabled
(
upThrough
:
.
medium
))
.
presentationBackground
(
ColorSet
.
BackgroundSecondary
.
color
)
.
interactiveDismissDisabled
()
.
frame
(
height
:
max
(
minHeight
,
sheetHeight
-
tabBarHeight
))
.
background
(
.
ultraThinMaterial
)
.
clipShape
(
RoundedRectangle
(
cornerRadius
:
16
))
.
padding
(
.
bottom
,
tabBarHeight
)
.
gesture
(
DragGesture
()
.
onChanged
{
value
in
let
newHeight
=
dragStartHeight
-
value
.
translation
.
height
sheetHeight
=
max
(
minHeight
,
min
(
maxHeight
,
newHeight
))
}
.
onEnded
{
_
in
let
detents
:
[
CGFloat
]
=
[
minHeight
,
midHeight
,
maxHeight
]
sheetHeight
=
detents
.
min
{
abs
(
$0
-
sheetHeight
)
<
abs
(
$1
-
sheetHeight
)
}
??
minHeight
dragStartHeight
=
sheetHeight
}
)
}
}
}
.
onAppear
{
dragStartHeight
=
sheetHeight
}
}
private
var
padView
:
some
View
{
ZStack
(
alignment
:
.
bottom
)
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment