OCUnit: Two Things They Never Say

What if you followed all official (first, second, third) and unofficial tutorials to the letter, but still can’t make your tests run? Well, it’s what it was for me today. Here are two things I couldn’t find anywhere and had to figure myself:

  • If you see only one Unit Test Bundle build error, and it’s says “Failed tests for architecture ‘i386’ (GC OFF)” (slight variations depending on your platform and the state of the GC flag), you don’t have any tests in the bundle. Yes, go check that counter in the Compile Sources task of your test target.
  • If you added the application as the dependency to the test bundle, wrote the test that uses one of the classes and see the link error like below, you didn’t add any source files being tested to your test bundle for compilation. I know it’s insane to add them one by one, but it’s how they designed it. To make it a bit easier, right-click on the “Groups & Files” header, choose “Target Membership”, make sure your tests bundle is you current target and start checking missing sources.
    ".objc_class_name_XYZ", references from:
    literal-pointer@__OBJC@__cls_refs@XYZ in XYZTests.o
    sumbol(s) not found
    collect2: Ld returned 1 exit status