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) }
ここからアプリが始まります。これは 2 つの重要なことを行います:
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() を使用)。
- タイトルとツールチップを設定します。
- メニューに「終了」オプションを追加します。
- 「終了」オプションがクリックされるとリッスンを開始します。
- クロックの実行を開始します (ブロックされないように別の goroutine で)。
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分ごとに時刻をチェックします。
- 正時または 15 分過ぎになると、チャイムが鳴ります。
6.chime()関数
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この関数はチャイムを再生します:
- チャイムを鳴らす回数を計算します (40 分に 1 回、または正時の時刻の数字)。
- その後、チャイム音を一定回数再生し、チャイム間に短い休止を挟みます。
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 として保存します。
カスタムアイコンの追加
2 つのアイコンが必要です:
- メニュー バー アイコン: 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