Skip to content

Commit

Permalink
Release 3.24.1
Browse files Browse the repository at this point in the history
  • Loading branch information
zenangst committed May 21, 2024
1 parent e08e395 commit 0e50144
Show file tree
Hide file tree
Showing 11 changed files with 68 additions and 156 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -22,3 +22,5 @@ Build/Releases/*
ResultBundle.xcresult
Sparkle/*
.package.resolved
Tuist/.build/workspace-state.json
Tuist/Package.resolved
File renamed without changes
Binary file added Assets/Wiki/Triggers/GenericAppIconView.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/Wiki/Triggers/KeyboardIconView.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added Assets/Wiki/Triggers/TriggersIconView.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions Project.swift
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ let mainAppTarget = Target.target(
"ASSETCATALOG_COMPILER_APPICON_NAME": "AppIcon",
"CODE_SIGN_IDENTITY": "Apple Development",
"CODE_SIGN_STYLE": "Automatic",
"CURRENT_PROJECT_VERSION": "893",
"CURRENT_PROJECT_VERSION": "901",
"DEVELOPMENT_TEAM": env["TEAM_ID"],
"ENABLE_HARDENED_RUNTIME": true,
"MARKETING_VERSION": "3.24.0",
"MARKETING_VERSION": "3.24.1",
"PRODUCT_NAME": "Keyboard Cowboy"
],
configurations: [
Expand Down
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<div align="center">
<img src="https://github.com/zenangst/KeyboardCowboy/blob/main/Assets/bento_1024.png?raw=true" width="100%" alt="Application image" align="center" />
<img src="https://github.com/zenangst/KeyboardCowboy/blob/main/Assets/Wiki/Home/Bento.png?raw=true" width="100%" alt="Application image" align="center" />
</div>

# Keyboard Cowboy 3
Expand Down Expand Up @@ -86,6 +86,6 @@ PACKAGE_DEVELOPMENT=false
Simply run the following commands in the root folder of the repository

```fish
tuist fetch
tuist install
tuist generate
```
103 changes: 0 additions & 103 deletions Tuist/Package.resolved

This file was deleted.

14 changes: 13 additions & 1 deletion UnitTests/Sources/AssetGenerator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,20 @@ final class AssetGenerator {

guard let imageData = imageRep?.representation(using: .png, properties: [:]) else { return }

let path = "\(filename)_\(Int(size.width)).png"
let path = "\(filename).png"
let url = URL(fileURLWithPath: assetRoot).appendingPathComponent(path)
let folder = (url.absoluteString as NSString)
.deletingLastPathComponent
.replacingOccurrences(of: "file:", with: "")
let fileManager = FileManager.default

if !fileManager.fileExists(atPath: folder) {
try fileManager.createDirectory(
atPath: folder,
withIntermediateDirectories: true,
attributes: nil
)
}

try imageData.write(to: url)
}
Expand Down
81 changes: 41 additions & 40 deletions UnitTests/Sources/AssetGeneratorTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,49 +13,50 @@ final class AssetGeneratorTests: XCTestCase {
@MainActor
func test_generateIcons() throws {
for size in Self.sizes {
try AssetGenerator.generate(filename: "Icons/WindowManagementIconView", size: size, content: WindowManagementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/ActivateLastApplicationIconView", size: size, content: ActivateLastApplicationIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/RelativeFocusIconView", size: size, content: RelativeFocusIconView(.up, size: size.width))
try AssetGenerator.generate(filename: "Icons/SnippetIconView", size: size, content: SnippetIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MagicVarsIconView", size: size, content: MagicVarsIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MacroIconView", size: size, content: MacroIconView(.remove, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView", size: size, content: MoveFocusToWindowIconView(direction: .next, scope: .allWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/UserModeIconView", size: size, content: UserModeIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/UIElementIconView", size: size, content: UIElementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/EnvironmentIconView", size: size, content: EnvironmentIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MouseIconView", size: size, content: MouseIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/BugFixIconView", size: size, content: BugFixIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView", size: size, content: MoveFocusToWindowIconView(direction: .previous, scope: .visibleWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView", size: size, content: MoveFocusToWindowIconView(direction: .next, scope: .visibleWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/DockIconView", size: size, content: DockIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MacroIconView", size: size, content: MacroIconView(.record, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView", size: size, content: MoveFocusToWindowIconView(direction: .previous, scope: .activeApplication, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView", size: size, content: MoveFocusToWindowIconView(direction: .next, scope: .activeApplication, size: size.width))
try AssetGenerator.generate(filename: "Icons/GenericAppIconView", size: size, content: GenericAppIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MissionControlIconView", size: size, content: MissionControlIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/UIImprovementIconView", size: size, content: UIImprovementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MenuIconView", size: size, content: MenuIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MinimizeAllIconView", size: size, content: MinimizeAllIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/UserModeIconView", size: size, content: UserModeIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView", size: size, content: MoveFocusToWindowIconView(direction: .previous, scope: .allWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/TypingIconView", size: size, content: TypingIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/ScriptIconView", size: size, content: ScriptIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/CommandLineIconView", size: size, content: CommandLineIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/KeyboardIconView", size: size, content: KeyboardIconView("M", size: size.width))
try AssetGenerator.generate(filename: "Icons/ImprovementIconView", size: size, content: ImprovementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/ErrorIconView", size: size, content: ErrorIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/WindowManagementIconView", size: size, content: WarningIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/TriggersIconView", size: size, content: TriggersIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/PrivacyIconView", size: size, content: PrivacyIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/WindowManagementIconView_\(Int(size.width))", size: size, content: WindowManagementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/ActivateLastApplicationIconView_\(Int(size.width))", size: size, content: ActivateLastApplicationIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/RelativeFocusIconView_\(Int(size.width))", size: size, content: RelativeFocusIconView(.up, size: size.width))
try AssetGenerator.generate(filename: "Icons/SnippetIconView_\(Int(size.width))", size: size, content: SnippetIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MagicVarsIconView_\(Int(size.width))", size: size, content: MagicVarsIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MacroIconView_\(Int(size.width))", size: size, content: MacroIconView(.remove, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView_\(Int(size.width))", size: size, content: MoveFocusToWindowIconView(direction: .next, scope: .allWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/UserModeIconView_\(Int(size.width))", size: size, content: UserModeIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/UIElementIconView_\(Int(size.width))", size: size, content: UIElementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/EnvironmentIconView_\(Int(size.width))", size: size, content: EnvironmentIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MouseIconView_\(Int(size.width))", size: size, content: MouseIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/BugFixIconView_\(Int(size.width))", size: size, content: BugFixIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView_\(Int(size.width))", size: size, content: MoveFocusToWindowIconView(direction: .previous, scope: .visibleWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView_\(Int(size.width))", size: size, content: MoveFocusToWindowIconView(direction: .next, scope: .visibleWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/DockIconView_\(Int(size.width))", size: size, content: DockIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MacroIconView_\(Int(size.width))", size: size, content: MacroIconView(.record, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView_\(Int(size.width))", size: size, content: MoveFocusToWindowIconView(direction: .previous, scope: .activeApplication, size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView_\(Int(size.width))", size: size, content: MoveFocusToWindowIconView(direction: .next, scope: .activeApplication, size: size.width))
try AssetGenerator.generate(filename: "Icons/GenericAppIconView_\(Int(size.width))", size: size, content: GenericAppIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MissionControlIconView_\(Int(size.width))", size: size, content: MissionControlIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/UIImprovementIconView_\(Int(size.width))", size: size, content: UIImprovementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MenuIconView_\(Int(size.width))", size: size, content: MenuIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MinimizeAllIconView_\(Int(size.width))", size: size, content: MinimizeAllIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/UserModeIconView_\(Int(size.width))", size: size, content: UserModeIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/MoveFocusToWindowIconView_\(Int(size.width))", size: size, content: MoveFocusToWindowIconView(direction: .previous, scope: .allWindows, size: size.width))
try AssetGenerator.generate(filename: "Icons/TypingIconView_\(Int(size.width))", size: size, content: TypingIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/ScriptIconView_\(Int(size.width))", size: size, content: ScriptIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/CommandLineIconView_\(Int(size.width))", size: size, content: CommandLineIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/KeyboardIconView_\(Int(size.width))", size: size, content: KeyboardIconView("M", size: size.width))
try AssetGenerator.generate(filename: "Icons/ImprovementIconView_\(Int(size.width))", size: size, content: ImprovementIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/ErrorIconView_\(Int(size.width))", size: size, content: ErrorIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/WindowManagementIconView_\(Int(size.width))", size: size, content: WarningIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/TriggersIconView_\(Int(size.width))", size: size, content: TriggersIconView(size: size.width))
try AssetGenerator.generate(filename: "Icons/PrivacyIconView_\(Int(size.width))", size: size, content: PrivacyIconView(size: size.width))
}
}

@MainActor
func test_generateBento() throws {
try AssetGenerator.generate(filename: "bento", useIntrinsicContentSize: true, size: CGSize(width: 1024, height: 768), content: PromoView())
}
@MainActor
func test_generateWikiAssets() throws {
let iconSize = CGSize(width: 16, height: 16)

func test_generateWebAssets() {

try AssetGenerator.generate(filename: "Wiki/Home/Bento", useIntrinsicContentSize: true, size: CGSize(width: 1024, height: 768), content: PromoView())
try AssetGenerator.generate(filename: "Wiki/Triggers/GenericAppIconView", size: iconSize, content: GenericAppIconView(size: iconSize.width))
try AssetGenerator.generate(filename: "Wiki/Triggers/TriggersIconView", size: iconSize, content: TriggersIconView(size: iconSize.width))
try AssetGenerator.generate(filename: "Wiki/Triggers/KeyboardIconView", size: iconSize, content: KeyboardIconView("M", size: iconSize.width))
}
}
16 changes: 8 additions & 8 deletions appcast.xml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,14 @@
<rss xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" version="2.0">
<channel>
<title>Keyboard Cowboy</title>
<item>
<title>3.24.1</title>
<pubDate>Tue, 21 May 2024 11:28:34 +0200</pubDate>
<sparkle:version>902</sparkle:version>
<sparkle:shortVersionString>3.24.1</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/zenangst/KeyboardCowboy/releases/download/3.24.1/Keyboard.Cowboy.3.24.1.dmg" length="8693194" type="application/octet-stream" sparkle:edSignature="luVLNZuCWuCqebDFzEv50JIL70GeCT8LQfNhd4Cxdw5s/LpxzwtSUd4GUX7u7nVO2xPUrBIFRMZwAj9nUIAlCQ=="/>
</item>
<item>
<title>3.24.0</title>
<pubDate>Mon, 20 May 2024 11:37:11 +0200</pubDate>
Expand All @@ -18,14 +26,6 @@
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/zenangst/KeyboardCowboy/releases/download/3.23.2/Keyboard.Cowboy.3.23.2.dmg" length="8305551" type="application/octet-stream" sparkle:edSignature="ZOdISMI2C9E+C5MHbzgnhon5WaQKkTZ0+vuj4pF4n5AVSTYv+Ibexe/6ugIzYhYwGQIflqPPv/BNY7aQVEr8Dw=="/>
</item>
<item>
<title>3.23.1</title>
<pubDate>Fri, 15 Mar 2024 16:42:07 +0100</pubDate>
<sparkle:version>698</sparkle:version>
<sparkle:shortVersionString>3.23.1</sparkle:shortVersionString>
<sparkle:minimumSystemVersion>13.0</sparkle:minimumSystemVersion>
<enclosure url="https://github.com/zenangst/KeyboardCowboy/releases/download/3.23.1/Keyboard.Cowboy.3.23.1.dmg" length="8333530" type="application/octet-stream" sparkle:edSignature="DYQuz1jUG/u/5IJ5h2uvWu+2l230a3CvyfxixyAqKhMWAOW4k70v4v0v0zdB4sLMo8OKYmDjMd1VQeMw6PUiBg=="/>
</item>
<item>
<title>0.4.1</title>
<pubDate>Mon, 21 Dec 2020 19:46:13 +0100</pubDate>
Expand Down

0 comments on commit 0e50144

Please sign in to comment.