Xcode 3.2.3 , IOS4 and OCMock

To unit test our iPhone developments we rely heavily on Google-Toolbox-for-Mac and OCMock. After updating to the iphone SDK4 (IOS4) and Xcode 3.2.3 we had an unpleasant surprise : our testing frameworks refused to compile and as of today we have no information about how to solve this situation. Nevetheless we managed to resolve this problem :

The build error we had was :

Undefined symbols: "_OBJC_CLASS_$_OCMockObject", referenced from: objc-class-ref-to-OCMockObject in WebServiceTest.o ld: symbol(s) not found

We used to simply add the OCMock.framework to the "Link Binary With Libraries" build phase. But it seems you can no longer use the pre-compiled library from the download section of the OCMock website

To make OCMock work with Xcode 3.2.3 you have to :

  • Delete ocmock.framework, the copy file phase, and any search path linking to ocmock header.
  • check out the latest version from ocmock svn repo : http://svn.mulle-kybernetik.com/OCMock/trunk
  • Build the OCMockPhoneSim target
  • Copy the libOCMock.a and Headers folder in your project folder
  • Add the libOCMock.a to your project framework and add a link to the headers folder in your target library search path.

You build again but.... nothing happens.

After OCMock, now it’s the runscript from Google-Toolbox-for-Mac that freezes on this line :

SBSetAccelerometerClientEventsEnabled failed: (ipc/ send) invalid destination port

Once again check out the top of the trunk of the GTM svn repository and replace all the GTM files :

http://code.google.com/p/google-toolbox-for-mac/wiki/iPhoneUnitTesting

Now you can build your test target again.