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
