Mac용 멋진 시청 시계 앱을 만들 준비가 되셨나요? 엄청난! 우리는 메뉴 바에 있고, 15분마다 차임벨을 울리고, 심지어 시간까지 계산해주는 앱을 만들 것입니다. 단계별로 나누어서, 무슨 일이 일어나는지 이해할 수 있도록 코드의 모든 부분을 설명하겠습니다.
시청 시계 앱의 기능은 다음과 같습니다.
먼저 프로젝트를 설정해 보겠습니다.
mkdir CityHallClock cd CityHallClock
go mod init cityhallclock
go get github.com/getlantern/systray go get github.com/faiface/beep
이제 main.go 파일을 만들고 각 기능을 살펴보겠습니다.
package main import ( "bytes" "log" "os" "path/filepath" "time" "github.com/faiface/beep" "github.com/faiface/beep/mp3" "github.com/faiface/beep/speaker" "github.com/getlantern/systray" ) var ( audioBuffer *beep.Buffer ) func main() { initAudio() systray.Run(onReady, onExit) } // ... (other functions will go here)
각 기능을 세분화해 보겠습니다.
func main() { initAudio() systray.Run(onReady, onExit) }
여기서 우리 앱이 시작됩니다. 두 가지 중요한 작업을 수행합니다.
func initAudio() { execPath, err := os.Executable() if err != nil { log.Fatal(err) } resourcesPath := filepath.Join(filepath.Dir(execPath), "..", "Resources") chimeFile := filepath.Join(resourcesPath, "chime.mp3") f, err := os.Open(chimeFile) if err != nil { log.Fatal(err) } defer f.Close() streamer, format, err := mp3.Decode(f) if err != nil { log.Fatal(err) } defer streamer.Close() audioBuffer = beep.NewBuffer(format) audioBuffer.Append(streamer) err = speaker.Init(format.SampleRate, format.SampleRate.N(time.Second/10)) if err != nil { log.Fatal(err) } }
이 기능은 오디오를 설정합니다:
사운드 파일을 찾을 수 없는 등 문제가 발생하면 오류를 기록하고 종료됩니다.
func onReady() { systray.SetIcon(getIcon()) systray.SetTitle("City Hall Clock") systray.SetTooltip("City Hall Clock") mQuit := systray.AddMenuItem("Quit", "Quit the app") go func() { <-mQuit.ClickedCh systray.Quit() }() go runClock() }
이 기능은 메뉴 표시줄 아이콘을 설정합니다.
func onExit() { // Cleanup tasks go here }
앱이 종료될 때 이 함수가 호출됩니다. 여기서는 아무것도 하지 않지만 필요한 경우 정리 작업을 추가할 수 있습니다.
func runClock() { ticker := time.NewTicker(time.Minute) defer ticker.Stop() for { select { case t := <-ticker.C: if t.Minute() == 0 || t.Minute() == 15 || t.Minute() == 30 || t.Minute() == 45 { go chime(t) } } } }
이것이 우리 시계의 "하트"입니다:
func chime(t time.Time) { hour := t.Hour() minute := t.Minute() var chimeTimes int if minute == 0 { chimeTimes = hour % 12 if chimeTimes == 0 { chimeTimes = 12 } } else { chimeTimes = 1 } for i := 0; i < chimeTimes; i++ { streamer := audioBuffer.Streamer(0, audioBuffer.Len()) speaker.Play(streamer) time.Sleep(time.Duration(audioBuffer.Len()) * time.Second / time.Duration(audioBuffer.Format().SampleRate)) if i < chimeTimes-1 { time.Sleep(500 * time.Millisecond) // Wait between chimes } } }
이 기능은 차임을 재생합니다.
func getIcon() []byte { execPath, err := os.Executable() if err != nil { log.Fatal(err) } iconPath := filepath.Join(filepath.Dir(execPath), "..", "Resources", "icon.png") // Read the icon file icon, err := os.ReadFile(iconPath) if err != nil { log.Fatal(err) } return icon }
이 기능은 메뉴 표시줄 아이콘을 가져옵니다.
우리 앱을 적절한 macOS 시민으로 만들려면 애플리케이션 번들을 생성해야 합니다. 여기에는 Info.plist 파일 생성이 포함됩니다.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>CFBundleExecutable</key> <string>CityHallClock</string> <key>CFBundleIconFile</key> <string>AppIcon</string> <key>CFBundleIdentifier</key> <string>com.yourcompany.cityhallclock</string> <key>CFBundleName</key> <string>City Hall Clock</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleVersion</key> <string>1</string> <key>LSMinimumSystemVersion</key> <string>10.12</string> <key>LSUIElement</key> <true/> <key>NSHighResolutionCapable</key> <true/> </dict> </plist>
이를 프로젝트 디렉토리에 Info.plist로 저장하세요.
두 개의 아이콘이 필요합니다:
빌드 스크립트(build.sh)를 만들어 보겠습니다.
#!/bin/bash # Build the Go application go build -o CityHallClock # Create the app bundle structure mkdir -p CityHallClock.app/Contents/MacOS mkdir -p CityHallClock.app/Contents/Resources # Move the executable to the app bundle mv CityHallClock CityHallClock.app/Contents/MacOS/ # Copy the Info.plist cp Info.plist CityHallClock.app/Contents/ # Copy the chime sound to Resources cp chime.mp3 CityHallClock.app/Contents/Resources/ # Copy the menu bar icon cp icon.png CityHallClock.app/Contents/Resources/ # Copy the application icon cp AppIcon.icns CityHallClock.app/Contents/Resources/ echo "Application bundle created: CityHallClock.app"
chmod +x build.sh로 실행 가능하게 만든 다음 ./build.sh로 실행하세요.
그리고 거기에 있습니다! macOS용으로 모든 기능을 갖춘 시청 시계 앱을 구축했습니다. 다음 사항에 대해 알아보았습니다.
이에 대해 자유롭게 확장해 보세요. 맞춤 차임 또는 다른 차임 간격에 대한 기본 설정을 추가할 수도 있습니다. 한계는 없습니다!
여기에서 전체 소스 코드를 찾을 수 있습니다: https://github.com/rezmoss/citychime
즐거운 코딩하시고, 새로운 시계를 즐겨보세요!
위 내용은 macOS용 시청 시계 앱 구축: 종합 가이드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!