From 4d7236a18325b9b6a12d42fb153a160b4ff3c70f Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Tue, 14 Oct 2025 21:19:18 +0200 Subject: [PATCH 01/22] change product bundle identifier (com.komodo.wallet) --- macos/Runner.xcodeproj/project.pbxproj | 6 +++--- macos/Runner/Configs/AppInfo.xcconfig | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index c45132ec07..3b06a93691 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -510,7 +510,7 @@ "$(PROJECT_DIR)", ); MACOSX_DEPLOYMENT_TARGET = 13.5; - PRODUCT_BUNDLE_IDENTIFIER = com.komodo.komodowallet; + PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; @@ -650,7 +650,7 @@ "$(PROJECT_DIR)", ); MACOSX_DEPLOYMENT_TARGET = 13.5; - PRODUCT_BUNDLE_IDENTIFIER = com.komodo.komodowallet; + PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_OBJC_BRIDGING_HEADER = ""; SWIFT_OPTIMIZATION_LEVEL = "-Onone"; @@ -685,7 +685,7 @@ "$(PROJECT_DIR)", ); MACOSX_DEPLOYMENT_TARGET = 13.5; - PRODUCT_BUNDLE_IDENTIFIER = com.komodo.komodowallet; + PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; PROVISIONING_PROFILE_SPECIFIER = ""; SWIFT_VERSION = 5.0; }; diff --git a/macos/Runner/Configs/AppInfo.xcconfig b/macos/Runner/Configs/AppInfo.xcconfig index 0a9f2dd7b7..cbd566d2de 100644 --- a/macos/Runner/Configs/AppInfo.xcconfig +++ b/macos/Runner/Configs/AppInfo.xcconfig @@ -13,7 +13,7 @@ PRODUCT_NAME = Komodo Wallet // The application's bundle identifier -PRODUCT_BUNDLE_IDENTIFIER = com.komodo.komodowallet +PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet // The copyright displayed in application information PRODUCT_COPYRIGHT = Copyright © 2020 com.komodo. All rights reserved. From 1e096b5f285895b6688a8a909d6d44c2fca83fd0 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Tue, 14 Oct 2025 22:37:13 +0200 Subject: [PATCH 02/22] Set sdk submodule to chore/sdk-universal-macos-cdn-pods https://github.com/KomodoPlatform/komodo-wallet/pull/3175 --- sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk b/sdk index 679fd92a6c..448eecc0dc 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 679fd92a6ce6d87b631dadbcaca1c8343e6580c2 +Subproject commit 448eecc0dcd88473edb227dd0e47bf2cc6001a09 From c24ec6b3137bc8ad0cb02f6070315703cb83e81f Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Tue, 14 Oct 2025 23:15:27 +0200 Subject: [PATCH 03/22] XCode: add production scheme and corresponding configurations --- macos/Runner.xcodeproj/project.pbxproj | 285 ++++++++++++++++++ .../xcschemes/production.xcscheme | 98 ++++++ 2 files changed, 383 insertions(+) create mode 100644 macos/Runner.xcodeproj/xcshareddata/xcschemes/production.xcscheme diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 3b06a93691..5450f2f336 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -60,6 +60,7 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ + 1A806ECF03985792604283A9 /* Pods-Runner.profile-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-production.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* Komodo Wallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Komodo Wallet.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -74,6 +75,7 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; + 51C82BB861A9664F3353FCDE /* Pods-Runner.debug-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-production.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; AC3362C2E5FD3245C1DF46DE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; @@ -85,6 +87,7 @@ D6F2739C2710690C005CC4F3 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; D6F2739E2710692B005CC4F3 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; D6F273A027106944005CC4F3 /* libSystem.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libSystem.tbd; path = usr/lib/libSystem.tbd; sourceTree = SDKROOT; }; + E271E8F399053DDCB41BD23E /* Pods-Runner.release-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-production.xcconfig"; sourceTree = ""; }; EB312012C5DDB0C61F2B00DD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; F3467061AB9E6B9F454F9E55 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ @@ -179,6 +182,9 @@ AC3362C2E5FD3245C1DF46DE /* Pods-Runner.debug.xcconfig */, EB312012C5DDB0C61F2B00DD /* Pods-Runner.release.xcconfig */, F3467061AB9E6B9F454F9E55 /* Pods-Runner.profile.xcconfig */, + 51C82BB861A9664F3353FCDE /* Pods-Runner.debug-production.xcconfig */, + E271E8F399053DDCB41BD23E /* Pods-Runner.release-production.xcconfig */, + 1A806ECF03985792604283A9 /* Pods-Runner.profile-production.xcconfig */, ); path = Pods; sourceTree = ""; @@ -707,6 +713,276 @@ }; name = Release; }; + ECCB76212E9EF2E90062B2E2 /* Debug-production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 9740EEB21CF90195004384FC /* Debug.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = dwarf; + ENABLE_STRICT_OBJC_MSGSEND = YES; + ENABLE_TESTABILITY = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_DYNAMIC_NO_PIC = NO; + GCC_NO_COMMON_BLOCKS = YES; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_PREPROCESSOR_DEFINITIONS = ( + "DEBUG=1", + "$(inherited)", + ); + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.5; + MTL_ENABLE_DEBUG_INFO = YES; + ONLY_ACTIVE_ARCH = YES; + SDKROOT = macosx; + SWIFT_ACTIVE_COMPILATION_CONDITIONS = DEBUG; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + }; + name = "Debug-production"; + }; + ECCB76222E9EF2E90062B2E2 /* Debug-production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 8HPBYKKKQP; + EXCLUDED_ARCHS = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + MACOSX_DEPLOYMENT_TARGET = 13.5; + PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_OBJC_BRIDGING_HEADER = ""; + SWIFT_OPTIMIZATION_LEVEL = "-Onone"; + SWIFT_VERSION = 5.0; + }; + name = "Debug-production"; + }; + ECCB76232E9EF2E90062B2E2 /* Debug-production */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = "Debug-production"; + }; + ECCB76242E9EF2FF0062B2E2 /* Release-production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.5; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = "Release-production"; + }; + ECCB76252E9EF2FF0062B2E2 /* Release-production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "-"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 8HPBYKKKQP; + EXCLUDED_ARCHS = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + MACOSX_DEPLOYMENT_TARGET = 13.5; + PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = "Release-production"; + }; + ECCB76262E9EF2FF0062B2E2 /* Release-production */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Automatic; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = "Release-production"; + }; + ECCB76272E9EF3100062B2E2 /* Profile-production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 7AFA3C8E1D35360C0083082E /* Release.xcconfig */; + buildSettings = { + ALWAYS_SEARCH_USER_PATHS = NO; + CLANG_ANALYZER_NONNULL = YES; + CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; + CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; + CLANG_CXX_LIBRARY = "libc++"; + CLANG_ENABLE_MODULES = YES; + CLANG_ENABLE_OBJC_ARC = YES; + CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; + CLANG_WARN_BOOL_CONVERSION = YES; + CLANG_WARN_CONSTANT_CONVERSION = YES; + CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; + CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; + CLANG_WARN_DOCUMENTATION_COMMENTS = YES; + CLANG_WARN_EMPTY_BODY = YES; + CLANG_WARN_ENUM_CONVERSION = YES; + CLANG_WARN_INFINITE_RECURSION = YES; + CLANG_WARN_INT_CONVERSION = YES; + CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; + CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; + CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; + CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; + CLANG_WARN_SUSPICIOUS_MOVE = YES; + CODE_SIGN_IDENTITY = "-"; + COPY_PHASE_STRIP = NO; + DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; + ENABLE_NS_ASSERTIONS = NO; + ENABLE_STRICT_OBJC_MSGSEND = YES; + GCC_C_LANGUAGE_STANDARD = gnu11; + GCC_NO_COMMON_BLOCKS = YES; + GCC_WARN_64_TO_32_BIT_CONVERSION = YES; + GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; + GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; + GCC_WARN_UNUSED_FUNCTION = YES; + GCC_WARN_UNUSED_VARIABLE = YES; + MACOSX_DEPLOYMENT_TARGET = 13.5; + MTL_ENABLE_DEBUG_INFO = NO; + SDKROOT = macosx; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; + }; + name = "Profile-production"; + }; + ECCB76282E9EF3100062B2E2 /* Profile-production */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = 33E5194F232828860026EE4D /* AppInfo.xcconfig */; + buildSettings = { + ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; + CLANG_ENABLE_MODULES = YES; + CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; + CODE_SIGN_IDENTITY = "Apple Development"; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; + CODE_SIGN_STYLE = Automatic; + COMBINE_HIDPI_IMAGES = YES; + DEVELOPMENT_TEAM = 8HPBYKKKQP; + EXCLUDED_ARCHS = ""; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/Flutter/ephemeral", + ); + INFOPLIST_FILE = Runner/Info.plist; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/../Frameworks", + ); + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)", + ); + MACOSX_DEPLOYMENT_TARGET = 13.5; + PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; + PROVISIONING_PROFILE_SPECIFIER = ""; + SWIFT_VERSION = 5.0; + }; + name = "Profile-production"; + }; + ECCB76292E9EF3100062B2E2 /* Profile-production */ = { + isa = XCBuildConfiguration; + buildSettings = { + CODE_SIGN_STYLE = Manual; + PRODUCT_NAME = "$(TARGET_NAME)"; + }; + name = "Profile-production"; + }; /* End XCBuildConfiguration section */ /* Begin XCConfigurationList section */ @@ -714,8 +990,11 @@ isa = XCConfigurationList; buildConfigurations = ( 33CC10F92044A3C60003C045 /* Debug */, + ECCB76212E9EF2E90062B2E2 /* Debug-production */, 33CC10FA2044A3C60003C045 /* Release */, + ECCB76242E9EF2FF0062B2E2 /* Release-production */, 338D0CE9231458BD00FA5F75 /* Profile */, + ECCB76272E9EF3100062B2E2 /* Profile-production */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -724,8 +1003,11 @@ isa = XCConfigurationList; buildConfigurations = ( 33CC10FC2044A3C60003C045 /* Debug */, + ECCB76222E9EF2E90062B2E2 /* Debug-production */, 33CC10FD2044A3C60003C045 /* Release */, + ECCB76252E9EF2FF0062B2E2 /* Release-production */, 338D0CEA231458BD00FA5F75 /* Profile */, + ECCB76282E9EF3100062B2E2 /* Profile-production */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; @@ -734,8 +1016,11 @@ isa = XCConfigurationList; buildConfigurations = ( 33CC111C2044C6BA0003C045 /* Debug */, + ECCB76232E9EF2E90062B2E2 /* Debug-production */, 33CC111D2044C6BA0003C045 /* Release */, + ECCB76262E9EF2FF0062B2E2 /* Release-production */, 338D0CEB231458BD00FA5F75 /* Profile */, + ECCB76292E9EF3100062B2E2 /* Profile-production */, ); defaultConfigurationIsVisible = 0; defaultConfigurationName = Release; diff --git a/macos/Runner.xcodeproj/xcshareddata/xcschemes/production.xcscheme b/macos/Runner.xcodeproj/xcshareddata/xcschemes/production.xcscheme new file mode 100644 index 0000000000..c01bf6fd35 --- /dev/null +++ b/macos/Runner.xcodeproj/xcshareddata/xcschemes/production.xcscheme @@ -0,0 +1,98 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From 6213dc4e13cdf2542deb3d56b58bcb85ac6ab768 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Tue, 14 Oct 2025 23:55:55 +0200 Subject: [PATCH 04/22] make Release-production sign with Developer ID Application --- macos/Runner.xcodeproj/project.pbxproj | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 5450f2f336..d3ab9433c5 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -241,7 +241,6 @@ 33CC10EC2044A3C60003C045 = { CreatedOnToolsVersion = 9.2; LastSwiftMigration = 1300; - ProvisioningStyle = Automatic; SystemCapabilities = { com.apple.Sandbox = { enabled = 1; @@ -863,10 +862,11 @@ CLANG_ENABLE_MODULES = YES; CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_IDENTITY = "-"; - "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Apple Development"; - CODE_SIGN_STYLE = Automatic; + "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application"; + CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = 8HPBYKKKQP; + DEVELOPMENT_TEAM = ""; + "DEVELOPMENT_TEAM[sdk=macosx*]" = 8HPBYKKKQP; EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( "$(inherited)", @@ -884,6 +884,7 @@ MACOSX_DEPLOYMENT_TARGET = 13.5; PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; PROVISIONING_PROFILE_SPECIFIER = ""; + "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "[decker] Komodo(8HPBYKKKQP.com.komodo.wallet)"; SWIFT_VERSION = 5.0; }; name = "Release-production"; From d6434cd01031f21f722cb0ce5443f6e8c36e07c0 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 19:02:07 +0200 Subject: [PATCH 05/22] sdk: temp following submodules for patch-macos-release-profile new https://github.com/KomodoPlatform/komodo-defi-sdk-flutter/tree/patch-macos-release-profile branch for macos Developer ID Application release preparations. --- .gitmodules | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitmodules b/.gitmodules index ad07a1ea79..773d0eef5d 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "sdk"] path = sdk url = https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git - branch = dev + branch = patch-macos-release-profile update = checkout fetchRecurseSubmodules = on-demand ignore = dirty From 50bdf5aac40c86f7cfced5ebbfb22c41ad810443 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 19:49:39 +0200 Subject: [PATCH 06/22] sdk: update submodules --- sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk b/sdk index 448eecc0dc..923f0308d7 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 448eecc0dcd88473edb227dd0e47bf2cc6001a09 +Subproject commit 923f0308d7efa0b99eb48a27edec98ff84dd1110 From 4f27fe998ec62cde8c9b667368bbd0cd17dbe91a Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 21:01:29 +0200 Subject: [PATCH 07/22] add OTHER_CODE_SIGN_FLAGS --options=runtime --timestamp --- macos/Runner.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index d3ab9433c5..c8c3e50e47 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -882,6 +882,7 @@ "$(PROJECT_DIR)", ); MACOSX_DEPLOYMENT_TARGET = 13.5; + "OTHER_CODE_SIGN_FLAGS[sdk=*]" = "--options=runtime --timestamp"; PRODUCT_BUNDLE_IDENTIFIER = com.komodo.wallet; PROVISIONING_PROFILE_SPECIFIER = ""; "PROVISIONING_PROFILE_SPECIFIER[sdk=macosx*]" = "[decker] Komodo(8HPBYKKKQP.com.komodo.wallet)"; From 80a20a7e0adc4c3c11aa776dd35adc14fa0d4a39 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 21:42:36 +0200 Subject: [PATCH 08/22] fix developement team for Release-production after this - kdf binary is signed (but still without timestamp) --- macos/Runner.xcodeproj/project.pbxproj | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index c8c3e50e47..90034456b7 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -865,7 +865,7 @@ "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application"; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; - DEVELOPMENT_TEAM = ""; + DEVELOPMENT_TEAM = 8HPBYKKKQP; "DEVELOPMENT_TEAM[sdk=macosx*]" = 8HPBYKKKQP; EXCLUDED_ARCHS = ""; FRAMEWORK_SEARCH_PATHS = ( From f8dc4ee124d17be06aa8f5b6eb361f5a63ca901d Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 22:00:01 +0200 Subject: [PATCH 09/22] fix codesigning for Pods (now CP-User signing in Pods receive correct env) 'Release-production'=> :release, - CocoaPods will create this config in Pods project --- macos/Podfile | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/macos/Podfile b/macos/Podfile index fb9b4184a4..f11f8a1e90 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -16,6 +16,7 @@ project 'Runner', { 'Debug' => :debug, 'Profile' => :release, 'Release' => :release, + 'Release-production'=> :release, } def flutter_root @@ -52,4 +53,16 @@ post_install do |installer| config.build_settings['MACOSX_DEPLOYMENT_TARGET'] = deployment_target end end + + team_id = '8HPBYKKKQP' + installer.pods_project.targets.each do |t| + t.build_configurations.each do |cfg| + next unless cfg.name == 'Release-production' + cfg.build_settings['DEVELOPMENT_TEAM'] = team_id + cfg.build_settings['CODE_SIGN_STYLE'] = 'Manual' + cfg.build_settings['CODE_SIGN_IDENTITY[sdk=macosx*]'] = 'Developer ID Application' + cfg.build_settings['CODE_SIGNING_ALLOWED'] = 'YES' + cfg.build_settings['CODE_SIGNING_REQUIRED'] = 'YES' + end + end end From b020e540e009df3a934e600c6dc08303b48e27cf Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 22:04:46 +0200 Subject: [PATCH 10/22] add --options=runtime --timestamp for codesigning pods --- macos/Podfile | 1 + 1 file changed, 1 insertion(+) diff --git a/macos/Podfile b/macos/Podfile index f11f8a1e90..c42286ed18 100644 --- a/macos/Podfile +++ b/macos/Podfile @@ -63,6 +63,7 @@ post_install do |installer| cfg.build_settings['CODE_SIGN_IDENTITY[sdk=macosx*]'] = 'Developer ID Application' cfg.build_settings['CODE_SIGNING_ALLOWED'] = 'YES' cfg.build_settings['CODE_SIGNING_REQUIRED'] = 'YES' + cfg.build_settings['OTHER_CODE_SIGN_FLAGS[sdk=macosx*]'] = '--options=runtime --timestamp' end end end From 8b1a06402f1b7985e7d4e46598264d4cf7b91478 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Wed, 15 Oct 2025 22:05:54 +0200 Subject: [PATCH 11/22] sdk: pin version with code_sign_if_enabled in cp-user sh script --- sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk b/sdk index 923f0308d7..2c696e1afb 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 923f0308d7efa0b99eb48a27edec98ff84dd1110 +Subproject commit 2c696e1afb7d8e1ba879eb134a834084cc18111c From 5b55ef13512d294773750c264b256d81ac6f022b Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 01:29:12 +0200 Subject: [PATCH 12/22] sdk: bump to new location of KDF binary under MacOS --- sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk b/sdk index 2c696e1afb..c236a4418b 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 2c696e1afb7d8e1ba879eb134a834084cc18111c +Subproject commit c236a4418b85b0c5f10329e0609aada90127d5b5 From 83d61621f17aa91417ee16961504867b26453f63 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 02:11:00 +0200 Subject: [PATCH 13/22] macos: XCode project update / Pods_Runner.framework in Frameworks --- macos/Runner.xcodeproj/project.pbxproj | 68 +++++++++++++------------- 1 file changed, 34 insertions(+), 34 deletions(-) diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index 90034456b7..e033cb388f 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -22,6 +22,7 @@ /* Begin PBXBuildFile section */ 0FECB4522D11D6AF00F11CB7 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 33CC10F02044A3C60003C045 /* AppDelegate.swift */; }; + 1E230071C7D8F340D13AB3D8 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 378AA469DFC01E26ECFD0219 /* Pods_Runner.framework */; }; 335BBD1B22A9A15E00E9071D /* GeneratedPluginRegistrant.swift in Sources */ = {isa = PBXBuildFile; fileRef = 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */; }; 33CC10F32044A3C60003C045 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F22044A3C60003C045 /* Assets.xcassets */; }; 33CC10F62044A3C60003C045 /* MainMenu.xib in Resources */ = {isa = PBXBuildFile; fileRef = 33CC10F42044A3C60003C045 /* MainMenu.xib */; }; @@ -33,7 +34,6 @@ D6F2739D2710691C005CC4F3 /* libc++.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D6F2739C2710690C005CC4F3 /* libc++.tbd */; platformFilter = maccatalyst; }; D6F2739F27106934005CC4F3 /* libresolv.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D6F2739E2710692B005CC4F3 /* libresolv.tbd */; platformFilter = maccatalyst; }; D6F273A12710694D005CC4F3 /* libSystem.tbd in Frameworks */ = {isa = PBXBuildFile; fileRef = D6F273A027106944005CC4F3 /* libSystem.tbd */; platformFilter = maccatalyst; }; - F0C41ACB9674358D4A6C7838 /* Pods_Runner.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = CBED5C6C4A1CA4CE9B9F2193 /* Pods_Runner.framework */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -60,7 +60,6 @@ /* End PBXCopyFilesBuildPhase section */ /* Begin PBXFileReference section */ - 1A806ECF03985792604283A9 /* Pods-Runner.profile-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-production.xcconfig"; sourceTree = ""; }; 333000ED22D3DE5D00554162 /* Warnings.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Warnings.xcconfig; sourceTree = ""; }; 335BBD1A22A9A15E00E9071D /* GeneratedPluginRegistrant.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = GeneratedPluginRegistrant.swift; sourceTree = ""; }; 33CC10ED2044A3C60003C045 /* Komodo Wallet.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Komodo Wallet.app"; sourceTree = BUILT_PRODUCTS_DIR; }; @@ -75,21 +74,22 @@ 33E51913231747F40026EE4D /* DebugProfile.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = DebugProfile.entitlements; sourceTree = ""; }; 33E51914231749380026EE4D /* Release.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = Release.entitlements; sourceTree = ""; }; 33E5194F232828860026EE4D /* AppInfo.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = AppInfo.xcconfig; sourceTree = ""; }; - 51C82BB861A9664F3353FCDE /* Pods-Runner.debug-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-production.xcconfig"; sourceTree = ""; }; + 366D2EBDC3400ABABE59124C /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; + 378AA469DFC01E26ECFD0219 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + 38B3D86EA829F8A1CBE530C1 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; + 42C68977A49A0D4061E4C701 /* Pods-Runner.debug-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug-production.xcconfig"; sourceTree = ""; }; + 4D54E611D842457DB7F47DA6 /* Pods-Runner.release-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-production.xcconfig"; sourceTree = ""; }; 7AFA3C8E1D35360C0083082E /* Release.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = Release.xcconfig; sourceTree = ""; }; 9740EEB21CF90195004384FC /* Debug.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Debug.xcconfig; sourceTree = ""; }; - AC3362C2E5FD3245C1DF46DE /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; + 9AEFD27D4CEB10A80A08C41F /* Pods-Runner.profile-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile-production.xcconfig"; sourceTree = ""; }; BC509CF635E02824A671F07F /* GoogleService-Info.plist */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.plist.xml; name = "GoogleService-Info.plist"; path = "Runner/GoogleService-Info.plist"; sourceTree = ""; }; - CBED5C6C4A1CA4CE9B9F2193 /* Pods_Runner.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Runner.framework; sourceTree = BUILT_PRODUCTS_DIR; }; + C8AFAF26E542485ADE0EC368 /* Pods-Runner.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.debug.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.debug.xcconfig"; sourceTree = ""; }; D60A10D42711A1B300EB58E3 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; }; D60A10D62711A1D000EB58E3 /* SystemConfiguration.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = SystemConfiguration.framework; path = System/Library/Frameworks/SystemConfiguration.framework; sourceTree = SDKROOT; }; D6B034EF2711A360007FC221 /* libz.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libz.tbd; path = usr/lib/libz.tbd; sourceTree = SDKROOT; }; D6F2739C2710690C005CC4F3 /* libc++.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = "libc++.tbd"; path = "usr/lib/libc++.tbd"; sourceTree = SDKROOT; }; D6F2739E2710692B005CC4F3 /* libresolv.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libresolv.tbd; path = usr/lib/libresolv.tbd; sourceTree = SDKROOT; }; D6F273A027106944005CC4F3 /* libSystem.tbd */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.text-based-dylib-definition"; name = libSystem.tbd; path = usr/lib/libSystem.tbd; sourceTree = SDKROOT; }; - E271E8F399053DDCB41BD23E /* Pods-Runner.release-production.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release-production.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release-production.xcconfig"; sourceTree = ""; }; - EB312012C5DDB0C61F2B00DD /* Pods-Runner.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.release.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.release.xcconfig"; sourceTree = ""; }; - F3467061AB9E6B9F454F9E55 /* Pods-Runner.profile.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Runner.profile.xcconfig"; path = "Target Support Files/Pods-Runner/Pods-Runner.profile.xcconfig"; sourceTree = ""; }; /* End PBXFileReference section */ /* Begin PBXFrameworksBuildPhase section */ @@ -101,9 +101,9 @@ D6F2739D2710691C005CC4F3 /* libc++.tbd in Frameworks */, D60A10D72711A1D000EB58E3 /* SystemConfiguration.framework in Frameworks */, D60A10D52711A1B300EB58E3 /* CoreFoundation.framework in Frameworks */, - F0C41ACB9674358D4A6C7838 /* Pods_Runner.framework in Frameworks */, D6F273A12710694D005CC4F3 /* libSystem.tbd in Frameworks */, D6F2739F27106934005CC4F3 /* libresolv.tbd in Frameworks */, + 1E230071C7D8F340D13AB3D8 /* Pods_Runner.framework in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -179,12 +179,12 @@ 3931C7C5835EE32D50936E8A /* Pods */ = { isa = PBXGroup; children = ( - AC3362C2E5FD3245C1DF46DE /* Pods-Runner.debug.xcconfig */, - EB312012C5DDB0C61F2B00DD /* Pods-Runner.release.xcconfig */, - F3467061AB9E6B9F454F9E55 /* Pods-Runner.profile.xcconfig */, - 51C82BB861A9664F3353FCDE /* Pods-Runner.debug-production.xcconfig */, - E271E8F399053DDCB41BD23E /* Pods-Runner.release-production.xcconfig */, - 1A806ECF03985792604283A9 /* Pods-Runner.profile-production.xcconfig */, + C8AFAF26E542485ADE0EC368 /* Pods-Runner.debug.xcconfig */, + 42C68977A49A0D4061E4C701 /* Pods-Runner.debug-production.xcconfig */, + 366D2EBDC3400ABABE59124C /* Pods-Runner.release.xcconfig */, + 4D54E611D842457DB7F47DA6 /* Pods-Runner.release-production.xcconfig */, + 38B3D86EA829F8A1CBE530C1 /* Pods-Runner.profile.xcconfig */, + 9AEFD27D4CEB10A80A08C41F /* Pods-Runner.profile-production.xcconfig */, ); path = Pods; sourceTree = ""; @@ -198,7 +198,7 @@ D6F273A027106944005CC4F3 /* libSystem.tbd */, D6F2739E2710692B005CC4F3 /* libresolv.tbd */, D6F2739C2710690C005CC4F3 /* libc++.tbd */, - CBED5C6C4A1CA4CE9B9F2193 /* Pods_Runner.framework */, + 378AA469DFC01E26ECFD0219 /* Pods_Runner.framework */, ); name = Frameworks; sourceTree = ""; @@ -210,13 +210,13 @@ isa = PBXNativeTarget; buildConfigurationList = 33CC10FB2044A3C60003C045 /* Build configuration list for PBXNativeTarget "Runner" */; buildPhases = ( - A4BFE8B57517ABC4F933089B /* [CP] Check Pods Manifest.lock */, + 3069B72540C3B7C1D094DAEB /* [CP] Check Pods Manifest.lock */, 33CC10E92044A3C60003C045 /* Sources */, 33CC10EA2044A3C60003C045 /* Frameworks */, 33CC10EB2044A3C60003C045 /* Resources */, 33CC110E2044A8840003C045 /* Bundle Framework */, 3399D490228B24CF009A79C7 /* ShellScript */, - CC7BBD7412CA68EC0C78C62C /* [CP] Embed Pods Frameworks */, + 4F2BCCFAF7F3B06A5F612111 /* [CP] Embed Pods Frameworks */, ); buildRules = ( ); @@ -286,67 +286,67 @@ /* End PBXResourcesBuildPhase section */ /* Begin PBXShellScriptBuildPhase section */ - 3399D490228B24CF009A79C7 /* ShellScript */ = { + 3069B72540C3B7C1D094DAEB /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; - alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( ); inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", ); + name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( ); outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; }; - 33CC111E2044C6BF0003C045 /* ShellScript */ = { + 3399D490228B24CF009A79C7 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; + alwaysOutOfDate = 1; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( - Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - Flutter/ephemeral/tripwire, ); outputFileListPaths = ( - Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire\n"; + shellScript = "echo \"$PRODUCT_NAME.app\" > \"$PROJECT_DIR\"/Flutter/ephemeral/.app_filename && \"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh embed\n"; }; - A4BFE8B57517ABC4F933089B /* [CP] Check Pods Manifest.lock */ = { + 33CC111E2044C6BF0003C045 /* ShellScript */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( ); inputFileListPaths = ( + Flutter/ephemeral/FlutterInputs.xcfilelist, ); inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", + Flutter/ephemeral/tripwire, ); - name = "[CP] Check Pods Manifest.lock"; outputFileListPaths = ( + Flutter/ephemeral/FlutterOutputs.xcfilelist, ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Runner-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; + shellScript = "\"$FLUTTER_ROOT\"/packages/flutter_tools/bin/macos_assemble.sh && touch Flutter/ephemeral/tripwire\n"; }; - CC7BBD7412CA68EC0C78C62C /* [CP] Embed Pods Frameworks */ = { + 4F2BCCFAF7F3B06A5F612111 /* [CP] Embed Pods Frameworks */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( From fa3703273a2e55d37c63cf68b767d91c16d04e6b Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 02:22:00 +0200 Subject: [PATCH 14/22] build(macos): set CODE_SIGN_INJECT_BASE_ENTITLEMENTS to NO for Release need to remove below from Entitlements "com.apple.security.get-task-allow" = 1; To check: codesign -d --entitlements :- "build/macos/Build/Products/Release-production/Komodo Wallet.app" | plutil -p - Read more: https://developer.apple.com/documentation/security/resolving-common-notarization-issues#3087731 --- macos/Runner.xcodeproj/project.pbxproj | 1 + 1 file changed, 1 insertion(+) diff --git a/macos/Runner.xcodeproj/project.pbxproj b/macos/Runner.xcodeproj/project.pbxproj index e033cb388f..35beafb641 100644 --- a/macos/Runner.xcodeproj/project.pbxproj +++ b/macos/Runner.xcodeproj/project.pbxproj @@ -863,6 +863,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/DebugProfile.entitlements; CODE_SIGN_IDENTITY = "-"; "CODE_SIGN_IDENTITY[sdk=macosx*]" = "Developer ID Application"; + CODE_SIGN_INJECT_BASE_ENTITLEMENTS = NO; CODE_SIGN_STYLE = Manual; COMBINE_HIDPI_IMAGES = YES; DEVELOPMENT_TEAM = 8HPBYKKKQP; From dc49f5dfd1b4f388428c91f647b7ec620e65510d Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 03:07:04 +0200 Subject: [PATCH 15/22] update .gitignore to exclude dist/ directory --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index c55afa38a5..eeeecd63e0 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,5 @@ venv/ .fvm/ /macos/build AGENTS_1.md +# .dmg Release +dist/ \ No newline at end of file From 1a97d7dae90a1fc1fa72f83375d51d57881a5e8f Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 20:30:22 +0200 Subject: [PATCH 16/22] feat: add make-dmg.sh script for building DMG files on macOS This script automates the process of creating a DMG file for the Komodo Wallet application, including setting up the Finder layout and handling background images. It requires macOS and utilizes hdiutil, osascript, and ditto for the operations. --- contrib/make-dmg.sh | 212 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100755 contrib/make-dmg.sh diff --git a/contrib/make-dmg.sh b/contrib/make-dmg.sh new file mode 100755 index 0000000000..1a1bb57ceb --- /dev/null +++ b/contrib/make-dmg.sh @@ -0,0 +1,212 @@ +#!/usr/bin/env bash +# make_dmg.sh — Build DMG with layout «App ⇢ Applications» +# Requires: macOS, hdiutil, osascript, ditto. + +set -euo pipefail + +# ------------------------ PARAMETERS ------------------------ +APP="${APP:-}" # Path to .app (required) +VOL="${VOL:-Komodo Wallet}" # Volume/window name for DMG +OUT="${OUT:-dist/KomodoWallet.dmg}" # Path to output .dmg +BG="${BG:-}" # Path to PNG background (optional) +ICON_SIZE="${ICON_SIZE:-128}" # Icon size +WIN_W="${WIN_W:-530}" # Finder window width in DMG +WIN_H="${WIN_H:-400}" # Finder window height in DMG +APP_X="${APP_X:-120}" # .app icon position (x) +APP_Y="${APP_Y:-200}" # .app icon position (y) +APPS_X="${APPS_X:-400}" # Applications shortcut position (x) +APPS_Y="${APPS_Y:-200}" # Applications shortcut position (y) + +usage() { + cat <&2 "ERROR: APP not specified"; exit 1; } +[[ ! -d "${APP}" ]] && { echo >&2 "ERROR: .app not found: ${APP}"; exit 1; } + +APP_BASENAME="$(basename "${APP}")" +OUT_DIR="$(dirname "${OUT}")" +mkdir -p "${OUT_DIR}" + +# Work in local tmp inside project — fewer TCC issues +TMPROOT="${TMPROOT:-$PWD/.dmg_tmp}" +mkdir -p "$TMPROOT" +TMPDIR="$(mktemp -d "$TMPROOT/tmp.XXXXXXXX")" +STAGING="${TMPDIR}/staging" +mkdir -p "${STAGING}" + +cleanup() { + set +e + if [[ -n "${MOUNT_POINT:-}" && -d "${MOUNT_POINT:-}" ]]; then + hdiutil detach "${MOUNT_POINT}" -quiet || true + fi + rm -rf "${TMPDIR}" >/dev/null 2>&1 || true +} +trap cleanup EXIT + +echo "==> Preparing staging" +cp -R "${APP}" "${STAGING}/" +ln -s /Applications "${STAGING}/Applications" + +if [[ -n "${BG}" ]]; then + echo "==> Adding background ${BG}" + mkdir -p "${STAGING}/.background" + cp "${BG}" "${STAGING}/.background/background.png" + chflags hidden "${STAGING}/.background" || true +fi + +# --------- IMAGE SIZE CALCULATION (with margin) ---------- +echo "==> Estimating image size" +# Staging size in kilobytes +SIZE_KB=$(du -sk "${STAGING}" | awk '{print $1}') +# Add ~30% margin + minimum 20 MB +HEADROOM_KB=$(( SIZE_KB / 3 )) +[[ ${HEADROOM_KB} -lt 20480 ]] && HEADROOM_KB=20480 +TOTAL_KB=$(( SIZE_KB + HEADROOM_KB )) +# Round to megabytes +TOTAL_MB=$(( (TOTAL_KB + 1023) / 1024 )) +echo " Estimated size: ${TOTAL_MB} MiB" + +TMP_DMG="${TMPDIR}/tmp.dmg" +FINAL_DMG="${OUT}" + +echo "==> Creating empty RW DMG (${TOTAL_MB} MiB)" +hdiutil create -verbose \ + -size "${TOTAL_MB}m" \ + -fs HFS+J -volname "${VOL}" \ + "${TMP_DMG}" + +# if volume with same name is mounted — unmount it +if [[ -d "/Volumes/${VOL}" ]]; then + hdiutil detach "/Volumes/${VOL}" -force -quiet || true +fi + +echo "==> Mounting DMG" +MOUNT_POINT="${TMPDIR}/mnt" +mkdir -p "${MOUNT_POINT}" + +# Mount directly to our directory +if ! hdiutil attach "${TMP_DMG}" \ + -readwrite -noverify -noautoopen \ + -mountpoint "${MOUNT_POINT}" >/dev/null; then + echo >&2 "ERROR: failed to mount DMG (attach returned error)" + exit 1 +fi + +# Check that it's actually mounted +if [[ ! -d "${MOUNT_POINT}" || ! -e "${MOUNT_POINT}/." ]]; then + echo >&2 "ERROR: failed to mount DMG (mountpoint not accessible)" + exit 1 +fi +echo " Mounted at: ${MOUNT_POINT}" + +# --------- CONTENT COPYING (DITTO) ---------- +echo "==> Copying content to volume (ditto)" +# Application +ditto "${STAGING}/${APP_BASENAME}" "${MOUNT_POINT}/${APP_BASENAME}" +# Applications shortcut (recreate on volume side) +rm -f "${MOUNT_POINT}/Applications" 2>/dev/null || true +ln -s /Applications "${MOUNT_POINT}/Applications" +# Background (if exists) +if [[ -f "${STAGING}/.background/background.png" ]]; then + mkdir -p "${MOUNT_POINT}/.background" + ditto "${STAGING}/.background/background.png" "${MOUNT_POINT}/.background/background.png" + chflags hidden "${MOUNT_POINT}/.background" || true +fi + +# --------- FINDER WINDOW STYLING ---------- +echo "==> Setting up Finder layout" +sleep 2 # give Finder a bit more time to see the mounted volume +osascript < Unmounting DMG" +for i in {1..5}; do + if hdiutil detach "${MOUNT_POINT}" -quiet; then + DETACHED=1 + break + fi + echo " Retry attempt (${i})..." + sleep 1 +done +[[ -z "${DETACHED:-}" ]] && { echo >&2 "ERROR: failed to unmount ${MOUNT_POINT}"; exit 1; } + +# Remove old DMG if it already exists +if [[ -f "${FINAL_DMG}" ]]; then + echo "==> Removing old file ${FINAL_DMG}" + rm -f "${FINAL_DMG}" +fi + +echo "==> Converting to compressed UDZO" +hdiutil convert -verbose "${TMP_DMG}" -format UDZO -imagekey zlib-level=9 -o "${FINAL_DMG}" + +echo "==> Done: ${FINAL_DMG}" \ No newline at end of file From 5b97968ed6fee0e283f45a9028faaecabd9ed3d7 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 20:35:45 +0200 Subject: [PATCH 17/22] feat: add test-sign-timestamp.sh script for verifying code signing and timestamping on macOS This script checks the code signing and timestamping of the Komodo Wallet application, providing feedback on the presence of timestamps and the authority of the timestamping service. It simplifies the verification process for macOS app builds. --- contrib/test-sign-timestamp.sh | 60 ++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100755 contrib/test-sign-timestamp.sh diff --git a/contrib/test-sign-timestamp.sh b/contrib/test-sign-timestamp.sh new file mode 100755 index 0000000000..2f13d98125 --- /dev/null +++ b/contrib/test-sign-timestamp.sh @@ -0,0 +1,60 @@ +#!/bin/bash +# test-sign-timestamp.sh — Check code signing and timestamping for macOS app +# Usage: ./contrib/test-sign-timestamp.sh [APP_PATH] +# If APP_PATH is not provided, uses default build path + +set -euo pipefail + +# Default app path +DEFAULT_APP="build/macos/Build/Products/Release-production/Komodo Wallet.app" + +# Parse command line arguments +APP="${1:-$DEFAULT_APP}" + +# Color codes for output +RED='\033[0;31m'; GRN='\033[0;32m'; YEL='\033[0;33m'; BLU='\033[0;34m'; NC='\033[0m' + +# Welcome message +echo -e "${BLU}========================================${NC}" +echo -e "${BLU} Code Signing & Timestamp Checker${NC}" +echo -e "${BLU}========================================${NC}" +echo "" +echo -e "Checking app: ${YEL}$APP${NC}" +echo "" + +# Check if app exists +if [[ ! -d "$APP" ]]; then + echo -e "${RED}ERROR: App not found at: $APP${NC}" + echo "" + echo "Usage: $0 [APP_PATH]" + echo " APP_PATH - Path to the .app bundle to check" + echo " If not provided, uses: $DEFAULT_APP" + exit 1 +fi + +# Searching for all executable Mach-O files (+x) +while IFS= read -r -d '' f; do + if file -b "$f" | grep -q 'Mach-O'; then + echo "==> $f" + INFO="$(LC_ALL=C /usr/bin/codesign -d --verbose=4 "$f" 2>&1 || true)" + if echo "$INFO" | grep -q '^[[:space:]]*Timestamp='; then + TS="$(echo "$INFO" | sed -n 's/^[[:space:]]*Timestamp=//p' | head -n1)" + echo -e " ${GRN}✔ Signed + timestamp${NC} ($TS)" + + # On newer systems, the 'Timestamp Authority=' line is often missing. + # If you really need to check the TSA, look for 'Apple' in the certificate chain. + if echo "$INFO" | grep -q 'Authority=.*Apple'; then + : # All good, timestamp is most likely from Apple + else + echo -e " ${YEL}▲ Timestamp present, but TSA line not shown by 'codesign' (this is normal).${NC}" + fi + else + echo -e " ${RED}✖ Signed, but NO timestamp${NC}" + fi + fi +done < <(find "$APP" -type f -perm -111 -print0) + +echo "" +echo -e "${BLU}========================================${NC}" +echo -e "${BLU} Check completed${NC}" +echo -e "${BLU}========================================${NC}" From a528228d138cade2516829c15e957411a17e1d1d Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 21:02:23 +0200 Subject: [PATCH 18/22] feat: enhance make-dmg.sh script with default app path and usage instructions --- contrib/make-dmg.sh | 22 +++++++++++++++++++--- 1 file changed, 19 insertions(+), 3 deletions(-) diff --git a/contrib/make-dmg.sh b/contrib/make-dmg.sh index 1a1bb57ceb..ec26c01f30 100755 --- a/contrib/make-dmg.sh +++ b/contrib/make-dmg.sh @@ -1,11 +1,23 @@ #!/usr/bin/env bash # make_dmg.sh — Build DMG with layout «App ⇢ Applications» +# +# This script creates a professional DMG installer for macOS applications. +# It creates a disk image with: +# - The application bundle +# - A shortcut to Applications folder +# - Custom background image (optional) +# - Proper Finder window layout and icon positioning +# - Compressed final output +# # Requires: macOS, hdiutil, osascript, ditto. set -euo pipefail # ------------------------ PARAMETERS ------------------------ -APP="${APP:-}" # Path to .app (required) +# Default app path +DEFAULT_APP="build/macos/Build/Products/Release-production/Komodo Wallet.app" + +APP="${APP:-$DEFAULT_APP}" # Path to .app (uses default if not specified) VOL="${VOL:-Komodo Wallet}" # Volume/window name for DMG OUT="${OUT:-dist/KomodoWallet.dmg}" # Path to output .dmg BG="${BG:-}" # Path to PNG background (optional) @@ -20,15 +32,19 @@ APPS_Y="${APPS_Y:-200}" # Applications shortcut position (y) usage() { cat <&2 "ERROR: APP not specified"; exit 1; } [[ ! -d "${APP}" ]] && { echo >&2 "ERROR: .app not found: ${APP}"; exit 1; } APP_BASENAME="$(basename "${APP}")" From ba7a1c4db7a7801300ec3d9227ee23cbe9da6956 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 21:03:57 +0200 Subject: [PATCH 19/22] chore: update Podfile.lock to include device_info_plus and update dependencies --- macos/Podfile.lock | 40 +++++++++++++++++++++++----------------- 1 file changed, 23 insertions(+), 17 deletions(-) diff --git a/macos/Podfile.lock b/macos/Podfile.lock index 0345a714f6..37e54b7986 100644 --- a/macos/Podfile.lock +++ b/macos/Podfile.lock @@ -1,4 +1,6 @@ PODS: + - device_info_plus (0.0.1): + - FlutterMacOS - file_picker (0.0.1): - FlutterMacOS - Firebase/Analytics (11.15.0): @@ -136,6 +138,7 @@ PODS: - FlutterMacOS DEPENDENCIES: + - device_info_plus (from `Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos`) - file_picker (from `Flutter/ephemeral/.symlinks/plugins/file_picker/macos`) - firebase_analytics (from `Flutter/ephemeral/.symlinks/plugins/firebase_analytics/macos`) - firebase_core (from `Flutter/ephemeral/.symlinks/plugins/firebase_core/macos`) @@ -168,6 +171,8 @@ SPEC REPOS: - PromisesObjC EXTERNAL SOURCES: + device_info_plus: + :path: Flutter/ephemeral/.symlinks/plugins/device_info_plus/macos file_picker: :path: Flutter/ephemeral/.symlinks/plugins/file_picker/macos firebase_analytics: @@ -204,34 +209,35 @@ EXTERNAL SOURCES: :path: Flutter/ephemeral/.symlinks/plugins/window_size/macos SPEC CHECKSUMS: - file_picker: 7584aae6fa07a041af2b36a2655122d42f578c1a + device_info_plus: 1b14eed9bf95428983aed283a8d51cce3d8c4215 + file_picker: e716a70a9fe5fd9e09ebc922d7541464289443af Firebase: d99ac19b909cd2c548339c2241ecd0d1599ab02e - firebase_analytics: 3091f96bd17636f6da5092a4701ffacf67c6e455 - firebase_core: 7667f880631ae8ad10e3d6567ab7582fe0682326 + firebase_analytics: c6a3f80cf2e8681b4e6b3402162acf116c4d3a57 + firebase_core: 2af692f4818474ed52eda1ba6aeb448a6a3352af FirebaseAnalytics: 6433dfd311ba78084fc93bdfc145e8cb75740eae FirebaseCore: efb3893e5b94f32b86e331e3bd6dadf18b66568e FirebaseCoreInternal: 9afa45b1159304c963da48addb78275ef701c6b4 FirebaseInstallations: 317270fec08a5d418fdbc8429282238cab3ac843 - flutter_inappwebview_macos: c2d68649f9f8f1831bfcd98d73fd6256366d9d1d - flutter_secure_storage_darwin: ce237a8775b39723566dc72571190a3769d70468 - flutter_window_close: bd408414cbbf0d39f0d3076c4da0cdbf1c527168 + flutter_inappwebview_macos: bdf207b8f4ebd58e86ae06cd96b147de99a67c9b + flutter_secure_storage_darwin: 12d2375c690785d97a4e586f15f11be5ae35d5b0 + flutter_window_close: a0f4f388e956ebafa866e3e171ce837c166eab9c FlutterMacOS: d0db08ddef1a9af05a5ec4b724367152bb0500b1 GoogleAppMeasurement: 700dce7541804bec33db590a5c496b663fbe2539 GoogleUtilities: 00c88b9a86066ef77f0da2fab05f65d7768ed8e1 - komodo_defi_framework: 725599127b357521f4567b16192bf07d7ad1d4b0 - local_auth_darwin: d2e8c53ef0c4f43c646462e3415432c4dab3ae19 - mobile_scanner: 9157936403f5a0644ca3779a38ff8404c5434a93 + komodo_defi_framework: 73bb4b6190e827bfda4609700d59e64e0aa60fb7 + local_auth_darwin: fa4b06454df7df8e97c18d7ee55151c57e7af0de + mobile_scanner: 77265f3dc8d580810e91849d4a0811a90467ed5e nanopb: fad817b59e0457d11a5dfbde799381cd727c1275 OrderedSet: e539b66b644ff081c73a262d24ad552a69be3a94 - package_info_plus: f0052d280d17aa382b932f399edf32507174e870 - path_provider_foundation: 080d55be775b7414fd5a5ef3ac137b97b097e564 + package_info_plus: 12f1c5c2cfe8727ca46cbd0b26677728972d9a5b + path_provider_foundation: 2b6b4c569c0fb62ec74538f866245ac84301af46 PromisesObjC: f5707f49cb48b9636751c5b2e7d227e43fba9f47 - share_plus: 510bf0af1a42cd602274b4629920c9649c52f4cc - shared_preferences_foundation: 9e1978ff2562383bd5676f64ec4e9aa8fa06a6f7 - url_launcher_macos: 0fba8ddabfc33ce0a9afe7c5fef5aab3d8d2d673 - video_player_avfoundation: 2cef49524dd1f16c5300b9cd6efd9611ce03639b - window_size: 4bd15034e6e3d0720fd77928a7c42e5492cfece9 + share_plus: 1fa619de8392a4398bfaf176d441853922614e89 + shared_preferences_foundation: fcdcbc04712aee1108ac7fda236f363274528f78 + url_launcher_macos: c82c93949963e55b228a30115bd219499a6fe404 + video_player_avfoundation: 7c6c11d8470e1675df7397027218274b6d2360b3 + window_size: 339dafa0b27a95a62a843042038fa6c3c48de195 -PODFILE CHECKSUM: d064900e78ded0efef7fcc0db57cbf4bc2487624 +PODFILE CHECKSUM: a890bc27443c296eb8ca4510f54c35d2e0f66ed0 COCOAPODS: 1.16.2 From f08976bcbe4512991d82734efcc1f87452259782 Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 21:47:17 +0200 Subject: [PATCH 20/22] chore: update subproject commit reference in sdk --- sdk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sdk b/sdk index c236a4418b..342ca1fff3 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit c236a4418b85b0c5f10329e0609aada90127d5b5 +Subproject commit 342ca1fff35bc93f60369cdc7e42e93942948a61 From 5ab8a18a41bd1f2d447d27819c3f16e1edddf7ba Mon Sep 17 00:00:00 2001 From: DeckerSU Date: Thu, 16 Oct 2025 22:18:36 +0200 Subject: [PATCH 21/22] feat: add README.md for contrib scripts and enhance test-sign-timestamp.sh --- contrib/README.md | 147 +++++++++++++++++++++++++++++++++ contrib/test-sign-timestamp.sh | 8 ++ 2 files changed, 155 insertions(+) create mode 100644 contrib/README.md diff --git a/contrib/README.md b/contrib/README.md new file mode 100644 index 0000000000..05076d59ef --- /dev/null +++ b/contrib/README.md @@ -0,0 +1,147 @@ +# Contrib Scripts + +This directory contains utility scripts for building, packaging, and testing the Komodo Wallet application. + +## Scripts Overview + +### `make-dmg.sh` +Creates a professional DMG installer for macOS applications. + +**Purpose:** Builds a disk image (.dmg) file with proper layout for distributing macOS applications. + +**Features:** +- Creates a disk image with the application bundle +- Adds a shortcut to the Applications folder +- Supports custom background images +- Configures proper Finder window layout and icon positioning +- Compresses the final output + +**Usage:** +```bash +# Use default app path +./make-dmg.sh + +# Or specify custom parameters +APP="build/.../Komodo Wallet.app" \ +VOL="Komodo Wallet" \ +OUT="dist/KomodoWallet.dmg" \ +BG="assets/dmg_background.png" \ +./make-dmg.sh +``` + +**Default Parameters:** +- `APP`: `build/macos/Build/Products/Release-production/Komodo Wallet.app` +- `VOL`: `Komodo Wallet` +- `OUT`: `dist/KomodoWallet.dmg` +- `BG`: (optional background image) +- `ICON_SIZE`: `128` +- `WIN_W`: `530` (Finder window width) +- `WIN_H`: `400` (Finder window height) + +**Requirements:** macOS, hdiutil, osascript, ditto + +--- + +### `test-sign-timestamp.sh` +Checks code signing and timestamping for macOS applications. + +**Purpose:** Verifies that all executable Mach-O files in the app bundle are properly signed and timestamped. + +**Features:** +- Scans all executable files in the app bundle +- Checks for valid code signatures +- Verifies timestamping (Apple's timestamp authority) +- Provides colored output for easy reading +- Reports missing timestamps + +**Usage:** +```bash +# Use default app path +./test-sign-timestamp.sh + +# Or specify custom app path +./test-sign-timestamp.sh "path/to/your/app.app" +``` + +**Default App Path:** `build/macos/Build/Products/Release-production/Komodo Wallet.app` + +**Requirements:** macOS, codesign utility + + +## Release Build and Notarization Process for macOS (Non-App Store Distribution) + +To build and notarize the macOS app for release (for distribution outside the Mac App Store), follow these steps. +Note: The `--flavor production` flag is mandatory in the build command to ensure correct provisioning for signing with a Developer ID Application certificate and for proper notarization/distribution outside the App Store. + +```bash +# 1. Clean the project and fetch dependencies +flutter clean +flutter pub get --enforce-lockfile +pushd macos; pod deintegrate; pod install; popd # Generating Pods project + +# 2. Fetch all required artifacts (this runs komodo_wallet_build_transformer) +flutter build web --no-pub -v + +# 3. Build the macOS release application (ensure --flavor production is present) +flutter build macos --no-pub --release -v \ + --dart-define=COMMIT_HASH= \ + --dart-define=FEEDBACK_API_KEY= \ + --dart-define=FEEDBACK_PRODUCTION_URL= \ + --dart-define=TRELLO_BOARD_ID= \ + --dart-define=TRELLO_LIST_ID= \ + --dart-define=MATOMO_URL= \ + --dart-define=MATOMO_SITE_ID= \ + --flavor production +``` +Replace the `<...>` placeholders above with your actual values. + +To view app entitlements used in the resulting .app: +```bash +codesign -d --entitlements :- "build/macos/Build/Products/Release-production/Komodo Wallet.app" | plutil -p - +``` + +Package the application bundle as a ZIP archive (required by notary service): +```bash +APP="build/macos/Build/Products/Release-production/Komodo Wallet.app" +ZIP="KomodoWallet.zip" +ditto -c -k --keepParent "$APP" "$ZIP" +``` + +Submit the ZIP archive to Apple Notary Service: +```bash +xcrun notarytool submit "$ZIP" --keychain-profile "AC_NOTARY" --wait +``` + +Check notarization status for a specific request: +```bash +xcrun notarytool info \ + --apple-id "" \ + --team-id "" \ + --password "" +``` + +Download notarization log: +```bash +xcrun notarytool log --keychain-profile AC_NOTARY > notarization_errors.json +``` + +If there were no errors and the submission status was `Accepted`, you can proceed with the following steps to staple and validate the app: + +```bash +xcrun stapler staple "$APP" +xcrun stapler validate "$APP" +spctl --assess --type execute -vv "$APP" # now the status should be accepted +``` + + + + + + + + + + + + + diff --git a/contrib/test-sign-timestamp.sh b/contrib/test-sign-timestamp.sh index 2f13d98125..b1f3f084d4 100755 --- a/contrib/test-sign-timestamp.sh +++ b/contrib/test-sign-timestamp.sh @@ -53,6 +53,14 @@ while IFS= read -r -d '' f; do fi fi done < <(find "$APP" -type f -perm -111 -print0) +# Additional verification for the entire .app bundle: +echo "" +echo -e "${BLU}Performing deep signature verification of the .app bundle...${NC}" +/usr/bin/codesign --verify --deep --strict --verbose=2 "$APP" + +echo "" +echo -e "${BLU}Gatekeeper assessment (spctl) for the .app bundle...${NC}" +/usr/sbin/spctl --assess --type execute -vv "$APP" echo "" echo -e "${BLU}========================================${NC}" From baf31c2ecc90a6047119a964557857a860c5fb42 Mon Sep 17 00:00:00 2001 From: CharlVS <77973576+CharlVS@users.noreply.github.com> Date: Mon, 20 Oct 2025 14:59:52 +0200 Subject: [PATCH 22/22] chore(sdk): roll submodule to latest dev - Update .gitmodules to track dev - Sync sdk to origin/dev --- .gitmodules | 2 +- sdk | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index 773d0eef5d..ad07a1ea79 100644 --- a/.gitmodules +++ b/.gitmodules @@ -1,7 +1,7 @@ [submodule "sdk"] path = sdk url = https://github.com/KomodoPlatform/komodo-defi-sdk-flutter.git - branch = patch-macos-release-profile + branch = dev update = checkout fetchRecurseSubmodules = on-demand ignore = dirty diff --git a/sdk b/sdk index 342ca1fff3..9881ff2e0d 160000 --- a/sdk +++ b/sdk @@ -1 +1 @@ -Subproject commit 342ca1fff35bc93f60369cdc7e42e93942948a61 +Subproject commit 9881ff2e0da95295cd6629e1b709af779fcac856