feat: Implement MPSceneDelegate #463
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Background
The Problem with Protocol Extensions
// This WON'T work as expected
extension UIWindowSceneDelegate {
func scene(_ scene: UIScene, openURLContexts URLContexts: Set) {
for context in URLContexts {
MParticle.sharedInstance().handleURLContext(context)
}
}
}
Why it fails:
UIKit uses Objective-C runtime to check if the delegate responds to selectors
Protocol extension methods aren't added to the class's method table - they exist only at the Swift protocol level
When UIKit calls scene(_:openURLContexts:), it does [delegate respondsToSelector:@selector(scene:openURLContexts:)] which returns NO for protocol extension methods
What Has Changed
Checklist
Reference Issue (For employees only. Ignore if you are an outside contributor)