@@ -37,15 +37,15 @@ jobs:
3737 arch : arm64
3838 goarch : arm64
3939 binary_name : ipMonitorApp
40- asset_name : ipMonitorApp-darwin-arm64.tar.gz
40+ asset_name : ipMonitorApp-darwin-arm64.zip
4141
4242 # macOS Intel (amd64) via compilação nativa no runner macOS
4343 - os : darwin
4444 runner : macos-latest
4545 arch : amd64
4646 goarch : amd64
4747 binary_name : ipMonitorApp
48- asset_name : ipMonitorApp-darwin-amd64.tar.gz
48+ asset_name : ipMonitorApp-darwin-amd64.zip
4949
5050 steps :
5151 - name : Checkout repositório
7474 go build -ldflags="-s -w -H=windowsgui" -o ${{ matrix.binary_name }} .
7575 Compress-Archive -Path ${{ matrix.binary_name }} -DestinationPath ${{ matrix.asset_name }}
7676
77- - name : Compilar Binário (Linux / macOS )
78- if : matrix.os != 'windows '
77+ - name : Compilar Binário (Linux)
78+ if : matrix.os == 'linux '
7979 env :
8080 CGO_ENABLED : ' 1'
8181 GOARCH : ${{ matrix.arch }}
8484 chmod +x ${{ matrix.binary_name }}
8585 tar -czvf ${{ matrix.asset_name }} ${{ matrix.binary_name }}
8686
87+ - name : Compilar e Empacotar .app Bundle (macOS)
88+ if : matrix.os == 'darwin'
89+ env :
90+ CGO_ENABLED : ' 1'
91+ GOARCH : ${{ matrix.arch }}
92+ run : |
93+ # 1. Compila o binário Go nativo
94+ go build -ldflags="-s -w" -o ${{ matrix.binary_name }} .
95+ chmod +x ${{ matrix.binary_name }}
96+
97+ # 2. Converte ícone PNG para .icns nativo do macOS usando iconutil
98+ mkdir -p AppIcon.iconset
99+ sips -z 16 16 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_16x16.png
100+ sips -z 32 32 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_16x16@2x.png
101+ sips -z 32 32 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_32x32.png
102+ sips -z 64 64 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_32x32@2x.png
103+ sips -z 128 128 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_128x128.png
104+ sips -z 256 256 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_128x128@2x.png
105+ sips -z 256 256 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_256x256.png
106+ sips -z 512 512 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_256x256@2x.png
107+ sips -z 512 512 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_512x512.png
108+ sips -z 1024 1024 internal/assets/icons/app-icon.png --out AppIcon.iconset/icon_512x512@2x.png
109+ iconutil -c icns AppIcon.iconset -o AppIcon.icns
110+ rm -rf AppIcon.iconset
111+
112+ # 3. Monta a estrutura oficial do macOS .app
113+ APP_BUNDLE="IP Monitor.app"
114+ mkdir -p "$APP_BUNDLE/Contents/MacOS"
115+ mkdir -p "$APP_BUNDLE/Contents/Resources"
116+
117+ cp "${{ matrix.binary_name }}" "$APP_BUNDLE/Contents/MacOS/${{ matrix.binary_name }}"
118+ cp build/darwin/Info.plist "$APP_BUNDLE/Contents/Info.plist"
119+ cp AppIcon.icns "$APP_BUNDLE/Contents/Resources/AppIcon.icns"
120+ rm -f AppIcon.icns
121+
122+ # 4. Compacta o .app em ZIP preservando permissões de execução
123+ ditto -c -k --keepParent "$APP_BUNDLE" "${{ matrix.asset_name }}"
124+
87125 - name : Upload Artifact temporário
88126 uses : actions/upload-artifact@v4
89127 with :
0 commit comments