Skip to content

Commit 65bbcde

Browse files
committed
chore(release): bump to v1.1.3 with Developer ID signing and notarization
Drop the Gatekeeper xattr workaround now that Release builds are signed and notarized.
1 parent ef50c06 commit 65bbcde

4 files changed

Lines changed: 41 additions & 13 deletions

File tree

FrameworkScanner.xcodeproj/project.pbxproj

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,12 @@
1717
32B634FCBF58491156EC3742 /* 2024-03.json in Resources */ = {isa = PBXBuildFile; fileRef = 6142E0D3C9FD52DF62264783 /* 2024-03.json */; };
1818
36EEC6C93FF97C18901DFEA8 /* FrameworkType.swift in Sources */ = {isa = PBXBuildFile; fileRef = 2AABDDD2FB3B63FAC872D10A /* FrameworkType.swift */; };
1919
410B5ACB1A4E08D00711F1B0 /* 2024-07.json in Resources */ = {isa = PBXBuildFile; fileRef = EBB0AC9AC7EA01B1272C31BE /* 2024-07.json */; };
20+
458AEFA3FAA9F2481AB3B722 /* qt.json in Resources */ = {isa = PBXBuildFile; fileRef = 9A0BB2016993DD56CF5BC55B /* qt.json */; };
2021
46D76EABE951C7ECEDEF692E /* 2026-03.json in Resources */ = {isa = PBXBuildFile; fileRef = 04DFBB807D2B74455C06E004 /* 2026-03.json */; };
22+
5C3DB8DBF20D73D1E84CB587 /* python.json in Resources */ = {isa = PBXBuildFile; fileRef = 6C2F0DFBC6D6AF1A88B26D76 /* python.json */; };
2123
633C5FCCDC75DE9DDDF10413 /* SecurityAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = B4110FE665F0C65E67B5B2F7 /* SecurityAnalyzer.swift */; };
2224
699426EE7C7ED5E8BCA7E38D /* StatsBarView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 975D797325DEE497B9591ED1 /* StatsBarView.swift */; };
25+
741DDE7136D7E8EB0DFE1AE4 /* cef.json in Resources */ = {isa = PBXBuildFile; fileRef = A32489349256EC1794FF1629 /* cef.json */; };
2326
87027E0577983DBA4FBD599D /* FileSizeFormatter.swift in Sources */ = {isa = PBXBuildFile; fileRef = 76B749ACC14FC0B04BD7A178 /* FileSizeFormatter.swift */; };
2427
881DB9D51D11878D399148E4 /* AppScanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9D2A33B6EDF76F7AE65C00DB /* AppScanner.swift */; };
2528
8D40EBAAE53F7B644E6D0790 /* ArchitectureDetector.swift in Sources */ = {isa = PBXBuildFile; fileRef = C058D598C6F3A5AED44727A7 /* ArchitectureDetector.swift */; };
@@ -28,6 +31,7 @@
2831
A14D08ECC1F9FE0162C5F850 /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 68A9AA4A9435ADA088B99577 /* Assets.xcassets */; };
2932
B4C7E5E8A9E90115E0989BDF /* ElectronAnalyzer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 62FB7B2F88E2D5056DBBA431 /* ElectronAnalyzer.swift */; };
3033
BAD7046FADCAD9FBC3F466CF /* SortOption.swift in Sources */ = {isa = PBXBuildFile; fileRef = BCD4AAA3C4CEEB139F16A3D3 /* SortOption.swift */; };
34+
BD363C64C536629423389DFE /* electron.json in Resources */ = {isa = PBXBuildFile; fileRef = C20FCDFE2F2EF28395F40D89 /* electron.json */; };
3135
C60B4C8C2D777AC654123FA8 /* 2025-09.json in Resources */ = {isa = PBXBuildFile; fileRef = 04CBAC5F16395BDDB52DF55B /* 2025-09.json */; };
3236
CA9EDBD3C72F93CB020A8845 /* 2023-11.json in Resources */ = {isa = PBXBuildFile; fileRef = 444696F487DB29A315E0099F /* 2023-11.json */; };
3337
D66319EE0E856890231ADD64 /* ExportService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6D5850A5A0DA0327E59573DB /* ExportService.swift */; };
@@ -64,20 +68,24 @@
6468
6142E0D3C9FD52DF62264783 /* 2024-03.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = "2024-03.json"; sourceTree = "<group>"; };
6569
62FB7B2F88E2D5056DBBA431 /* ElectronAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ElectronAnalyzer.swift; sourceTree = "<group>"; };
6670
68A9AA4A9435ADA088B99577 /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = "<group>"; };
71+
6C2F0DFBC6D6AF1A88B26D76 /* python.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = python.json; sourceTree = "<group>"; };
6772
6D5850A5A0DA0327E59573DB /* ExportService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExportService.swift; sourceTree = "<group>"; };
6873
76B749ACC14FC0B04BD7A178 /* FileSizeFormatter.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FileSizeFormatter.swift; sourceTree = "<group>"; };
6974
7FCE4BE74E9979A9408C294C /* de */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = de; path = de.lproj/Localizable.strings; sourceTree = "<group>"; };
7075
8220A9E8F7F05379C379AB2F /* FilterToolbar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FilterToolbar.swift; sourceTree = "<group>"; };
7176
8B2740B7249B0F125927DDFE /* FrameworkScanner.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = FrameworkScanner.app; sourceTree = BUILT_PRODUCTS_DIR; };
7277
93E9F6CBCF2D982BC6A5A1B4 /* AppRowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppRowView.swift; sourceTree = "<group>"; };
7378
975D797325DEE497B9591ED1 /* StatsBarView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = StatsBarView.swift; sourceTree = "<group>"; };
79+
9A0BB2016993DD56CF5BC55B /* qt.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = qt.json; sourceTree = "<group>"; };
7480
9D2A33B6EDF76F7AE65C00DB /* AppScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppScanner.swift; sourceTree = "<group>"; };
81+
A32489349256EC1794FF1629 /* cef.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = cef.json; sourceTree = "<group>"; };
7582
B33144B83F8675BF71CD378E /* ChartsWindowView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ChartsWindowView.swift; sourceTree = "<group>"; };
7683
B4110FE665F0C65E67B5B2F7 /* SecurityAnalyzer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SecurityAnalyzer.swift; sourceTree = "<group>"; };
7784
B46FBD685922572B69B45D1D /* UpdateSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UpdateSheet.swift; sourceTree = "<group>"; };
7885
BCB685F234D593824D250F54 /* ko */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = ko; path = ko.lproj/Localizable.strings; sourceTree = "<group>"; };
7986
BCD4AAA3C4CEEB139F16A3D3 /* SortOption.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SortOption.swift; sourceTree = "<group>"; };
8087
C058D598C6F3A5AED44727A7 /* ArchitectureDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArchitectureDetector.swift; sourceTree = "<group>"; };
88+
C20FCDFE2F2EF28395F40D89 /* electron.json */ = {isa = PBXFileReference; lastKnownFileType = text.json; path = electron.json; sourceTree = "<group>"; };
8189
C9F57B6D8CC1DC6976FFFEFF /* FrameworkDetector.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = FrameworkDetector.swift; sourceTree = "<group>"; };
8290
CAFBDAE6F1289A3F0FDFE810 /* AppInfo.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppInfo.swift; sourceTree = "<group>"; };
8391
D30BC90142E03E564FC7513C /* EmbeddedFrameworkScanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EmbeddedFrameworkScanner.swift; sourceTree = "<group>"; };
@@ -146,6 +154,10 @@
146154
30CDB480105734E7594CEDA7 /* 2024-09.json */,
147155
04CBAC5F16395BDDB52DF55B /* 2025-09.json */,
148156
04DFBB807D2B74455C06E004 /* 2026-03.json */,
157+
A32489349256EC1794FF1629 /* cef.json */,
158+
C20FCDFE2F2EF28395F40D89 /* electron.json */,
159+
6C2F0DFBC6D6AF1A88B26D76 /* python.json */,
160+
9A0BB2016993DD56CF5BC55B /* qt.json */,
149161
);
150162
path = CVE;
151163
sourceTree = "<group>";
@@ -285,6 +297,10 @@
285297
46D76EABE951C7ECEDEF692E /* 2026-03.json in Resources */,
286298
A14D08ECC1F9FE0162C5F850 /* Assets.xcassets in Resources */,
287299
F3E68C45347C1B7CFE7146C5 /* Localizable.strings in Resources */,
300+
741DDE7136D7E8EB0DFE1AE4 /* cef.json in Resources */,
301+
BD363C64C536629423389DFE /* electron.json in Resources */,
302+
5C3DB8DBF20D73D1E84CB587 /* python.json in Resources */,
303+
458AEFA3FAA9F2481AB3B722 /* qt.json in Resources */,
288304
);
289305
runOnlyForDeploymentPostprocessing = 0;
290306
};
@@ -349,15 +365,19 @@
349365
buildSettings = {
350366
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
351367
CODE_SIGN_ENTITLEMENTS = Resources/FrameworkScanner.entitlements;
352-
CODE_SIGN_IDENTITY = "-";
368+
CODE_SIGN_IDENTITY = "Developer ID Application: Eski Yin (WSGQ32FL62)";
369+
CODE_SIGN_STYLE = Manual;
353370
COMBINE_HIDPI_IMAGES = YES;
371+
CURRENT_PROJECT_VERSION = 3;
354372
DEPLOYMENT_POSTPROCESSING = YES;
355373
ENABLE_HARDENED_RUNTIME = YES;
356374
INFOPLIST_FILE = Resources/Info.plist;
357375
LD_RUNPATH_SEARCH_PATHS = (
358376
"$(inherited)",
359377
"@executable_path/../Frameworks",
360378
);
379+
MARKETING_VERSION = 1.1.3;
380+
OTHER_CODE_SIGN_FLAGS = "--timestamp";
361381
PRODUCT_BUNDLE_IDENTIFIER = com.eskiyin.FrameworkScanner;
362382
PRODUCT_NAME = FrameworkScanner;
363383
SDKROOT = macosx;
@@ -429,13 +449,15 @@
429449
CODE_SIGN_ENTITLEMENTS = Resources/FrameworkScanner.Debug.entitlements;
430450
CODE_SIGN_IDENTITY = "-";
431451
COMBINE_HIDPI_IMAGES = YES;
452+
CURRENT_PROJECT_VERSION = 3;
432453
DEPLOYMENT_POSTPROCESSING = NO;
433454
ENABLE_HARDENED_RUNTIME = NO;
434455
INFOPLIST_FILE = Resources/Info.plist;
435456
LD_RUNPATH_SEARCH_PATHS = (
436457
"$(inherited)",
437458
"@executable_path/../Frameworks",
438459
);
460+
MARKETING_VERSION = 1.1.3;
439461
PRODUCT_BUNDLE_IDENTIFIER = com.eskiyin.FrameworkScanner;
440462
PRODUCT_NAME = FrameworkScanner;
441463
SDKROOT = macosx;

README.md

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,7 @@ brew tap Geoion/tap
3434
brew install --cask frameworkscanner
3535
```
3636

37-
After installation, if macOS Gatekeeper blocks the app on first launch, run:
38-
39-
```bash
40-
xattr -cr /Applications/FrameworkScanner.app
41-
```
42-
43-
> **Why is this needed?**
44-
> macOS automatically adds a `com.apple.quarantine` extended attribute to files downloaded from the internet. This causes Gatekeeper to block unsigned or ad-hoc signed apps. The command above removes that attribute so the app can launch normally.
45-
46-
Then open the app as usual.
37+
Or download the signed DMG from [Releases](https://github.com/Geoion/FrameworkScanner/releases).
4738

4839
### Build from Source
4940

@@ -84,6 +75,12 @@ scripts/update_security_rules.sh --threshold 21
8475

8576
## Changelog
8677

78+
### v1.1.3
79+
80+
- **CVE refresh**: Updated Electron / Qt / Python / CEF vulnerability lists (2026-07); `minSafeElectronMajor` raised to 41
81+
- **Security tooling**: Fixed `compute_min_safe_electron_major` for prerelease version ranges, added unit tests
82+
- **Distribution**: Developer ID signed + notarized release builds (Gatekeeper-ready; no `xattr` workaround)
83+
8784
### v1.1.1
8885

8986
- **i18n fix**: Complete localization for all 8 languages — Japanese, Korean, German, Spanish, Italian, and Russian translations were missing for the new keys added in v1.1.0 (security analysis, code signing detail, and charts)

Resources/Info.plist

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
<key>CFBundlePackageType</key>
1616
<string>APPL</string>
1717
<key>CFBundleShortVersionString</key>
18-
<string>1.0</string>
18+
<string>1.1.3</string>
1919
<key>CFBundleVersion</key>
20-
<string>1</string>
20+
<string>3</string>
2121
</dict>
2222
</plist>

project.yml

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,28 @@ targets:
2525
buildPhase: resources
2626
info:
2727
path: Resources/Info.plist
28+
properties:
29+
CFBundleShortVersionString: "1.1.3"
30+
CFBundleVersion: "3"
2831
settings:
2932
base:
3033
PRODUCT_BUNDLE_IDENTIFIER: com.eskiyin.FrameworkScanner
3134
PRODUCT_NAME: FrameworkScanner
3235
INFOPLIST_FILE: Resources/Info.plist
36+
MARKETING_VERSION: "1.1.3"
37+
CURRENT_PROJECT_VERSION: "3"
3338
CODE_SIGN_IDENTITY: "-"
3439
SKIP_INSTALL: NO
3540
configs:
3641
Debug:
42+
CODE_SIGN_IDENTITY: "-"
3743
CODE_SIGN_ENTITLEMENTS: Resources/FrameworkScanner.Debug.entitlements
3844
ENABLE_HARDENED_RUNTIME: NO
3945
DEPLOYMENT_POSTPROCESSING: NO
4046
Release:
47+
CODE_SIGN_IDENTITY: "Developer ID Application: Eski Yin (WSGQ32FL62)"
48+
CODE_SIGN_STYLE: Manual
4149
CODE_SIGN_ENTITLEMENTS: Resources/FrameworkScanner.entitlements
4250
ENABLE_HARDENED_RUNTIME: YES
4351
DEPLOYMENT_POSTPROCESSING: YES
52+
OTHER_CODE_SIGN_FLAGS: "--timestamp"

0 commit comments

Comments
 (0)