Skip to content

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vs-mobiletools-engineering-service2@dalexsoto@rolfbjarne
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. by vs-mobiletools-engineering-service2 · Pull Request #18166 · dotnet/macios · GitHub
Skip to content

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vs-mobiletools-engineering-service2@dalexsoto@rolfbjarne
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. by vs-mobiletools-engineering-service2 · Pull Request #18166 · dotnet/macios · GitHub
Skip to content

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vs-mobiletools-engineering-service2@dalexsoto@rolfbjarne
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' [release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. by vs-mobiletools-engineering-service2 · Pull Request #18166 · dotnet/macios · GitHub
Skip to content

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vs-mobiletools-engineering-service2@dalexsoto@rolfbjarne
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. by vs-mobiletools-engineering-service2 · Pull Request #18166 · dotnet/macios · GitHub
Skip to content

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vs-mobiletools-engineering-service2@dalexsoto@rolfbjarne
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' [release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. by vs-mobiletools-engineering-service2 · Pull Request #18166 · dotnet/macios · GitHub
Skip to content

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

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

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668. - #18166

Merged
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx
Apr 28, 2023
Merged

[release/7.0.3xx] [tests] Find a workaround for #xamarin/maccore@2668.#18166
rolfbjarne merged 1 commit into
dotnet:release/7.0.3xxfrom
vs-mobiletools-engineering-service2:backport-pr-18159-to-release/7.0.3xx

Conversation

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
Collaborator
  1. Mono changed dyld lookup to start looking in directories in
    NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
    given path is absolute 1.
  2. This turned out to break Mac Catalyst, because when a DllImport says a
    P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
    Mono would try loading by prefixing the directories in
    NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
    NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
    "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    and things would go wrong.
  3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
    on Ventura, but apparently not on older macOS version, because the actual
    path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
    (note the three initial slashes instead of a single slash).
  4. Add a second workaround, where we add a dll import resolver to load exactly
    the path we want to load.

Technical sidenote:

Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:

  • The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
  • dlopen checks if this is a Mac Catalyst override of a macOS system
    framework, by prefixing "/System/iOSSupport" and trying to load that. So
    dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
    which would obviously fail.
  • Then dlopen would try a few more fallbacks, eventually trying
    "/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
    loading that library.
  • Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
    the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
    is the correct version). These two libraries are incompatible, and calling
    one when you mean to call the other will do nasty things like corrupting the
    stack.

Backport of #18159

1. Mono changed dyld lookup to start looking in directories in
NATIVE_DLL_SEARCH_DIRECTORIES before the actual given path, even when the
given path is absolute [1].
2. This turned out to break Mac Catalyst, because when a DllImport says a
P/Invoke is in "/System/Library/Frameworks/SceneKit.framework/SceneKit",
Mono would try loading by prefixing the directories in
NATIVE_DLL_SEARCH_DIRECTORIES. We add the Contents/MonoBundle directory to
NATIVE_DLL_SEARCH_DIRECTORIES, so Mono would try to load
"/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
and things would go wrong.
3. We found a workaround: add "/" to NATIVE_DLL_SEARCH_DIRECTORIES. This works
on Ventura, but apparently not on older macOS version, because the actual
path we pass to dlopen ends up being "///System/Library/Frameworks/SceneKit.framework/SceneKit"
(note the three initial slashes instead of a single slash).
4. Add a second workaround, where we add a dll import resolver to load exactly
the path we want to load.
[1]: dotnet/runtime@5a1baeb
[2]: dotnet/runtime#85255
Technical sidenote:
Why trying to load "/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit"
turned out so bad on Mac Catalyst is not obvious. What happens is this:
* The app calls 'dlopen ("/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit")'
* dlopen checks if this is a Mac Catalyst override of a macOS system
framework, by prefixing "/System/iOSSupport" and trying to load that. So
dlopen would try to load "/System/iOSSupport/path/to/my.app/Contents/MonoBundle//System/Library/Frameworks/SceneKit.framework/SceneKit",
which would obviously fail.
* Then dlopen would try a few more fallbacks, eventually trying
"/System/Library/Frameworks/SceneKit.framework/SceneKit", and successfully
loading that library.
* Unfortunately "/System/Library/Frameworks/SceneKit.framework/SceneKit" is
the wrong library to load for Mac Catalyst ("/System/iOSSupport/System/Library/Frameworks/SceneKit.framework/SceneKit"
is the correct version). These two libraries are incompatible, and calling
one when you mean to call the other will do nasty things like corrupting the
stack.
@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

✅ API diff for current PR / commit

NET (empty diffs)
  • iOS: (empty diff detected)
  • tvOS: (empty diff detected)
  • MacCatalyst: (empty diff detected)
  • macOS: (empty diff detected)

✅ API diff vs stable

.NET (No breaking changes)

✅ Generator diff

Generator diff is empty

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [CI Build] Windows Integration Tests passed 💻

All Windows Integration Tests passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

💻 [PR Build] Tests on macOS M1 - Mac Big Sur (11.5) passed 💻

All tests on macOS M1 - Mac Big Sur (11.5) passed.

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

❌ [PR Build] Tests on macOS M1 - Mac Ventura (13.0) failed ❌

Failed tests are:

  • monotouch-test

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

📚 [PR Build] Artifacts 📚

Packages generated

View packages

Pipeline on Agent XAMBOT-1184.Ventura
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@vs-mobiletools-engineering-service2

Copy link
Copy Markdown
CollaboratorAuthor

🚀 [CI Build] Test results 🚀

Test results

✅ All tests passed on VSTS: simulator tests.

🎉 All 79 tests passed 🎉

Tests counts

⚠️ bcl: No tests selected. Html Report (VSDrops)Download
✅ cecil: All 1 tests passed. Html Report (VSDrops)Download
✅ dotnettests: All 1 tests passed. Html Report (VSDrops)Download
✅ fsharp: All 4 tests passed. Html Report (VSDrops)Download
✅ framework: All 4 tests passed. Html Report (VSDrops)Download
✅ generator: All 1 tests passed. Html Report (VSDrops)Download
✅ interdependent_binding_projects: All 4 tests passed. Html Report (VSDrops)Download
⚠️ install_source: No tests selected. Html Report (VSDrops)Download
✅ introspection: All 4 tests passed. Html Report (VSDrops)Download
✅ linker: All 40 tests passed. Html Report (VSDrops)Download
⚠️ mac_binding_project: No tests selected. Html Report (VSDrops)Download
⚠️ mmp: No tests selected. Html Report (VSDrops)Download
⚠️ mononative: No tests selected. Html Report (VSDrops)Download
✅ monotouch: All 13 tests passed. Html Report (VSDrops)Download
✅ msbuild: All 2 tests passed. Html Report (VSDrops)Download
⚠️ mtouch: No tests selected. Html Report (VSDrops)Download
⚠️ xammac: No tests selected. Html Report (VSDrops)Download
✅ xcframework: All 4 tests passed. Html Report (VSDrops)Download
✅ xtro: All 1 tests passed. Html Report (VSDrops)Download

Pipeline on Agent
Hash: ab13db4741f27f23a6ce9793fb56c8c5e8a30aab [PR build]

@rolfbjarne
rolfbjarne merged commit 02158e0 into dotnet:release/7.0.3xxApr 28, 2023
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@vs-mobiletools-engineering-service2@dalexsoto@rolfbjarne