From f6f28f4764aaf33d34d5abb348e5827acdd0bfb1 Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 16 Apr 2025 11:17:15 +0900 Subject: [PATCH 01/11] =?UTF-8?q?Webview=E3=81=AB=E3=82=BB=E3=83=83?= =?UTF-8?q?=E3=83=88=E3=81=99=E3=82=8Bcookie=E3=81=AE=E5=86=85=E5=AE=B9?= =?UTF-8?q?=E5=A4=89=E6=9B=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AgileWorks/App/RootViewController.swift | 1 + .../WebView/View/WebViewController.swift | 65 ++++++++++++++++++- .../Common/DataStore/KeychainDataStore.swift | 20 ++++++ .../Common/WebClient/GetSessionEndpoint.swift | 21 +++++- 4 files changed, 104 insertions(+), 3 deletions(-) diff --git a/AgileWorks/AgileWorks/App/RootViewController.swift b/AgileWorks/AgileWorks/App/RootViewController.swift index 7710298..e6712b7 100644 --- a/AgileWorks/AgileWorks/App/RootViewController.swift +++ b/AgileWorks/AgileWorks/App/RootViewController.swift @@ -109,6 +109,7 @@ extension RootViewController { KeychainDataStore().removeAccessToken(serverNumber: serverNumber) KeychainDataStore().removeDeviceID(serverNumber: serverNumber) KeychainDataStore().removeSessionID(serverNumber: serverNumber) + KeychainDataStore().removeCookieHeader(serverNumber: serverNumber) } //認証情報削除 KeychainDataStore().removeSystemName() diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index edee032..5ff6162 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -166,8 +166,20 @@ class WebViewController: UIViewController { // WebView ロード処理 private func loadWebView(url: String) { - let sesstionid = "JSESSIONID=" + KeychainDataStore().readSessionID()! - + var requestCookie = "" + if let cookieHeader = KeychainDataStore().readCookieHeader(){ + let individualCookies = self.separateCookieHeader(cookieHeader: cookieHeader) + for cookie in individualCookies { + let componentCookies = cookie.components(separatedBy: ";") + for componentCookie in componentCookies { + if !(componentCookie.contains("JSESSIONID=") || componentCookie.contains("Path=") || componentCookie.contains("Secure") || componentCookie.contains("HttpOnly") || componentCookie.contains("Expires=") || componentCookie.contains("SameSite=") || componentCookie.contains("Domain=")) { + requestCookie += componentCookie + ";" + } + } + } + } + + let sesstionid = "JSESSIONID=" + KeychainDataStore().readSessionID()! + ";" + requestCookie let url = URL(string: url)! var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30.0) request.httpShouldHandleCookies = false @@ -188,6 +200,22 @@ class WebViewController: UIViewController { self.setWebView() loadWebView(url: url) } + + private func separateCookieHeader(cookieHeader: String) -> [String] { + var individualCookies: [String] = [] + let cookies = cookieHeader.components(separatedBy: ",") + var currentCookie = "" + for cookie in cookies { + currentCookie += cookie + if cookie.contains("Path=") { + individualCookies.append(currentCookie) + currentCookie = "" + } else { + currentCookie += "," + } + } + return individualCookies + } // sessionId を cookie にセット private func setSessionId() { @@ -201,6 +229,39 @@ class WebViewController: UIViewController { ]) let cookieStore = self.mainWebView.configuration.websiteDataStore.httpCookieStore cookieStore.setCookie(cookie!) + + if let cookieHeader = KeychainDataStore().readCookieHeader(){ + let individualCookies = self.separateCookieHeader(cookieHeader: cookieHeader) + for cookie in individualCookies { + var cookiePath = "" + var cookieName = "" + var cookieValue = "" + let components = cookie.components(separatedBy: ";") + for component in components { + if component.contains("Path=") { + let componentValue = component.split(separator: "=") + if componentValue.count == 1 { + cookiePath = String(componentValue[1]) + } + } else if !(component.contains("Secure") || component.contains("HttpOnly") || component.contains("Expires=") || component.contains("SameSite=") || component.contains("Domain=")) { + let componentValue = component.split(separator: "=") + if componentValue.count == 2 { + cookieName = String(componentValue[0]) + cookieValue = String(componentValue[1]) + } + } + } + if cookieName != "JSESSIONID" { + let cookie = HTTPCookie(properties: [ + HTTPCookiePropertyKey.domain: KeychainDataStore().readServerURL() ?? "", + HTTPCookiePropertyKey.path: cookiePath, + HTTPCookiePropertyKey.name: cookieName, + HTTPCookiePropertyKey.value: cookieValue + ]) + cookieStore.setCookie(cookie!) + } + } + } } } diff --git a/AgileWorks/Common/DataStore/KeychainDataStore.swift b/AgileWorks/Common/DataStore/KeychainDataStore.swift index 03de57d..d6de3c2 100644 --- a/AgileWorks/Common/DataStore/KeychainDataStore.swift +++ b/AgileWorks/Common/DataStore/KeychainDataStore.swift @@ -21,6 +21,7 @@ final class KeychainDataStore: DataStoreProtocol { private let kSessionID: String = "SessionID" private let kSystemName: String = "SystemName" private let kCertificateLabel: String = "CertificateLabel" + private let kCookieHeader: String = "CookieHeader" // アクセストークンの書き込み func writeAccessToken(accessToken: String) { @@ -175,6 +176,25 @@ final class KeychainDataStore: DataStoreProtocol { removeKeychainValue(key: kSessionID) } } + + // cookieの書き込み + func writeCookieHeader(cookieHeader: String) { + setKeychainValue(key: kCookieHeader, value: cookieHeader) + } + + // cookieの読み込み + func readCookieHeader() -> String? { + return getKeychainValue(key: kCookieHeader) + } + + // cookieの削除 + func removeCookieHeader(serverNumber: Int? = nil) { + if let serverNumber = serverNumber { + removeKeychainValue(key: kCookieHeader, serverNumber: serverNumber) + } else { + removeKeychainValue(key: kCookieHeader) + } + } // サーバー識別名の書き込み func writeSystemName(systemName: String?) { diff --git a/AgileWorks/Common/WebClient/GetSessionEndpoint.swift b/AgileWorks/Common/WebClient/GetSessionEndpoint.swift index b36a22b..fa65907 100644 --- a/AgileWorks/Common/WebClient/GetSessionEndpoint.swift +++ b/AgileWorks/Common/WebClient/GetSessionEndpoint.swift @@ -32,10 +32,29 @@ extension GetSessionEndpoint { do { let decoder = JSONDecoder() decoder.keyDecodingStrategy = .convertFromSnakeCase - return try decoder.decode(SessionInfo.self, from: object as! Data) + // 新規JSESSIONID生成のとき、cookieを保存する + let decodedSessionInfo = try decoder.decode(SessionInfo.self, from: object as! Data) + let bodySessionId = decodedSessionInfo.sessionId + let headers = urlResponse.allHeaderFields[AnyHashable("Set-Cookie")] as! String + let headerSessionId = extractSessionId(from: headers) + if headerSessionId == bodySessionId { + print("CookieHeaders: \(headers)") + KeychainDataStore().writeCookieHeader(cookieHeader: headers) + } + return decodedSessionInfo } catch { log.error(error) throw ResponseError.unexpectedObject(object) } } + func extractSessionId(from cookieString: String) -> String?{ + let components = cookieString.components(separatedBy: ";") + for component in components { + let trimmedComponent = component.trimmingCharacters(in: .whitespaces) + if trimmedComponent.hasPrefix("JSESSIONID="){ + return String(trimmedComponent.dropFirst("JSESSIONID=".count)) + } + } + return nil + } } -- GitLab From 22cf32ff8b815749bff5621e0df62d27c71930dd Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 16 Apr 2025 14:34:28 +0900 Subject: [PATCH 02/11] =?UTF-8?q?=E5=88=A4=E5=88=A5=E3=81=99=E3=82=8Bcooki?= =?UTF-8?q?e=E3=81=AE=E6=A7=8B=E6=88=90=E8=A6=81=E7=B4=A0=E3=81=AE?= =?UTF-8?q?=E8=BF=BD=E5=8A=A0=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks/WebView/View/WebViewController.swift | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 5ff6162..5a4020d 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -172,7 +172,7 @@ class WebViewController: UIViewController { for cookie in individualCookies { let componentCookies = cookie.components(separatedBy: ";") for componentCookie in componentCookies { - if !(componentCookie.contains("JSESSIONID=") || componentCookie.contains("Path=") || componentCookie.contains("Secure") || componentCookie.contains("HttpOnly") || componentCookie.contains("Expires=") || componentCookie.contains("SameSite=") || componentCookie.contains("Domain=")) { + if !(componentCookie.contains("JSESSIONID=") || componentCookie.contains("Path=") || componentCookie.contains("Secure") || componentCookie.contains("HttpOnly") || componentCookie.contains("Expires=") || componentCookie.contains("Max-Age=") || componentCookie.contains("SameSite=") || componentCookie.contains("Domain=")) { requestCookie += componentCookie + ";" } } @@ -243,7 +243,7 @@ class WebViewController: UIViewController { if componentValue.count == 1 { cookiePath = String(componentValue[1]) } - } else if !(component.contains("Secure") || component.contains("HttpOnly") || component.contains("Expires=") || component.contains("SameSite=") || component.contains("Domain=")) { + } else if !(component.contains("Secure") || component.contains("HttpOnly") || component.contains("Expires=") || component.contains("Max-Age=") || component.contains("SameSite=") || component.contains("Domain=")) { let componentValue = component.split(separator: "=") if componentValue.count == 2 { cookieName = String(componentValue[0]) -- GitLab From fcb61652714f1d302fab1100e636923c396b7007 Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 16 Apr 2025 15:13:42 +0900 Subject: [PATCH 03/11] =?UTF-8?q?webview=E3=81=AE=E3=83=AA=E3=82=AF?= =?UTF-8?q?=E3=82=A8=E3=82=B9=E3=83=88cookie=E3=81=AE=E5=88=A4=E5=88=A5?= =?UTF-8?q?=E3=81=A8=E6=8C=87=E5=AE=9A=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks/WebView/View/WebViewController.swift | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 5a4020d..27fbcbf 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -172,18 +172,16 @@ class WebViewController: UIViewController { for cookie in individualCookies { let componentCookies = cookie.components(separatedBy: ";") for componentCookie in componentCookies { - if !(componentCookie.contains("JSESSIONID=") || componentCookie.contains("Path=") || componentCookie.contains("Secure") || componentCookie.contains("HttpOnly") || componentCookie.contains("Expires=") || componentCookie.contains("Max-Age=") || componentCookie.contains("SameSite=") || componentCookie.contains("Domain=")) { + if !(componentCookie.contains("Path=") || componentCookie.contains("Secure") || componentCookie.contains("HttpOnly") || componentCookie.contains("Expires=") || componentCookie.contains("Max-Age=") || componentCookie.contains("Domain=")) { requestCookie += componentCookie + ";" } } } } - - let sesstionid = "JSESSIONID=" + KeychainDataStore().readSessionID()! + ";" + requestCookie let url = URL(string: url)! var request = URLRequest(url: url, cachePolicy: .useProtocolCachePolicy, timeoutInterval: 30.0) request.httpShouldHandleCookies = false - request.setValue(sesstionid, forHTTPHeaderField: "Cookie") + request.setValue(requestCookie, forHTTPHeaderField: "Cookie") log.debug(""" Session Request: \(String(describing: request.url)) \nHTTPMethod: \(String(describing: request.httpMethod) ) -- GitLab From 8fd55068834e83a04d7c5274736f7365f55361fa Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 16 Apr 2025 16:02:29 +0900 Subject: [PATCH 04/11] =?UTF-8?q?updateSession=E3=81=AEcookie=E6=A7=8B?= =?UTF-8?q?=E6=88=90=E8=A6=81=E7=B4=A0=E5=88=A4=E5=88=A5=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebView/View/WebViewController.swift | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 27fbcbf..181c6c9 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -234,6 +234,7 @@ class WebViewController: UIViewController { var cookiePath = "" var cookieName = "" var cookieValue = "" + var samesite: String? = nil let components = cookie.components(separatedBy: ";") for component in components { if component.contains("Path=") { @@ -241,7 +242,16 @@ class WebViewController: UIViewController { if componentValue.count == 1 { cookiePath = String(componentValue[1]) } - } else if !(component.contains("Secure") || component.contains("HttpOnly") || component.contains("Expires=") || component.contains("Max-Age=") || component.contains("SameSite=") || component.contains("Domain=")) { + } else if component.contains("SameSite=") { + let componentValue = component.split(separator: "=") + if componentValue.count == 1 { + if String(componentValue[1]) == "Strict" { + samesite = HTTPCookieStringPolicy.sameSiteStrict.rawValue + } else if String(componentValue[1]) == "Lax" { + samesite = HTTPCookieStringPolicy.sameSiteLax.rawValue + } + } + } else if !(component.contains("Secure") || component.contains("HttpOnly") || component.contains("Expires=") || component.contains("Max-Age=") || component.contains("Domain=")) { let componentValue = component.split(separator: "=") if componentValue.count == 2 { cookieName = String(componentValue[0]) @@ -254,7 +264,8 @@ class WebViewController: UIViewController { HTTPCookiePropertyKey.domain: KeychainDataStore().readServerURL() ?? "", HTTPCookiePropertyKey.path: cookiePath, HTTPCookiePropertyKey.name: cookieName, - HTTPCookiePropertyKey.value: cookieValue + HTTPCookiePropertyKey.value: cookieValue, + HTTPCookiePropertyKey.sameSitePolicy: "" ]) cookieStore.setCookie(cookie!) } -- GitLab From 19bc4e583257161ea3e619c517b934d1c6e8b8aa Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 16 Apr 2025 16:47:13 +0900 Subject: [PATCH 05/11] =?UTF-8?q?updateSession=E3=81=AEcookie=E6=A7=8B?= =?UTF-8?q?=E6=88=90=E8=A6=81=E7=B4=A0=E5=88=A4=E5=88=A5=E3=81=AE=E4=BF=AE?= =?UTF-8?q?=E6=AD=A32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../WebView/View/WebViewController.swift | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift index 181c6c9..106cc37 100644 --- a/AgileWorks/AgileWorks/WebView/View/WebViewController.swift +++ b/AgileWorks/AgileWorks/WebView/View/WebViewController.swift @@ -234,7 +234,8 @@ class WebViewController: UIViewController { var cookiePath = "" var cookieName = "" var cookieValue = "" - var samesite: String? = nil + var samesite: String? = "" + var secure = false let components = cookie.components(separatedBy: ";") for component in components { if component.contains("Path=") { @@ -242,6 +243,8 @@ class WebViewController: UIViewController { if componentValue.count == 1 { cookiePath = String(componentValue[1]) } + } else if component.contains("Secure") { + secure = true } else if component.contains("SameSite=") { let componentValue = component.split(separator: "=") if componentValue.count == 1 { @@ -249,9 +252,11 @@ class WebViewController: UIViewController { samesite = HTTPCookieStringPolicy.sameSiteStrict.rawValue } else if String(componentValue[1]) == "Lax" { samesite = HTTPCookieStringPolicy.sameSiteLax.rawValue + } else if String(componentValue[1]) == "None" { + samesite = nil } } - } else if !(component.contains("Secure") || component.contains("HttpOnly") || component.contains("Expires=") || component.contains("Max-Age=") || component.contains("Domain=")) { + } else if !(component.contains("HttpOnly") || component.contains("Expires=") || component.contains("Max-Age=") || component.contains("Domain=")) { let componentValue = component.split(separator: "=") if componentValue.count == 2 { cookieName = String(componentValue[0]) @@ -259,13 +264,19 @@ class WebViewController: UIViewController { } } } + if samesite == nil { + if secure != true { + samesite = "" + } + } if cookieName != "JSESSIONID" { let cookie = HTTPCookie(properties: [ HTTPCookiePropertyKey.domain: KeychainDataStore().readServerURL() ?? "", HTTPCookiePropertyKey.path: cookiePath, + HTTPCookiePropertyKey.secure: secure, HTTPCookiePropertyKey.name: cookieName, HTTPCookiePropertyKey.value: cookieValue, - HTTPCookiePropertyKey.sameSitePolicy: "" + HTTPCookiePropertyKey.sameSitePolicy: samesite ]) cookieStore.setCookie(cookie!) } -- GitLab From bfbe7eb73b4d4b269acbdf9d05dd2e5cd89c68cd Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 23 Apr 2025 13:24:42 +0900 Subject: [PATCH 06/11] =?UTF-8?q?=E3=82=A2=E3=83=97=E3=83=AA=E3=81=AE?= =?UTF-8?q?=E3=83=90=E3=83=BC=E3=82=B8=E3=83=A7=E3=83=B3=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index a18f4ce..e7504a5 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -2170,7 +2170,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 4TWZNUHVN6; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 4TWZNUHVN6; INFOPLIST_FILE = AgileWorks/Info.plist; @@ -2179,7 +2179,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.1.0; + MARKETING_VERSION = 1.1.1; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -2345,7 +2345,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 3; DEVELOPMENT_TEAM = 4TWZNUHVN6; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 4TWZNUHVN6; INFOPLIST_FILE = AgileWorks/Info.plist; @@ -2354,7 +2354,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.1.0; + MARKETING_VERSION = 1.1.1; OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", -- GitLab From 95d607d21c0f3b1ab32f20e568dd9b209f86e67b Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 23 Apr 2025 14:27:04 +0900 Subject: [PATCH 07/11] =?UTF-8?q?=E5=AF=A9=E6=9F=BB=E3=81=A7=E3=82=A8?= =?UTF-8?q?=E3=83=A9=E3=83=BC=E3=81=8C=E5=87=BA=E3=81=A6=E3=81=84=E3=81=9F?= =?UTF-8?q?=E3=81=A8=E3=81=93=E3=82=8D=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AgileWorks.xcodeproj/project.pbxproj | 26 ++++++++++++++++--- 1 file changed, 22 insertions(+), 4 deletions(-) diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index e7504a5..e59fb08 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 54; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -1150,6 +1150,7 @@ 75D4EC602A3C00B00096F9D2 /* Frameworks */, 75D4EC612A3C00B00096F9D2 /* Resources */, 75D4EC822A3C2CAD0096F9D2 /* Embed Frameworks */, + F9E71CBD2DB8B01D00485422 /* ShellScript */, ); buildRules = ( ); @@ -1264,7 +1265,7 @@ ); mainGroup = BDA1830623F3FD7F00C9A6DD; packageReferences = ( - 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859.git" */, + 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859" */, ); productRefGroup = BDA1831023F3FD7F00C9A6DD /* Products */; projectDirPath = ""; @@ -1438,6 +1439,23 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n# GoogleService-Infoのコピー\n# FLAVOR でファイルを切り替えていたときの名残\ncp \"${PROJECT_DIR}/${PROJECT_NAME}/Configurations/GoogleService-Info-Production.plist\" \"${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist\"\necho \"Production GoogleService-Info copied.\"\n\n# 設定にバージョン、ビルド番号を設定\nVERSION=\"$MARKETING_VERSION\"\n/usr/libexec/PlistBuddy -c \"Set :PreferenceSpecifiers:1:DefaultValue ${VERSION}\" \"${BUILT_PRODUCTS_DIR}/${WRAPPER_NAME}/Settings.bundle/Root.plist\"\n\n# LicensePlist\nif [ $CONFIGURATION = \"Debug\" ]; then\n ${PODS_ROOT}/LicensePlist/license-plist --output-path $PRODUCT_NAME/Settings.bundle\nfi\n\n# SwiftLint\nif which ${PODS_ROOT}/SwiftLint/swiftlint >/dev/null; then\n ${PODS_ROOT}/SwiftLint/swiftlint\nelse\n echo \"warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint\"\nfi\n\n# Crashlytics\n\"${PODS_ROOT}/Fabric/run\"\n"; }; + F9E71CBD2DB8B01D00485422 /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + ); + outputFileListPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "cd \"${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/\"\nif [[ -d \"Frameworks\" ]]; then\nrm -fr Frameworks\nfi\n"; + }; /* End PBXShellScriptBuildPhase section */ /* Begin PBXSourcesBuildPhase section */ @@ -2485,7 +2503,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859.git" */ = { + 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Cosmo/ISO8859.git"; requirement = { @@ -2498,7 +2516,7 @@ /* Begin XCSwiftPackageProductDependency section */ 752FE4CF2966B9C2004922AD /* ISO8859 */ = { isa = XCSwiftPackageProductDependency; - package = 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859.git" */; + package = 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859" */; productName = ISO8859; }; /* End XCSwiftPackageProductDependency section */ -- GitLab From c74d257f8122d572034c22a07cef5492151471d8 Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 23 Apr 2025 14:33:26 +0900 Subject: [PATCH 08/11] =?UTF-8?q?=E4=B8=8D=E8=A6=81=E3=81=AA=E5=A4=89?= =?UTF-8?q?=E6=9B=B4=E3=81=AE=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks.xcodeproj/project.pbxproj | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index e59fb08..8359118 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 52; + objectVersion = 54; objects = { /* Begin PBXBuildFile section */ @@ -1265,7 +1265,7 @@ ); mainGroup = BDA1830623F3FD7F00C9A6DD; packageReferences = ( - 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859" */, + 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859.git" */, ); productRefGroup = BDA1831023F3FD7F00C9A6DD /* Products */; projectDirPath = ""; @@ -2503,7 +2503,7 @@ /* End XCConfigurationList section */ /* Begin XCRemoteSwiftPackageReference section */ - 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859" */ = { + 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859.git" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/Cosmo/ISO8859.git"; requirement = { @@ -2516,7 +2516,7 @@ /* Begin XCSwiftPackageProductDependency section */ 752FE4CF2966B9C2004922AD /* ISO8859 */ = { isa = XCSwiftPackageProductDependency; - package = 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859" */; + package = 752FE4CE2966B9C1004922AD /* XCRemoteSwiftPackageReference "ISO8859.git" */; productName = ISO8859; }; /* End XCSwiftPackageProductDependency section */ -- GitLab From e8f5929c05ee4505a07c4a50a9ac0e72e6daca39 Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 23 Apr 2025 14:49:20 +0900 Subject: [PATCH 09/11] =?UTF-8?q?current=5Fproject=5Fversikon=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks.xcodeproj/project.pbxproj | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index 8359118..c66d355 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -2188,7 +2188,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 4TWZNUHVN6; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 4TWZNUHVN6; INFOPLIST_FILE = AgileWorks/Info.plist; @@ -2363,7 +2363,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 3; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 4TWZNUHVN6; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 4TWZNUHVN6; INFOPLIST_FILE = AgileWorks/Info.plist; -- GitLab From 98f9e3207f8d10fb4cafcbbe53cb63be6cf624e0 Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 23 Apr 2025 15:05:31 +0900 Subject: [PATCH 10/11] =?UTF-8?q?current=5Fproject=5Fversikon=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index c66d355..64ac922 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -2363,7 +2363,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 1; + CURRENT_PROJECT_VERSION = 2; DEVELOPMENT_TEAM = 4TWZNUHVN6; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 4TWZNUHVN6; INFOPLIST_FILE = AgileWorks/Info.plist; -- GitLab From cccbc941b77bda971cfd637887ba2dde6d5d38e2 Mon Sep 17 00:00:00 2001 From: tsagano Date: Wed, 23 Apr 2025 15:08:30 +0900 Subject: [PATCH 11/11] =?UTF-8?q?current=5Fproject=5Fversikon=E3=81=AE?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AgileWorks/AgileWorks.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj index 64ac922..c66d355 100644 --- a/AgileWorks/AgileWorks.xcodeproj/project.pbxproj +++ b/AgileWorks/AgileWorks.xcodeproj/project.pbxproj @@ -2363,7 +2363,7 @@ CODE_SIGN_IDENTITY = "Apple Development"; "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer"; CODE_SIGN_STYLE = Manual; - CURRENT_PROJECT_VERSION = 2; + CURRENT_PROJECT_VERSION = 1; DEVELOPMENT_TEAM = 4TWZNUHVN6; "DEVELOPMENT_TEAM[sdk=iphoneos*]" = 4TWZNUHVN6; INFOPLIST_FILE = AgileWorks/Info.plist; -- GitLab