[runtime] Fix bug 52308 Console.WriteLine text is not showing in Device Log. (#1821)
https://bugzilla.xamarin.com/show_bug.cgi?id=52308 Apple moved to os_log[1] in iOS 10 / macOS 10.12 / tvOS 10 / watchOS 3.0 whenever you call NSLog we used to rely on NSLog parsing "%S" but it seems broken. We now just create a NSString from the unicode str and give that to NSLog when not in watch (NSLog in watch is broken yay). [1]: https://developer.apple.com/reference/os/logging?language=objc
This commit is contained in:
Родитель
984d4e2ab6
Коммит
b52d067558
|
@ -21,22 +21,23 @@ void
|
|||
xamarin_log (const unsigned short *unicodeMessage)
|
||||
{
|
||||
// COOP: no managed memory access: any mode.
|
||||
#if TARGET_OS_WATCH && defined (__arm__) // maybe make this configurable somehow?
|
||||
int length = 0;
|
||||
const unsigned short *ptr = unicodeMessage;
|
||||
while (*ptr++)
|
||||
length += sizeof (unsigned short);
|
||||
NSString *msg = [[NSString alloc] initWithBytes: unicodeMessage length: length encoding: NSUTF16LittleEndianStringEncoding];
|
||||
|
||||
#if TARGET_OS_WATCH && defined (__arm__) // maybe make this configurable somehow?
|
||||
const char *utf8 = [msg UTF8String];
|
||||
int len = strlen (utf8);
|
||||
fwrite (utf8, 1, len, stdout);
|
||||
if (len == 0 || utf8 [len - 1] != '\n')
|
||||
fwrite ("\n", 1, 1, stdout);
|
||||
fflush (stdout);
|
||||
[msg release];
|
||||
#else
|
||||
NSLog (@"%S", unicodeMessage);
|
||||
NSLog (@"%@", msg);
|
||||
#endif
|
||||
[msg release];
|
||||
}
|
||||
|
||||
void*
|
||||
|
|
Загрузка…
Ссылка в новой задаче