Io Astrology Software For Mac πŸ“₯

import Foundation class PlanetCalculator

func getMoonPhase(date: Date) -> String // Simplified lunar cycle let lunarMonth: Double = 29.53058867 let referenceNewMoon = Date(timeIntervalSince1970: 946684800) // Jan 1 2000 let daysSince = date.timeIntervalSince(referenceNewMoon) / 86400 let phase = daysSince.truncatingRemainder(dividingBy: lunarMonth) / lunarMonth switch phase case 0..<0.125: return "πŸŒ‘ New" case 0.125..<0.25: return "πŸŒ’ Waxing" case 0.25..<0.375: return "πŸŒ“ First Q" case 0.375..<0.5: return "πŸŒ” Gibbous" case 0.5..<0.625: return "πŸŒ• Full" case 0.625..<0.75: return "πŸŒ– Waning" case 0.75..<0.875: return "πŸŒ— Last Q" default: return "🌘 Balsamic" io astrology software for mac

import CoreSpotlight import MobileCoreServices class SpotlightIndexer static func indexChart(_ birthData: BirthData, positions: [PlanetaryPosition]) let attributeSet = CSSearchableItemAttributeSet(contentType: .text) attributeSet.title = "(birthData.name)'s Natal Chart" attributeSet.contentDescription = positions.map "($0.planet.symbol) in ($0.zodiacSign)" .joined(separator: ", ") 0.125: return "πŸŒ‘ New" case 0.125..&lt

var degreeInSign: Double longitude.truncatingRemainder(dividingBy: 30) 0.25: return "πŸŒ’ Waxing" case 0.25..&lt

var body: some Scene WindowGroup ContentView() .windowStyle(.titleBar) .commands CommandMenu("Chart") Button("Recalculate Now") NotificationCenter.default.post(name: .init("recalculate"), object: nil) .keyboardShortcut("R")

func applicationDidFinishLaunching(_ notification: Notification) statusItem = NSStatusBar.system.statusItem(withLength: NSStatusItem.variableLength) if let button = statusItem?.button button.title = "β˜‰ Io" button.action = #selector(togglePopover) // Update planetary hour every minute Timer.scheduledTimer(withTimeInterval: 60, repeats: true) _ in self.updateMenubarText() updateMenubarText()