Skip to content

Commit eccc2b3

Browse files
authored
fix: use Icon Composer .icon for proper macOS icon padding (#817)
* fix: use Icon Composer .icon for proper macOS icon padding Upgrade CI Xcode from 26.2 to 26.5 where actool no longer crashes on .icon files in headless environments. Remove the workaround that deleted AppIcon.icon and fell back to unpadded .appiconset PNGs. Fixes #769 * fix: use macos-26 runners for Xcode 26.5 and fix SwiftLint errors * fix: use xcode-version 26.5-beta and fix remaining SwiftLint errors
1 parent 4bdf2a9 commit eccc2b3

9 files changed

Lines changed: 27 additions & 34 deletions

File tree

.github/workflows/build-plugin.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ jobs:
4444
build-plugin:
4545
name: "Build ${{ matrix.tag }}"
4646
needs: resolve-tags
47-
runs-on: macos-15
47+
runs-on: macos-26
4848
timeout-minutes: 30
4949
strategy:
5050
matrix: ${{ fromJson(needs.resolve-tags.outputs.matrix) }}
@@ -62,7 +62,7 @@ jobs:
6262
- name: Select Xcode
6363
uses: maxim-lobanov/setup-xcode@v1
6464
with:
65-
xcode-version: "26.2"
65+
xcode-version: "26.5-beta"
6666

6767
- name: Download static libraries
6868
env:

.github/workflows/build.yml

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ jobs:
3232

3333
build-arm64:
3434
name: Build ARM64
35-
runs-on: macos-15
35+
runs-on: macos-26
3636
timeout-minutes: 20
3737

3838
steps:
@@ -42,7 +42,7 @@ jobs:
4242
- name: Select Xcode
4343
uses: maxim-lobanov/setup-xcode@v1
4444
with:
45-
xcode-version: '26.2'
45+
xcode-version: '26.5-beta'
4646

4747
- name: Download static libraries
4848
env:
@@ -146,7 +146,7 @@ jobs:
146146
147147
build-x86_64:
148148
name: Build x86_64
149-
runs-on: macos-15
149+
runs-on: macos-26
150150
timeout-minutes: 25
151151

152152
steps:
@@ -156,7 +156,7 @@ jobs:
156156
- name: Select Xcode
157157
uses: maxim-lobanov/setup-xcode@v1
158158
with:
159-
xcode-version: '26.2'
159+
xcode-version: '26.5-beta'
160160

161161
- name: Download static libraries
162162
env:
@@ -271,7 +271,7 @@ jobs:
271271
272272
release:
273273
name: Create GitHub Release
274-
runs-on: macos-15
274+
runs-on: macos-26
275275
needs: [lint, build-arm64, build-x86_64]
276276
if: startsWith(github.ref, 'refs/tags/v')
277277
timeout-minutes: 10
@@ -287,7 +287,7 @@ jobs:
287287
- name: Select Xcode
288288
uses: maxim-lobanov/setup-xcode@v1
289289
with:
290-
xcode-version: '26.2'
290+
xcode-version: '26.5-beta'
291291

292292
- name: Download build artifacts
293293
uses: actions/download-artifact@v4

TablePro/Core/Services/Export/ForeignApp/DBeaverImporter.swift

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -327,14 +327,14 @@ struct DBeaverImporter: ForeignAppImporter {
327327

328328
private func defaultPort(for dbType: String) -> Int {
329329
switch dbType {
330-
case "MySQL", "MariaDB": return 3306
331-
case "PostgreSQL": return 5432
330+
case "MySQL", "MariaDB": return 3_306
331+
case "PostgreSQL": return 5_432
332332
case "MongoDB": return 27_017
333-
case "Redis": return 6379
334-
case "SQL Server": return 1433
335-
case "Oracle": return 1521
336-
case "ClickHouse": return 8123
337-
case "Cassandra": return 9042
333+
case "Redis": return 6_379
334+
case "SQL Server": return 1_433
335+
case "Oracle": return 1_521
336+
case "ClickHouse": return 8_123
337+
case "Cassandra": return 9_042
338338
default: return 0
339339
}
340340
}

TablePro/Core/Services/Export/ForeignApp/SequelAceImporter.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ struct SequelAceImporter: ForeignAppImporter {
157157
} else if let strPort = entry["port"] as? String, let parsed = Int(strPort) {
158158
port = parsed
159159
} else {
160-
port = 3306
160+
port = 3_306
161161
}
162162
let username = entry["user"] as? String ?? ""
163163
let database = entry["database"] as? String ?? ""

TablePro/Core/Services/Export/ForeignApp/TablePlusImporter.swift

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ struct TablePlusImporter: ForeignAppImporter {
206206
let paths = entry["TlsKeyPaths"] as? [String] ?? []
207207
return ExportableSSLConfig(
208208
mode: "Required",
209-
caCertificatePath: paths.count > 0 ? paths[0] : nil,
209+
caCertificatePath: !paths.isEmpty ? paths[0] : nil,
210210
clientCertificatePath: paths.count > 1 ? paths[1] : nil,
211211
clientKeyPath: paths.count > 2 ? paths[2] : nil
212212
)
@@ -247,11 +247,11 @@ struct TablePlusImporter: ForeignAppImporter {
247247

248248
private func defaultPort(for dbType: String) -> Int {
249249
switch dbType {
250-
case "MySQL", "MariaDB": return 3306
251-
case "PostgreSQL", "Redshift": return 5432
250+
case "MySQL", "MariaDB": return 3_306
251+
case "PostgreSQL", "Redshift": return 5_432
252252
case "MongoDB": return 27_017
253-
case "Redis": return 6379
254-
case "SQL Server": return 1433
253+
case "Redis": return 6_379
254+
case "SQL Server": return 1_433
255255
default: return 0
256256
}
257257
}

TablePro/Views/Main/Child/MainStatusBarView.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import SwiftUI
99

1010
/// Status bar at the bottom of the results section
1111
struct MainStatusBarView: View {
12-
1312
let tab: QueryTab?
1413
let filterStateManager: FilterStateManager
1514
let columnVisibilityManager: ColumnVisibilityManager

TablePro/Views/Main/MainContentView.swift

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,10 +125,12 @@ struct MainContentView: View {
125125
private func sheetContent(for sheet: ActiveSheet) -> some View {
126126
let dismissBinding = Binding<Bool>(
127127
get: { coordinator.activeSheet != nil },
128-
set: { if !$0 {
129-
coordinator.activeSheet = nil
130-
coordinator.exportPreselectedTableNames = nil
131-
} }
128+
set: {
129+
if !$0 {
130+
coordinator.activeSheet = nil
131+
coordinator.exportPreselectedTableNames = nil
132+
}
133+
}
132134
)
133135

134136
switch sheet {

TablePro/Views/QueryPlan/QueryPlanTreeView.swift

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,6 @@ struct QueryPlanTreeView: View {
5151
// MARK: - Row View
5252

5353
private struct QueryPlanRowView: View {
54-
5554
let node: QueryPlanNode
5655

5756
var body: some View {

scripts/build-release.sh

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -315,13 +315,6 @@ build_for_arch() {
315315
prepare_libmongoc "$arch"
316316
prepare_hiredis "$arch"
317317

318-
# Xcode 26's Icon Composer (.icon) crashes actool in headless CI.
319-
# Keep AppIcon.appiconset as fallback; remove .icon so actool uses it.
320-
if [ -d "TablePro/AppIcon.icon" ] && [ -d "TablePro/Assets.xcassets/AppIcon.appiconset" ]; then
321-
echo "🎨 Using AppIcon.appiconset fallback for headless CI..."
322-
rm -rf "TablePro/AppIcon.icon"
323-
fi
324-
325318
# Persistent SPM package cache (speeds up CI on self-hosted runners)
326319
SPM_CACHE_DIR="${HOME}/.spm-cache"
327320
mkdir -p "$SPM_CACHE_DIR"

0 commit comments

Comments
 (0)