apple-platforms
Build apps for macOS, iPadOS, watchOS, and visionOS with platform-specific features. Use when creating menu bar apps, iPad split views, Apple Watch complications, Vision Pro immersive experiences, or multi-platform adaptations.
When & Why to Use This Skill
This Claude skill streamlines Apple platform development by providing optimized SwiftUI code patterns and platform-specific implementations for macOS, iPadOS, watchOS, and visionOS. It enables developers to quickly generate boilerplate and logic for everything from menu bar utilities and adaptive iPad layouts to immersive spatial computing experiences and health-tracking apps, ensuring best practices across the Apple ecosystem.
Use Cases
- Developing macOS menu bar applications with custom status items, window styles, and system-integrated commands.
- Implementing adaptive layouts for iPadOS that seamlessly transition between compact slide-over and full-screen split views.
- Building watchOS fitness applications with HealthKit integration for real-time workout tracking and heart rate monitoring.
- Creating immersive 3D spatial experiences and RealityKit integrations for visionOS using volumes and immersive spaces.
- Managing multi-platform codebases efficiently using conditional compilation and platform-specific type aliases to share logic across devices.
| name | apple-platforms |
|---|---|
| description | Build apps for macOS, iPadOS, watchOS, and visionOS with platform-specific features. Use when creating menu bar apps, iPad split views, Apple Watch complications, Vision Pro immersive experiences, or multi-platform adaptations. |
Apple Platform Development
macOS Specifics
@main
struct MacApp: App {
var body: some Scene {
// Main window
WindowGroup {
ContentView()
}
.windowStyle(.hiddenTitleBar)
.windowToolbarStyle(.unified(showsTitle: true))
.defaultSize(width: 900, height: 600)
.commands {
CommandGroup(replacing: .newItem) {
Button("New Document") { }
.keyboardShortcut("n", modifiers: .command)
}
ToolbarCommands()
}
// Menu bar app
MenuBarExtra("Status", systemImage: "star.fill") {
Button("Preferences...") { openSettings() }
Divider()
Button("Quit") { NSApp.terminate(nil) }
}
.menuBarExtraStyle(.window)
// Settings window
Settings {
SettingsView()
}
}
}
iPadOS Adaptive Layouts
struct AdaptiveView: View {
@Environment(\.horizontalSizeClass) var sizeClass
var body: some View {
if sizeClass == .compact {
// iPhone or iPad slide-over
TabView {
HomeTab()
SearchTab()
}
} else {
// iPad full screen
NavigationSplitView {
Sidebar()
} detail: {
DetailView()
}
}
}
}
// Keyboard shortcuts for iPad
struct ContentView: View {
var body: some View {
List { }
.keyboardShortcut("f", modifiers: .command)
.focusable()
}
}
watchOS
@main
struct WatchApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
// Workout tracking
class WorkoutManager: NSObject, ObservableObject {
private var session: HKWorkoutSession?
private var builder: HKLiveWorkoutBuilder?
@Published var heartRate: Double = 0
func startWorkout(type: HKWorkoutActivityType) async throws {
let config = HKWorkoutConfiguration()
config.activityType = type
config.locationType = .outdoor
session = try HKWorkoutSession(
healthStore: HKHealthStore(),
configuration: config
)
builder = session?.associatedWorkoutBuilder()
session?.startActivity(with: .now)
try await builder?.beginCollection(at: .now)
}
}
visionOS Spatial Computing
@main
struct VisionApp: App {
var body: some Scene {
// 2D window
WindowGroup {
ContentView()
}
// 3D volume
WindowGroup(id: "globe") {
Globe3DView()
}
.windowStyle(.volumetric)
.defaultSize(width: 0.5, height: 0.5, depth: 0.5, in: .meters)
// Immersive space
ImmersiveSpace(id: "solar-system") {
SolarSystemView()
}
.immersionStyle(selection: .constant(.mixed), in: .mixed)
}
}
// RealityKit integration
struct ImmersiveView: View {
var body: some View {
RealityView { content in
let sphere = ModelEntity(mesh: .generateSphere(radius: 0.1))
sphere.position = [0, 1.5, -1]
content.add(sphere)
}
.gesture(TapGesture().targetedToAnyEntity())
}
}
Multi-Platform Code
#if os(iOS)
typealias PlatformColor = UIColor
#elseif os(macOS)
typealias PlatformColor = NSColor
#endif
// Conditional compilation
struct ContentView: View {
var body: some View {
#if os(watchOS)
CompactView()
#elseif os(tvOS)
LargeDisplayView()
#else
StandardView()
#endif
}
}