EzDev.org

build interview questions

Top 15 build interview questions

18018 Jobs openings for build


Warning: The Copy Bundle Resources build phase contains this target's Info.plist file

I've separated a project into two builds and given each of them a plist file. Everything works fine, but I keep getting this build warning:

Warning: The Copy Bundle Resources build phase contains this target's Info.plist file 'MyApp-Info.plist'

I get this when I try to build MyApp. Building for the second target gives the same error (with SecondTarget-Info.plist in the warning). I'm not sure why it's a warning, since I want the build to contain that .plist file. Each of the .plist files have one target membership (for their own build).

What does this warning mean? Is there any way to make it go away?


Source: (StackOverflow)

Have Grunt generate index.html for different setups

I'm trying to use Grunt as a build tool for my webapp.

I want to have at least two setups:

I. Development setup - load scripts from separate files, without concatenation,

so my index.html would look something like:

<!DOCTYPE html>
<html>
    <head>
        <script src="js/module1.js" />
        <script src="js/module2.js" />
        <script src="js/module3.js" />
        ...
    </head>
    <body></body>
</html>

II. Production setup - load my scripts minified & concatenated in one file,

with index.html accordingly:

<!DOCTYPE html>
<html>
    <head>
        <script src="js/MyApp-all.min.js" />
    </head>
    <body></body>
</html>

The question is, how can I make grunt make these index.html's depending on the configuration when I run grunt dev or grunt prod?

Or maybe I'm digging in the wrong direction and it would be easier to always generate MyApp-all.min.js but put inside it either all my scripts (concatenated) or a loader script that asynchronously loads those scripts from separate files?

How do you do it, guys?


Source: (StackOverflow)

Xcode "Build and Archive" from command line

Xcode 3.2 provides an awesome new feature under the Build menu, "Build and Archive" which generates an .ipa file suitable for Ad Hoc distribution. You can also open the Organizer, go to "Archived Applications," and "Submit Application to iTunesConnect."

Is there a way to use "Build and Archive" from the command line (as part of a build script)? I'd assume that xcodebuild would be involved somehow, but the man page doesn't seem to say anything about this.

UPDATE Michael Grinich requested clarification; here's what exactly you can't do with command-line builds, features you can ONLY do with Xcode's Organizer after you "Build and Archive."

  1. You can click "Share Application..." to share your IPA with beta testers. As Guillaume points out below, due to some Xcode magic, this IPA file does not require a separately distributed .mobileprovision file that beta testers need to install; that's magical. No command-line script can do it. For example, Arrix's script (submitted May 1) does not meet that requirement.
  2. More importantly, after you've beta tested a build, you can click "Submit Application to iTunes Connect" to submit that EXACT same build to Apple, the very binary you tested, without rebuilding it. That's impossible from the command line, because signing the app is part of the build process; you can sign bits for Ad Hoc beta testing OR you can sign them for submission to the App Store, but not both. No IPA built on the command-line can be beta tested on phones and then submitted directly to Apple.

I'd love for someone to come along and prove me wrong: both of these features work great in the Xcode GUI and cannot be replicated from the command line.


Source: (StackOverflow)

Xcode warning: "Multiple build commands for output file"

I am getting an error like this:

[WARN]Warning: Multiple build commands for output file /Developer/B/Be/build/Release-iphonesimulator/BB.app/no.png

[WARN]Warning: Multiple build commands for output file /Developer/B/Be/build/Release-iphonesimulator/BB.app/d.png

[WARN]Warning: Multiple build commands for output file /Developer/B/Be/build/Release-iphonesimulator/BB.app/n.png

But I have checked Xcode and I don't see any duplicates of such files at all. As this post in the Apple Mailing Lists say, there are no duplicates.


Source: (StackOverflow)

What does the Visual Studio "Any CPU" target mean?

I have some confusion related to the .NET platform build options in Visual Studio 2008.

What is the "Any CPU" compilation target, and what sort of files does it generate? I examined the output executable of this "Any CPU" build and found that they are (who would not see that coming!) the x86 executables. So, is there any the difference between targeting executable to x86 vs "Any CPU"?

Another thing that I noticed, is that managed C++ projects do not have this platform as an option. Why is that? Does that mean that my suspicion about "Any CPU" executables being plain 32-bit ones is right?


Source: (StackOverflow)

Maven: what is pluginManagement?

This is a snippet of my pom file.

....
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>2.4</version>                        
                <executions>
                    <execution>
                        <phase>install</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            ......
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
...

I use it successfully with the command

mvn install

But, when I try to enclose it into the "pluginManagement" tag, the maven-dependency-plugin stops to work when I launch the install goal. Why the "pluginManagement" tag change the build behavior ? Or should I use another goal or option ?

Thank you in advance for any help


Source: (StackOverflow)

How to build Qt for Visual Studio 2010

I struggled finding a how-to which provides a stable solution for using Qt with Visual Studio 2010, so after collecting all the bits of information and some trial and error, I would like to write my solution into a guide.

The problem, or why is it not possible to use prebuilt binaries?

It seems that using binaries built for Visual Studio 2008 might work in some special cases, but I found them not to work. In my case they compiled OK, but they produce runtime errors, like this:

problem2

or when started from Visual Studio 2010:

problem

Update: I found a blog post analysing why does it work for some people, while it does not for others. In one word, it depends on whether you have Visual Studio 2008 installed on the same machine, or not. http://blog.paulnettleship.com/2010/11/11/troubleshooting-visual-studio-2010-and-qt-4-7-integration/

The most important thing (that I stupidly didn’t realize) was the fact that you CANNOT use the Visual Studio 2008 compiled libraries and dll’s (available on the Qt webpage) if you don’t have Visual Studio 2008 installed. The reason is because the Qt SDK you download is a debug build which is dependant on the VC9.0 DebugCRT, meaning it needs the Visual C++ 2008 Debug Runtime installed, which is NOT available as a redistributable installer. The only way to install the DebugCRT is to install the entirety of Visual Studio 2008.


Source: (StackOverflow)

How and why do I set up a C# build machine?

I'm working with a small (4 person) development team on a C# project. I've proposed setting up a build machine which will do nightly builds and tests of the project, because I understand that this is a Good Thing. Trouble is, we don't have a whole lot of budget here, so I have to justify the expense to the powers that be. So I want to know:

  • What kind of tools/licenses will I need? Right now, we use Visual Studio and Smart Assembly to build, and Perforce for source control. Will I need something else, or is there an equivalent of a cron job for running automated scripts?
  • What, exactly, will this get me, other than an indication of a broken build? Should I set up test projects in this solution (sln file) that will be run by these scripts, so I can have particular functions tested? We have, at the moment, two such tests, because we haven't had the time (or frankly, the experience) to make good unit tests.
  • What kind of hardware will I need for this?
  • Once a build has been finished and tested, is it a common practice to put that build up on an ftp site or have some other way for internal access? The idea is that this machine makes the build, and we all go to it, but can make debug builds if we have to.
  • How often should we make this kind of build?
  • How is space managed? If we make nightly builds, should we keep around all the old builds, or start to ditch them after about a week or so?
  • Is there anything else I'm not seeing here?

    I realize that this is a very large topic, and I'm just starting out. I couldn't find a duplicate of this question here, and if there's a book out there I should just get, please let me know.

    EDIT: I finally got it to work! Hudson is completely fantastic, and FxCop is showing that some features we thought were implemented were actually incomplete. We also had to change the installer type from Old-And-Busted vdproj to New Hotness WiX.

    Basically, for those who are paying attention, if you can run your build from the command line, then you can put it into hudson. Making the build run from the command line via MSBuild is a useful exercise in itself, because it forces your tools to be current.


    Source: (StackOverflow)

  • Visual Studio 2010 isn't building before a run when there are code changes

    I've been using using F5 (Start Debugging) for years to build the code (if its out of date), and then debug. This was working on VS 2010 also, however today it just start debugging without a build. Say I do a clean on the project, and then hit F5 instead of building it so it can run it throws an error message saying that the exe doesn't exist to run. How do I make it build first? What could have changed?


    Source: (StackOverflow)

    Android buildscript repositories. jcenter VS mavencentral

    The last time I used Android Studio, it generated .gradle files with mavencentral() buildscript repositories whereas now there's jcenter().

    Could anyone explain the issues connected with this. Are there any other repos? When should we switch them? What impact do they have on projects, modules, libs? Any other essentials for Android developers?

    Who's responsible for maintaining those repos?


    Source: (StackOverflow)

    Build and Version Numbering for Java Projects (ant, cvs, hudson)

    What are current best-practices for systematic build numbering and version number management in Java projects? Specifically:

    • How to manage build numbers systematically in a distributed development environment

    • How to maintain version numbers in source / available to the runtime application

    • How to properly integrate with source repository

    • How to more automatically manage version numbers vs. repository tags

    • How to integrate with continuous build infrastructure

    There are quite a number of tools available, and ant (the build system we're using) has a task that will maintain a build number, but it's not clear how to manage this with multiple, concurrent developers using CVS, svn, or similar.

    [EDIT]

    Several good and helpful partial or specific answers have appeared below, so I'll summarize a few of them. It sounds to me like there is not really a strong "best practice" on this, rather a collection of overlapping ideas. Below, find my summaries and some resulting questions that folks might try to answer as follow-ups. [New to stackoverflow... please provide comments if I'm doing this wrong.]

    • If you are using SVN, versioning of a specific checkout comes along for the ride. Build numbering can exploit this to create a unique build number that identifies the specific checkout/revision. [CVS, which we are using for legacy reasons, doesn't provide quite this level of insight... manual intervention with tags gets you part way there.]

    • If you are using maven as your build system, there is support for producing a version number from the SCM, as well as a release module for automatically producing releases. [We can't use maven, for a variety of reasons, but this helps those who can. [Thanks to marcelo-morales]]

    • If you are using ant as your build system, the following task description can help produce a Java .properties file capturing build information, which can then be folded into your build in a number of ways. [We expanded on this idea to include hudson-derived information, thanks marty-lamb].

    • Ant and maven (and hudson and cruise control) provide easy means for getting build numbers into a .properties file, or into a .txt/.html file. Is this "safe" enough to keep it from being tampered with intentionally or accidentally? Is it better to compile it into a "versioning" class at build time?

    • Assertion: Build numbering should be defined/enacted in a continuous integration system like hudson. [Thanks to marcelo-morales] We have taken this suggestion, but it does crack open the release engineering question: How does a release happen? Are there multiple buildnumbers in a release? Is there a meaningful relationship between buildnumbers from differing releases?

    • Question: What is the objective behind a build number? Is it used for QA? How? Is it used primarily by developers to disambiguate between multiple builds during development, or more for QA to determine what build an end-user got? If the goal is reproducibility, in theory this is what a release version number should provide -- why doesn't it? (please answer this as a part of your answers below, it will help illuminate the choices you have made/suggested...)

    • Question: Is there a place for build numbers in manual builds? Is this so problematic that EVERYONE should be using a CI solution?

    • Question: Should build numbers be checked in to the SCM? If the goal is reliably and unambiguously identifying a particular build, how to cope with a variety of continuous or manual build systems that may crash/restart/etc...

    • Question: Should a build number be short and sweet (i.e., monotonically increasing integer) so that it's easy to stick into file names for archival, easy to refer to in communication, etc... or should it be long and full of usernames, datestamps, machine names, etc?

    • Question: Please provide details about how the assignment of build numbers fits into your larger automated release process. Yes, maven lovers, we know this is done and done, but not all of us have drunk the kool-aid quite yet...

    I'd really like to flesh this out into a complete answer, at least for the concrete example of our cvs/ant/hudson setup, so someone could build a complete strategy based on this question. I'll mark as "The Answer" anyone who can give a soup-to-nuts description for this particular case (including cvs tagging scheme, relevant CI config items, and release procedure that folds the build number into the release such that it's programmatically accessible.) If you want to ask/answer for another particular configuration (say, svn/maven/cruise control) I'll link to the question from here. --JA

    [EDIT 23 Oct 09] I accepted the top-voted answer because I think it's a reasonable solution, while several of the other answers also include good ideas. If someone wants to take a crack at synthesizing some of these with marty-lamb's, I'll consider accepting a different one. The only concern I have with marty-lamb's is that it doesn't produce a reliably serialized build number -- it depends on a local clock at the builder's system to provide unambiguous build numbers, which isn't great.

    [Edit Jul 10]

    We now include a class like the below. This allows the version numbers to be compiled into the final executable. Different forms of the version info are emitted in logging data, long-term archived output products, and used to trace our (sometimes years-later) analysis of output products to a specific build.

    public final class AppVersion
    {
       // SVN should fill this out with the latest tag when it's checked out.
    
       private static final String APP_SVNURL_RAW = 
         "$HeadURL: svn+ssh://user@host/svnroot/app/trunk/src/AppVersion.java $";
       private static final String APP_SVN_REVISION_RAW = "$Revision: 325 $";  
    
       private static final Pattern SVNBRANCH_PAT = 
         Pattern.compile("(branches|trunk|releases)\\/([\\w\\.\\-]+)\\/.*");
       private static final String APP_SVNTAIL = 
         APP_SVNURL_RAW.replaceFirst(".*\\/svnroot\\/app\\/", "");
    
      private static final String APP_BRANCHTAG;
      private static final String APP_BRANCHTAG_NAME;
      private static final String APP_SVNREVISION = 
        APP_SVN_REVISION_RAW.replaceAll("\\$Revision:\\s*","").replaceAll("\\s*\\$", "");
    
    
      static {
        Matcher m = SVNBRANCH_PAT.matcher(APP_SVNTAIL);
        if (!m.matches()) {
          APP_BRANCHTAG = "[Broken SVN Info]";
          APP_BRANCHTAG_NAME = "[Broken SVN Info]";
        } else {
          APP_BRANCHTAG = m.group(1);
          if (APP_BRANCHTAG.equals("trunk")) {
            // this isn't necessary in this SO example, but it 
            // is since we don't call it trunk in the real case
            APP_BRANCHTAG_NAME = "trunk";
          } else {
            APP_BRANCHTAG_NAME = m.group(2);
          }
        }
      }
    
      public static String tagOrBranchName()
      { return APP_BRANCHTAG_NAME; }
    
      /** Answers a formatter String descriptor for the app version.
       * @return version string */
      public static String longStringVersion()
      { return "app "+tagOrBranchName()+" ("+
        tagOrBranchName()+", svn revision="+svnRevision()+")"; }
    
      public static String shortStringVersion()
      { return tagOrBranchName(); }
    
      public static String svnVersion()
      { return APP_SVNURL_RAW; }
    
      public static String svnRevision()
      { return APP_SVNREVISION; }
    
      public static String svnBranchId()
      { return APP_BRANCHTAG + "/" + APP_BRANCHTAG_NAME; } 
    
      public static final String banner()
      {
        StringBuilder sb = new StringBuilder();
        sb.append("\n----------------------------------------------------------------");
        sb.append("\nApplication -- ");
        sb.append(longStringVersion());
        sb.append("\n----------------------------------------------------------------\n");
        return sb.toString();
      }
    }
    

    Leave comments if this deserves to become a wiki discussion.


    Source: (StackOverflow)

    iOS - Build fails with CocoaPods cannot find header files

    I have an iOS project using CocoaPods. Everything was working smoothly until another developer started to work on the same project. He made some changes (only to code as far as I know) and made a new branch in the repo. I have checked out his branch and tried to build it, but I am getting an error: ASLogger/ASLogger.h file not found.

    Even if I delete the whole project and make a fresh copy and use 'pods install .' the build failure is still there. Do you have any idea where the problem can be? If you need some more infos, just ask.


    Source: (StackOverflow)

    Xcode 6.1 error while building IPA

    Just upgraded to Xcode 6.1 today, and guess what: Now I'm having trouble submitting builds using the TestFlight desktop app. Here's the error I'm getting while the app starts building the IPA:

    The error

    error: /usr/bin/codesign --force --preserve-metadata=identifier,entitlements,resource-rules --sign 854059d45eed724593debef577a562e1ba96ab55 --resource-rules=/tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist /tmp/QYFSJIvu7W/Payload/XX.app failed with error 1. Output: Warning: usage of --preserve-metadata with option "resource-rules" (deprecated in Mac OS X >= 10.10)! Warning: --resource-rules has been deprecated in Mac OS X >= 10.10! /tmp/QYFSJIvu7W/Payload/XX.app/ResourceRules.plist: cannot read resources

    The 'Support Article' has no idea what is going on.

    It does not seem to be a TestFlight problem because the same thing happens in a CI environment like Jenkins using the xcrun or similar tools.

    The app wasn't updated for months, so I know that I shouldn't be expecting for any updates to fix this anytime soon. It used to work really well for me and my clients so I'm not really keen on abandoning it for something else either.

    Any ideas for what this error is about, and how to fix it would be very appreciated.


    Source: (StackOverflow)

    Node package ( Grunt ) installed but not available

    I'm trying to build a github jquery-ui library using grunt, but after running npm install I still can't run the command according to the readme file. It just gives No command 'grunt' found:

    james@ubuntu:~/Documents/projects/ad2/lib/jquery-ui$ grunt build
    No command 'grunt' found, did you mean:
     Command 'grun' from package 'grun' (universe)
    grunt: command not found
    james@ubuntu:~/Documents/projects/ad2/lib/jquery-ui$ npm ls
    jquery-ui@1.9.0pre /home/james/Documents/projects/ad2/lib/jquery-ui
    ├─┬ grunt@0.3.9 
    │ ├── async@0.1.18 
    │ ├── colors@0.6.0-1 
    │ ├─┬ connect@1.8.7 
    │ │ ├── formidable@1.0.9 
    │ │ ├── mime@1.2.5 
    │ │ └── qs@0.5.0 
    │ ├── dateformat@1.0.2-1.2.3 
    │ ├─┬ glob-whatev@0.1.6 
    │ │ └─┬ minimatch@0.2.4 
    │ │   └── lru-cache@1.0.6 
    │ ├─┬ gzip-js@0.3.1 
    │ │ ├── crc32@0.2.2 
    │ │ └── deflate-js@0.2.2 
    │ ├── hooker@0.2.3 
    │ ├─┬ jshint@0.5.9 
    │ │ ├── argsparser@0.0.6 
    │ │ └─┬ minimatch@0.2.4 
    │ │   └── lru-cache@1.0.6 
    │ ├─┬ nodeunit@0.6.4 
    │ │ ├── tap-assert@0.0.10 
    │ │ └─┬ tap-producer@0.0.1 
    │ │   ├── inherits@1.0.0 
    │ │   ├── tap-results@0.0.2 
    │ │   └── yamlish@0.0.5 
    │ ├─┬ nopt@1.0.10 
    │ │ └── abbrev@1.0.3 
    │ ├─┬ prompt@0.1.12 
    │ │ ├── pkginfo@0.2.3 
    │ │ └─┬ winston@0.5.11 
    │ │   ├── eyes@0.1.7 
    │ │   ├─┬ loggly@0.3.11 
    │ │   │ └── timespan@2.2.0 
    │ │   └── stack-trace@0.0.6 
    │ ├── semver@1.0.13 
    │ ├─┬ temporary@0.0.2 
    │ │ └── package@1.0.0 
    │ ├── uglify-js@1.0.7 
    │ ├── underscore@1.2.4 
    │ └── underscore.string@2.1.1 
    ├── grunt-compare-size@0.1.4 
    ├─┬ grunt-css@0.2.0 
    │ ├── csslint@0.9.8 
    │ └── sqwish@0.2.0 
    ├── grunt-html@0.1.1 
    ├── request@2.9.153 
    ├─┬ rimraf@2.0.1 
    │ └── graceful-fs@1.1.8 
    └─┬ testswarm@0.2.2 
      └── request@2.9.202 
    

    I'm confused, what am I missing please?


    Source: (StackOverflow)

    Maven: add a dependency to a jar by relative path

    I have a proprietary jar that I want to add to my pom as a dependency.

    But I don't want to add it to a repository. The reason is that I want my usual maven commands such as mvn compile, etc, to work out of the box. (Without demanding from the developers a to add it to some repository by themselves).

    I want the jar to be in a 3rdparty lib in source control, and link to it by relative path from the pom.xml file.

    Can this be done? How?


    Source: (StackOverflow)