123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // SPDX-License-Identifier: Unlicense OR MIT
- //go:build darwin && ios
- // +build darwin,ios
- package app
- /*
- #cgo CFLAGS: -Werror -fmodules -fobjc-arc -x objective-c
- @import Foundation;
- static void nslog(char *str) {
- NSLog(@"%@", @(str));
- }
- */
- import "C"
- import (
- "bufio"
- "io"
- "log"
- "unsafe"
- _ "gioui.org/internal/cocoainit"
- )
- func init() {
- // macOS Console already includes timestamps.
- log.SetFlags(log.Flags() &^ log.LstdFlags)
- log.SetOutput(newNSLogWriter())
- }
- func newNSLogWriter() io.Writer {
- r, w := io.Pipe()
- go func() {
- // 1024 is an arbitrary truncation limit, taken from Android's
- // log buffer size.
- lineBuf := bufio.NewReaderSize(r, 1024)
- // The buffer to pass to C, including the terminating '\0'.
- buf := make([]byte, lineBuf.Size()+1)
- cbuf := (*C.char)(unsafe.Pointer(&buf[0]))
- for {
- line, _, err := lineBuf.ReadLine()
- if err != nil {
- break
- }
- copy(buf, line)
- buf[len(line)] = 0
- C.nslog(cbuf)
- }
- }()
- return w
- }
|