ICU causes crash on iOS 17.4 simulator #98941

Description

@rolfbjarne

Description

App crashes when iOS starts using its own ICU code.

I'm guessing it's because of a symbol clash with Mono's ICU symbols.

Reproduction Steps

  1. Install Xcode 15.3 beta 3.
  2. Create a new iOS project: dotnet new ios
  3. Add this to FinishedLaunching in AppDelegate.cs:
vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
  1. Run in an iOS 17.4 simulator

Note: an iOS 17.2 simulator works just fine.

Expected behavior

No crash.

Actual behavior

Crash:

Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
2 libsystem_c.dylib 0x1801655c0 abort + 104
3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
7 libsystem_c.dylib 0x1801655c0 abort + 104
8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
26 libicucore.A.dylib 0x181dc5590 udat_open + 392
27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)

Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

Regression?

Yes. Fortunately it seems to only affect the simulator, and not device.

Known Workarounds

Disable globalization and make the app link mono statically works:

<PropertyGroup>
<_LibXamarinLinkMode>static</_LibXamarinLinkMode>
<_LibMonoLinkMode>static</_LibMonoLinkMode>
<InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>
<TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
<ItemGroup>
<_MonoRuntimeComponentLinkingRemove="dynamic" />
<_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
</ItemGroup>
</Target>

Configuration

$ dotnet --info
.NET SDK:
Version: 8.0.100
Commit: 57efcf1350
Workload version: 8.0.100-manifests.5638171e
Runtime Environment:
OS Name: Mac OS X
OS Version: 14.4
OS Platform: Darwin
RID: osx-arm64
Base Path: /usr/local/share/dotnet/sdk/8.0.100/
.NET workloads installed:
Workload version: 8.0.100-manifests.5638171e
[ios]
Installation Source: SDK 8.0.100
Manifest Version: 17.2.8022/8.0.100
Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
Install Type: FileBased
Host:
Version: 8.0.0
Architecture: arm64
Commit: 5535e31a71
.NET SDKs installed:
8.0.100 [/usr/local/share/dotnet/sdk]
.NET runtimes installed:
Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
Other architectures found:
x64 [/usr/local/share/dotnet/x64]
registered at [/etc/dotnet/install_location_x64]
Environment variables:
Not set
global.json file:
Not found

Other information

No response

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

    , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
     blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
    }
    } catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
    })();
    (function(){
    try {
    var __m = "github.com";
    var __re = new RegExp('^' + "github\\.com" + '
    
    Skip to content

    ICU causes crash on iOS 17.4 simulator #98941

    Description

    @rolfbjarne

    Description

    App crashes when iOS starts using its own ICU code.

    I'm guessing it's because of a symbol clash with Mono's ICU symbols.

    Reproduction Steps

    1. Install Xcode 15.3 beta 3.
    2. Create a new iOS project: dotnet new ios
    3. Add this to FinishedLaunching in AppDelegate.cs:
    vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
    1. Run in an iOS 17.4 simulator

    Note: an iOS 17.2 simulator works just fine.

    Expected behavior

    No crash.

    Actual behavior

    Crash:

    Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
    0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
    1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
    2 libsystem_c.dylib 0x1801655c0 abort + 104
    3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
    4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
    5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
    6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
    7 libsystem_c.dylib 0x1801655c0 abort + 104
    8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
    9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
    10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
    11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
    12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
    13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
    14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
    15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
    16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
    17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
    18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
    19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
    20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
    21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
    22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
    23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
    24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
    25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
    26 libicucore.A.dylib 0x181dc5590 udat_open + 392
    27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
    28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
    29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
    30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
    31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
    32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
    33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
    34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
    

    Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

    Regression?

    Yes. Fortunately it seems to only affect the simulator, and not device.

    Known Workarounds

    Disable globalization and make the app link mono statically works:

    <PropertyGroup>
    <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
    <_LibMonoLinkMode>static</_LibMonoLinkMode>
    <InvariantGlobalization>true</InvariantGlobalization>
    </PropertyGroup>
    <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
    <ItemGroup>
    <_MonoRuntimeComponentLinkingRemove="dynamic" />
    <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
    </ItemGroup>
    </Target>

    Configuration

    $ dotnet --info
    .NET SDK:
    Version: 8.0.100
    Commit: 57efcf1350
    Workload version: 8.0.100-manifests.5638171e
    Runtime Environment:
    OS Name: Mac OS X
    OS Version: 14.4
    OS Platform: Darwin
    RID: osx-arm64
    Base Path: /usr/local/share/dotnet/sdk/8.0.100/
    .NET workloads installed:
    Workload version: 8.0.100-manifests.5638171e
    [ios]
    Installation Source: SDK 8.0.100
    Manifest Version: 17.2.8022/8.0.100
    Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
    Install Type: FileBased
    Host:
    Version: 8.0.0
    Architecture: arm64
    Commit: 5535e31a71
    .NET SDKs installed:
    8.0.100 [/usr/local/share/dotnet/sdk]
    .NET runtimes installed:
    Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
    Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
    Other architectures found:
    x64 [/usr/local/share/dotnet/x64]
    registered at [/etc/dotnet/install_location_x64]
    Environment variables:
    Not set
    global.json file:
    Not found

    Other information

    No response

    Metadata

    Metadata

    Assignees

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions

      , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
      Skip to content

      ICU causes crash on iOS 17.4 simulator #98941

      Description

      @rolfbjarne

      Description

      App crashes when iOS starts using its own ICU code.

      I'm guessing it's because of a symbol clash with Mono's ICU symbols.

      Reproduction Steps

      1. Install Xcode 15.3 beta 3.
      2. Create a new iOS project: dotnet new ios
      3. Add this to FinishedLaunching in AppDelegate.cs:
      vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
      1. Run in an iOS 17.4 simulator

      Note: an iOS 17.2 simulator works just fine.

      Expected behavior

      No crash.

      Actual behavior

      Crash:

      Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
      0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
      1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
      2 libsystem_c.dylib 0x1801655c0 abort + 104
      3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
      4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
      5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
      6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
      7 libsystem_c.dylib 0x1801655c0 abort + 104
      8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
      9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
      10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
      11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
      12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
      13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
      14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
      15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
      16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
      17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
      18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
      19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
      20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
      21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
      22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
      23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
      24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
      25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
      26 libicucore.A.dylib 0x181dc5590 udat_open + 392
      27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
      28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
      29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
      30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
      31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
      32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
      33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
      34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
      

      Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

      Regression?

      Yes. Fortunately it seems to only affect the simulator, and not device.

      Known Workarounds

      Disable globalization and make the app link mono statically works:

      <PropertyGroup>
      <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
      <_LibMonoLinkMode>static</_LibMonoLinkMode>
      <InvariantGlobalization>true</InvariantGlobalization>
      </PropertyGroup>
      <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
      <ItemGroup>
      <_MonoRuntimeComponentLinkingRemove="dynamic" />
      <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
      </ItemGroup>
      </Target>

      Configuration

      $ dotnet --info
      .NET SDK:
      Version: 8.0.100
      Commit: 57efcf1350
      Workload version: 8.0.100-manifests.5638171e
      Runtime Environment:
      OS Name: Mac OS X
      OS Version: 14.4
      OS Platform: Darwin
      RID: osx-arm64
      Base Path: /usr/local/share/dotnet/sdk/8.0.100/
      .NET workloads installed:
      Workload version: 8.0.100-manifests.5638171e
      [ios]
      Installation Source: SDK 8.0.100
      Manifest Version: 17.2.8022/8.0.100
      Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
      Install Type: FileBased
      Host:
      Version: 8.0.0
      Architecture: arm64
      Commit: 5535e31a71
      .NET SDKs installed:
      8.0.100 [/usr/local/share/dotnet/sdk]
      .NET runtimes installed:
      Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
      Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
      Other architectures found:
      x64 [/usr/local/share/dotnet/x64]
      registered at [/etc/dotnet/install_location_x64]
      Environment variables:
      Not set
      global.json file:
      Not found

      Other information

      No response

      Metadata

      Metadata

      Assignees

      Type

      No type

      Projects

      No projects

        Milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions

        , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
        Skip to content

        ICU causes crash on iOS 17.4 simulator #98941

        Description

        @rolfbjarne

        Description

        App crashes when iOS starts using its own ICU code.

        I'm guessing it's because of a symbol clash with Mono's ICU symbols.

        Reproduction Steps

        1. Install Xcode 15.3 beta 3.
        2. Create a new iOS project: dotnet new ios
        3. Add this to FinishedLaunching in AppDelegate.cs:
        vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
        1. Run in an iOS 17.4 simulator

        Note: an iOS 17.2 simulator works just fine.

        Expected behavior

        No crash.

        Actual behavior

        Crash:

        Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
        0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
        1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
        2 libsystem_c.dylib 0x1801655c0 abort + 104
        3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
        4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
        5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
        6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
        7 libsystem_c.dylib 0x1801655c0 abort + 104
        8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
        9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
        10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
        11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
        12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
        13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
        14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
        15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
        16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
        17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
        18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
        19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
        20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
        21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
        22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
        23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
        24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
        25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
        26 libicucore.A.dylib 0x181dc5590 udat_open + 392
        27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
        28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
        29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
        30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
        31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
        32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
        33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
        34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
        

        Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

        Regression?

        Yes. Fortunately it seems to only affect the simulator, and not device.

        Known Workarounds

        Disable globalization and make the app link mono statically works:

        <PropertyGroup>
        <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
        <_LibMonoLinkMode>static</_LibMonoLinkMode>
        <InvariantGlobalization>true</InvariantGlobalization>
        </PropertyGroup>
        <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
        <ItemGroup>
        <_MonoRuntimeComponentLinkingRemove="dynamic" />
        <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
        </ItemGroup>
        </Target>

        Configuration

        $ dotnet --info
        .NET SDK:
        Version: 8.0.100
        Commit: 57efcf1350
        Workload version: 8.0.100-manifests.5638171e
        Runtime Environment:
        OS Name: Mac OS X
        OS Version: 14.4
        OS Platform: Darwin
        RID: osx-arm64
        Base Path: /usr/local/share/dotnet/sdk/8.0.100/
        .NET workloads installed:
        Workload version: 8.0.100-manifests.5638171e
        [ios]
        Installation Source: SDK 8.0.100
        Manifest Version: 17.2.8022/8.0.100
        Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
        Install Type: FileBased
        Host:
        Version: 8.0.0
        Architecture: arm64
        Commit: 5535e31a71
        .NET SDKs installed:
        8.0.100 [/usr/local/share/dotnet/sdk]
        .NET runtimes installed:
        Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
        Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
        Other architectures found:
        x64 [/usr/local/share/dotnet/x64]
        registered at [/etc/dotnet/install_location_x64]
        Environment variables:
        Not set
        global.json file:
        Not found

        Other information

        No response

        Metadata

        Metadata

        Assignees

        Type

        No type

        Projects

        No projects

          Milestone

          Relationships

          None yet

          Development

          No branches or pull requests

          Issue actions

          , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
          Skip to content

          ICU causes crash on iOS 17.4 simulator #98941

          Description

          @rolfbjarne

          Description

          App crashes when iOS starts using its own ICU code.

          I'm guessing it's because of a symbol clash with Mono's ICU symbols.

          Reproduction Steps

          1. Install Xcode 15.3 beta 3.
          2. Create a new iOS project: dotnet new ios
          3. Add this to FinishedLaunching in AppDelegate.cs:
          vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
          1. Run in an iOS 17.4 simulator

          Note: an iOS 17.2 simulator works just fine.

          Expected behavior

          No crash.

          Actual behavior

          Crash:

          Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
          0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
          1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
          2 libsystem_c.dylib 0x1801655c0 abort + 104
          3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
          4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
          5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
          6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
          7 libsystem_c.dylib 0x1801655c0 abort + 104
          8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
          9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
          10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
          11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
          12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
          13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
          14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
          15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
          16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
          17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
          18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
          19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
          20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
          21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
          22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
          23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
          24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
          25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
          26 libicucore.A.dylib 0x181dc5590 udat_open + 392
          27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
          28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
          29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
          30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
          31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
          32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
          33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
          34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
          

          Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

          Regression?

          Yes. Fortunately it seems to only affect the simulator, and not device.

          Known Workarounds

          Disable globalization and make the app link mono statically works:

          <PropertyGroup>
          <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
          <_LibMonoLinkMode>static</_LibMonoLinkMode>
          <InvariantGlobalization>true</InvariantGlobalization>
          </PropertyGroup>
          <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
          <ItemGroup>
          <_MonoRuntimeComponentLinkingRemove="dynamic" />
          <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
          </ItemGroup>
          </Target>

          Configuration

          $ dotnet --info
          .NET SDK:
          Version: 8.0.100
          Commit: 57efcf1350
          Workload version: 8.0.100-manifests.5638171e
          Runtime Environment:
          OS Name: Mac OS X
          OS Version: 14.4
          OS Platform: Darwin
          RID: osx-arm64
          Base Path: /usr/local/share/dotnet/sdk/8.0.100/
          .NET workloads installed:
          Workload version: 8.0.100-manifests.5638171e
          [ios]
          Installation Source: SDK 8.0.100
          Manifest Version: 17.2.8022/8.0.100
          Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
          Install Type: FileBased
          Host:
          Version: 8.0.0
          Architecture: arm64
          Commit: 5535e31a71
          .NET SDKs installed:
          8.0.100 [/usr/local/share/dotnet/sdk]
          .NET runtimes installed:
          Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
          Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
          Other architectures found:
          x64 [/usr/local/share/dotnet/x64]
          registered at [/etc/dotnet/install_location_x64]
          Environment variables:
          Not set
          global.json file:
          Not found

          Other information

          No response

          Metadata

          Metadata

          Assignees

          Type

          No type

          Projects

          No projects

            Milestone

            Relationships

            None yet

            Development

            No branches or pull requests

            Issue actions

            , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
            Skip to content

            ICU causes crash on iOS 17.4 simulator #98941

            Description

            @rolfbjarne

            Description

            App crashes when iOS starts using its own ICU code.

            I'm guessing it's because of a symbol clash with Mono's ICU symbols.

            Reproduction Steps

            1. Install Xcode 15.3 beta 3.
            2. Create a new iOS project: dotnet new ios
            3. Add this to FinishedLaunching in AppDelegate.cs:
            vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
            1. Run in an iOS 17.4 simulator

            Note: an iOS 17.2 simulator works just fine.

            Expected behavior

            No crash.

            Actual behavior

            Crash:

            Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
            0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
            1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
            2 libsystem_c.dylib 0x1801655c0 abort + 104
            3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
            4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
            5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
            6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
            7 libsystem_c.dylib 0x1801655c0 abort + 104
            8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
            9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
            10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
            11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
            12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
            13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
            14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
            15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
            16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
            17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
            18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
            19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
            20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
            21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
            22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
            23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
            24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
            25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
            26 libicucore.A.dylib 0x181dc5590 udat_open + 392
            27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
            28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
            29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
            30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
            31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
            32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
            33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
            34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
            

            Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

            Regression?

            Yes. Fortunately it seems to only affect the simulator, and not device.

            Known Workarounds

            Disable globalization and make the app link mono statically works:

            <PropertyGroup>
            <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
            <_LibMonoLinkMode>static</_LibMonoLinkMode>
            <InvariantGlobalization>true</InvariantGlobalization>
            </PropertyGroup>
            <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
            <ItemGroup>
            <_MonoRuntimeComponentLinkingRemove="dynamic" />
            <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
            </ItemGroup>
            </Target>

            Configuration

            $ dotnet --info
            .NET SDK:
            Version: 8.0.100
            Commit: 57efcf1350
            Workload version: 8.0.100-manifests.5638171e
            Runtime Environment:
            OS Name: Mac OS X
            OS Version: 14.4
            OS Platform: Darwin
            RID: osx-arm64
            Base Path: /usr/local/share/dotnet/sdk/8.0.100/
            .NET workloads installed:
            Workload version: 8.0.100-manifests.5638171e
            [ios]
            Installation Source: SDK 8.0.100
            Manifest Version: 17.2.8022/8.0.100
            Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
            Install Type: FileBased
            Host:
            Version: 8.0.0
            Architecture: arm64
            Commit: 5535e31a71
            .NET SDKs installed:
            8.0.100 [/usr/local/share/dotnet/sdk]
            .NET runtimes installed:
            Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
            Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
            Other architectures found:
            x64 [/usr/local/share/dotnet/x64]
            registered at [/etc/dotnet/install_location_x64]
            Environment variables:
            Not set
            global.json file:
            Not found

            Other information

            No response

            Metadata

            Metadata

            Assignees

            Type

            No type

            Projects

            No projects

              Milestone

              Relationships

              None yet

              Development

              No branches or pull requests

              Issue actions

              , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
              Skip to content

              ICU causes crash on iOS 17.4 simulator #98941

              Description

              @rolfbjarne

              Description

              App crashes when iOS starts using its own ICU code.

              I'm guessing it's because of a symbol clash with Mono's ICU symbols.

              Reproduction Steps

              1. Install Xcode 15.3 beta 3.
              2. Create a new iOS project: dotnet new ios
              3. Add this to FinishedLaunching in AppDelegate.cs:
              vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
              1. Run in an iOS 17.4 simulator

              Note: an iOS 17.2 simulator works just fine.

              Expected behavior

              No crash.

              Actual behavior

              Crash:

              Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
              0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
              1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
              2 libsystem_c.dylib 0x1801655c0 abort + 104
              3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
              4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
              5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
              6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
              7 libsystem_c.dylib 0x1801655c0 abort + 104
              8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
              9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
              10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
              11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
              12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
              13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
              14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
              15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
              16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
              17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
              18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
              19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
              20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
              21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
              22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
              23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
              24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
              25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
              26 libicucore.A.dylib 0x181dc5590 udat_open + 392
              27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
              28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
              29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
              30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
              31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
              32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
              33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
              34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
              

              Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

              Regression?

              Yes. Fortunately it seems to only affect the simulator, and not device.

              Known Workarounds

              Disable globalization and make the app link mono statically works:

              <PropertyGroup>
              <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
              <_LibMonoLinkMode>static</_LibMonoLinkMode>
              <InvariantGlobalization>true</InvariantGlobalization>
              </PropertyGroup>
              <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
              <ItemGroup>
              <_MonoRuntimeComponentLinkingRemove="dynamic" />
              <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
              </ItemGroup>
              </Target>

              Configuration

              $ dotnet --info
              .NET SDK:
              Version: 8.0.100
              Commit: 57efcf1350
              Workload version: 8.0.100-manifests.5638171e
              Runtime Environment:
              OS Name: Mac OS X
              OS Version: 14.4
              OS Platform: Darwin
              RID: osx-arm64
              Base Path: /usr/local/share/dotnet/sdk/8.0.100/
              .NET workloads installed:
              Workload version: 8.0.100-manifests.5638171e
              [ios]
              Installation Source: SDK 8.0.100
              Manifest Version: 17.2.8022/8.0.100
              Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
              Install Type: FileBased
              Host:
              Version: 8.0.0
              Architecture: arm64
              Commit: 5535e31a71
              .NET SDKs installed:
              8.0.100 [/usr/local/share/dotnet/sdk]
              .NET runtimes installed:
              Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
              Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
              Other architectures found:
              x64 [/usr/local/share/dotnet/x64]
              registered at [/etc/dotnet/install_location_x64]
              Environment variables:
              Not set
              global.json file:
              Not found

              Other information

              No response

              Metadata

              Metadata

              Assignees

              Type

              No type

              Projects

              No projects

                Milestone

                Relationships

                None yet

                Development

                No branches or pull requests

                Issue actions

                , 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
                Skip to content

                ICU causes crash on iOS 17.4 simulator #98941

                Description

                @rolfbjarne

                Description

                App crashes when iOS starts using its own ICU code.

                I'm guessing it's because of a symbol clash with Mono's ICU symbols.

                Reproduction Steps

                1. Install Xcode 15.3 beta 3.
                2. Create a new iOS project: dotnet new ios
                3. Add this to FinishedLaunching in AppDelegate.cs:
                vardate=NSDate.Now;varlocale=NSLocale.SystemLocale;varstr=date.DescriptionWithLocale(locale);
                1. Run in an iOS 17.4 simulator

                Note: an iOS 17.2 simulator works just fine.

                Expected behavior

                No crash.

                Actual behavior

                Crash:

                Thread 0 Crashed:: tid_103 Dispatch queue: com.apple.main-thread
                0 libsystem_kernel.dylib 0x1129293b0 __pthread_kill + 8
                1 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
                2 libsystem_c.dylib 0x1801655c0 abort + 104
                3 libmonosgen-2.0.dylib 0x113316bcc sigabrt_signal_handler.cold.1 + 48
                4 libmonosgen-2.0.dylib 0x113043a60 sigabrt_signal_handler + 196
                5 libsystem_platform.dylib 0x1123237e0 _sigtramp + 52
                6 libsystem_pthread.dylib 0x112557130 pthread_kill + 256
                7 libsystem_c.dylib 0x1801655c0 abort + 104
                8 libsystem_malloc.dylib 0x1801e378c malloc_vreport + 900
                9 libsystem_malloc.dylib 0x1801e3950 malloc_report + 60
                10 libsystem_malloc.dylib 0x1801d78a0 find_zone_and_free + 456
                11 libicucore.A.dylib 0x181dbf2a0 icu::Locale::setToBogus() + 48
                12 libicucore.A.dylib 0x181dc0c44 icu::Locale::operator=(icu::Locale const&) + 36
                13 libicucore.A.dylib 0x181f2e5f4 icu::number::LocalizedNumberFormatter::LocalizedNumberFormatter(icu::number::impl::MacroProps&&, icu::Locale const&) + 212
                14 libicucore.A.dylib 0x181eda738 icu::DecimalFormat::touch(UErrorCode&) + 204
                15 libicucore.A.dylib 0x181edade8 icu::DecimalFormat::DecimalFormat(icu::UnicodeString const&, icu::DecimalFormatSymbols*, UNumberFormatStyle, UErrorCode&) + 328
                16 libicucore.A.dylib 0x181f491b0 icu::NumberFormat::makeInstance(icu::Locale const&, UNumberFormatStyle, signed char, UErrorCode&) + 1600
                17 libicucore.A.dylib 0x181f489e8 icu::LocaleCacheKey<icu::SharedNumberFormat>::createObject(void const*, UErrorCode&) const + 84
                18 libicucore.A.dylib 0x181e6dae0 icu::UnifiedCache::_get(icu::CacheKeyBase const&, icu::SharedObject const*&, void const*, UErrorCode&) const + 140
                19 libicucore.A.dylib 0x181f495d0 0x181dbd000 + 1623504
                20 libicucore.A.dylib 0x181f48b10 0x181dbd000 + 1620752
                21 libicucore.A.dylib 0x181f4864c icu::NumberFormat::createInstance(icu::Locale const&, UNumberFormatStyle, UErrorCode&) + 92
                22 libicucore.A.dylib 0x181dcacf4 icu::SimpleDateFormat::initialize(icu::Locale const&, UErrorCode&) + 544
                23 libicucore.A.dylib 0x181dc6030 icu::SimpleDateFormat::construct(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 1952
                24 libicucore.A.dylib 0x181dc5838 icu::SimpleDateFormat::SimpleDateFormat(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&, UErrorCode&) + 160
                25 libicucore.A.dylib 0x181dc5720 icu::DateFormat::create(icu::DateFormat::EStyle, icu::DateFormat::EStyle, icu::Locale const&) + 144
                26 libicucore.A.dylib 0x181dc5590 udat_open + 392
                27 CoreFoundation 0x18049f540 __cficu_udat_open + 68
                28 CoreFoundation 0x1803c3d68 __ResetUDateFormat + 484
                29 CoreFoundation 0x1803c367c __CreateCFDateFormatter + 320
                30 CoreFoundation 0x18049b4c0 -[NSDate descriptionWithLocale:] + 96
                31 libxamarin-dotnet-debug.dylib 0x1129fcb8c xamarin_dyn_objc_msgSend + 160
                32 newios 0x109125ab8 wrapper_managed_to_native_ObjCRuntime_Messaging_NativeHandle_objc_msgSend_NativeHandle_intptr_intptr_ObjCRuntime_NativeHandle + 168
                33 newios 0x10843723c Foundation_NSDate_DescriptionWithLocale_Foundation_NSLocale + 140 (NSDate.g.cs:173)
                34 newios 0x104f5a504 newios_AppDelegate_FinishedLaunching_UIKit_UIApplication_Foundation_NSDictionary + 500 (AppDelegate.cs:17)
                

                Full crash report: https://gist.github.com/rolfbjarne/9fcedeb59d0521c4c9bb931056bba15c

                Regression?

                Yes. Fortunately it seems to only affect the simulator, and not device.

                Known Workarounds

                Disable globalization and make the app link mono statically works:

                <PropertyGroup>
                <_LibXamarinLinkMode>static</_LibXamarinLinkMode>
                <_LibMonoLinkMode>static</_LibMonoLinkMode>
                <InvariantGlobalization>true</InvariantGlobalization>
                </PropertyGroup>
                <TargetName="_FixMonoLinkMode"AfterTargets="_MonoReadAvailableComponentsManifest">
                <ItemGroup>
                <_MonoRuntimeComponentLinkingRemove="dynamic" />
                <_MonoRuntimeComponentLinkingInclude="static"RuntimeIdentifier="iossimulator-arm64" />
                </ItemGroup>
                </Target>

                Configuration

                $ dotnet --info
                .NET SDK:
                Version: 8.0.100
                Commit: 57efcf1350
                Workload version: 8.0.100-manifests.5638171e
                Runtime Environment:
                OS Name: Mac OS X
                OS Version: 14.4
                OS Platform: Darwin
                RID: osx-arm64
                Base Path: /usr/local/share/dotnet/sdk/8.0.100/
                .NET workloads installed:
                Workload version: 8.0.100-manifests.5638171e
                [ios]
                Installation Source: SDK 8.0.100
                Manifest Version: 17.2.8022/8.0.100
                Manifest Path: /usr/local/share/dotnet/sdk-manifests/8.0.100/microsoft.net.sdk.ios/17.2.8022/WorkloadManifest.json
                Install Type: FileBased
                Host:
                Version: 8.0.0
                Architecture: arm64
                Commit: 5535e31a71
                .NET SDKs installed:
                8.0.100 [/usr/local/share/dotnet/sdk]
                .NET runtimes installed:
                Microsoft.AspNetCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
                Microsoft.NETCore.App 8.0.0 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
                Other architectures found:
                x64 [/usr/local/share/dotnet/x64]
                registered at [/etc/dotnet/install_location_x64]
                Environment variables:
                Not set
                global.json file:
                Not found

                Other information

                No response

                Metadata

                Metadata

                Assignees

                Type

                No type

                Projects

                No projects

                  Milestone

                  Relationships

                  None yet

                  Development

                  No branches or pull requests

                  Issue actions