From aradotso-trending-skills-37
Guides building ShichiZip, a SwiftUI macOS app derived from 7-Zip for archive creation/extraction, including mainline/Zstandard variants via make and xcodebuild.
npx claudepluginhub joshuarweaver/cascade-ai-ml-agents-misc-1 --plugin aradotso-trending-skills-37This skill uses the workspace's default tool permissions.
```markdown
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
---
name: shichizip-macos-archiver
description: ShichiZip is a 7-Zip derivative for macOS built in Swift, providing archive creation, extraction, and management with native macOS integration.
triggers:
- "how do I build ShichiZip"
- "compress files with ShichiZip"
- "extract archives on macOS with 7-zip"
- "ShichiZip zstandard variant"
- "build 7-zip for macOS Swift"
- "ShichiZip xcodebuild commands"
- "integrate ShichiZip into my app"
- "ShichiZip mainline vs zstandard fork"
---
# ShichiZip macOS Archiver
> Skill by [ara.so](https://ara.so) — Daily 2026 Skills collection.
ShichiZip is a native macOS archive manager derived from 7-Zip, written in Swift. It provides a macOS-native UI and supports standard 7-Zip archive formats, with an optional Zstandard-enhanced fork variant for improved compression.
---
## What ShichiZip Does
- Opens, creates, and extracts archives in formats supported by 7-Zip (7z, zip, tar, gz, bz2, xz, rar, etc.)
- Provides a native macOS SwiftUI/AppKit interface
- Offers two build variants:
- **Mainline**: Standard 7-Zip backend
- **ZS (Zstandard)**: Fork with Zstandard compression support
---
## Requirements
- macOS (Apple Silicon recommended; `arm64` used in official build commands)
- Xcode (with command-line tools)
- `make`
- Swift toolchain
---
## Building ShichiZip
### Step 1: Clone the Repository
```bash
git clone https://github.com/idawnlight/ShichiZip.git
cd ShichiZip
Mainline variant:
make lib-mainline
Zstandard fork variant:
make lib-zs
Mainline app:
xcodebuild \
-project ShichiZip.xcodeproj \
-scheme ShichiZip \
-configuration Debug \
-arch arm64 \
build
Zstandard variant app:
xcodebuild \
-project ShichiZip.xcodeproj \
-scheme ShichiZipZS \
-configuration Debug \
-arch arm64 \
build
xcodebuild \
-project ShichiZip.xcodeproj \
-scheme ShichiZip \
-configuration Release \
-arch arm64 \
build
ShichiZip/
├── ShichiZip.xcodeproj/ # Xcode project
├── ShichiZip/ # Swift app source
│ ├── AppDelegate.swift # App entry point
│ ├── ContentView.swift # Main SwiftUI view
│ └── ...
├── Makefile # Library build targets
└── README.md
| Scheme | Library Target | Description |
|---|---|---|
ShichiZip | lib-mainline | Standard 7-Zip backend |
ShichiZipZS | lib-zs | Zstandard-enhanced fork |
Always match the make target to the Xcode scheme:
make lib-mainline → -scheme ShichiZipmake lib-zs → -scheme ShichiZipZSimport SwiftUI
struct ArchiveOpenView: View {
@State private var selectedURL: URL? = nil
@State private var showFilePicker = false
var body: some View {
Button("Open Archive") {
showFilePicker = true
}
.fileImporter(
isPresented: $showFilePicker,
allowedContentTypes: [.archive, .zip],
allowsMultipleSelection: false
) { result in
switch result {
case .success(let urls):
selectedURL = urls.first
if let url = selectedURL {
openArchive(at: url)
}
case .failure(let error):
print("File picker error: \(error.localizedDescription)")
}
}
}
func openArchive(at url: URL) {
// Pass URL to ShichiZip's archive handling layer
print("Opening archive at: \(url.path)")
}
}
If integrating with the 7-Zip CLI binary bundled in the app:
import Foundation
func extract(archivePath: String, destinationPath: String) {
guard let binaryURL = Bundle.main.url(
forResource: "7zz",
withExtension: nil,
subdirectory: "Binaries"
) else {
print("7zz binary not found in bundle")
return
}
let process = Process()
process.executableURL = binaryURL
process.arguments = ["x", archivePath, "-o\(destinationPath)", "-y"]
let outputPipe = Pipe()
let errorPipe = Pipe()
process.standardOutput = outputPipe
process.standardError = errorPipe
do {
try process.run()
process.waitUntilExit()
let outputData = outputPipe.fileHandleForReading.readDataToEndOfFile()
let output = String(data: outputData, encoding: .utf8) ?? ""
print("Output: \(output)")
if process.terminationStatus != 0 {
let errorData = errorPipe.fileHandleForReading.readDataToEndOfFile()
let error = String(data: errorData, encoding: .utf8) ?? ""
print("Error: \(error)")
}
} catch {
print("Failed to run extraction: \(error)")
}
}
func createArchive(inputPath: String, outputPath: String) {
guard let binaryURL = Bundle.main.url(
forResource: "7zz",
withExtension: nil,
subdirectory: "Binaries"
) else { return }
let process = Process()
process.executableURL = binaryURL
// "a" = add to archive
process.arguments = ["a", outputPath, inputPath]
do {
try process.run()
process.waitUntilExit()
print("Archive created at \(outputPath), exit: \(process.terminationStatus)")
} catch {
print("Failed to create archive: \(error)")
}
}
func listArchiveContents(archivePath: String) -> [String] {
guard let binaryURL = Bundle.main.url(
forResource: "7zz",
withExtension: nil,
subdirectory: "Binaries"
) else { return [] }
let process = Process()
process.executableURL = binaryURL
process.arguments = ["l", archivePath]
let pipe = Pipe()
process.standardOutput = pipe
do {
try process.run()
process.waitUntilExit()
let data = pipe.fileHandleForReading.readDataToEndOfFile()
let output = String(data: data, encoding: .utf8) ?? ""
return output.components(separatedBy: "\n").filter { !$0.isEmpty }
} catch {
print("Failed to list archive: \(error)")
return []
}
}
# Build the mainline 7-Zip library
make lib-mainline
# Build the Zstandard fork library
make lib-zs
# Clean build artifacts (if defined)
make clean
| Flag | Description |
|---|---|
-project | Path to .xcodeproj |
-scheme | ShichiZip or ShichiZipZS |
-configuration | Debug or Release |
-arch | arm64 (Apple Silicon) or x86_64 |
build | Build action |
make lib-mainline fails with missing dependenciesxcode-select --installmakemake target before buildingShichiZip.xcodeproj in Xcode and verify the scheme list matchesBundle.main.url(forResource:) path matches the actual bundle structure-arch arm64 with -arch x86_64-arch arm64 -arch x86_64 (requires both library builds)NSOpenPanel or fileImporter to obtain security-scoped bookmarks before accessing user filesurl.startAccessingSecurityScopedResource() / url.stopAccessingSecurityScopedResource()if url.startAccessingSecurityScopedResource() {
defer { url.stopAccessingSecurityScopedResource() }
extract(archivePath: url.path, destinationPath: destinationURL.path)
}
ShichiZip is licensed under LGPL-2.1, inherited from 7-Zip's licensing terms.