• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: Still need help with Services. Is there sample code?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Still need help with Services. Is there sample code?


  • Subject: Re: Still need help with Services. Is there sample code?
  • From: Daryle Walker <email@hidden>
  • Date: Fri, 19 Sep 2014 05:33:58 -0400

On Sep 19, 2014, at 3:49 AM, Daryle Walker <email@hidden> wrote:

> On Sep 18, 2014, at 7:13 PM, Keary Suska <email@hidden> wrote:
>
>> On Sep 18, 2014, at 3:22 PM, Daryle Walker <email@hidden> wrote:
>>
>>> I removed the old style type (“NSStringPboardType”) and it still worked. When I changed the “public.plain-text” to “public.url” and tested with the entry field on Firefox, Safari’s “Open URL” service showed up, but my version didn’t! Same thing happened using “NSURLPboardType” as the send type. Renaming the public name of my service, so it wouldn’t match Safari’s, didn’t work. Changing the send-type to “public.url-name” didn’t work.
>>>
>>> Now we narrowed what’s wrong. I still don’t know how to fix it.
>>
>> At this point, you are probably just looking at a UTI issue. Standard UTI's are documneted in the UTCoreTypes.h header. I don't know if they are documented elsewhere. Simply open terminal and execute "locate UTCoreTypes.h" to find the various headers.
>
> Well, I got the “public.url” and “public.url-name” UTIs from Apple Development’s UTI guides. But before reading this post, I’ve been thinking about other line of attack.
>
> I said that my “Open URL” doesn’t register, but Safari’s does. So I want to see Safari’s NSServices information to see what it does. To my shock, it’s not there! I have no idea where the “Open URL” service that triggers Safari is located; I couldn’t find anything useful via Spotlight or the “find” Unix command. I was about to give up when I remembered that the Services menu shows Safari’s “Add to Reading List” command, and I did see that in Safari’s Info.plist.
>
> When I read the NSServices entry for “Add to Reading List,” I found out that Safari cheats! The service only takes RTF and UTF-8 text, put there’s a required-context block that filters in only URL strings and http(s) strings. (The latter filter is enabled by an Apple-private(?) key called “NSLinkSchemes.”)
>
> …
>
> I did a web-search on “NSLinkSchemes,” and found a text dump of all of someone’s services, and the “Open URL” service was listed as being from a “/System/Library/CoreServices/SystemUIServer.app.” Sure enough, my copy of that app has the service, and lists “NSURLPboardType” and “NSStringPboardType” as its send-types (in that order). Maybe I should follow the lead of one of these services.
>
> (The “/Applications/Font Book.app” was the only other app in the dump that took “NSURLPboardType,” and it was for both of its two services, and the fourth out of five types for both services.)
>
> …
>
> Now my web-searching has found a private Pasteboard type “WebURLsWithTitlesPboardType” that could be what Safari used to create URL & Title entries.

Here’s what I got:

> 	<key>NSServices</key>
> 	<array>
> 		<dict>
> 			<key>NSMenuItem</key>
> 			<dict>
> 				<key>default</key>
> 				<string>Open URL</string>
> 			</dict>
> 			<key>NSMessage</key>
> 			<string>openURL</string>
> 			<key>NSPortName</key>
> 			<string>MyApp</string>
> 			<key>NSRequiredContext</key>
> 			<dict>
> 				<key>NSTextContent</key>
> 				<string>URL</string>
> 			</dict>
> 			<key>NSSendFileTypes</key>
>             <array/>
>             <key>NSSendTypes</key>
> 			<array>
> 				<string>public.url</string>
> 				<string>public.url-name</string>
> 				<string>public.rtf</string>
> 				<string>public.utf8-plain-text</string>
> 			</array>
> 		</dict>
> 	</array>

The entry field for a service’s sendable types, in the project attributes edit section, is ambiguous whether it means NSSendFileTypes or NSSendTypes. I had to put an empty NSSendFileTypes to ensure what I wanted. My implementation is:

> - (void)openURL:(NSPasteboard *)pboard userData:(NSString *)userData error:(NSString *__autoreleasing *)error {
>     NSUInteger  counter = 0;
>
>     for (NSPasteboardItem *item in pboard.pasteboardItems) {
>         NSURL * const  targetURL = [NSURL URLWithString:[item stringForType:[item availableTypeFromArray:@[(__bridge NSString *)kUTTypeURL, (__bridge NSString *)kUTTypeRTF, (__bridge NSString *)kUTTypeUTF8PlainText]]]];
>
>         ++counter;
>         if (targetURL) {
>             id const  browser = [[NSApp delegate] createBrowser];
>
>             if (browser) {
>                 [browser showWindow:NSApp];
>                 [browser loadPage:targetURL title:[item stringForType:@"public.url-name"] searching:nil printing:nil showPrint:NO showProgress:NO];
>             } else if (error) {
>                 *error = [NSString stringWithFormat:@"A browser window could not be created for item #%lu (of %lu) processed by the Service.", counter, pboard.pasteboardItems.count];
>             }
>         } else if (error) {
>             *error = [NSString stringWithFormat:@"A URL was not found for item #%lu (of %lu) processed by the Service.", counter, pboard.pasteboardItems.count];
>         }
>     }
> }

I tried out the URL field in FireFox, and it only gives out UTF-8 text. Does anyone know how I can test actual URL and/or URL-Name data? Am I using the new Pasteboard API correctly?

—
Daryle Walker
Mac, Internet, and Video Game Junkie
darylew AT mac DOT com


_______________________________________________

Cocoa-dev mailing list (email@hidden)

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden


References: 
 >Still need help with Services. Is there sample code? (From: Daryle Walker <email@hidden>)
 >Re: Still need help with Services. Is there sample code? (From: Keary Suska <email@hidden>)
 >Re: Still need help with Services. Is there sample code? (From: Daryle Walker <email@hidden>)
 >Re: Still need help with Services. Is there sample code? (From: Keary Suska <email@hidden>)
 >Re: Still need help with Services. Is there sample code? (From: Daryle Walker <email@hidden>)

  • Prev by Date: Re: Still need help with Services. Is there sample code?
  • Next by Date: About the Bundle creator OS Type code
  • Previous by thread: Re: Still need help with Services. Is there sample code?
  • Next by thread: Heavy flickering on Retina Macs with Yosemite & NSVisualEffectView & overlay windows
  • Index(es):
    • Date
    • Thread