Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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" + '
[NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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('^' + ".*" + ' [NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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('^' + ".*" + ' [NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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" + ' [NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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('^' + ".*" + ' [NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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('^' + ".*" + ' [NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT
, '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); } })(); })(); [NativeAOT] Do not use private APIs on iOS/macOS by filipnavara · Pull Request #90430 · dotnet/runtime · GitHub
Skip to content

[NativeAOT] Do not use private APIs on iOS/macOS - #90430

Merged
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore
Aug 12, 2023
Merged

[NativeAOT] Do not use private APIs on iOS/macOS#90430
akoeplinger merged 5 commits into
dotnet:mainfrom
filipnavara:nativeaot-appstore

Conversation

@filipnavara

Copy link
Copy Markdown
Member

Fixes#90408.

Tested with upload of empty iOS app through TestFlight process.

platforms since it's a private API and it blocks uploads to TestFlight,
iOS App Store, and Mac App Store.
@ghostghost added area-NativeAOT-coreclr community-contribution Indicates that the PR has been added by a community member labels Aug 11, 2023
@ghost

Copy link
Copy Markdown

Tagging subscribers to this area: @agocke, @MichalStrehovsky, @jkotas
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

area-NativeAOT-coreclr

Milestone:-

@ghost

Copy link
Copy Markdown

Tagging subscribers to 'os-ios': @steveisok, @akoeplinger, @kotlarmilos
See info in area-owners.md if you want to be subscribed.

Issue Details

Fixes #90408.

Tested with upload of empty iOS app through TestFlight process.

Author:filipnavara
Assignees:-
Labels:

os-ios, community-contribution, area-NativeAOT-coreclr

Milestone:-

@ivanpovazan

Copy link
Copy Markdown
Member

/azp run runtime-ioslike,runtime-ioslikesimulator

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 2 pipeline(s).

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@akoeplinger

Copy link
Copy Markdown
Member

There is one testfailure in the iOS nativeaot smoke tests that might be related:

Test Harness Exitcode is : 1
To run the test:
> set CORE_ROOT=/tmp/helix/working/BB1E0A01/p
> /private/tmp/helix/working/BB1E0A01/w/C1E70A94/e/nativeaot/SmokeTests/StackTraceMetadata/StackTraceMetadata/StackTraceMetadata.sh
Expected: True
Actual: False
Stack Trace:
at nativeaot_SmokeTests_StackTraceMetadata._StackTraceMetadata_StackTraceMetadata_._StackTraceMetadata_StackTraceMetadata_sh()
at System.RuntimeMethodHandle.InvokeMethod(Object target, Void** arguments, Signature sig, Boolean isConstructor)
at System.Reflection.MethodBaseInvoker.InvokeWithNoArgs(Object obj, BindingFlags invokeAttr)
Output:
Return code: 1

@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

There is one testfailure in the iOS nativeaot smoke tests that might be related:

I saw that. Curiously it happened only on tvOS and not on iOS, and even more curiously it actually produced the stack trace for the Assert.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp
@filipnavara

filipnavara commented Aug 12, 2023

Copy link
Copy Markdown
MemberAuthor

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

@ivanpovazan

ivanpovazan commented Aug 12, 2023

Copy link
Copy Markdown
Member

I got the payload from Helix for the failed tvOS test (runfo get-helix-payload --jobid=d9ecb7b0-3d83-4ac1-81ea-6b1036feac89 -o=tvos-runfo). Unfortunately I don't have Apple TV at hand and it's built for the device, so I cannot run it. I have some doubt that the change broke the test since the unwind info lookup is globally cached and the stack trace for the assert itself is printed correctly thus the unwind info had to be located.

I just checked the same failure is visible in different CI run with console log. So that particular test failure is not related to this change.

@ivanpovazanivanpovazan left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you!

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Estimated regression with HelloiOS app:

HelloiOSmainthis PRdiff-to-main (%)this PR + deadstripdiff-to-main(%)
SOD (Mb)6,408,8638,44%8,1827,81%

I also included the measurement with -dead_strip enabled for reference.

/cc: @kotlarmilos@SamMonoRT

@filipnavara

Copy link
Copy Markdown
MemberAuthor

I also included the measurement with -dead_strip enabled for reference.

FWIW I found a way to mark the ILC output non-dead-strippable but I didn't get a chance to test it end-to-end.

Comment threadsrc/coreclr/nativeaot/Runtime/unix/UnwindHelpers.cpp Outdated
@jkotas

Copy link
Copy Markdown
Member

Unfortunately, with this change we should expect a size regression of ~2,5Mb for NativeAOT iOS apps.

Is that because we are linking a private copy of ICU now?

Does the HybridGlobalization work with native AOT?

Co-authored-by: Jan Kotas <jkotas@microsoft.com>
@filipnavara

Copy link
Copy Markdown
MemberAuthor

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

@SamMonoRT

Copy link
Copy Markdown
Member

Is that because we are linking a private copy of ICU now?

Yep, this just gets on the same plan as MonoVM.

Does the HybridGlobalization work with native AOT?

It should but I don't think it's tested.

Correct - We haven't fully tested the HybridGlobalization with NativeAOT. But basic testing on a simple app works fine. Both of these (HybridGlobalization and NativeAOT for iOS/MAUI iOS are opt-in for .NET8)

@akoeplinger
akoeplinger merged commit 7a0b4f9 into dotnet:mainAug 12, 2023
@filipnavara
filipnavara deleted the nativeaot-appstore branch August 12, 2023 18:54
@akoeplinger

Copy link
Copy Markdown
Member

Awesome work, thank you @filipnavara 💟

@filipnavara

Copy link
Copy Markdown
MemberAuthor

Thanks for handling this so quickly!

@ghostghost locked as resolved and limited conversation to collaborators Sep 11, 2023
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-NativeAOT-coreclrcommunity-contributionIndicates that the PR has been added by a community memberos-iosApple iOS

Projects

None yet

Development

Successfully merging this pull request may close these issues.

IOS TestFlight Non-public API usage error ITMS-90338 for __dyld_find_unwind_sections using NativeAOT

5 participants

@filipnavara@ivanpovazan@akoeplinger@jkotas@SamMonoRT