Scenario:

I have TargetA, which is an iOS application. This app uses a static library, compiled by TargetB. Obviously, TargetB is a dependency of TargetA, and TargetB is always built before TargetA. So far so good.

Now, I want a script to run TargetA is built, but even before TargetB.

What I tried:

  1. Adding a "setup" aggregate/external-build target, and making it a dependency of TargetA. It half works: Xcode runs setup and TargetB at the same time, so TargetB may get built too soon. Not good enough.
  2. The same, but specifying in the scheme not to build in parallel. This works, but is a waste, since there are other targets that can be built in parallel.
  3. Run the script in a pre-action build step inside the scheme. This works, but seems wrong (why? output from that step doesn't go into the build log; so perhaps I'm not meant to use it this way?).

What I don't want to do:

Add the script as a dependency of TargetB. This would work; however, TargetB actually comes from another sub-project, and in the context of building it, parameters to the script are not yet known (mainly the root directory of TargetA's project).

Am I missing anything, or do I have to settle for #2 or #3 above?

EDIT: in option #2 above, changing the order of dependencies (in my case, between Setup and TargetB does not help -- Xcode still selects the order arbitrarily.

Edit
Report