Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to make xcode run a script before dependencies?

Tags:

xcode

ios

build

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.

like image 998
noamtm Avatar asked Nov 12 '12 09:11

noamtm


1 Answers

Running the script as a pre-action build step inside the scheme is the best way to accomplish what you want. A common use of this approach is to adjust the project's build number base on the source control state (example). As far as capturing the script output, unfortunately the only thing you can do is redirect stdout for the script to a log file. That log file could be part of your project, so it would be easy to view from Xcode.

like image 83
kamprath Avatar answered Sep 22 '22 05:09

kamprath