• 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
What Apple event functionality is still missing from Cocoa?
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

What Apple event functionality is still missing from Cocoa?


  • Subject: What Apple event functionality is still missing from Cocoa?
  • From: has <email@hidden>
  • Date: Wed, 12 Nov 2014 01:23:47 +0000

Hi folks,

Currently when working with NSAppleEventDescriptor it is necessary to drop down to legacy or deprecated Carbon APIs in order to perform certain tasks such as packing and unpacking date descriptors and sending Apple events. Given Apple's regular Carbon API pogroms, it's an uncomfortable foundation for building professional software products.

I'm putting together a Radar feature request requesting that NSAppleEventDescriptor be enhanced to provide this missing functionality, and writing the patch myself in the hope that a. this expedites the process, and b. it gets done right.

Here's what I've got so far, implemented as a category on NSAppleEventDescriptor so it's easy to test:


@interface NSAppleEventDescriptor (AEDescExtensions)

// Given a value, create and return an autoreleased NSAppleEventDescriptor
// that contains that value, with an appropriate type (typeLongDateTime,
// typeIEEE64BitFloatingPoint, or typeFileURL, respectively).

+ (instancetype)descriptorWithDate:(NSDate *)date;
+ (instancetype)descriptorWithDouble:(double)number;
+ (instancetype)descriptorWithFileURL:(NSURL *)fileURL;

// Given a target process identifier, create and return an autoreleased
// NSAppleEventDescriptor suitable for use in +appleEventWith... constructor

+ (instancetype)currentProcessDescriptor;
+ (instancetype)descriptorWithProcessID:(pid_t)pid;
+ (instancetype)descriptorWithApplicationURL:(NSURL *)url;

// AERecords can have an abitrary descriptorType. This allows you to check if
// the descriptor is truly an AERecord.

- (BOOL)isRecordDescriptor;

// Return the contents of a descriptor, after coercing the descriptor's contents
// to typeLongDateTime, typeIEEE64BitFloatingPoint, or typeFileURL respectively.

@property (readonly) NSDate *dateValue;
@property (readonly) double doubleValue;
@property (readonly) NSURL *fileURLValue;

// Send an Apple event to a target process. On success, returns the reply event
// containing the result value or error returned by the target process. If an
// Apple Event Manager error occurs, returns nil and if `error` is not nil an
// NSError containing the Carbon error code.

- (instancetype)sendAppleEventWithMode:(AESendMode)sendMode
                               timeout:(long)timeOutInTicks
                                 error:(NSError * __autoreleasing *)error;

@end


These are the methods that wrap essential legacy/deprecated Carbon APIs:

      +descriptorWithDate:
      +currentProcessDescriptor
      -isRecordDescriptor
      -dateValue
      -sendAppleEventWithMode:timeout:error:

The rest are simply for completeness: not essential, just convenient to have.

The two source files that I'll submit as a code patch are here (you can ignore the larger project):

    https://bitbucket.org/hhas/appleeventbridge/src/635415adc0841f07a906f834c7d269109db8ce3f/AppleEventBridge/NSAppleEventDescriptor+AEDescExtensions.h?at=master

    https://bitbucket.org/hhas/appleeventbridge/src/635415adc0841f07a906f834c7d269109db8ce3f/AppleEventBridge/NSAppleEventDescriptor+AEDescExtensions.m?at=master


If anyone can think of any other Apple event Carbon APIs that should be added to this wrapper, please let me know. Ditto if you can see anything stupid or wrong in my implementation. I'm also open to advice on how to best present and document this code to make it as quick and painless for Apple to implement (I figure the less effort it is for them, the likelier they are to include it in [ideally] 10.11).

Thanks,

has

p.s. Anyone know if <rdar://problem/4976113> has been fixed? If it has, I can eliminate the AESendThreadSafe workaround for sending events on background threads.
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
AppleScript-Users mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:
Archives: http://lists.apple.com/archives/applescript-users

This email sent to email@hidden

  • Prev by Date: Re: Is OSACopyScriptingDefinitionFromURL broken?
  • Next by Date: Export AppleScript Library Text
  • Previous by thread: Re: Is OSACopyScriptingDefinitionFromURL broken?
  • Next by thread: Export AppleScript Library Text
  • Index(es):
    • Date
    • Thread