On Tuesday January 05 2016 10:29:41 Jeremy Huddleston Sequoia wrote:

Thanks!

> There are really two main difference between the two cases:
>   1) The app bundles have an inherent main bundle (ie: [NSBundle mainBundle]).

But CFBundleGetMainBundle() does return something equivalent for non-bundled 
applications...

>   2) Apps are (usually) launched by LaunchServices.  You can exec them 
> directly, but that is not the preferred way to do it (and may not always work 
> in the future).

Oh? 
> 
> It's certainly possible for processes to draw GUI elements without being 
> bundled, but it's less trivial.

That's the impression I had, but I haven't been able to confirm that recently, 
other than a subtle difference if you invoke the bundle exec via its full path 
or via a symlink.
Interaction with the elements can be more tricky; Qt5 applications I exec 
directly often do not show the menubar immediately until I cycle the foreground 
application. I suspect this has to do with the fact that Qt5 calls 
[NSApplication activateIgnoringOtherApps:] quite early (too early) during 
initialisation.
> 
> It's possible for a standalone executable to have an Info.plist.  It is 
> embedded in the executable in an __info_plist section.  This can be done by 
> the CREATE_INFOPLIST_SECTION_IN_BINARY Xcode build setting or by creating an 
> __info_plist section manually at link time if not using Xcode 
> (-Wl,-sectcreate,__TEXT,__info_plist,/path/to/my/Info.plist).

I usually use CFBundleGetInfoDictionary() and CFDictionarySetValue(), but 
embedding the infodict like above is certainly easier once it contains more 
than 1 or 2 elements!
> 
> As far as spawning processes in general, please don't use system() or 
> fork()/exec().  Please use the posix_spawn syscall instead as it is much 
> cleaner and has less overhead.

I'm not really familiar with that API, but a quick look suggests that the 
variant for spawning in "non-detached" fashion (spawnfd) is missing, correct?

> The open utility is basically a CLI to LSOpenURLsWithRole().  It does not 
> exec or spawn anything.  It just calls into LSOpenURLsWithRole().

Hmm, ok. I once wrote an alternative, but I cannot remember exactly why. Looks 
like I only simplified the calling syntax (`osxlaunch [-W] command 
[arguments]`).


R.
_______________________________________________
macports-users mailing list
[email protected]
https://lists.macosforge.org/mailman/listinfo/macports-users

Reply via email to