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() {이 기능은 메뉴 표시줄 아이콘을 설정합니다:
- 아이콘을 설정합니다(getIcon() 사용).
- 제목과 툴팁을 설정합니다.
- 메뉴에 "종료" 옵션을 추가합니다.
- "종료" 옵션을 클릭하면 듣기 시작합니다.
- 시계 실행을 시작합니다(차단되지 않도록 별도의 고루틴에서).
4. onExit() 함수
func onExit() { // Cleanup tasks go here }이 함수는 앱이 종료될 때 호출됩니다. 여기서는 아무것도 하지 않지만 필요한 경우 정리 작업을 추가할 수 있습니다.
5. runClock() 함수
func runClock() { ticker := time.NewTicker(time.Minute) defer ticker.Stop() for { select { case t :=이것이 우리 시계의 "심장"입니다:
- 1분마다 "틱"하는 티커를 생성합니다.
- 무한 루프 속에서 1분마다 시간을 확인합니다.
- 한 시간 또는 15분의 1이 지나면 차임벨이 울립니다.
6. 차임() 함수
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이 기능은 차임을 재생합니다.
- 차임벨을 몇 번 울릴지 파악합니다(15분에 한 번 또는 정각에 해당하는 시간).
- 그런 다음 차임 소리 사이에 짧은 일시 정지를 두고 차임 소리를 여러 번 재생합니다.
7. getIcon() 함수
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 애플리케이션 번들 생성
우리 앱을 적절한 macOS 시민으로 만들려면 애플리케이션 번들을 생성해야 합니다. 여기에는 Info.plist 파일 생성이 포함됩니다:
CFBundleExecutable CityHallClock CFBundleIconFile AppIcon CFBundleIdentifier com.yourcompany.cityhallclock CFBundleName City Hall Clock CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleVersion 1 LSMinimumSystemVersion 10.12 LSUIElement NSHighResolutionCapable 이를 프로젝트 디렉토리에 Info.plist로 저장하세요.
사용자 정의 아이콘 추가
두 개의 아이콘이 필요합니다:
- 메뉴 표시줄 아이콘: icon.png라는 22x22 픽셀 PNG를 만듭니다.
- 앱 아이콘: .icns 파일을 만듭니다.
- 이미지 크기를 16x16~1024x1024픽셀로 만듭니다.
- icon_16x16.png와 같은 이름으로 AppIcon.iconset에 저장합니다.
- 실행: iconutil -c icns AppIcon.iconset
건축 및 포장
빌드 스크립트(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
즐거운 코딩을 즐기시고 새로운 시계를 즐겨보세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3