@eskimo We've already updated ours to use the Swift equivalent API and it fixes it. If I open a DTS TSI for this does it count against us? Can you just forward my demo to your contact at Apple?
Post
Replies
Boosts
Views
Activity
@qiuyg Have you seen updates from this thread? I put together a demo project. What I see is Objc throws the exception, but a swift implementation doesn't have any errors.
@eskimo Were you able to see the demo I built?
@eskimo http://gngrwzrd.com/NSItemProvider.zip
@eskimo http://gngrwzrd.com/NSItemProvider.zip
@eskimo I put together a demo. I actually stumbled across the solution as I was putting this together. The issue is Objective-C VS Swift. My project is using Objectice-C to ask for a plist from NSItemProvider. When I use swift however, there's no problem. My demo has both so you can see it. Look at ViewController for instructions, and ShareViewController for objective-c VS swift. Also make sure to set an exception breakpoint for all objc exceptions.
How can I send you this demo, I can't upload zip files here.
@eskimo Yes in iOS 17.4 simulator it still happens.
@eskimo Yes it worked in previous systems. It seemed to be the release iOS 17.3.1. As I mentioned in my first post. When the share button is pressed, Apple / Safari runs a preprocessor.js file, which has a callback that gets encoded as a plist, and passed to the share extension. Ours sends only two keys:
arguments.completionFunction({
"URL": document.URL
"title": document.title,
});
So the plist (dictionary) only contains NSString type. Which is currently not allowed to be decoded based on the exception thrown.
@eskimo Correct. Any website. Not just the screenshot provided.
@eskimo There's also a second exception but this doesn't appear to be the source.
@eskimo Thanks. Yes here is the stack trace. I had to take an image because the forum is not letting me include it - it's saying something is inappropriate :).
Also to add a bit more info - this only happens from the Safari share button that's built into the window chrome. And I attached an another screen - the red circle is where this exception is thrown from.
@eskimo Do you have any internal Apple connections to help investigate this?
This is interesting as well. I had a fix that was working, but now all of the sudden it's not.
[itemProvider loadDataRepresentationForTypeIdentifier:[UTTypePropertyList identifier] completionHandler:^(NSData * _Nullable data, NSError * _Nullable error) {
///use NSKeyedUnarchver to unarchive a dictionary.
}
The dictionary is decoded, but the result is empty:
{
NSExtensionJavaScriptPreprocessingResultsKey = {
};
}
value for key 'NS.keys' was of unexpected class 'NSString' (0x1ee7d2970) [/System/Library/Frameworks/Foundation.framework].
Allowed classes are:
{(
"'NSDictionary' (0x1ee7cad38) [/System/Library/Frameworks/CoreFoundation.framework]"
)}
(null)
Printing description of exception->exception:
Exception while decoding argument 0 (#1 of invocation):
<NSInvocation: 0x28224e600>
return value: {v} void
target: {@?} 0x0 (block)
argument 1: {@} 0x0
argument 2: {@} 0x0
Exception: value for key 'NS.keys' was of unexpected class 'NSString' (0x1ee7d2970) [/System/Library/Frameworks/Foundation.framework].
Allowed classes are:
{(
"'NSDictionary' (0x1ee7cad38) [/System/Library/Frameworks/CoreFoundation.framework]"
)}
(
0 CoreFoundation 0x000000019d576684 5A6C1F41-BF70-32F6-A1D6-5B894DD21362 + 968324
...
)
Me too. Any updates?