-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
1 changed file
with
75 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,3 +1,77 @@ | ||
## 2023-07-31 | ||
|
||
Fixed a few open issues | ||
Since a big milestone has been delivered yesterday (save/load game), today I started by fixing a few open issues in order to limit the "backlog". | ||
|
||
[Following this documentation (cross-compiling)](https://developer.fyne.io/started/cross-compiling), I was able understand why I couldn't build ARM64, windows or darwin targets. For each GOOS/GOARCH, you need to use a specific compiler and other prerequisites (like macOS SDK). If I want to use goreleaser (like I was starting to do), I'll need to download a lot of things... | ||
|
||
Hopefully, there is a way to create packaged files automagically by installing fyne-cross. I was also able to generate both a AMD64 and ARM64 binary for linux, which is cool since ARM64 was not working on my machine, and a windows .exe binary as well. | ||
|
||
```console | ||
go install github.com/fyne-io/fyne-cross@latest | ||
~/go/bin/fyne-cross windows -app-id fr.zwindler.gocastle | ||
~/go/bin/fyne-cross linux -arch=amd64,arm64 -app-id fr.zwindler.gocastle | ||
``` | ||
|
||
For darwin, I get an error saying that you need a macOSX SDK path. That's a bit weird since fyne-cross should have everything it needs... | ||
|
||
> The tool recommended by the Fyne developers is fyne-cross. It has been inspired by xgo and uses a docker image built on top of the golang-cross image, that includes the MinGW compiler for windows, and a macOS SDK, along with the Fyne requirements. | ||
Taking a look at [fyne-cross](https://github.com/fyne-io/fyne-cross) github repository gave me the reason: | ||
|
||
> cross-compile from NOT darwin (i.e. linux) to darwin: requires a copy of the macOS SDK on the host. The fyne-cross darwin-sdk-extractor command can be used to extract the SDK from the XCode CLI Tool file | ||
But what surprised me even more is that fyne can also build Android APKs! | ||
|
||
```console | ||
~/go/bin/fyne-cross android -arch=arm64 -app-id fr.zwindler.gocastle | ||
``` | ||
|
||
I hit a little issue as all my programs built this way where crashing when opening the game screen. This is maybe related to the fact that ALL images are missing from binary. I have to find how to include all static files INSIDE the game binary. | ||
|
||
See | ||
* https://stackoverflow.com/questions/17796043/how-to-embed-files-into-go-binaries | ||
* https://pkg.go.dev/embed@master | ||
|
||
So I create a new package called "utils/", in wich I move the whole static folder. I then created a new utils/embed.go file: | ||
|
||
```go | ||
package utils | ||
|
||
import ( | ||
"embed" | ||
"image" | ||
"image/png" | ||
"log" | ||
) | ||
|
||
//go:embed static/* | ||
var EmbeddedImages embed.FS | ||
|
||
func GetImageFromEmbed(path string) image.Image { | ||
// Read the embedded image file | ||
file, err := EmbeddedImages.Open(path) | ||
if err != nil { | ||
log.Fatal("Error opening embedded image:", err) | ||
} | ||
defer file.Close() | ||
|
||
// Decode the image using the png package | ||
img, err := png.Decode(file) | ||
if err != nil { | ||
log.Fatal("Error decoding embedded image:", err) | ||
} | ||
|
||
return img | ||
} | ||
``` | ||
|
||
I then had to replace all the calls opening images like this: | ||
|
||
```diff | ||
- backgroundImage := canvas.NewImageFromFile("static/castle_back.png") | ||
+ backgroundImage := canvas.NewImageFromImage(utils.GetImageFromEmbed("static/castle_back.png")) | ||
``` | ||
|
||
The modification app wide was relatively easy, it fits in this little commit 4cf7cd89a6e5f1cbb8e83eb2e1910f16e61c3ec7 | ||
|
||
Now, linux and android app (YES) are working. You can't do anything with the android app though because screen isn't designed to fit the smartphone format and you'd need a keyboard. But this feels incredible... |