From f88bf4590be14ea744411f275a02d5f5b3186e95 Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 11:57:48 +0900 Subject: [PATCH 1/7] fix: add explicit capture consent and remove remote messaging --- .github/workflows/ios.yml | 2 +- Interceptor.xcodeproj/project.pbxproj | 99 +----- .../xcshareddata/swiftpm/Package.resolved | 128 +------ Interceptor/Classes/Tuberose.swift | 124 ++++--- Interceptor/Components/VPNSetting.swift | 27 +- Interceptor/ContentView.swift | 20 +- Interceptor/GoogleService-Info.plist | 30 -- Interceptor/Interceptor.entitlements | 2 - Interceptor/Interceptor.swift | 86 +---- Interceptor/Localizable.xcstrings | 336 ++++++++++++++++++ Interceptor/Structs/AccessToken.swift | 4 +- Interceptor/Views/DataUseConsentView.swift | 58 +++ Interceptor/Views/SettingsView.swift | 24 +- Interceptor/en.lproj/InfoPlist.strings | 2 - Interceptor/ja.lproj/InfoPlist.strings | 2 - InterceptorTests/InterceptorTests.swift | 185 +++++++++- InterceptorUITests/InterceptorUITests.swift | 37 ++ PacketTunnel/PacketTunnelProvider.swift | 21 +- README.md | 2 +- docs/app-review/README.md | 26 ++ docs/app-review/privacy-policy-draft.md | 68 ++++ docs/app-review/review-notes-draft.md | 40 +++ fastlane/metadata/en-US/description.txt | 11 + fastlane/metadata/en-US/keywords.txt | 1 + fastlane/metadata/en-US/promotional_text.txt | 1 + fastlane/metadata/ja/description.txt | 11 + fastlane/metadata/ja/keywords.txt | 1 + fastlane/metadata/ja/promotional_text.txt | 1 + 28 files changed, 935 insertions(+), 414 deletions(-) delete mode 100644 Interceptor/GoogleService-Info.plist create mode 100644 Interceptor/Views/DataUseConsentView.swift create mode 100644 docs/app-review/README.md create mode 100644 docs/app-review/privacy-policy-draft.md create mode 100644 docs/app-review/review-notes-draft.md create mode 100644 fastlane/metadata/en-US/description.txt create mode 100644 fastlane/metadata/en-US/keywords.txt create mode 100644 fastlane/metadata/en-US/promotional_text.txt create mode 100644 fastlane/metadata/ja/description.txt create mode 100644 fastlane/metadata/ja/keywords.txt create mode 100644 fastlane/metadata/ja/promotional_text.txt diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index eec7e61..19f2b9f 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v4 with: repository: qtmleap/Mudmouth - ref: ddcefe656c0f27289ee4f506f2112b8bbdaa407d + ref: 37fb3b4136bd92e828f183fc375322496ef58240 path: Mudmouth persist-credentials: false diff --git a/Interceptor.xcodeproj/project.pbxproj b/Interceptor.xcodeproj/project.pbxproj index 59e24e4..60240bd 100644 --- a/Interceptor.xcodeproj/project.pbxproj +++ b/Interceptor.xcodeproj/project.pbxproj @@ -17,18 +17,9 @@ 10B520E52E52A344006C2045 /* TreeSitterJavaScript in Frameworks */ = {isa = PBXBuildFile; productRef = 10B520E42E52A344006C2045 /* TreeSitterJavaScript */; }; 10B520E72E52A344006C2045 /* TreeSitterJavaScriptQueries in Frameworks */ = {isa = PBXBuildFile; productRef = 10B520E62E52A344006C2045 /* TreeSitterJavaScriptQueries */; }; 10B520E92E52A344006C2045 /* TreeSitterJavaScriptRunestone in Frameworks */ = {isa = PBXBuildFile; productRef = 10B520E82E52A344006C2045 /* TreeSitterJavaScriptRunestone */; }; - 10D6E0D52E56492F00439E25 /* FirebaseMessaging in Frameworks */ = {isa = PBXBuildFile; productRef = 10D6E0D42E56492F00439E25 /* FirebaseMessaging */; }; - 10D6E0D72E56493500439E25 /* FirebaseRemoteConfig in Frameworks */ = {isa = PBXBuildFile; productRef = 10D6E0D62E56493500439E25 /* FirebaseRemoteConfig */; }; - 10D6E0D92E56494100439E25 /* FirebasePerformance in Frameworks */ = {isa = PBXBuildFile; productRef = 10D6E0D82E56494100439E25 /* FirebasePerformance */; }; 10F701BC2E491546006ECDD2 /* NetworkExtension.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 10F701BB2E491546006ECDD2 /* NetworkExtension.framework */; }; 10F701C42E491546006ECDD2 /* PacketTunnel.appex in Embed Foundation Extensions */ = {isa = PBXBuildFile; fileRef = 10F701B92E491546006ECDD2 /* PacketTunnel.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 10F701CB2E491567006ECDD2 /* Mudmouth in Frameworks */ = {isa = PBXBuildFile; productRef = 10F701CA2E491567006ECDD2 /* Mudmouth */; }; - 10F702712E49829B006ECDD2 /* FirebaseAnalytics in Frameworks */ = {isa = PBXBuildFile; productRef = 10F702702E49829B006ECDD2 /* FirebaseAnalytics */; }; - 10F702732E49829B006ECDD2 /* FirebaseAnalyticsCore in Frameworks */ = {isa = PBXBuildFile; productRef = 10F702722E49829B006ECDD2 /* FirebaseAnalyticsCore */; }; - 10F702752E49829B006ECDD2 /* FirebaseAnalyticsIdentitySupport in Frameworks */ = {isa = PBXBuildFile; productRef = 10F702742E49829B006ECDD2 /* FirebaseAnalyticsIdentitySupport */; }; - 10F702772E49829B006ECDD2 /* FirebaseAppCheck in Frameworks */ = {isa = PBXBuildFile; productRef = 10F702762E49829B006ECDD2 /* FirebaseAppCheck */; }; - 10F702792E49829B006ECDD2 /* FirebaseCore in Frameworks */ = {isa = PBXBuildFile; productRef = 10F702782E49829B006ECDD2 /* FirebaseCore */; }; - 10F7027B2E49829B006ECDD2 /* FirebaseCrashlytics in Frameworks */ = {isa = PBXBuildFile; productRef = 10F7027A2E49829B006ECDD2 /* FirebaseCrashlytics */; }; 10FBBF2D2E522C5E00CC57B0 /* Runestone in Frameworks */ = {isa = PBXBuildFile; productRef = 10FBBF2C2E522C5E00CC57B0 /* Runestone */; }; /* End PBXBuildFile section */ @@ -137,26 +128,17 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 10D6E0D52E56492F00439E25 /* FirebaseMessaging in Frameworks */, 10925F5D2E4CFA25003611AA /* QuantumLeap in Frameworks */, - 10D6E0D92E56494100439E25 /* FirebasePerformance in Frameworks */, 10B520E52E52A344006C2045 /* TreeSitterJavaScript in Frameworks */, 104F3BAF2E49131900A2D6F1 /* Mudmouth in Frameworks */, - 10F702752E49829B006ECDD2 /* FirebaseAnalyticsIdentitySupport in Frameworks */, 104F3BB22E49135800A2D6F1 /* Mudmouth in Frameworks */, - 10F702712E49829B006ECDD2 /* FirebaseAnalytics in Frameworks */, - 10F702792E49829B006ECDD2 /* FirebaseCore in Frameworks */, 10FBBF2D2E522C5E00CC57B0 /* Runestone in Frameworks */, 1089BCFA2E5239CA0088488B /* TreeSitterJSON in Frameworks */, - 10D6E0D72E56493500439E25 /* FirebaseRemoteConfig in Frameworks */, 10B520E92E52A344006C2045 /* TreeSitterJavaScriptRunestone in Frameworks */, 1089BCFC2E5239CA0088488B /* TreeSitterJSONQueries in Frameworks */, - 10F7027B2E49829B006ECDD2 /* FirebaseCrashlytics in Frameworks */, 10B520E72E52A344006C2045 /* TreeSitterJavaScriptQueries in Frameworks */, - 10F702772E49829B006ECDD2 /* FirebaseAppCheck in Frameworks */, 1089BCFE2E5239CA0088488B /* TreeSitterJSONRunestone in Frameworks */, 1089BD002E5239CA0088488B /* TreeSitterLanguagesCommon in Frameworks */, - 10F702732E49829B006ECDD2 /* FirebaseAnalyticsCore in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -241,12 +223,6 @@ packageProductDependencies = ( 104F3BAE2E49131900A2D6F1 /* Mudmouth */, 104F3BB12E49135800A2D6F1 /* Mudmouth */, - 10F702702E49829B006ECDD2 /* FirebaseAnalytics */, - 10F702722E49829B006ECDD2 /* FirebaseAnalyticsCore */, - 10F702742E49829B006ECDD2 /* FirebaseAnalyticsIdentitySupport */, - 10F702762E49829B006ECDD2 /* FirebaseAppCheck */, - 10F702782E49829B006ECDD2 /* FirebaseCore */, - 10F7027A2E49829B006ECDD2 /* FirebaseCrashlytics */, 10925F5C2E4CFA25003611AA /* QuantumLeap */, 10FBBF2C2E522C5E00CC57B0 /* Runestone */, 1089BCF92E5239CA0088488B /* TreeSitterJSON */, @@ -256,9 +232,6 @@ 10B520E42E52A344006C2045 /* TreeSitterJavaScript */, 10B520E62E52A344006C2045 /* TreeSitterJavaScriptQueries */, 10B520E82E52A344006C2045 /* TreeSitterJavaScriptRunestone */, - 10D6E0D42E56492F00439E25 /* FirebaseMessaging */, - 10D6E0D62E56493500439E25 /* FirebaseRemoteConfig */, - 10D6E0D82E56494100439E25 /* FirebasePerformance */, ); productName = Interceptor; productReference = 104F3B812E49099200A2D6F1 /* Interceptor.app */; @@ -372,7 +345,6 @@ minimizedProjectReferenceProxies = 1; packageReferences = ( 104F3BB02E49135800A2D6F1 /* XCLocalSwiftPackageReference "../Mudmouth" */, - 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */, 10925F5B2E4CFA25003611AA /* XCRemoteSwiftPackageReference "QuantumLeap" */, 10FBBF2B2E522C5E00CC57B0 /* XCRemoteSwiftPackageReference "Runestone" */, 1089BCF82E5239CA0088488B /* XCRemoteSwiftPackageReference "treesitterlanguages" */, @@ -602,7 +574,7 @@ CODE_SIGN_ENTITLEMENTS = Interceptor/Interceptor.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -610,7 +582,6 @@ INFOPLIST_KEY_CFBundleDisplayName = Interceptor; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - INFOPLIST_KEY_NSUserTrackingUsageDescription = NSUserTrackingUsageDescription; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -641,7 +612,7 @@ CODE_SIGN_ENTITLEMENTS = Interceptor/Interceptor.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; ENABLE_PREVIEWS = YES; GENERATE_INFOPLIST_FILE = YES; @@ -649,7 +620,6 @@ INFOPLIST_KEY_CFBundleDisplayName = Interceptor; INFOPLIST_KEY_ITSAppUsesNonExemptEncryption = NO; INFOPLIST_KEY_LSApplicationCategoryType = "public.app-category.utilities"; - INFOPLIST_KEY_NSUserTrackingUsageDescription = NSUserTrackingUsageDescription; INFOPLIST_KEY_UIApplicationSceneManifest_Generation = YES; INFOPLIST_KEY_UIApplicationSupportsIndirectInputEvents = YES; INFOPLIST_KEY_UILaunchScreen_Generation = YES; @@ -677,7 +647,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.5; @@ -696,7 +666,7 @@ buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; GENERATE_INFOPLIST_FILE = YES; IPHONEOS_DEPLOYMENT_TARGET = 18.5; @@ -714,7 +684,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; @@ -731,7 +701,7 @@ isa = XCBuildConfiguration; buildSettings = { CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; GENERATE_INFOPLIST_FILE = YES; MARKETING_VERSION = 1.0; @@ -750,7 +720,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnel/PacketTunnel.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PacketTunnel/Info.plist; @@ -782,7 +752,7 @@ CODE_SIGN_ENTITLEMENTS = PacketTunnel/PacketTunnel.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 28; + CURRENT_PROJECT_VERSION = 29; DEVELOPMENT_TEAM = 5Q94QJ7G98; GENERATE_INFOPLIST_FILE = YES; INFOPLIST_FILE = PacketTunnel/Info.plist; @@ -882,14 +852,6 @@ minimumVersion = 0.0.4; }; }; - 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */ = { - isa = XCRemoteSwiftPackageReference; - repositoryURL = "https://github.com/firebase/firebase-ios-sdk"; - requirement = { - kind = upToNextMajorVersion; - minimumVersion = 12.1.0; - }; - }; 10FBBF2B2E522C5E00CC57B0 /* XCRemoteSwiftPackageReference "Runestone" */ = { isa = XCRemoteSwiftPackageReference; repositoryURL = "https://github.com/simonbs/Runestone.git"; @@ -949,56 +911,11 @@ package = 1089BCF82E5239CA0088488B /* XCRemoteSwiftPackageReference "treesitterlanguages" */; productName = TreeSitterJavaScriptRunestone; }; - 10D6E0D42E56492F00439E25 /* FirebaseMessaging */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseMessaging; - }; - 10D6E0D62E56493500439E25 /* FirebaseRemoteConfig */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseRemoteConfig; - }; - 10D6E0D82E56494100439E25 /* FirebasePerformance */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebasePerformance; - }; 10F701CA2E491567006ECDD2 /* Mudmouth */ = { isa = XCSwiftPackageProductDependency; package = 104F3BB02E49135800A2D6F1 /* XCLocalSwiftPackageReference "../Mudmouth" */; productName = Mudmouth; }; - 10F702702E49829B006ECDD2 /* FirebaseAnalytics */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseAnalytics; - }; - 10F702722E49829B006ECDD2 /* FirebaseAnalyticsCore */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseAnalyticsCore; - }; - 10F702742E49829B006ECDD2 /* FirebaseAnalyticsIdentitySupport */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseAnalyticsIdentitySupport; - }; - 10F702762E49829B006ECDD2 /* FirebaseAppCheck */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseAppCheck; - }; - 10F702782E49829B006ECDD2 /* FirebaseCore */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseCore; - }; - 10F7027A2E49829B006ECDD2 /* FirebaseCrashlytics */ = { - isa = XCSwiftPackageProductDependency; - package = 10F7026F2E49829B006ECDD2 /* XCRemoteSwiftPackageReference "firebase-ios-sdk" */; - productName = FirebaseCrashlytics; - }; 10FBBF2C2E522C5E00CC57B0 /* Runestone */ = { isa = XCSwiftPackageProductDependency; package = 10FBBF2B2E522C5E00CC57B0 /* XCRemoteSwiftPackageReference "Runestone" */; diff --git a/Interceptor.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/Interceptor.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index c17a964..2704aa3 100644 --- a/Interceptor.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/Interceptor.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -1,24 +1,6 @@ { - "originHash" : "ae275c1f2220b3ee02617d3d89e557987fda1816c03980da0f975edea7d47070", + "originHash" : "22d5619e2fdce386caa392fc1fb4a202417795060d3e5576bcf78e0f21bb0a08", "pins" : [ - { - "identity" : "abseil-cpp-binary", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/abseil-cpp-binary.git", - "state" : { - "revision" : "bbe8b69694d7873315fd3a4ad41efe043e1c07c5", - "version" : "1.2024072200.0" - } - }, - { - "identity" : "app-check", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/app-check.git", - "state" : { - "revision" : "61b85103a1aeed8218f17c794687781505fbbef5", - "version" : "11.2.0" - } - }, { "identity" : "bettersafariview", "kind" : "remoteSourceControl", @@ -46,69 +28,6 @@ "version" : "1.9.0" } }, - { - "identity" : "firebase-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/firebase/firebase-ios-sdk", - "state" : { - "revision" : "b9bf3adac18e6e3059167194aeb632f15a5ba4b2", - "version" : "12.1.0" - } - }, - { - "identity" : "google-ads-on-device-conversion-ios-sdk", - "kind" : "remoteSourceControl", - "location" : "https://github.com/googleads/google-ads-on-device-conversion-ios-sdk", - "state" : { - "revision" : "e15f979c3eaf477d24e5bfec9d87f1d76fbac297", - "version" : "2.2.0" - } - }, - { - "identity" : "googleappmeasurement", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GoogleAppMeasurement.git", - "state" : { - "revision" : "883305109ead4599e4ca59591754ee72e81e6b5e", - "version" : "12.1.0" - } - }, - { - "identity" : "googledatatransport", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GoogleDataTransport.git", - "state" : { - "revision" : "617af071af9aa1d6a091d59a202910ac482128f9", - "version" : "10.1.0" - } - }, - { - "identity" : "googleutilities", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/GoogleUtilities.git", - "state" : { - "revision" : "60da361632d0de02786f709bdc0c4df340f7613e", - "version" : "8.1.0" - } - }, - { - "identity" : "grpc-binary", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/grpc-binary.git", - "state" : { - "revision" : "cc0001a0cf963aa40501d9c2b181e7fc9fd8ec71", - "version" : "1.69.0" - } - }, - { - "identity" : "gtm-session-fetcher", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/gtm-session-fetcher.git", - "state" : { - "revision" : "fb7f2740b1570d2f7599c6bb9531bf4fad6974b7", - "version" : "5.0.0" - } - }, { "identity" : "gzipswift", "kind" : "remoteSourceControl", @@ -118,15 +37,6 @@ "version" : "6.1.0" } }, - { - "identity" : "interop-ios-for-google-sdks", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/interop-ios-for-google-sdks.git", - "state" : { - "revision" : "040d087ac2267d2ddd4cca36c757d1c6a05fdbfe", - "version" : "101.0.0" - } - }, { "identity" : "keychainaccess", "kind" : "remoteSourceControl", @@ -136,15 +46,6 @@ "version" : "4.2.2" } }, - { - "identity" : "leveldb", - "kind" : "remoteSourceControl", - "location" : "https://github.com/firebase/leveldb.git", - "state" : { - "revision" : "a0bc79961d7be727d258d33d5a6b2f1023270ba1", - "version" : "1.22.5" - } - }, { "identity" : "licenselist", "kind" : "remoteSourceControl", @@ -154,24 +55,6 @@ "version" : "2.2.0" } }, - { - "identity" : "nanopb", - "kind" : "remoteSourceControl", - "location" : "https://github.com/firebase/nanopb.git", - "state" : { - "revision" : "b7e1104502eca3a213b46303391ca4d3bc8ddec1", - "version" : "2.30910.0" - } - }, - { - "identity" : "promises", - "kind" : "remoteSourceControl", - "location" : "https://github.com/google/promises.git", - "state" : { - "revision" : "540318ecedd63d883069ae7f1ed811a2df00b6ac", - "version" : "2.4.0" - } - }, { "identity" : "quantumleap", "kind" : "remoteSourceControl", @@ -271,15 +154,6 @@ "version" : "2.33.0" } }, - { - "identity" : "swift-protobuf", - "kind" : "remoteSourceControl", - "location" : "https://github.com/apple/swift-protobuf.git", - "state" : { - "revision" : "102a647b573f60f73afdce5613a51d71349fe507", - "version" : "1.30.0" - } - }, { "identity" : "swift-syntax", "kind" : "remoteSourceControl", diff --git a/Interceptor/Classes/Tuberose.swift b/Interceptor/Classes/Tuberose.swift index bd7647e..6c523c1 100644 --- a/Interceptor/Classes/Tuberose.swift +++ b/Interceptor/Classes/Tuberose.swift @@ -9,12 +9,13 @@ import KeychainAccess import Mudmouth import SwiftUI -import SwiftyLogger +import SwiftData +import UserNotifications @MainActor public final class Tuberose: ObservableObject { @AppStorage("ACTIVATE_ON_FOREGROUND") - var activateOnForeground: Bool = true + var activateOnForeground: Bool = false /// VPN設定 /// NOTE: とりあえず最初はスプラ2とスプラ3のみに対応 @@ -41,9 +42,10 @@ public final class Tuberose: ObservableObject { @Published private(set) var tokens: [AccessToken] = [] - private let decoder: JSONDecoder = .init() - private let encoder: JSONEncoder = .init() - private let keychain: Keychain = .init(service: Bundle.main.bundleIdentifier!).synchronizable(true) + private let keychain: Keychain = .init(service: Bundle.main.bundleIdentifier!) + .synchronizable(false) + .accessibility(.afterFirstUnlockThisDeviceOnly) + private let legacyKeychain: Keychain = .init(service: Bundle.main.bundleIdentifier!).synchronizable(true) let mudmouth: Mudmouth = .default @@ -52,13 +54,12 @@ public final class Tuberose: ObservableObject { } init() { - tokens = options.map(\.host).compactMap { host in - try? keychain.getToken(forKey: host) - } + loadStoredTokens() NotificationCenter.default.addObserver(self, selector: #selector(didBecomeActiveNotification), name: UIApplication.didBecomeActiveNotification, object: nil) } func startVPNTunnel() async throws { + try CaptureAuthorization.requireConsent() try await mudmouth.startVPNTunnel(options: options) } @@ -67,53 +68,81 @@ public final class Tuberose: ObservableObject { } func setToken(_ value: UNNotificationResponse) throws { - let userInfo = value.notification.request.content.userInfo - if let data: Data = userInfo.data(forKey: "headers"), - let headers: [String: String] = try? JSONSerialization.jsonObject(with: data) as? [String: String], - let cookies: [String: String] = headers.cookies, - let host: String = headers.host - { - switch host { - case "app.smashbros.nintendo.net": - if let token: String = cookies.value(forKey: "super_smash_session"), - let gtoken: String = headers.value(forKey: "X-GameWebToken") - { - SwiftyLogger.debug("Captured token: \(token) \(gtoken)") - try? keychain.setToken(.init(contentId: .SMSP, host: host, gtoken: gtoken, accessToken: token), forKey: host) - } - case "app.splatoon2.nintendo.net": - if let token: String = cookies.value(forKey: "iksm_session"), - let gtoken: String = headers.value(forKey: "X-GameWebToken") - { - SwiftyLogger.debug("Captured token: \(token) \(gtoken)") - try? keychain.setToken(.init(contentId: .SP2, host: host, gtoken: gtoken, accessToken: token), forKey: host) - } - case "api.lp1.av5ja.srv.nintendo.net": - if let data: Data = userInfo.data(forKey: "body"), - let body: [String: Any] = try? JSONSerialization.jsonObject(with: data) as? [String: Any], - let token: String = body.value(forKey: "bulletToken") as? String, - let gtoken: String = cookies.value(forKey: "_gtoken") - { - SwiftyLogger.debug("Captured token: \(token) \(gtoken)") - try? keychain.setToken(.init(contentId: .SP3, host: host, gtoken: gtoken, accessToken: token), forKey: host) - } - default: - break + try CaptureAuthorization.requireConsent() + guard let rawID = value.notification.request.content.userInfo["recordID"] as? String, + let recordID = UUID(uuidString: rawID) else { return } + var descriptor = FetchDescriptor(predicate: #Predicate { $0.id == recordID }) + descriptor.fetchLimit = 1 + guard try ModelContainer.default.mainContext.fetch(descriptor).first != nil else { return } + // A delayed notification must not overwrite a newer token with an older record. + try refreshTokensFromRecords() + } + + func refreshTokensFromRecords() throws { + try CaptureAuthorization.requireConsent() + let context = ModelContainer.default.mainContext + for host in options.map(\.host) { + let descriptor = FetchDescriptor( + predicate: #Predicate { $0.request.host == host }, + sortBy: [SortDescriptor(\Record.capturedAt, order: .reverse)] + ) + for record in try context.fetch(descriptor) { + // Bad or unrelated responses are ignored; they must not erase saved tokens. + guard let token = try? Self.token(from: record) else { continue } + try keychain.setToken(token, forKey: host) + break } } + loadStoredTokens() + } + + static func token(from record: Record) throws -> AccessToken? { + let host = record.request.host + let headers = record.request.headers.values + let cookies = record.request.cookies.values + let gtokenHeader = headers.first { $0.key.caseInsensitiveCompare("X-GameWebToken") == .orderedSame }?.value + switch host { + case "app.smashbros.nintendo.net": + guard let token = cookies.first(where: { $0.key == "super_smash_session" })?.value, + let gtoken = gtokenHeader else { return nil } + return try AccessToken(contentId: .SMSP, host: host, gtoken: gtoken, accessToken: token) + case "app.splatoon2.nintendo.net": + guard let token = cookies.first(where: { $0.key == "iksm_session" })?.value, + let gtoken = gtokenHeader else { return nil } + return try AccessToken(contentId: .SP2, host: host, gtoken: gtoken, accessToken: token) + case "api.lp1.av5ja.srv.nintendo.net": + guard let data = record.response.body, + let body = try JSONSerialization.jsonObject(with: data) as? [String: Any], + let token = body["bulletToken"] as? String, + let gtoken = cookies.first(where: { $0.key == "_gtoken" })?.value else { return nil } + return try AccessToken(contentId: .SP3, host: host, gtoken: gtoken, accessToken: token) + default: + return nil + } + } + + private func loadStoredTokens() { tokens = options.map(\.host).compactMap { host in - try? keychain.getToken(forKey: host) + if let local = try? keychain.getToken(forKey: host) { return local } + guard let legacy = try? legacyKeychain.getToken(forKey: host) else { return nil } + // Copy previously synced data without deleting the cloud/other-device copy. + try? keychain.setToken(legacy, forKey: host) + return legacy } } @objc private func didBecomeActiveNotification() { + guard CaptureAuthorization.isGranted else { return } + // Capture remains useful when notification permission is denied or no notification is tapped. + try? refreshTokensFromRecords() if activateOnForeground { Task(priority: .background, operation: { try await startVPNTunnel() }) } } + } public extension Tuberose { @@ -130,14 +159,15 @@ extension [String: String] { else { return nil } - return Dictionary(uniqueKeysWithValues: value.split(separator: ";").compactMap { component in - let parts = component.split(separator: "=", maxSplits: 1).map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } - return parts.count == 2 ? (parts[0], parts[1]) : nil - }) + return value.split(separator: ";").reduce(into: [String: String]()) { result, component in + let parts = component.split(separator: "=", maxSplits: 1, omittingEmptySubsequences: false) + .map { $0.trimmingCharacters(in: .whitespacesAndNewlines) } + if parts.count == 2, !parts[0].isEmpty { result[parts[0]] = parts[1] } + } } func value(forKey key: String) -> String? { - first(where: { $0.key == key })?.value + first(where: { $0.key.caseInsensitiveCompare(key) == .orderedSame })?.value } } @@ -176,7 +206,7 @@ extension Keychain { } func getToken(forKey: String) throws -> AccessToken { - guard let data: Data = try getData(forKey) + guard let data: Data = try getData(forKey, ignoringAttributeSynchronizable: false) else { throw DecodingError.valueNotFound(AccessToken.self, .init(codingPath: [], debugDescription: "")) } diff --git a/Interceptor/Components/VPNSetting.swift b/Interceptor/Components/VPNSetting.swift index f27bd79..73a066a 100644 --- a/Interceptor/Components/VPNSetting.swift +++ b/Interceptor/Components/VPNSetting.swift @@ -15,11 +15,21 @@ struct VPNSetting: View { @EnvironmentObject private var client: Tuberose @Environment(\.scenePhase) private var scenePhase @State private var isConnected: Bool = false + @AppStorage(CaptureAuthorization.key, store: CaptureAuthorization.defaults) private var consentVersion = 0 + @State private var connectionError: String? var body: some View { Section(content: { Label(systemName: "wifi", color: .blue, title: { - Toggle(isOn: $isConnected, label: { + Toggle(isOn: Binding(get: { isConnected }, set: { enabled in + Task { + do { + if enabled { try await client.startVPNTunnel() } + else { client.stopVPNTunnel() } + isConnected = client.isConnected + } catch { connectionError = error.localizedDescription; isConnected = false } + } + }), label: { Text("LABEL_VPN_IS_CONNECTED") }) }) @@ -40,12 +50,17 @@ struct VPNSetting: View { .onChange(of: client.isConnected) { isConnected = client.isConnected } - .onChange(of: isConnected) { - // 値が変わったときにVPN設定を切り替える - Task(priority: .background, operation: { - isConnected ? try await client.startVPNTunnel() : client.stopVPNTunnel() - }) + .disabled(consentVersion != CaptureAuthorization.version) + .onChange(of: consentVersion) { + if !CaptureAuthorization.isGranted { + isConnected = false + client.activateOnForeground = false + client.stopVPNTunnel() + } } + .alert("Unable to Start Capture", isPresented: Binding(get: { connectionError != nil }, set: { if !$0 { connectionError = nil } })) { + Button("OK", role: .cancel) { connectionError = nil } + } message: { Text(connectionError ?? "") } } } diff --git a/Interceptor/ContentView.swift b/Interceptor/ContentView.swift index f371e16..d287dd1 100644 --- a/Interceptor/ContentView.swift +++ b/Interceptor/ContentView.swift @@ -13,7 +13,8 @@ import SwiftyLogger struct ContentView: View { @Environment(\.isFirstLaunch) private var isFirstLaunch: Binding - @State private var isPresented: Bool = false + @AppStorage("CaptureConsentDecided") private var consentDecided = false + @State private var showConsent = false var body: some View { TabView(content: { @@ -49,9 +50,20 @@ struct ContentView: View { tabView.tabBar.backgroundColor = .systemBackground tabView.tabBar.isTranslucent = true }) - .fullScreenCover(isPresented: isFirstLaunch, content: { - FirstLaunchView() - }) + .onAppear { + let version = CaptureAuthorization.defaults.integer(forKey: CaptureAuthorization.key) + showConsent = !consentDecided || (version != 0 && version != CaptureAuthorization.version) + if !CaptureAuthorization.isGranted { Tuberose.default.stopVPNTunnel() } + } + .fullScreenCover(isPresented: $showConsent) { + NavigationStack { + DataUseConsentView { _ in + consentDecided = true + isFirstLaunch.wrappedValue = false + showConsent = false + } + }.interactiveDismissDisabled() + } } } diff --git a/Interceptor/GoogleService-Info.plist b/Interceptor/GoogleService-Info.plist deleted file mode 100644 index c659ade..0000000 --- a/Interceptor/GoogleService-Info.plist +++ /dev/null @@ -1,30 +0,0 @@ - - - - - API_KEY - AIzaSyDGSxwYyrB36MFkvEdnTkfIYtxc0QOdy1Q - GCM_SENDER_ID - 880078116422 - PLIST_VERSION - 1 - BUNDLE_ID - jp.qleap.intrcptr - PROJECT_ID - interceptor-51c8a - STORAGE_BUCKET - interceptor-51c8a.firebasestorage.app - IS_ADS_ENABLED - - IS_ANALYTICS_ENABLED - - IS_APPINVITE_ENABLED - - IS_GCM_ENABLED - - IS_SIGNIN_ENABLED - - GOOGLE_APP_ID - 1:880078116422:ios:c05751f58e9fdc9ba61c47 - - diff --git a/Interceptor/Interceptor.entitlements b/Interceptor/Interceptor.entitlements index dc8868f..07a158d 100644 --- a/Interceptor/Interceptor.entitlements +++ b/Interceptor/Interceptor.entitlements @@ -2,8 +2,6 @@ - aps-environment - development com.apple.developer.networking.networkextension packet-tunnel-provider diff --git a/Interceptor/Interceptor.swift b/Interceptor/Interceptor.swift index d71b918..e33ab8c 100644 --- a/Interceptor/Interceptor.swift +++ b/Interceptor/Interceptor.swift @@ -1,90 +1,26 @@ -// -// Interceptor.swift -// Interceptor -// -// Created by devonly on 2025/08/11. -// Copyright © 2025 QuantumLeap, Corporation. All rights reserved. -// - -import AdSupport -import AppTrackingTransparency -import Firebase -import FirebaseAppCheck -import FirebaseMessaging import Mudmouth import SwiftData import SwiftUI -import SwiftyLogger - -class AppCheckReleaseProviderFactory: NSObject, AppCheckProviderFactory { - func createProvider(with app: FirebaseApp) -> (any AppCheckProvider)? { - if #available(iOS 14.0, *) { - AppAttestProvider(app: app) - } else { - DeviceCheckProvider(app: app) - } - } -} +import UserNotifications -class AppDelegate: NSObject, UIApplicationDelegate { +class AppDelegate: NSObject, UIApplicationDelegate, UNUserNotificationCenterDelegate { weak var tuberose: Tuberose? - - func application( - _ application: UIApplication, - willFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil, - ) -> Bool { true } - - func application(_: UIApplication, didFinishLaunchingWithOptions _: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { - #if DEBUG || targetEnvironment(simulator) - AppCheck.setAppCheckProviderFactory(AppCheckDebugProviderFactory()) - #else - AppCheck.setAppCheckProviderFactory(AppCheckReleaseProviderFactory()) - #endif - FirebaseApp.configure() - SwiftyLogger.configure() + func application(_ application: UIApplication, didFinishLaunchingWithOptions options: [UIApplication.LaunchOptionsKey: Any]? = nil) -> Bool { UNUserNotificationCenter.current().delegate = self - Messaging.messaging().delegate = self return true } - - func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { - Messaging.messaging().apnsToken = deviceToken - } -} - -extension AppDelegate: MessagingDelegate { - func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) { - #if DEBUG || targetEnvironment(simulator) - if let fcmToken { - SwiftyLogger.debug("FCM Token: \(fcmToken)") - } - #endif - } -} - -extension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse) async { - await MainActor.run(body: { - try? tuberose?.setToken(response) - }) + await MainActor.run { try? self.tuberose?.setToken(response) } } - func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { - completionHandler([.banner, .sound]) + completionHandler(CaptureAuthorization.isGranted ? [.banner, .sound] : []) } } @main struct Interceptor: App { @UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate - @Environment(\.scenePhase) private var scenePhase - - private let tuberose: Tuberose = .default - - init() { - appDelegate.tuberose = tuberose - } - + private let tuberose = Tuberose.default var body: some Scene { WindowGroup { ContentView() @@ -92,15 +28,7 @@ struct Interceptor: App { .environment(tuberose.mudmouth) .environmentIsFirstLaunch() .modelContainer(ModelContainer.default) - .onChange(of: scenePhase) { - if scenePhase == .active { - guard ATTrackingManager.trackingAuthorizationStatus == .notDetermined else { return } - DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { - ATTrackingManager.requestTrackingAuthorization(completionHandler: { _ in - }) - } - } - } + .onAppear { appDelegate.tuberose = tuberose } } } } diff --git a/Interceptor/Localizable.xcstrings b/Interceptor/Localizable.xcstrings index 39e5715..476bc5e 100644 --- a/Interceptor/Localizable.xcstrings +++ b/Interceptor/Localizable.xcstrings @@ -768,6 +768,342 @@ } } } + }, + "Data Use and Consent" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data Use and Consent" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "データの利用と同意" + } + } + } + }, + "Agree and Continue" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Agree and Continue" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "同意して続ける" + } + } + } + }, + "Not Now" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Not Now" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "今は同意しない" + } + } + } + }, + "Withdraw Consent" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Withdraw Consent" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "同意を取り消す" + } + } + } + }, + "Set Up Capture" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Set Up Capture" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャプチャの設定" + } + } + } + }, + "Capture Notifications" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Capture Notifications" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "取得時の通知" + } + } + } + }, + "Purpose" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Purpose" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用目的" + } + } + } + }, + "Data Recorded" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Data Recorded" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "記録するデータ" + } + } + } + }, + "Storage and Sharing" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Storage and Sharing" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "保存先と共有" + } + } + } + }, + "Certificate and VPN" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Certificate and VPN" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "証明書とVPN" + } + } + } + }, + "Your Choices" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Your Choices" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "選択と取り消し" + } + } + } + }, + "Unable to Start Capture" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Unable to Start Capture" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "キャプチャを開始できません" + } + } + } + }, + "CONSENT_PURPOSE" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interceptor inspects selected Nintendo HTTPS traffic on this device so you can view requests and responses and obtain game authentication tokens. It is not a general internet protection VPN." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "Interceptorは、この端末上の指定した任天堂サービスのHTTPS通信を解析し、リクエスト・レスポンスの閲覧やゲームの認証トークン取得に使用します。インターネット全体を保護するVPNではありません。" + } + } + } + }, + "CONSENT_DATA" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Records may contain URLs, headers, cookies, authentication tokens, account information, and request and response bodies. These are sensitive: anyone with an authentication token may be able to access the associated account. Capture only your own authorized traffic." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "URL、ヘッダー、Cookie、認証トークン、アカウント情報、リクエストとレスポンスの本文が記録される場合があります。認証トークンを持つ人が関連アカウントにアクセスできる可能性があるため、慎重に扱ってください。自分が利用を許可されている通信だけを記録してください。" + } + } + } + }, + "CONSENT_STORAGE" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "New records are stored in the local app storage shared with its VPN extension. New tokens and certificate keys use this device’s Keychain with iCloud synchronization disabled. Interceptor does not send captured data to its developer or analytics services. Original requests still reach Nintendo. Copying or exporting data shares it with your chosen destination. Copies synchronized by older versions may remain in iCloud. Local history storage is excluded from backup; other app settings may be backed up by the operating system." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "新しい記録はアプリとVPN拡張が共有する端末内の領域に保存します。新しいトークンと証明書の鍵はiCloud同期を無効にした、この端末用のKeychainに保存します。取得したデータを開発者や解析サービスへ送信しません。元の通信は任天堂に届きます。コピーや書き出しを行ったデータは、選んだ宛先に共有されます。旧バージョンが同期したコピーはiCloudに残る可能性があります。履歴の保存領域はバックアップ対象から除外しますが、その他の設定はOSによりバックアップされる場合があります。" + } + } + } + }, + "CONSENT_CERTIFICATE" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Setup installs a local certificate and a VPN configuration. Trusting the certificate allows this app to decrypt selected HTTPS traffic. Agreeing here does not install either item or start capture. You choose those actions separately in Set Up Capture. You can remove the certificate and VPN configuration in iOS Settings." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "設定ではローカル証明書とVPN構成をインストールします。証明書を信頼すると、このアプリが指定したHTTPS通信を復号できるようになります。この画面での同意だけでは、インストールも記録の開始も行いません。「キャプチャの設定」でそれぞれ操作してください。証明書とVPN構成はiOSの設定から削除できます。" + } + } + } + }, + "CONSENT_CHOICES" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "You can decline and browse existing data. Capture and certificate download require consent. Notifications are optional and contain only a generic message and a local record identifier. You can withdraw consent here to stop capture and clear notifications. Withdrawal does not delete existing records, tokens, or installed certificates. Clear on Home deletes history only; uninstalling the app does not guarantee removal of Keychain items or older iCloud copies." + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "同意しなくても既存データを閲覧できます。記録と証明書のダウンロードには同意が必要です。通知は任意で、一般的なメッセージと端末内の記録IDだけを含みます。この画面で同意を取り消すと記録を停止し、通知を消去します。既存の記録・トークン・インストール済み証明書は削除されません。ホームの「消去」は履歴のみを削除します。アプリの削除でもKeychainや旧iCloudコピーが必ず消えるとは限りません。" + } + } + } + }, + "Terms of Service" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Terms of Service" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "利用規約" + } + } + } + }, + "Privacy Policy" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Privacy Policy" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "プライバシーポリシー" + } + } + } + }, + "Developers" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Developers" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "開発者" + } + } + } + }, + "Licenses" : { + "localizations" : { + "en" : { + "stringUnit" : { + "state" : "translated", + "value" : "Licenses" + } + }, + "ja" : { + "stringUnit" : { + "state" : "translated", + "value" : "ライセンス" + } + } + } } }, "version" : "1.0" diff --git a/Interceptor/Structs/AccessToken.swift b/Interceptor/Structs/AccessToken.swift index 866786a..4283483 100644 --- a/Interceptor/Structs/AccessToken.swift +++ b/Interceptor/Structs/AccessToken.swift @@ -33,10 +33,10 @@ struct AccessToken: Codable, Identifiable, @unchecked Sendable { gtoken.isRefreshNeeded } - init(contentId: ContentId, host: String, gtoken: String, accessToken: String, timeInterval timeIntervalSinceNow: TimeInterval = 60 * 60 * 2) { + init(contentId: ContentId, host: String, gtoken: String, accessToken: String, timeInterval timeIntervalSinceNow: TimeInterval = 60 * 60 * 2) throws { self.contentId = contentId self.host = host - self.gtoken = try! .init(gtoken) + self.gtoken = try .init(gtoken) self.accessToken = accessToken expiresIn = .init(timeIntervalSinceNow: timeIntervalSinceNow) } diff --git a/Interceptor/Views/DataUseConsentView.swift b/Interceptor/Views/DataUseConsentView.swift new file mode 100644 index 0000000..03c1607 --- /dev/null +++ b/Interceptor/Views/DataUseConsentView.swift @@ -0,0 +1,58 @@ +import Mudmouth +import SwiftUI +import UserNotifications + +struct DataUseConsentView: View { + @EnvironmentObject private var client: Tuberose + @AppStorage(CaptureAuthorization.key, store: CaptureAuthorization.defaults) private var consentVersion = 0 + var onDecision: (Bool) -> Void = { _ in } + + var body: some View { + ScrollView { + VStack(alignment: .leading, spacing: 20) { + disclosure("Purpose", "CONSENT_PURPOSE") + disclosure("Data Recorded", "CONSENT_DATA") + disclosure("Storage and Sharing", "CONSENT_STORAGE") + disclosure("Certificate and VPN", "CONSENT_CERTIFICATE") + disclosure("Your Choices", "CONSENT_CHOICES") + }.padding() + } + .navigationTitle("Data Use and Consent") + .navigationBarTitleDisplayMode(.inline) + .safeAreaInset(edge: .bottom) { + VStack(spacing: 12) { + if consentVersion == CaptureAuthorization.version { + Button("Withdraw Consent", role: .destructive) { + CaptureAuthorization.revoke() + client.activateOnForeground = false + client.stopVPNTunnel() + UNUserNotificationCenter.current().removeAllPendingNotificationRequests() + UNUserNotificationCenter.current().removeAllDeliveredNotifications() + onDecision(false) + }.buttonStyle(.bordered) + } else { + Button("Agree and Continue") { + client.activateOnForeground = false + CaptureAuthorization.grant() + onDecision(true) + }.buttonStyle(.borderedProminent) + Button("Not Now") { + CaptureAuthorization.revoke() + client.activateOnForeground = false + client.stopVPNTunnel() + UNUserNotificationCenter.current().removeAllPendingNotificationRequests() + UNUserNotificationCenter.current().removeAllDeliveredNotifications() + onDecision(false) + }.buttonStyle(.bordered) + } + }.frame(maxWidth: .infinity).padding().background(.regularMaterial) + } + } + + private func disclosure(_ title: LocalizedStringKey, _ body: LocalizedStringKey) -> some View { + VStack(alignment: .leading, spacing: 8) { + Text(title).font(.headline) + Text(body).font(.body).fixedSize(horizontal: false, vertical: true) + } + } +} diff --git a/Interceptor/Views/SettingsView.swift b/Interceptor/Views/SettingsView.swift index 3bfdebf..71f368c 100644 --- a/Interceptor/Views/SettingsView.swift +++ b/Interceptor/Views/SettingsView.swift @@ -7,20 +7,40 @@ // import Mudmouth +import LicenseList import QuantumLeap import SwiftUI struct SettingsView: View { - @Environment(\.dismiss) private var dismiss + @EnvironmentObject private var client: Tuberose + @AppStorage(CaptureAuthorization.key, store: CaptureAuthorization.defaults) private var consentVersion = 0 + @State private var showSetup = false var body: some View { Form(content: { QuantumLeap.Support() + Section { + NavigationLink("Data Use and Consent") { DataUseConsentView() } + Button("Set Up Capture") { showSetup = true } + .disabled(consentVersion != CaptureAuthorization.version) + Button("Capture Notifications") { + Task { _ = try? await UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound]) } + }.disabled(consentVersion != CaptureAuthorization.version) + } QuantumLeap.VPNSettingList() QuantumLeap.Tools() - QuantumLeap.Policy() + Section { + Link("Terms of Service", destination: URL(string: "https://qleap.jp/term/eula")!) + Link("Privacy Policy", destination: URL(string: "https://qleap.jp/term/interceptor_privacy_policy")!) + Link("Developers", destination: URL(string: "https://qleap.jp")!) + NavigationLink("Licenses") { + LicenseListView().licenseViewStyle(.withRepositoryAnchorLink) + .navigationTitle("Licenses") + } + } QuantumLeap.Version() }) + .fullScreenCover(isPresented: $showSetup) { FirstLaunchView() } .navigationTitle(Text("TITLE_SETTINGS")) .navigationBarTitleDisplayMode(.inline) } diff --git a/Interceptor/en.lproj/InfoPlist.strings b/Interceptor/en.lproj/InfoPlist.strings index 242184e..76c53d0 100644 --- a/Interceptor/en.lproj/InfoPlist.strings +++ b/Interceptor/en.lproj/InfoPlist.strings @@ -6,5 +6,3 @@ Copyright © 2025 QuantumLeap. All rights reserved. */ - -"NSUserTrackingUsageDescription" = "Allow tracking to help us understand app usage and improve your experience."; diff --git a/Interceptor/ja.lproj/InfoPlist.strings b/Interceptor/ja.lproj/InfoPlist.strings index 5106992..2b7056f 100644 --- a/Interceptor/ja.lproj/InfoPlist.strings +++ b/Interceptor/ja.lproj/InfoPlist.strings @@ -6,5 +6,3 @@ Copyright © 2025 QuantumLeap. All rights reserved. */ - -"NSUserTrackingUsageDescription" = "「許可」すると、アプリの利用状況を解析して体験を改善します。"; diff --git a/InterceptorTests/InterceptorTests.swift b/InterceptorTests/InterceptorTests.swift index e89e062..f1349be 100644 --- a/InterceptorTests/InterceptorTests.swift +++ b/InterceptorTests/InterceptorTests.swift @@ -2,33 +2,186 @@ // InterceptorTests.swift // InterceptorTests // -// Created by devonly on 2025/08/11. -// @testable import Interceptor +import Foundation +@testable import Mudmouth import XCTest +@MainActor final class InterceptorTests: XCTestCase { - override func setUpWithError() throws { - // Put setup code here. This method is called before the invocation of each test method in the class. + private func gameWebToken() throws -> String { + let header: [String: Any] = [ + "alg": "RS256", "jku": "https://example.invalid/keys", "kid": "fixture", "typ": "JWT", + "fixtureNote": "?????????~~~~~~~~~", + ] + let payload: [String: Any] = [ + "isChildRestricted": false, "aud": "fixture-audience", "exp": 4_102_444_800, + "iat": 1_700_000_000, "iss": "fixture-issuer", "sub": 123, + "jti": "00000000-0000-0000-0000-000000000001", "typ": "JWT", + "links": ["networkServiceAccount": ["id": "fixture-account"]], + "membership": ["active": true], + ] + func encode(_ object: [String: Any]) throws -> String { + try JSONSerialization.data(withJSONObject: object, options: [.sortedKeys]) + .base64EncodedString() + .replacingOccurrences(of: "+", with: "-") + .replacingOccurrences(of: "/", with: "_") + .replacingOccurrences(of: "=", with: "") + } + return try "\(encode(header)).\(encode(payload)).YWJj" } - override func tearDownWithError() throws { - // Put teardown code here. This method is called after the invocation of each test method in the class. + private func record(host: String, headers: [String: String] = [:], body: Data? = nil) throws -> Record { + // The public preview fixture builds the same SwiftData relationships as capture records. + let record = try XCTUnwrap(RecordGroup().records.first) + record.request.host = host + record.request.header = try JSONSerialization.data(withJSONObject: headers) + record.response.data = body + return record } - func testExample() throws { - // This is an example of a functional test case. - // Use XCTAssert and related functions to verify your tests produce the correct results. - // Any test you write for XCTest can be annotated as throws and async. - // Mark your test throws to produce an unexpected failure when your test encounters an uncaught error. - // Mark your test async to allow awaiting for asynchronous code to complete. Check the results with assertions afterwards. + func testDecodesUnpaddedBase64URLGameWebToken() throws { + let encoded = try gameWebToken() + XCTAssertTrue(encoded.contains("-")) + XCTAssertTrue(encoded.contains("_")) + XCTAssertFalse(encoded.contains("=")) + let token = try GameWebToken(encoded) + XCTAssertEqual(token.header.kid, "fixture") + XCTAssertEqual(token.payload.aud, "fixture-audience") + XCTAssertEqual(token.payload.sub, 123) + XCTAssertEqual(token.signature, "YWJj") + XCTAssertFalse(token.isRefreshNeeded) } - func testPerformanceExample() throws { - // This is an example of a performance test case. - measure { - // Put the code you want to measure the time of here. + func testRejectsMalformedGameWebTokensWithoutCrashing() { + for malformed in ["", "..", "a.b.c.d", "@@@@.@@@@.sig", "e30.e30.sig"] { + XCTAssertThrowsError(try GameWebToken(malformed), "Malformed fixture: \(malformed)") } } + + func testCookieDuplicatesEmptyValuesAndCaseInsensitiveHeaderNames() { + let headers = [ + "cOoKiE": "iksm_session=old; iksm_session=new; empty=; signed=a=b", + "hOsT": "example.invalid", + ] + XCTAssertEqual(headers.cookies?["iksm_session"], "new") + XCTAssertEqual(headers.cookies?["empty"], "") + XCTAssertEqual(headers.cookies?["signed"], "a=b") + XCTAssertEqual(headers.host, "example.invalid") + } + + func testExtractsSplatoon2TokenFromSavedRecord() throws { + let record = try record(host: "app.splatoon2.nintendo.net", headers: [ + "Cookie": "iksm_session=old; iksm_session=fixture-session", + "x-gamewebtoken": gameWebToken(), + ]) + let token = try XCTUnwrap(Tuberose.token(from: record)) + XCTAssertEqual(token.contentId.rawValue, ContentId.SP2.rawValue) + XCTAssertEqual(token.accessToken, "fixture-session") + XCTAssertEqual(token.host, "app.splatoon2.nintendo.net") + } + + func testExtractsSmashTokenFromSavedRecord() throws { + let record = try record(host: "app.smashbros.nintendo.net", headers: [ + "Cookie": "super_smash_session=fixture-smash-session", "X-GameWebToken": gameWebToken(), + ]) + let token = try XCTUnwrap(Tuberose.token(from: record)) + XCTAssertEqual(token.contentId.rawValue, ContentId.SMSP.rawValue) + XCTAssertEqual(token.accessToken, "fixture-smash-session") + } + + func testExtractsSplatoon3TokenFromSavedResponseBody() throws { + let body = try JSONSerialization.data(withJSONObject: ["bulletToken": "fixture-bullet"]) + let record = try record(host: "api.lp1.av5ja.srv.nintendo.net", headers: [ + "Cookie": "_gtoken=\(gameWebToken())", + ], body: body) + let token = try XCTUnwrap(Tuberose.token(from: record)) + XCTAssertEqual(token.contentId.rawValue, ContentId.SP3.rawValue) + XCTAssertEqual(token.accessToken, "fixture-bullet") + } + + func testIgnoresUnrelatedHostAndIncompleteCapturedRecord() throws { + let unrelated = try record(host: "example.invalid", headers: [ + "Cookie": "iksm_session=fixture", "X-GameWebToken": gameWebToken(), + ]) + XCTAssertNil(try Tuberose.token(from: unrelated)) + XCTAssertNil(try Tuberose.token(from: record(host: "app.splatoon2.nintendo.net"))) + let incompleteBody = try JSONSerialization.data(withJSONObject: ["unrelated": "value"]) + XCTAssertNil(try Tuberose.token(from: record(host: "api.lp1.av5ja.srv.nintendo.net", body: incompleteBody))) + } + + func testRejectsMalformedCapturedJWTAndResponseJSON() throws { + let invalidJWT = try record(host: "app.splatoon2.nintendo.net", headers: [ + "Cookie": "iksm_session=fixture", "X-GameWebToken": "@@@@.@@@@.sig", + ]) + XCTAssertThrowsError(try Tuberose.token(from: invalidJWT)) + let invalidBody = try record(host: "api.lp1.av5ja.srv.nintendo.net", body: Data("not JSON".utf8)) + XCTAssertThrowsError(try Tuberose.token(from: invalidBody)) + } + + func testConsentFailsClosedForMissingOldAndFutureVersions() throws { + let suite = "InterceptorTests.Consent.\(UUID().uuidString)" + let store = try XCTUnwrap(UserDefaults(suiteName: suite)) + defer { store.removePersistentDomain(forName: suite) } + XCTAssertFalse(CaptureAuthorization.isGranted(in: store)) + store.set(CaptureAuthorization.version - 1, forKey: CaptureAuthorization.key) + XCTAssertFalse(CaptureAuthorization.isGranted(in: store)) + store.set(CaptureAuthorization.version + 1, forKey: CaptureAuthorization.key) + XCTAssertFalse(CaptureAuthorization.isGranted(in: store)) + CaptureAuthorization.grant(in: store) + XCTAssertTrue(CaptureAuthorization.isGranted(in: store)) + CaptureAuthorization.revoke(in: store) + XCTAssertFalse(CaptureAuthorization.isGranted(in: store)) + } + + func testCertificateServerConsentAndRestart() async throws { + let store = CaptureAuthorization.defaults + let original = store.object(forKey: CaptureAuthorization.key) + let proxy = X509Proxy.default + defer { + try? proxy.stop() + if let original { store.set(original, forKey: CaptureAuthorization.key) } + else { store.removeObject(forKey: CaptureAuthorization.key) } + } + CaptureAuthorization.revoke() + XCTAssertThrowsError(try proxy.start()) + CaptureAuthorization.grant() + try proxy.start() + let config = URLSessionConfiguration.ephemeral + config.timeoutIntervalForRequest = 2 + let session = URLSession(configuration: config) + defer { session.invalidateAndCancel() } + let (data, response) = try await session.data(from: proxy.url) + XCTAssertEqual((response as? HTTPURLResponse)?.statusCode, 200) + XCTAssertTrue(String(decoding: data, as: UTF8.self).contains("BEGIN CERTIFICATE")) + CaptureAuthorization.revoke() + try proxy.stop() + do { + _ = try await session.data(from: proxy.url) + XCTFail("Certificate listener must be closed after withdrawal") + } catch { XCTAssertTrue(error is URLError) } + CaptureAuthorization.grant() + try proxy.start() + let (_, restarted) = try await session.data(from: proxy.url) + XCTAssertEqual((restarted as? HTTPURLResponse)?.statusCode, 200) + } + + func testTunnelCannotStartWithoutConsentOrValidOptions() async throws { + let store = CaptureAuthorization.defaults + let original = store.object(forKey: CaptureAuthorization.key) + defer { + if let original { store.set(original, forKey: CaptureAuthorization.key) } + else { store.removeObject(forKey: CaptureAuthorization.key) } + } + CaptureAuthorization.revoke() + do { try await MITM.startTunnel(); XCTFail("Missing consent must reject start") } + catch { XCTAssertTrue(error is CaptureAuthorization.Failure) } + CaptureAuthorization.grant() + do { try await MITM.startTunnel(); XCTFail("Invalid configuration must reject start") } + catch { XCTAssertTrue(error is LocalProxyChannels.Failure) } + await MITM.stopTunnel() + await MITM.stopTunnel() + } + } diff --git a/InterceptorUITests/InterceptorUITests.swift b/InterceptorUITests/InterceptorUITests.swift index 350f1b8..023321c 100644 --- a/InterceptorUITests/InterceptorUITests.swift +++ b/InterceptorUITests/InterceptorUITests.swift @@ -31,6 +31,36 @@ final class InterceptorUITests: XCTestCase { // Use XCTAssert and related functions to verify your tests produce the correct results. } + @MainActor + func testCaptureConsentLifecycle() throws { + let app = XCUIApplication() + app.launchArguments = ["-AppleLanguages", "(en)", "-AppleLocale", "en_US"] + app.launch() + if app.buttons["Not Now"].waitForExistence(timeout: 3) { app.buttons["Not Now"].tap() } + else { + app.tabBars.buttons["Settings"].tap() + app.buttons["Data Use and Consent"].tap() + if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } + app.navigationBars.buttons.firstMatch.tap() + } + XCTAssertTrue(app.tabBars.buttons["Home"].waitForExistence(timeout: 5)) + app.tabBars.buttons["Settings"].tap() + let connection = app.switches["Connection Status"] + XCTAssertTrue(connection.waitForExistence(timeout: 5)) + XCTAssertFalse(connection.isEnabled) + app.buttons["Data Use and Consent"].tap() + XCTAssertTrue(app.buttons["Agree and Continue"].waitForExistence(timeout: 5)) + app.buttons["Agree and Continue"].tap() + XCTAssertTrue(app.buttons["Withdraw Consent"].waitForExistence(timeout: 5)) + app.buttons["Withdraw Consent"].tap() + app.navigationBars.buttons.firstMatch.tap() + XCTAssertFalse(connection.isEnabled) + app.terminate() + app.launch() + app.tabBars.buttons["Settings"].tap() + XCTAssertFalse(app.switches["Connection Status"].isEnabled) + } + @MainActor func testSimulatorOnboardingAndNavigation() throws { let app = XCUIApplication() @@ -43,6 +73,13 @@ final class InterceptorUITests: XCTestCase { } app.launch() + if app.buttons["Not Now"].waitForExistence(timeout: 3) { app.buttons["Not Now"].tap() } + app.tabBars.buttons["Settings"].tap() + app.buttons["Data Use and Consent"].tap() + if app.buttons["Agree and Continue"].exists { app.buttons["Agree and Continue"].tap() } + app.navigationBars.buttons.firstMatch.tap() + app.buttons["Set Up Capture"].tap() + // The simulator permits advancing through the device-only setup steps. if app.buttons["Next"].waitForExistence(timeout: 5) { for _ in 0..<8 { diff --git a/PacketTunnel/PacketTunnelProvider.swift b/PacketTunnel/PacketTunnelProvider.swift index 7fc627a..d0b71de 100644 --- a/PacketTunnel/PacketTunnelProvider.swift +++ b/PacketTunnel/PacketTunnelProvider.swift @@ -11,14 +11,31 @@ import NetworkExtension import SwiftyLogger class PacketTunnelProvider: NEPacketTunnelProvider { + private var consentMonitor: Timer? + /// どういうときに呼ばれるの、これ /// NOTE: startVPNTunnelが実行されたときのオプションがここで渡される /// - Parameter options: <#options description#> override func startTunnel(options: [String: NSObject]? = nil) async throws { - NSLog("Starting tunnel with options: \(String(describing: options))") - SwiftyLogger.debug("Starting tunnel with options: \(String(describing: options))") + try CaptureAuthorization.requireConsent() try await setTunnelNetworkSettings(settings) try await MITM.startTunnel(options: options) + await MainActor.run { + consentMonitor = Timer.scheduledTimer(withTimeInterval: 0.25, repeats: true) { [weak self] _ in + guard !CaptureAuthorization.isGranted else { return } + self?.consentMonitor?.invalidate() + self?.consentMonitor = nil + Task { + await MITM.stopTunnel() + self?.cancelTunnelWithError(CaptureAuthorization.Failure.consentRequired) + } + } + } + } + + override func stopTunnel(with reason: NEProviderStopReason) async { + await MainActor.run { consentMonitor?.invalidate(); consentMonitor = nil } + await MITM.stopTunnel() } /// スプラトゥーン3のトークンを取得するためだけの設定 diff --git a/README.md b/README.md index fcea291..32fce74 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ From the Interceptor directory, clone Mudmouth if it does not already exist: ```bash git clone https://github.com/qtmleap/Mudmouth.git ../Mudmouth -git -C ../Mudmouth checkout ddcefe656c0f27289ee4f506f2112b8bbdaa407d +git -C ../Mudmouth checkout 37fb3b4136bd92e828f183fc375322496ef58240 xcodebuild -resolvePackageDependencies -project Interceptor.xcodeproj -scheme Interceptor open Interceptor.xcodeproj ``` diff --git a/docs/app-review/README.md b/docs/app-review/README.md new file mode 100644 index 0000000..191752d --- /dev/null +++ b/docs/app-review/README.md @@ -0,0 +1,26 @@ +# App Review preparation — draft, 2026-10-04 + +These files prepare a replacement submission for App Store app 6749347474. They have not been uploaded, submitted, or approved. Build 28's rejection and the reply sent on 2026-10-04 do not establish acceptance of the proposed changes. + +The locale files under `fastlane/metadata/en-US` and `fastlane/metadata/ja` contain proposed store text. Their intended behavior must match the final archive before they are published. The current Fastfile uploads TestFlight builds, not these metadata files; this directory does not add an automatic publishing step. + +`review-notes-draft.md` describes the review flow and evidence still required. `privacy-policy-draft.md` contains app-specific English and Japanese policy text. Resolve its developer contact, public policy URL, and effective date before publication, and connect the app's Privacy Policy entry to that policy. Keep the draft status notice out of final public copy only after the implementation is verified. + +## Checks before using the drafts + +- Verify explicit consent appears before certificate setup and every capture-start route; decline, revoke, automatic restart, relaunch, and existing-install upgrade must respect it. +- Verify Firebase, App Check, Messaging, remote notification registration, and tracking prompts are absent from the shipped archive, not merely unused at runtime. +- Verify new token, certificate, and private-key writes are not synchronizable. Do not promise that existing cloud copies are erased or that OS backups exclude these items without testing their actual accessibility and backup attributes. +- Verify optional local notifications contain no cookies, authentication tokens, captured headers, or bodies, including userInfo. Captured data must be read from local storage, including after relaunch, without relying on a notification tap. +- Confirm capture-domain/path matching and the displayed SSL Proxying List match actual routing. Do not describe this as general-purpose or all-device-traffic capture. +- Verify Home's Clear action deletes stored request history. Token/Keychain deletion is a separate concern; do not imply it is included in Clear or consent withdrawal. +- Verify the certificate profile and VPN configuration can be removed through the documented iOS settings. Do not claim the app removes them automatically. +- Use a physical-device capture test and a review demonstration with synthetic or redacted data. Simulator UI tests alone do not prove real-device VPN and certificate behavior. +- Confirm the App Privacy answers, purpose strings, screenshots, support URL, public policy URL, and archive match the revised behavior. The drafts do not predetermine Apple's privacy classification or approval. + +## References checked + +- [Apple's platform version information](https://developer.apple.com/help/app-store-connect/reference/app-information/platform-version-information): field formats and limits. +- [Apple's App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/): review requirements. The previously reported rejection identifier is historical; use Apple's exact current response rather than assuming its numbering or that these changes resolve it. + +No new reviewer message or external publication is performed by these files. diff --git a/docs/app-review/privacy-policy-draft.md b/docs/app-review/privacy-policy-draft.md new file mode 100644 index 0000000..3765831 --- /dev/null +++ b/docs/app-review/privacy-policy-draft.md @@ -0,0 +1,68 @@ +# Interceptor Privacy Policy — draft / プライバシーポリシー案 + +Draft prepared 2026-10-04. Not published or effective. This text describes the proposed revised release, not rejected build 28. Confirm the archive's behavior and the contact details below before publication. + +Developer: Interceptor developer (qtmleap). The App Store legal developer entity has not been reconciled with the website business information. +Privacy contact: https://qleap.jp/support (existing public support path). +Planned public policy URL: https://qleap.jp/term/interceptor_privacy_policy (not yet published). +Effective date: set when the verified policy is published. + +## English + +### What Interceptor does + +Interceptor inspects selected Nintendo-related HTTPS traffic on your own device through a local proxy using an iOS VPN configuration. It does not provide a remote VPN server or a public Wi-Fi protection service. To inspect HTTPS, you must install and trust a certificate authority certificate generated locally by the app. + +### Data accessed and purpose + +After you explicitly consent to capture, the app can process and save request and response hosts, paths and query parameters, headers, cookies, authentication tokens, account identifiers, and bodies for its configured hosts and paths. Some fields contain sensitive account or session information. The app uses these records to show you your traffic and to display supported service tokens. It also stores settings, consent state, and locally generated certificate/key material needed for inspection. Use the app only for devices, accounts, and traffic you are authorized to inspect. + +### Storage and transmission + +New capture records are stored in local shared storage used by the app and its packet-tunnel extension. Newly saved tokens, certificates, and private keys use Keychain items with iCloud Keychain synchronization disabled. Interceptor does not upload captured data to a developer-operated server, sell it, use it for advertising, or automatically share it with third parties. The revised release has no Firebase or Firebase remote messaging integration and does not request advertising tracking permission. + +This does not mean that every network request remains on the device. The inspected requests still reach their intended Nintendo services, which process them under their own policies. Opening external support or policy links also connects to the selected website. If you copy data or share it outside Interceptor, the destination and its handling are your choice. Clipboard contents and subsequent sharing can expose sensitive information. + +Earlier app versions may have saved synchronizable Keychain data. Disabling new synchronization does not erase earlier iCloud copies or copies on other devices. Apple's Keychain, device migration, and backup/restore behavior also depend on your system settings and the stored item's protection attributes. This policy does not promise that all data is excluded from OS backups or that uninstalling the app erases every Keychain item. Control existing cloud copies and backups through the relevant Apple services and device settings. + +### Consent and controls + +The app explains these uses and asks for consent before certificate setup or capture. You may decline and still browse the app. You may withdraw consent in Settings; this stops capture and blocks automatic restart until you consent again. Withdrawal does not delete saved records, saved tokens, older cloud copies, or certificate profiles. + +Use Home's Clear action to delete the app's saved request history. This action does not claim to delete separately stored Keychain tokens or certificates. Data can remain until you delete it through an applicable control, and prior backups or manually copied data may remain separately. To end the certificate's trust and remove its installed profile, use iOS Settings; remove the VPN configuration there when no longer needed. Revoking or rotating a Nintendo session/token requires Nintendo's account or service controls. + +Notifications are optional and generated locally. Their text and payload do not contain captured cookies, authentication tokens, headers, or bodies. The app reads captured results from its local storage. You can disable notifications in iOS Settings without enabling remote push or sending capture results to a push server. + +### Questions and updates + +Contact the verified privacy contact listed above with questions. A future change to capture scope, storage, or external sharing requires an updated explanation and policy. This draft does not establish that Apple has approved the app or its network inspection design. + +## 日本語 + +### アプリの仕組み + +Interceptorは、iOSのVPN設定と端末内のプロキシを使い、自分の端末で任天堂関連の一部のHTTPS通信を解析します。外部のVPNサーバーや公共Wi-Fiを保護するサービスは提供しません。HTTPS通信の解析には、アプリが端末内で生成した認証局証明書をインストールし、信頼する操作が必要です。 + +### 取得するデータと用途 + +通信の取得に明示的に同意した後、対象のホストやパスについて、リクエストとレスポンスのホスト、パス、クエリ、ヘッダー、Cookie、認証トークン、アカウント識別子、本文を処理・保存することがあります。アカウントやセッションに関する機密情報が含まれる場合があります。これらは、通信内容と対応サービスのトークンを利用者に表示するために使用します。設定、同意の状態、解析に必要な端末内の証明書と鍵も保存します。解析する権限を持つ端末、アカウント、通信だけを対象にしてください。 + +### 保存先と送信 + +新たな通信記録は、アプリとパケットトンネル拡張が使用する端末内の共有領域に保存します。新たに保存するトークン、証明書、秘密鍵には、iCloudキーチェーン同期を無効にしたKeychain項目を使用します。取得データを開発者のサーバーへアップロードしたり、販売したり、広告に利用したり、第三者へ自動共有したりしません。修正版ではFirebaseとFirebaseのリモート通知機能を使用せず、広告追跡の許可を求めません。 + +すべての通信が端末内で完結するという意味ではありません。解析対象の通信は、本来の送信先である任天堂のサービスへ送られ、そのサービスの方針に従って処理されます。サポートやポリシーの外部リンクを開いた場合は、リンク先のウェブサイトへ接続します。利用者がデータをコピーしてアプリ外で使用・共有する場合、その送信先と取り扱いは利用者が選ぶものです。クリップボードやその後の共有により、機密情報が外部へ渡ることがあります。 + +旧版では、同期可能なKeychain項目を保存していた可能性があります。新たな同期を停止しても、以前のiCloud上のコピーや他の端末のコピーは削除されません。AppleのKeychain、端末移行、バックアップと復元の扱いは、システム設定や保存項目の保護属性にも左右されます。すべてのデータがOSのバックアップ対象外になることや、アンインストールですべてのKeychain項目が消えることを保証するものではありません。既存のクラウド上のコピーとバックアップは、Appleの該当サービスや端末の設定で管理してください。 + +### 同意と操作 + +証明書の設定や通信の取得を始める前に、アプリ内で用途を説明して同意を求めます。同意しなくてもアプリ内を閲覧できます。設定から同意を撤回すると取得を停止し、再び同意するまで自動再開しません。撤回だけでは、保存済みの通信記録、トークン、過去のクラウド上のコピー、証明書プロファイルは削除されません。 + +通信履歴はホームの消去操作で削除できます。この操作で、別に保存されたKeychainのトークンや証明書も削除されるとは限りません。該当する削除操作を行うまでデータが残ることがあり、過去のバックアップや自分でコピーしたデータは別に残る場合があります。証明書の信頼を停止してプロファイルを削除する場合や、VPN設定が不要になった場合は、iOSの設定から操作してください。任天堂のセッションやトークンを無効化・更新する場合は、任天堂のアカウントやサービスの操作が必要です。 + +通知は任意で、端末内で生成します。通知の文面とペイロードには、取得したCookie、認証トークン、ヘッダー、本文を含めません。アプリは端末内に保存された取得結果を読み取ります。iOSの設定から通知を無効にできます。通知のためにリモートプッシュを有効にしたり、取得結果をプッシュ通知のサーバーへ送ったりしません。 + +### 問い合わせと更新 + +質問は、上記の確認済みの問い合わせ先へご連絡ください。取得対象、保存先、外部共有の方針を変更する場合は、説明とポリシーを更新します。この案は、Appleがアプリや通信解析の仕組みを承認したことを示すものではありません。 diff --git a/docs/app-review/review-notes-draft.md b/docs/app-review/review-notes-draft.md new file mode 100644 index 0000000..31097b5 --- /dev/null +++ b/docs/app-review/review-notes-draft.md @@ -0,0 +1,40 @@ +# App Review Notes — draft + +App: Interceptor (6749347474) +Prepared: 2026-10-04 +Replacement build/version: not yet selected + +This text describes the proposed replacement build. Do not submit it as a statement of completed or verified changes until the release archive and the physical-device flow below have been checked. + +## Purpose and network architecture + +Interceptor is a local network inspection tool for selected Nintendo-related hosts. Its packet tunnel configures an HTTPS proxy on 127.0.0.1:6836 on the same device; it does not connect to a developer-operated remote VPN server. The proxy inspects selected HTTPS traffic using a certificate authority generated locally. The user must explicitly install the certificate profile and enable trust in iOS Settings. + +Captured records may include headers, cookies, authentication tokens, account identifiers, and request/response bodies. These are used to display traffic and supported service tokens to the user. The revised in-app notice explains this before certificate setup or capture and requires explicit consent. The previous statement that the app collects or transmits no data should not be used: the app processes local traffic, and requests continue to their original Nintendo services. + +The proposed replacement removes Firebase, Firebase App Check, Firebase Messaging, remote push registration, and tracking permission requests. It disables iCloud Keychain synchronization for new certificates, private keys, and tokens. It does not erase previous cloud copies. Optional notifications are generated locally and contain no captured headers, bodies, cookies, or tokens. Capture results are read from local app storage rather than from notification payloads. + +Captured data is not uploaded to developer-operated servers, sold, used for advertising, or automatically shared with third parties by Interceptor. Normal requests to Nintendo, user-initiated copying, older cloud copies, and OS backups are separate flows explained in the policy. Revoking consent stops capture and disables automatic restart; it does not erase saved data or uninstall a certificate. + +## Proposed review steps (confirm exact labels in the archive) + +1. Launch the app on a physical iPhone or iPad. The initial Data Use and Consent screen explains the data flow. Complete any introductory screens shown only after the consent choice. Review the notice before certificate setup or starting capture. +2. Choose Not Now to decline consent. Confirm Home and Settings remain accessible and capture cannot start, including with Auto Connect or after relaunch. +3. Open Settings → Data Use and Consent, review the notice, and choose Agree and Continue. Agreement permits setup; it must not silently install or trust a certificate. +4. Open Settings → Set Up Capture and follow the app's instructions to obtain the locally generated certificate. In iOS Settings, install the downloaded profile and enable full trust for this certificate under General → About → Certificate Trust Settings. Confirm the final certificate name and download flow using the archive. +5. Return to the app, turn on the connection switch, and approve the iOS VPN configuration prompt if shown. The VPN indicator represents the local packet tunnel. Open SSL Proxying List to see configured hosts. +6. With an authorized Nintendo account and the relevant Nintendo app/service, perform a supported request. Return to Home, open its host, and inspect the request/response record. Settings → Token List displays supported saved tokens when such traffic was captured. Nintendo credentials are entered in Nintendo's own interface, not submitted to Interceptor's developer. +7. If desired, enable Capture Notifications in Settings and approve the iOS permission prompt. Capture another supported record. Confirm the notification is generic and opening it reads the result from local storage. Denying notifications must not prevent capture or access to locally saved results. +8. Open Settings → Data Use and Consent and choose Withdraw Consent. Confirm the connection stops; returning to the foreground or relaunching does not restart it. Existing saved records remain available. Clear request history using Home's trash/Clear action. +9. After testing, disable the VPN configuration and remove the installed certificate profile in iOS Settings → General → VPN & Device Management. Confirm certificate trust is no longer enabled. Consent withdrawal alone does not remove this profile. + +We are awaiting Apple's clarification about whether the proposed certificate/packet-tunnel design is acceptable and whether additional MDM-related permission is required. This draft does not assert that MDM privileges are granted or unnecessary. + +## Evidence to add before submission + +- Replacement build number, version, supported device/OS, and completed archive checks. +- Verify the labels Data Use and Consent, Agree and Continue, Not Now, Withdraw Consent, Set Up Capture, and Capture Notifications in the archive; add English and Japanese screenshots before capture. +- Physical-device proof of consent gating, revocation, restart prevention, and supported HTTPS capture. +- A synthetic/redacted demonstration video or reviewer attachment. Never attach live account cookies, private keys, or authentication tokens. +- A verified reviewer test path and any account/access requirement. No working Nintendo test account or capture fixture is provided by this draft. +- Public app-specific privacy policy URL, reachable support URL, updated App Privacy answers, and Apple's pending clarification. diff --git a/fastlane/metadata/en-US/description.txt b/fastlane/metadata/en-US/description.txt new file mode 100644 index 0000000..0a61d44 --- /dev/null +++ b/fastlane/metadata/en-US/description.txt @@ -0,0 +1,11 @@ +Interceptor helps you inspect selected Nintendo-related HTTPS traffic on your own iPhone or iPad. View saved request and response headers, cookies, and available JSON bodies, and inspect supported service tokens. + +The app uses an iOS VPN configuration to direct selected hosts through a proxy running on your device. It does not provide a remote VPN server, change your public IP address, or protect public Wi-Fi traffic. HTTPS inspection requires you to install and trust a locally generated certificate authority certificate in iOS Settings. + +Before certificate setup or capture, Interceptor explains what it can access and asks for your consent. Captured traffic can contain sensitive cookies, authentication tokens, account identifiers, and request or response content. Use it only with accounts and devices you are authorized to inspect. Capture is limited by the app's configured Nintendo-related hosts; service changes or certificate restrictions may prevent capture. + +New capture records are stored in the app's local shared storage. New certificates, private keys, and saved tokens use Keychain items with iCloud Keychain synchronization disabled. Interceptor does not upload captured data to a developer-operated server, sell it, use it for advertising, or automatically share it with third parties. Nintendo requests still reach their original Nintendo services. Data you choose to copy, earlier iCloud Keychain copies, and operating-system backups are separate from this local capture flow. + +You can decline consent and browse the app, or withdraw consent in Settings to stop capture and prevent automatic restart until you consent again. Withdrawal does not erase saved data or remove an installed certificate. Clear saved request history from Home. Optional local notifications announce captured records without including tokens or captured headers and bodies in the notification. + +An independent tool, not affiliated with or endorsed by Nintendo. Nintendo and related names are trademarks of their respective owners. diff --git a/fastlane/metadata/en-US/keywords.txt b/fastlane/metadata/en-US/keywords.txt new file mode 100644 index 0000000..e980662 --- /dev/null +++ b/fastlane/metadata/en-US/keywords.txt @@ -0,0 +1 @@ +network,https,request,response,headers,cookies,certificate,proxy,debugging,local,traffic diff --git a/fastlane/metadata/en-US/promotional_text.txt b/fastlane/metadata/en-US/promotional_text.txt new file mode 100644 index 0000000..4aa3b49 --- /dev/null +++ b/fastlane/metadata/en-US/promotional_text.txt @@ -0,0 +1 @@ +Inspect selected Nintendo HTTPS traffic on your device. Review sensitive-data handling and consent before capture; withdraw consent in Settings to stop it. diff --git a/fastlane/metadata/ja/description.txt b/fastlane/metadata/ja/description.txt new file mode 100644 index 0000000..af850b2 --- /dev/null +++ b/fastlane/metadata/ja/description.txt @@ -0,0 +1,11 @@ +Interceptorは、自分のiPhoneやiPadで、任天堂関連の一部のHTTPS通信を確認するためのアプリです。保存したリクエストとレスポンスのヘッダー、Cookie、取得できたJSON本文や、対応サービスのトークンを確認できます。 + +iOSのVPN設定を使い、対象ホストの通信を端末内のプロキシへ送ります。外部のVPNサーバーは提供しません。接続元の公開IPアドレスを変更したり、公共Wi-Fiの通信を保護したりする機能ではありません。HTTPS通信の解析には、端末内で生成した認証局証明書をiOSの設定でインストールし、信頼する操作が必要です。 + +証明書の設定や通信の取得を始める前に、取得するデータと用途を説明し、同意を求めます。通信には、Cookie、認証トークン、アカウント識別子、リクエストやレスポンスの内容など、機密情報が含まれることがあります。自分が解析する権限を持つアカウントと端末で使用してください。取得対象はアプリに設定された任天堂関連のホストに限られます。サービスの仕様変更や証明書の制約により、取得できない場合があります。 + +新たな通信記録は、アプリの端末内の共有領域に保存します。新たな証明書、秘密鍵、保存するトークンには、iCloudキーチェーン同期を無効にしたKeychain項目を使用します。取得データを開発者のサーバーへアップロードしたり、販売したり、広告に利用したり、第三者へ自動共有したりしません。任天堂への本来の通信は、引き続き任天堂のサービスへ送信されます。自分でコピーしたデータ、過去に同期したiCloudキーチェーンのデータ、OSのバックアップは、この端末内の取得処理とは別に扱われます。 + +同意しなくてもアプリ内を閲覧できます。設定から同意を撤回すると通信の取得を停止し、再び同意するまで自動再開しません。同意の撤回だけでは、保存済みデータやインストールした証明書は削除されません。通信履歴はホームから消去できます。任意のローカル通知には、トークンや取得したヘッダー・本文を含めません。 + +任天堂が提供、公認するアプリではありません。任天堂および関連する名称は、各権利者の商標です。 diff --git a/fastlane/metadata/ja/keywords.txt b/fastlane/metadata/ja/keywords.txt new file mode 100644 index 0000000..c55a1f7 --- /dev/null +++ b/fastlane/metadata/ja/keywords.txt @@ -0,0 +1 @@ +通信解析,ネットワーク,HTTPS,リクエスト,レスポンス,ヘッダー,Cookie,証明書,プロキシ,デバッグ diff --git a/fastlane/metadata/ja/promotional_text.txt b/fastlane/metadata/ja/promotional_text.txt new file mode 100644 index 0000000..1a735e8 --- /dev/null +++ b/fastlane/metadata/ja/promotional_text.txt @@ -0,0 +1 @@ +端末内で任天堂関連のHTTPS通信を確認。取得するデータと保存先を確認して同意した後に開始し、設定から同意を撤回すると停止できます。 From 4f9392f2ff87358ffdda81f28c4e02a8a05faa40 Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 12:12:57 +0900 Subject: [PATCH 2/7] fix: declare local storage privacy and pin verified dependency --- .github/workflows/ios.yml | 2 +- Interceptor/PrivacyInfo.xcprivacy | 24 ++++++++++++++++++++++++ PacketTunnel/PrivacyInfo.xcprivacy | 24 ++++++++++++++++++++++++ README.md | 2 +- docs/app-review/README.md | 8 ++++++++ docs/app-review/privacy-policy-draft.md | 4 ++-- 6 files changed, 60 insertions(+), 4 deletions(-) create mode 100644 Interceptor/PrivacyInfo.xcprivacy create mode 100644 PacketTunnel/PrivacyInfo.xcprivacy diff --git a/.github/workflows/ios.yml b/.github/workflows/ios.yml index 19f2b9f..633c9cb 100644 --- a/.github/workflows/ios.yml +++ b/.github/workflows/ios.yml @@ -33,7 +33,7 @@ jobs: uses: actions/checkout@v4 with: repository: qtmleap/Mudmouth - ref: 37fb3b4136bd92e828f183fc375322496ef58240 + ref: 698d5bcb25245a26a3be925c34ded8a4c8a2ff6a path: Mudmouth persist-credentials: false diff --git a/Interceptor/PrivacyInfo.xcprivacy b/Interceptor/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..727e3d3 --- /dev/null +++ b/Interceptor/PrivacyInfo.xcprivacy @@ -0,0 +1,24 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + 1C8F.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + diff --git a/PacketTunnel/PrivacyInfo.xcprivacy b/PacketTunnel/PrivacyInfo.xcprivacy new file mode 100644 index 0000000..727e3d3 --- /dev/null +++ b/PacketTunnel/PrivacyInfo.xcprivacy @@ -0,0 +1,24 @@ + + + + + NSPrivacyAccessedAPITypes + + + NSPrivacyAccessedAPIType + NSPrivacyAccessedAPICategoryUserDefaults + NSPrivacyAccessedAPITypeReasons + + CA92.1 + 1C8F.1 + + + + NSPrivacyCollectedDataTypes + + NSPrivacyTracking + + NSPrivacyTrackingDomains + + + diff --git a/README.md b/README.md index 32fce74..5f09106 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ From the Interceptor directory, clone Mudmouth if it does not already exist: ```bash git clone https://github.com/qtmleap/Mudmouth.git ../Mudmouth -git -C ../Mudmouth checkout 37fb3b4136bd92e828f183fc375322496ef58240 +git -C ../Mudmouth checkout 698d5bcb25245a26a3be925c34ded8a4c8a2ff6a xcodebuild -resolvePackageDependencies -project Interceptor.xcodeproj -scheme Interceptor open Interceptor.xcodeproj ``` diff --git a/docs/app-review/README.md b/docs/app-review/README.md index 191752d..8fd60ed 100644 --- a/docs/app-review/README.md +++ b/docs/app-review/README.md @@ -24,3 +24,11 @@ The locale files under `fastlane/metadata/en-US` and `fastlane/metadata/ja` cont - [Apple's App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/): review requirements. The previously reported rejection identifier is historical; use Apple's exact current response rather than assuming its numbering or that these changes resolve it. No new reviewer message or external publication is performed by these files. + +## Verified build preparation (2026-10-04) + +Build 29 passes signed Simulator unit/UI tests; a development-signed Release archive and App Store-signed IPA export succeeded. Both the app and packet-tunnel extension contain a privacy manifest declaring local/App Group UserDefaults use (Apple reasons CA92.1 and 1C8F.1). The archive has no Firebase bundles, GoogleService-Info.plist, APNs entitlement, or tracking-purpose string. These checks do not replace physical-device VPN/certificate testing or Apple's review. + +Mudmouth CI now builds for iOS Simulator instead of attempting to compile UIKit for macOS. Lint tool versions are fixed, and only 16 existing force-try findings are recorded in its baseline; new findings remain checked. The retired runner and nonexistent package.json release check were replaced with package metadata validation. The unavailable external AI review is manual; an independent code review was performed for these changes. + +App-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm publication, App Store legal developer details, App Privacy answers, screenshots, and actual-device evidence before submitting. diff --git a/docs/app-review/privacy-policy-draft.md b/docs/app-review/privacy-policy-draft.md index 3765831..0744f31 100644 --- a/docs/app-review/privacy-policy-draft.md +++ b/docs/app-review/privacy-policy-draft.md @@ -15,7 +15,7 @@ Interceptor inspects selected Nintendo-related HTTPS traffic on your own device ### Data accessed and purpose -After you explicitly consent to capture, the app can process and save request and response hosts, paths and query parameters, headers, cookies, authentication tokens, account identifiers, and bodies for its configured hosts and paths. Some fields contain sensitive account or session information. The app uses these records to show you your traffic and to display supported service tokens. It also stores settings, consent state, and locally generated certificate/key material needed for inspection. Use the app only for devices, accounts, and traffic you are authorized to inspect. +After you explicitly consent to capture, the app can process and save request and response hosts, paths and query parameters, headers, cookies, authentication tokens, account identifiers, and bodies for its configured hosts, including paths beyond the endpoints used for token notifications. Some fields contain sensitive account or session information. The app uses these records to show you your traffic and to display supported service tokens. It also stores settings, consent state, and locally generated certificate/key material needed for inspection. Use the app only for devices, accounts, and traffic you are authorized to inspect. ### Storage and transmission @@ -45,7 +45,7 @@ Interceptorは、iOSのVPN設定と端末内のプロキシを使い、自分の ### 取得するデータと用途 -通信の取得に明示的に同意した後、対象のホストやパスについて、リクエストとレスポンスのホスト、パス、クエリ、ヘッダー、Cookie、認証トークン、アカウント識別子、本文を処理・保存することがあります。アカウントやセッションに関する機密情報が含まれる場合があります。これらは、通信内容と対応サービスのトークンを利用者に表示するために使用します。設定、同意の状態、解析に必要な端末内の証明書と鍵も保存します。解析する権限を持つ端末、アカウント、通信だけを対象にしてください。 +通信の取得に明示的に同意した後、設定したホストへの通信(トークン通知の対象エンドポイント以外のパスも含む)について、リクエストとレスポンスのホスト、パス、クエリ、ヘッダー、Cookie、認証トークン、アカウント識別子、本文を処理・保存することがあります。アカウントやセッションに関する機密情報が含まれる場合があります。これらは、通信内容と対応サービスのトークンを利用者に表示するために使用します。設定、同意の状態、解析に必要な端末内の証明書と鍵も保存します。解析する権限を持つ端末、アカウント、通信だけを対象にしてください。 ### 保存先と送信 From 08589ce0ec22f04869090af9c57a039563a1bdea Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 12:56:40 +0900 Subject: [PATCH 3/7] test: support iPad consent UI and record review progress --- InterceptorUITests/InterceptorUITests.swift | 37 +++++++++++++++------ docs/app-review/README.md | 12 ++++--- 2 files changed, 33 insertions(+), 16 deletions(-) diff --git a/InterceptorUITests/InterceptorUITests.swift b/InterceptorUITests/InterceptorUITests.swift index 023321c..759ec22 100644 --- a/InterceptorUITests/InterceptorUITests.swift +++ b/InterceptorUITests/InterceptorUITests.swift @@ -38,26 +38,28 @@ final class InterceptorUITests: XCTestCase { app.launch() if app.buttons["Not Now"].waitForExistence(timeout: 3) { app.buttons["Not Now"].tap() } else { - app.tabBars.buttons["Settings"].tap() + tab(app, named: "Settings").tap() app.buttons["Data Use and Consent"].tap() if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } - app.navigationBars.buttons.firstMatch.tap() + returnToSettings(app) } - XCTAssertTrue(app.tabBars.buttons["Home"].waitForExistence(timeout: 5)) - app.tabBars.buttons["Settings"].tap() + XCTAssertTrue(tab(app, named: "Home").waitForExistence(timeout: 5)) + tab(app, named: "Settings").tap() let connection = app.switches["Connection Status"] XCTAssertTrue(connection.waitForExistence(timeout: 5)) XCTAssertFalse(connection.isEnabled) app.buttons["Data Use and Consent"].tap() XCTAssertTrue(app.buttons["Agree and Continue"].waitForExistence(timeout: 5)) + attachScreenshot(app, named: "Data Use and Consent") app.buttons["Agree and Continue"].tap() XCTAssertTrue(app.buttons["Withdraw Consent"].waitForExistence(timeout: 5)) app.buttons["Withdraw Consent"].tap() - app.navigationBars.buttons.firstMatch.tap() + attachScreenshot(app, named: "Consent Withdrawn") + returnToSettings(app) XCTAssertFalse(connection.isEnabled) app.terminate() app.launch() - app.tabBars.buttons["Settings"].tap() + tab(app, named: "Settings").tap() XCTAssertFalse(app.switches["Connection Status"].isEnabled) } @@ -74,7 +76,7 @@ final class InterceptorUITests: XCTestCase { app.launch() if app.buttons["Not Now"].waitForExistence(timeout: 3) { app.buttons["Not Now"].tap() } - app.tabBars.buttons["Settings"].tap() + tab(app, named: "Settings").tap() app.buttons["Data Use and Consent"].tap() if app.buttons["Agree and Continue"].exists { app.buttons["Agree and Continue"].tap() } app.navigationBars.buttons.firstMatch.tap() @@ -89,10 +91,10 @@ final class InterceptorUITests: XCTestCase { XCTAssertTrue(app.buttons["Done"].waitForExistence(timeout: 5)) app.buttons["Done"].tap() } - XCTAssertTrue(app.tabBars.buttons["Home"].waitForExistence(timeout: 10)) + XCTAssertTrue(tab(app, named: "Home").waitForExistence(timeout: 10)) attachScreenshot(app, named: "Home") - app.tabBars.buttons["Settings"].tap() + tab(app, named: "Settings").tap() XCTAssertTrue(app.navigationBars["Settings"].waitForExistence(timeout: 5)) let autoConnect = app.switches["Auto Connect"] XCTAssertTrue(autoConnect.waitForExistence(timeout: 5)) @@ -123,7 +125,7 @@ final class InterceptorUITests: XCTestCase { app.buttons["Certificate"].tap() XCTAssertTrue(app.navigationBars["Certificate"].waitForExistence(timeout: 5)) app.navigationBars.buttons.firstMatch.tap() - app.tabBars.buttons["Home"].tap() + tab(app, named: "Home").tap() app.navigationBars.buttons.firstMatch.tap() XCTAssertTrue(app.buttons["Clear"].waitForExistence(timeout: 5)) @@ -132,10 +134,23 @@ final class InterceptorUITests: XCTestCase { app.terminate() app.launch() - XCTAssertTrue(app.tabBars.buttons["Home"].waitForExistence(timeout: 10)) + XCTAssertTrue(tab(app, named: "Home").waitForExistence(timeout: 10)) XCTAssertFalse(app.buttons["Next"].exists, "Completed onboarding must remain dismissed after relaunch") } + @MainActor + private func tab(_ app: XCUIApplication, named name: String) -> XCUIElement { + // iPadOS exposes its top tabs as ordinary buttons, rather than a TabBar. + app.buttons.matching(NSPredicate(format: "label == %@", name)).firstMatch + } + + @MainActor + private func returnToSettings(_ app: XCUIApplication) { + let back = app.navigationBars.buttons["Settings"].firstMatch + // iPad keeps the Settings form beside the detail view, so there is no back button. + if back.exists { back.tap() } + } + @MainActor private func attachScreenshot(_ app: XCUIApplication, named name: String) { let attachment = XCTAttachment(screenshot: app.screenshot()) diff --git a/docs/app-review/README.md b/docs/app-review/README.md index 8fd60ed..9f7c99f 100644 --- a/docs/app-review/README.md +++ b/docs/app-review/README.md @@ -1,10 +1,10 @@ # App Review preparation — draft, 2026-10-04 -These files prepare a replacement submission for App Store app 6749347474. They have not been uploaded, submitted, or approved. Build 28's rejection and the reply sent on 2026-10-04 do not establish acceptance of the proposed changes. +These files prepare a replacement submission for App Store app 6749347474. Build 29 has not been uploaded, submitted, or approved. Build 28's rejection and the reply sent on 2026-10-04 do not establish acceptance of the proposed changes. -The locale files under `fastlane/metadata/en-US` and `fastlane/metadata/ja` contain proposed store text. Their intended behavior must match the final archive before they are published. The current Fastfile uploads TestFlight builds, not these metadata files; this directory does not add an automatic publishing step. +The description, promotional text, and keywords under `fastlane/metadata/en-US` and `fastlane/metadata/ja` were saved in App Store Connect on 2026-10-04. They have not been released. Their intended behavior must match the final archive. The current Fastfile uploads TestFlight builds, not these metadata files; this directory does not add an automatic publishing step. -`review-notes-draft.md` describes the review flow and evidence still required. `privacy-policy-draft.md` contains app-specific English and Japanese policy text. Resolve its developer contact, public policy URL, and effective date before publication, and connect the app's Privacy Policy entry to that policy. Keep the draft status notice out of final public copy only after the implementation is verified. +`review-notes-draft.md` describes the review flow and evidence still required. `privacy-policy-draft.md` contains the policy source text. The app-specific policy is now public on qleap.jp, with its existing public support page as the contact route. The app links to it; the App Store Connect policy URL and App Privacy answers still need reconciliation before submission. ## Checks before using the drafts @@ -23,7 +23,7 @@ The locale files under `fastlane/metadata/en-US` and `fastlane/metadata/ja` cont - [Apple's platform version information](https://developer.apple.com/help/app-store-connect/reference/app-information/platform-version-information): field formats and limits. - [Apple's App Review Guidelines](https://developer.apple.com/app-store/review/guidelines/): review requirements. The previously reported rejection identifier is historical; use Apple's exact current response rather than assuming its numbering or that these changes resolve it. -No new reviewer message or external publication is performed by these files. +These files do not automatically send reviewer messages or publish externally. ## Verified build preparation (2026-10-04) @@ -31,4 +31,6 @@ Build 29 passes signed Simulator unit/UI tests; a development-signed Release arc Mudmouth CI now builds for iOS Simulator instead of attempting to compile UIKit for macOS. Lint tool versions are fixed, and only 16 existing force-try findings are recorded in its baseline; new findings remain checked. The retired runner and nonexistent package.json release check were replaced with package metadata validation. The unavailable external AI review is manual; an independent code review was performed for these changes. -App-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm publication, App Store legal developer details, App Privacy answers, screenshots, and actual-device evidence before submitting. +The consent lifecycle UI test passed on a connected iPad Air 13-inch (M3), iPadOS 26.3.1, on 2026-10-04. It checks decline, consent, withdrawal, disabled capture controls, and relaunch. This is UI evidence only; actual VPN traffic and certificate trust remain unverified. The test supports iPad's top tab buttons and preserves consent screenshots in the test result. + +Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, App Privacy answers, screenshots, and actual-device VPN/certificate evidence before submitting. From 19f6ea1da961620844f24294d6b72986e2d3919f Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 13:19:01 +0900 Subject: [PATCH 4/7] test: verify physical VPN capture and consent shutdown --- InterceptorUITests/InterceptorUITests.swift | 77 ++++++++++++++++++ docs/app-review/README.md | 8 +- .../evidence/physical-vpn-https-probe.png | Bin 0 -> 138086 bytes docs/app-review/review-notes-draft.md | 6 +- 4 files changed, 87 insertions(+), 4 deletions(-) create mode 100644 docs/app-review/evidence/physical-vpn-https-probe.png diff --git a/InterceptorUITests/InterceptorUITests.swift b/InterceptorUITests/InterceptorUITests.swift index 759ec22..f51a942 100644 --- a/InterceptorUITests/InterceptorUITests.swift +++ b/InterceptorUITests/InterceptorUITests.swift @@ -63,6 +63,83 @@ final class InterceptorUITests: XCTestCase { XCTAssertFalse(app.switches["Connection Status"].isEnabled) } + @MainActor + func testPhysicalVPNLifecycle() async throws { + #if targetEnvironment(simulator) + throw XCTSkip("VPN tunnel validation requires a physical device with the certificate and VPN installed.") + #else + let app = XCUIApplication() + app.launchArguments = ["-AppleLanguages", "(en)", "-AppleLocale", "en_US"] + app.launch() + if app.buttons["Not Now"].waitForExistence(timeout: 3) { app.buttons["Not Now"].tap() } + tab(app, named: "Settings").tap() + app.buttons["Data Use and Consent"].tap() + if app.buttons["Agree and Continue"].exists { app.buttons["Agree and Continue"].tap() } + returnToSettings(app) + let connection = app.switches["Connection Status"] + XCTAssertTrue(connection.waitForExistence(timeout: 5)) + XCTAssertTrue(connection.isEnabled) + let control = connection.switches.firstMatch + defer { + app.activate() + tab(app, named: "Settings").tap() + if app.alerts.buttons["OK"].exists { app.alerts.buttons["OK"].tap() } + app.buttons["Data Use and Consent"].tap() + if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } + } + control.tap() + let connected = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '1'"), object: connection) + let result = XCTWaiter.wait(for: [connected], timeout: 20) + attachScreenshot(app, named: "Physical VPN start result") + if result != .completed { + let diagnostic = XCTAttachment(string: app.debugDescription) + diagnostic.name = "Physical VPN start accessibility" + diagnostic.lifetime = .keepAlways + add(diagnostic) + } + XCTAssertEqual(result, .completed, "Install the Interceptor VPN configuration before running this test; inspect the attached start result for errors.") + guard result == .completed else { return } + let probePath = "/__interceptor_review_probe_" + UUID().uuidString + let probeURL = try XCTUnwrap(URL(string: "https://api.lp1.av5ja.srv.nintendo.net" + probePath)) + let configuration = URLSessionConfiguration.ephemeral + configuration.httpShouldSetCookies = false + configuration.timeoutIntervalForRequest = 20 + let session = URLSession(configuration: configuration) + defer { session.invalidateAndCancel() } + let (_, response) = try await session.data(from: probeURL) + XCTAssertNotNil(response as? HTTPURLResponse, "A public probe must complete TLS and receive an HTTP response.") + app.activate() + tab(app, named: "Home").tap() + let host = app.staticTexts["api.lp1.av5ja.srv.nintendo.net"] + XCTAssertTrue(host.waitForExistence(timeout: 10)) + host.tap() + XCTAssertTrue(app.staticTexts[probePath].waitForExistence(timeout: 10), "The unique public probe must appear in captured history.") + attachScreenshot(app, named: "Physical VPN captured public HTTPS probe") + tab(app, named: "Settings").tap() + control.tap() + let stopped = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '0'"), object: connection) + XCTAssertEqual(XCTWaiter.wait(for: [stopped], timeout: 15), .completed) + control.tap() + let restarted = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '1'"), object: connection) + XCTAssertEqual(XCTWaiter.wait(for: [restarted], timeout: 20), .completed) + app.buttons["Data Use and Consent"].tap() + app.buttons["Withdraw Consent"].tap() + returnToSettings(app) + let revoked = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '0' AND enabled == false"), object: connection) + XCTAssertEqual(XCTWaiter.wait(for: [revoked], timeout: 15), .completed) + attachScreenshot(app, named: "Physical VPN stopped after withdrawal") + let settings = XCUIApplication(bundleIdentifier: "com.apple.Preferences") + settings.launch() + settings.buttons["com.apple.settings.general"].tap() + let vpnSettings = settings.cells["ManagedConfigurationList"] + if !vpnSettings.isHittable { settings.swipeUp() } + XCTAssertTrue(vpnSettings.waitForExistence(timeout: 5)) + vpnSettings.tap() + XCTAssertTrue(settings.staticTexts["Not Connected"].waitForExistence(timeout: 15), "iPadOS must report that the VPN stopped after consent withdrawal.") + attachScreenshot(settings, named: "Physical system VPN disconnected") + #endif + } + @MainActor func testSimulatorOnboardingAndNavigation() throws { let app = XCUIApplication() diff --git a/docs/app-review/README.md b/docs/app-review/README.md index 9f7c99f..0a11896 100644 --- a/docs/app-review/README.md +++ b/docs/app-review/README.md @@ -31,6 +31,10 @@ Build 29 passes signed Simulator unit/UI tests; a development-signed Release arc Mudmouth CI now builds for iOS Simulator instead of attempting to compile UIKit for macOS. Lint tool versions are fixed, and only 16 existing force-try findings are recorded in its baseline; new findings remain checked. The retired runner and nonexistent package.json release check were replaced with package metadata validation. The unavailable external AI review is manual; an independent code review was performed for these changes. -The consent lifecycle UI test passed on a connected iPad Air 13-inch (M3), iPadOS 26.3.1, on 2026-10-04. It checks decline, consent, withdrawal, disabled capture controls, and relaunch. This is UI evidence only; actual VPN traffic and certificate trust remain unverified. The test supports iPad's top tab buttons and preserves consent screenshots in the test result. +The consent lifecycle UI test passed on a connected iPad Air 13-inch (M3), iPadOS 26.3.1, on 2026-10-04. It checks decline, consent, withdrawal, disabled capture controls, and relaunch. The test supports iPad's top tab buttons and preserves consent screenshots in the test result. -Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, App Privacy answers, screenshots, and actual-device VPN/certificate evidence before submitting. +The physical-device VPN lifecycle test also passed on this device at 13:17 JST (45.539 seconds, zero failures). Initially, the VPN configuration was missing and the app displayed its setup error. After registering it through Set Up Capture, the test started the tunnel, sent an anonymous HTTPS GET with a unique probe path to `api.lp1.av5ja.srv.nintendo.net`, received an HTTP response, and verified that exact path in the captured history. It then stopped and restarted the tunnel, withdrew consent, and independently confirmed iPadOS reported Not Connected. The device is left with consent withdrawn and the VPN stopped; its installed certificate and VPN configuration remain. The existing installed certificate was recognized and trusted; fresh profile installation/removal and Nintendo account/token capture were not exercised. + +The reusable `testPhysicalVPNLifecycle` requires a physical device with the matching certificate installed/trusted and the Interceptor VPN configuration registered. It skips on Simulator. The verified device's system Settings UI was English. The captured public-request screenshot is saved in [evidence/physical-vpn-https-probe.png](evidence/physical-vpn-https-probe.png); it contains no account cookies or authentication tokens. The complete local result bundle is `/tmp/interceptor-ipad-vpn-final.xcresult`. + +Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, App Privacy answers, review screenshots/video, fresh certificate setup, and the Nintendo account/token test path before submitting. diff --git a/docs/app-review/evidence/physical-vpn-https-probe.png b/docs/app-review/evidence/physical-vpn-https-probe.png new file mode 100644 index 0000000000000000000000000000000000000000..89b2aa2f7fb1b86c1fe03b00d8cd888d2239ccad GIT binary patch literal 138086 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 literal 0 HcmV?d00001 diff --git a/docs/app-review/review-notes-draft.md b/docs/app-review/review-notes-draft.md index 31097b5..2856e90 100644 --- a/docs/app-review/review-notes-draft.md +++ b/docs/app-review/review-notes-draft.md @@ -21,8 +21,8 @@ Captured data is not uploaded to developer-operated servers, sold, used for adve 1. Launch the app on a physical iPhone or iPad. The initial Data Use and Consent screen explains the data flow. Complete any introductory screens shown only after the consent choice. Review the notice before certificate setup or starting capture. 2. Choose Not Now to decline consent. Confirm Home and Settings remain accessible and capture cannot start, including with Auto Connect or after relaunch. 3. Open Settings → Data Use and Consent, review the notice, and choose Agree and Continue. Agreement permits setup; it must not silently install or trust a certificate. -4. Open Settings → Set Up Capture and follow the app's instructions to obtain the locally generated certificate. In iOS Settings, install the downloaded profile and enable full trust for this certificate under General → About → Certificate Trust Settings. Confirm the final certificate name and download flow using the archive. -5. Return to the app, turn on the connection switch, and approve the iOS VPN configuration prompt if shown. The VPN indicator represents the local packet tunnel. Open SSL Proxying List to see configured hosts. +4. Open Settings → Set Up Capture and follow the app's instructions to obtain the locally generated certificate. In iOS Settings, install the downloaded profile and enable full trust for this certificate under General → About → Certificate Trust Settings. Continue setup to Install VPN Configuration and approve the iOS VPN configuration prompt if shown. The configuration must be registered before capture can start. +5. Return to Settings and turn on Connection Status. The VPN indicator represents the local packet tunnel. Open SSL Proxying List to see configured hosts. 6. With an authorized Nintendo account and the relevant Nintendo app/service, perform a supported request. Return to Home, open its host, and inspect the request/response record. Settings → Token List displays supported saved tokens when such traffic was captured. Nintendo credentials are entered in Nintendo's own interface, not submitted to Interceptor's developer. 7. If desired, enable Capture Notifications in Settings and approve the iOS permission prompt. Capture another supported record. Confirm the notification is generic and opening it reads the result from local storage. Denying notifications must not prevent capture or access to locally saved results. 8. Open Settings → Data Use and Consent and choose Withdraw Consent. Confirm the connection stops; returning to the foreground or relaunching does not restart it. Existing saved records remain available. Clear request history using Home's trash/Clear action. @@ -32,6 +32,8 @@ We are awaiting Apple's clarification about whether the proposed certificate/pac ## Evidence to add before submission +On 2026-10-04, the physical VPN lifecycle test passed on iPad Air 13-inch (M3), iPadOS 26.3.1: tunnel start, an anonymous HTTPS probe to a configured Nintendo host recorded in local history, stop/restart, consent withdrawal, and an independent Not Connected check in iPadOS Settings. See [the public-request screenshot](evidence/physical-vpn-https-probe.png). This does not establish Nintendo account/token capture or a fresh certificate installation/removal flow. Build 29 is still not uploaded or selected for review. + - Replacement build number, version, supported device/OS, and completed archive checks. - Verify the labels Data Use and Consent, Agree and Continue, Not Now, Withdraw Consent, Set Up Capture, and Capture Notifications in the archive; add English and Japanese screenshots before capture. - Physical-device proof of consent gating, revocation, restart prevention, and supported HTTPS capture. From b674a4ce006d6697d8c732e625038f606a4c07e0 Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 13:31:33 +0900 Subject: [PATCH 5/7] test: exercise Nintendo service and prefer M2 device --- InterceptorUITests/InterceptorUITests.swift | 43 +++++++++++++++++++++ docs/app-review/README.md | 4 ++ 2 files changed, 47 insertions(+) diff --git a/InterceptorUITests/InterceptorUITests.swift b/InterceptorUITests/InterceptorUITests.swift index f51a942..af0e397 100644 --- a/InterceptorUITests/InterceptorUITests.swift +++ b/InterceptorUITests/InterceptorUITests.swift @@ -63,6 +63,49 @@ final class InterceptorUITests: XCTestCase { XCTAssertFalse(app.switches["Connection Status"].isEnabled) } + @MainActor + func testPhysicalNintendoCapture() throws { + #if targetEnvironment(simulator) + throw XCTSkip("Nintendo capture requires a logged-in Nintendo Switch App on a physical device.") + #else + let app = XCUIApplication() + app.launchArguments = ["-AppleLanguages", "(en)", "-AppleLocale", "en_US"] + app.launch() + if app.buttons["Not Now"].waitForExistence(timeout: 3) { app.buttons["Not Now"].tap() } + tab(app, named: "Settings").tap() + app.buttons["Data Use and Consent"].tap() + if app.buttons["Agree and Continue"].exists { app.buttons["Agree and Continue"].tap() } + returnToSettings(app) + let connection = app.switches["Connection Status"] + defer { + app.activate() + tab(app, named: "Settings").tap() + app.buttons["Data Use and Consent"].tap() + if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } + } + if connection.value as? String != "1" { connection.switches.firstMatch.tap() } + let connected = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '1'"), object: connection) + XCTAssertEqual(XCTWaiter.wait(for: [connected], timeout: 20), .completed) + let nintendo = XCUIApplication(bundleIdentifier: "com.nintendo.znca") + nintendo.launch() + XCTAssertTrue(nintendo.wait(for: .runningForeground, timeout: 10)) + let game = nintendo.cells["SplatNet 3"] + guard game.waitForExistence(timeout: 10) else { + attachScreenshot(nintendo, named: "Private Nintendo navigation inspection") + XCTFail("The SplatNet 3 entry was not found; inspect the private Nintendo UI attachment.") + return + } + game.tap() + _ = nintendo.webViews.firstMatch.waitForExistence(timeout: 20) + app.activate() + tab(app, named: "Settings").tap() + app.buttons["Token List"].tap() + XCTAssertTrue(app.navigationBars["Token List"].waitForExistence(timeout: 5)) + XCTAssertTrue(app.staticTexts["api.lp1.av5ja.srv.nintendo.net"].waitForExistence(timeout: 15), "The app must extract the Splatoon 3 token from captured Nintendo traffic.") + // Stay on the token host list: opening token details would expose live credentials. + #endif + } + @MainActor func testPhysicalVPNLifecycle() async throws { #if targetEnvironment(simulator) diff --git a/docs/app-review/README.md b/docs/app-review/README.md index 0a11896..9331d38 100644 --- a/docs/app-review/README.md +++ b/docs/app-review/README.md @@ -27,6 +27,8 @@ These files do not automatically send reviewer messages or publish externally. ## Verified build preparation (2026-10-04) +Primary physical test device: iPad Air 11-inch (M2), named iPad Air M2, iPadOS 18.6.2. The user selected it because the M3 is shared with other app development. Use M2 for subsequent device operations; the historical M3 results below remain evidence of those completed runs. Initial M2 test deployment reached Xcode's Unlock iPad Air M2 to Continue gate; unlock is required before installation and UI verification can complete. + Build 29 passes signed Simulator unit/UI tests; a development-signed Release archive and App Store-signed IPA export succeeded. Both the app and packet-tunnel extension contain a privacy manifest declaring local/App Group UserDefaults use (Apple reasons CA92.1 and 1C8F.1). The archive has no Firebase bundles, GoogleService-Info.plist, APNs entitlement, or tracking-purpose string. These checks do not replace physical-device VPN/certificate testing or Apple's review. Mudmouth CI now builds for iOS Simulator instead of attempting to compile UIKit for macOS. Lint tool versions are fixed, and only 16 existing force-try findings are recorded in its baseline; new findings remain checked. The retired runner and nonexistent package.json release check were replaced with package metadata validation. The unavailable external AI review is manual; an independent code review was performed for these changes. @@ -37,4 +39,6 @@ The physical-device VPN lifecycle test also passed on this device at 13:17 JST ( The reusable `testPhysicalVPNLifecycle` requires a physical device with the matching certificate installed/trusted and the Interceptor VPN configuration registered. It skips on Simulator. The verified device's system Settings UI was English. The captured public-request screenshot is saved in [evidence/physical-vpn-https-probe.png](evidence/physical-vpn-https-probe.png); it contains no account cookies or authentication tokens. The complete local result bundle is `/tmp/interceptor-ipad-vpn-final.xcresult`. +Before switching devices, `testPhysicalNintendoCapture` passed on M3 at 13:27 JST (27.504 seconds, zero failures). It enabled capture, launched the logged-in Nintendo Switch App 3.5.0, opened its SplatNet 3 cell, returned to Interceptor, and verified the Splatoon 3 host appeared in Token List without opening live token details. It withdrew consent afterward. This verifies the visible token-list integration; it does not compare a new token against a previously saved token. Nintendo screenshots containing friends/account information are private local diagnostics and are not included in this repository or review attachments. The local result bundle is `/tmp/interceptor-nintendo-splatnet3.xcresult`. + Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, App Privacy answers, review screenshots/video, fresh certificate setup, and the Nintendo account/token test path before submitting. From 924ca8e708589da5334155a6c87d7ba9fdc95c3e Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 14:12:38 +0900 Subject: [PATCH 6/7] test: support iPadOS 18 physical capture controls --- InterceptorUITests/InterceptorUITests.swift | 21 +++++++++++++++++++-- docs/app-review/README.md | 6 +++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/InterceptorUITests/InterceptorUITests.swift b/InterceptorUITests/InterceptorUITests.swift index af0e397..0e6f3a8 100644 --- a/InterceptorUITests/InterceptorUITests.swift +++ b/InterceptorUITests/InterceptorUITests.swift @@ -79,11 +79,12 @@ final class InterceptorUITests: XCTestCase { let connection = app.switches["Connection Status"] defer { app.activate() + if app.alerts.buttons["OK"].exists { app.alerts.buttons["OK"].tap() } tab(app, named: "Settings").tap() app.buttons["Data Use and Consent"].tap() if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } } - if connection.value as? String != "1" { connection.switches.firstMatch.tap() } + if connection.value as? String != "1" { try switchControl(app, row: connection).tap() } let connected = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '1'"), object: connection) XCTAssertEqual(XCTWaiter.wait(for: [connected], timeout: 20), .completed) let nintendo = XCUIApplication(bundleIdentifier: "com.nintendo.znca") @@ -98,6 +99,11 @@ final class InterceptorUITests: XCTestCase { game.tap() _ = nintendo.webViews.firstMatch.waitForExistence(timeout: 20) app.activate() + tab(app, named: "Home").tap() + let capturedHost = app.staticTexts["api.lp1.av5ja.srv.nintendo.net"] + XCTAssertTrue(capturedHost.waitForExistence(timeout: 10)) + capturedHost.tap() + XCTAssertTrue(app.staticTexts["/api/bullet_tokens"].waitForExistence(timeout: 10), "The Nintendo token request must appear in captured history.") tab(app, named: "Settings").tap() app.buttons["Token List"].tap() XCTAssertTrue(app.navigationBars["Token List"].waitForExistence(timeout: 5)) @@ -122,7 +128,7 @@ final class InterceptorUITests: XCTestCase { let connection = app.switches["Connection Status"] XCTAssertTrue(connection.waitForExistence(timeout: 5)) XCTAssertTrue(connection.isEnabled) - let control = connection.switches.firstMatch + let control = try switchControl(app, row: connection) defer { app.activate() tab(app, named: "Settings").tap() @@ -258,6 +264,17 @@ final class InterceptorUITests: XCTestCase { XCTAssertFalse(app.buttons["Next"].exists, "Completed onboarding must remain dismissed after relaunch") } + @MainActor + private func switchControl(_ app: XCUIApplication, row: XCUIElement) throws -> XCUIElement { + // iPadOS 18 exposes the UISwitch beside its labeled row; newer versions nest it. + let frame = row.frame + return try XCTUnwrap(app.switches.allElementsBoundByIndex.first { candidate in + let controlFrame = candidate.frame + return controlFrame.width < frame.width + && frame.contains(CGPoint(x: controlFrame.midX, y: controlFrame.midY)) + }, "The labeled row must expose its actual switch control.") + } + @MainActor private func tab(_ app: XCUIApplication, named name: String) -> XCUIElement { // iPadOS exposes its top tabs as ordinary buttons, rather than a TabBar. diff --git a/docs/app-review/README.md b/docs/app-review/README.md index 9331d38..719c9a3 100644 --- a/docs/app-review/README.md +++ b/docs/app-review/README.md @@ -27,7 +27,7 @@ These files do not automatically send reviewer messages or publish externally. ## Verified build preparation (2026-10-04) -Primary physical test device: iPad Air 11-inch (M2), named iPad Air M2, iPadOS 18.6.2. The user selected it because the M3 is shared with other app development. Use M2 for subsequent device operations; the historical M3 results below remain evidence of those completed runs. Initial M2 test deployment reached Xcode's Unlock iPad Air M2 to Continue gate; unlock is required before installation and UI verification can complete. +Primary physical test device: iPad Air 11-inch (M2), named iPad Air M2, iPadOS 18.6.2. The user selected it because the M3 is shared with other app development. Use M2 for subsequent device operations; the historical M3 results below remain evidence of those completed runs. The initial Xcode unlock gate cleared, and the consent UI test passed on M2 at 13:32 JST (17.672 seconds, zero failures). The existing certificate was trusted, but the setup wizard did not recognize it as the current app certificate; a fresh certificate was downloaded, and native installation reached the device passcode gate. Certificate installation and M2 Nintendo capture verification remain pending. Tailscale was switched off in iPadOS VPN settings at 14:09 JST; the selected Tailscale configuration reported Not Connected with its switch value zero. The user explicitly requested that it remain off after testing. The local diagnostic result is `/tmp/interceptor-m2-tailscale-off.xcresult`; system-settings images contain private account details and are not committed. Build 29 passes signed Simulator unit/UI tests; a development-signed Release archive and App Store-signed IPA export succeeded. Both the app and packet-tunnel extension contain a privacy manifest declaring local/App Group UserDefaults use (Apple reasons CA92.1 and 1C8F.1). The archive has no Firebase bundles, GoogleService-Info.plist, APNs entitlement, or tracking-purpose string. These checks do not replace physical-device VPN/certificate testing or Apple's review. @@ -42,3 +42,7 @@ The reusable `testPhysicalVPNLifecycle` requires a physical device with the matc Before switching devices, `testPhysicalNintendoCapture` passed on M3 at 13:27 JST (27.504 seconds, zero failures). It enabled capture, launched the logged-in Nintendo Switch App 3.5.0, opened its SplatNet 3 cell, returned to Interceptor, and verified the Splatoon 3 host appeared in Token List without opening live token details. It withdrew consent afterward. This verifies the visible token-list integration; it does not compare a new token against a previously saved token. Nintendo screenshots containing friends/account information are private local diagnostics and are not included in this repository or review attachments. The local result bundle is `/tmp/interceptor-nintendo-splatnet3.xcresult`. Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, App Privacy answers, review screenshots/video, fresh certificate setup, and the Nintendo account/token test path before submitting. + +The physical test switch selector now supports iPadOS 18, which exposes the actual UISwitch beside the labeled row. The Nintendo test also requires the `/api/bullet_tokens` request in captured history; this stronger assertion has not yet passed on M2, whose certificate/VPN setup is pending. + +After the test selector changes, the simulator build and consent lifecycle test passed at 14:12 JST (zero failures; the two physical-only tests were skipped as intended). Result: `/tmp/interceptor-m2-test-selector-simulator.xcresult`. From f8b35be3b9f12b6dda572c31a27abf8ecf720050 Mon Sep 17 00:00:00 2001 From: tkgstrator <29420801+tkgstrator@users.noreply.github.com> Date: Sun, 4 Oct 2026 14:36:08 +0900 Subject: [PATCH 7/7] test: verify Nintendo capture and VPN lifecycle on M2 iPad --- InterceptorUITests/InterceptorUITests.swift | 24 ++++++++++++------ docs/app-review/README.md | 12 ++++++--- .../evidence/physical-m2-capture.png | Bin 0 -> 226238 bytes docs/app-review/privacy-policy-draft.md | 6 ++--- docs/app-review/review-notes-draft.md | 4 +-- 5 files changed, 29 insertions(+), 17 deletions(-) create mode 100644 docs/app-review/evidence/physical-m2-capture.png diff --git a/InterceptorUITests/InterceptorUITests.swift b/InterceptorUITests/InterceptorUITests.swift index 0e6f3a8..1e9d43e 100644 --- a/InterceptorUITests/InterceptorUITests.swift +++ b/InterceptorUITests/InterceptorUITests.swift @@ -68,6 +68,7 @@ final class InterceptorUITests: XCTestCase { #if targetEnvironment(simulator) throw XCTSkip("Nintendo capture requires a logged-in Nintendo Switch App on a physical device.") #else + XCUIDevice.shared.orientation = .portrait let app = XCUIApplication() app.launchArguments = ["-AppleLanguages", "(en)", "-AppleLocale", "en_US"] app.launch() @@ -77,10 +78,10 @@ final class InterceptorUITests: XCTestCase { if app.buttons["Agree and Continue"].exists { app.buttons["Agree and Continue"].tap() } returnToSettings(app) let connection = app.switches["Connection Status"] - defer { + addTeardownBlock { @MainActor in app.activate() if app.alerts.buttons["OK"].exists { app.alerts.buttons["OK"].tap() } - tab(app, named: "Settings").tap() + self.tab(app, named: "Settings").tap() app.buttons["Data Use and Consent"].tap() if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } } @@ -117,6 +118,7 @@ final class InterceptorUITests: XCTestCase { #if targetEnvironment(simulator) throw XCTSkip("VPN tunnel validation requires a physical device with the certificate and VPN installed.") #else + XCUIDevice.shared.orientation = .portrait let app = XCUIApplication() app.launchArguments = ["-AppleLanguages", "(en)", "-AppleLocale", "en_US"] app.launch() @@ -129,13 +131,18 @@ final class InterceptorUITests: XCTestCase { XCTAssertTrue(connection.waitForExistence(timeout: 5)) XCTAssertTrue(connection.isEnabled) let control = try switchControl(app, row: connection) - defer { + addTeardownBlock { @MainActor in app.activate() - tab(app, named: "Settings").tap() if app.alerts.buttons["OK"].exists { app.alerts.buttons["OK"].tap() } + self.tab(app, named: "Settings").tap() app.buttons["Data Use and Consent"].tap() if app.buttons["Withdraw Consent"].exists { app.buttons["Withdraw Consent"].tap() } } + if connection.value as? String == "1" { + control.tap() + let initiallyStopped = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '0'"), object: connection) + XCTAssertEqual(XCTWaiter.wait(for: [initiallyStopped], timeout: 15), .completed) + } control.tap() let connected = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '1'"), object: connection) let result = XCTWaiter.wait(for: [connected], timeout: 20) @@ -179,12 +186,13 @@ final class InterceptorUITests: XCTestCase { attachScreenshot(app, named: "Physical VPN stopped after withdrawal") let settings = XCUIApplication(bundleIdentifier: "com.apple.Preferences") settings.launch() - settings.buttons["com.apple.settings.general"].tap() - let vpnSettings = settings.cells["ManagedConfigurationList"] - if !vpnSettings.isHittable { settings.swipeUp() } + let vpnSettings = settings.buttons["com.apple.settings.vpn"] XCTAssertTrue(vpnSettings.waitForExistence(timeout: 5)) vpnSettings.tap() - XCTAssertTrue(settings.staticTexts["Not Connected"].waitForExistence(timeout: 15), "iPadOS must report that the VPN stopped after consent withdrawal.") + let systemStatus = settings.switches.matching(NSPredicate(format: "label BEGINSWITH 'VPN Status'")).firstMatch + XCTAssertTrue(systemStatus.waitForExistence(timeout: 5)) + let systemStopped = XCTNSPredicateExpectation(predicate: NSPredicate(format: "value == '0'"), object: systemStatus) + XCTAssertEqual(XCTWaiter.wait(for: [systemStopped], timeout: 15), .completed, "iPadOS must report that the VPN stopped after consent withdrawal.") attachScreenshot(settings, named: "Physical system VPN disconnected") #endif } diff --git a/docs/app-review/README.md b/docs/app-review/README.md index 719c9a3..ef811d6 100644 --- a/docs/app-review/README.md +++ b/docs/app-review/README.md @@ -4,7 +4,7 @@ These files prepare a replacement submission for App Store app 6749347474. Build The description, promotional text, and keywords under `fastlane/metadata/en-US` and `fastlane/metadata/ja` were saved in App Store Connect on 2026-10-04. They have not been released. Their intended behavior must match the final archive. The current Fastfile uploads TestFlight builds, not these metadata files; this directory does not add an automatic publishing step. -`review-notes-draft.md` describes the review flow and evidence still required. `privacy-policy-draft.md` contains the policy source text. The app-specific policy is now public on qleap.jp, with its existing public support page as the contact route. The app links to it; the App Store Connect policy URL and App Privacy answers still need reconciliation before submission. +`review-notes-draft.md` describes the review flow and evidence still required. `privacy-policy-draft.md` contains the policy source text. The app-specific policy is now public on qleap.jp, with its existing public support page as the contact route. The app links to it; the App Store Connect policy URL has been updated in Japanese and English, and App Privacy now displays Data Not Collected for the proposed release. The currently selected old build still triggers an ATT-purpose-string warning; upload/select build 29 before review. ## Checks before using the drafts @@ -27,7 +27,7 @@ These files do not automatically send reviewer messages or publish externally. ## Verified build preparation (2026-10-04) -Primary physical test device: iPad Air 11-inch (M2), named iPad Air M2, iPadOS 18.6.2. The user selected it because the M3 is shared with other app development. Use M2 for subsequent device operations; the historical M3 results below remain evidence of those completed runs. The initial Xcode unlock gate cleared, and the consent UI test passed on M2 at 13:32 JST (17.672 seconds, zero failures). The existing certificate was trusted, but the setup wizard did not recognize it as the current app certificate; a fresh certificate was downloaded, and native installation reached the device passcode gate. Certificate installation and M2 Nintendo capture verification remain pending. Tailscale was switched off in iPadOS VPN settings at 14:09 JST; the selected Tailscale configuration reported Not Connected with its switch value zero. The user explicitly requested that it remain off after testing. The local diagnostic result is `/tmp/interceptor-m2-tailscale-off.xcresult`; system-settings images contain private account details and are not committed. +Primary physical test device: iPad Air 11-inch (M2), named iPad Air M2, iPadOS 18.6.2. The user selected it because the M3 is shared with other app development. Use M2 for subsequent device operations; the historical M3 results below remain evidence of those completed runs. The initial Xcode unlock gate cleared, and the consent UI test passed on M2 at 13:32 JST (17.672 seconds, zero failures). The user completed fresh certificate installation and trust; the app recognized both and proceeded to VPN configuration registration. After the user signed in to Nintendo Switch App, the physical Nintendo capture and VPN lifecycle tests passed at 14:30 JST (two tests, zero failures). They also passed with an explicit portrait orientation at 14:33 JST (62.909 seconds total, zero failures). Nintendo capture verified `/api/bullet_tokens` in history and the service host in Token List; it does not compare raw token values against previously saved values. The VPN test recorded a unique anonymous HTTPS probe, checked stop/restart, withdrew consent, and independently checked the native system VPN switch was off. The device is left with consent withdrawn and VPN stopped; its installed certificate and VPN configuration remain. Certificate removal was not exercised. Results: `/tmp/interceptor-m2-signedin-retest.xcresult` and `/tmp/interceptor-m2-portrait-capture.xcresult`. Tailscale was switched off in iPadOS VPN settings at 14:09 JST; the selected Tailscale configuration reported Not Connected with its switch value zero. The user explicitly requested that it remain off after testing. The local diagnostic result is `/tmp/interceptor-m2-tailscale-off.xcresult`; system-settings images contain private account details and are not committed. Build 29 passes signed Simulator unit/UI tests; a development-signed Release archive and App Store-signed IPA export succeeded. Both the app and packet-tunnel extension contain a privacy manifest declaring local/App Group UserDefaults use (Apple reasons CA92.1 and 1C8F.1). The archive has no Firebase bundles, GoogleService-Info.plist, APNs entitlement, or tracking-purpose string. These checks do not replace physical-device VPN/certificate testing or Apple's review. @@ -41,8 +41,12 @@ The reusable `testPhysicalVPNLifecycle` requires a physical device with the matc Before switching devices, `testPhysicalNintendoCapture` passed on M3 at 13:27 JST (27.504 seconds, zero failures). It enabled capture, launched the logged-in Nintendo Switch App 3.5.0, opened its SplatNet 3 cell, returned to Interceptor, and verified the Splatoon 3 host appeared in Token List without opening live token details. It withdrew consent afterward. This verifies the visible token-list integration; it does not compare a new token against a previously saved token. Nintendo screenshots containing friends/account information are private local diagnostics and are not included in this repository or review attachments. The local result bundle is `/tmp/interceptor-nintendo-splatnet3.xcresult`. -Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, App Privacy answers, review screenshots/video, fresh certificate setup, and the Nintendo account/token test path before submitting. +Published app-specific policy URL: https://qleap.jp/term/interceptor_privacy_policy. Public support: https://qleap.jp/support. Confirm App Store legal developer details, the replacement build selection, review screenshots/video, and the reviewer account/access path before submitting. -The physical test switch selector now supports iPadOS 18, which exposes the actual UISwitch beside the labeled row. The Nintendo test also requires the `/api/bullet_tokens` request in captured history; this stronger assertion has not yet passed on M2, whose certificate/VPN setup is pending. +The physical test switch selector now supports iPadOS 18, which exposes the actual UISwitch beside the labeled row. The Nintendo test also requires the `/api/bullet_tokens` request in captured history; both physical tests passed on M2. XCTest teardown blocks revoke consent even if a UI assertion aborts the test, and VPN lifecycle testing first stops an already-active tunnel to establish its initial state. The native VPN-status check supports iPadOS 18. Tests use portrait orientation for readable device evidence. After the test selector changes, the simulator build and consent lifecycle test passed at 14:12 JST (zero failures; the two physical-only tests were skipped as intended). Result: `/tmp/interceptor-m2-test-selector-simulator.xcresult`. + +M2 evidence: [captured request list](evidence/physical-m2-capture.png). It shows request methods, status codes, generic endpoint paths and locale parameters, including successful bullet-token requests; no token values, cookies, account identifiers, or response bodies are displayed. Account and native-settings diagnostics remain private local files. + +The App Privacy classification follows [Apple’s data-collection definition](https://developer.apple.com/app-store/app-privacy-details/): local processing is not collected data for the label. This does not mean the app does not access sensitive local traffic; the in-app notice and public policy disclose that access and the original Nintendo request flow. diff --git a/docs/app-review/evidence/physical-m2-capture.png b/docs/app-review/evidence/physical-m2-capture.png new file mode 100644 index 0000000000000000000000000000000000000000..de0bb29465d5516ba875f24d51b52e2863ec01bf GIT binary patch literal 226238 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%0A;e+prgDu5$_aWFCcr)&D7R7a$$4BCBao1fWP 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

wjwu@{7AYO-B8oYjTnP*JD+v@;6 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