Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Objective C When running tests: Class defined without specifying a base class

I have no idea what is going on as I am fairly new to objective c and IOS dev.

When i try to run my tests, using the default testing framework i get the following error:

        ..../Pods/Expecta/src/matchers/EXPMatchers+beCloseTo.m:4:1: 
Class 'EXPFixCategoriesBugEXPMatcher_beCloseToWithinMatcher' 
    defined without specifying a base class

The following peice of code generates the issue (however it is not mine, I believe it is a peice from one of the libraries I am using through pods):

#import "EXPMatchers+beCloseTo.h"
#import "EXPMatcherHelpers.h"

EXPMatcherImplementationBegin(_beCloseToWithin, (id expected, id within)) {
  prerequisite(^BOOL{
    return [actual isKindOfClass:[NSNumber class]] &&
        [expected isKindOfClass:[NSNumber class]] &&
        ([within isKindOfClass:[NSNumber class]] || (within == nil));
  });

  match(^BOOL{
        double actualValue = [actual doubleValue];
        double expectedValue = [expected doubleValue];

        if (within != nil) {
            double withinValue = [within doubleValue];
            double lowerBound = expectedValue - withinValue;
            double upperBound = expectedValue + withinValue;
            return (actualValue >= lowerBound) && (actualValue <= upperBound);
        } else {
            double diff = fabs(actualValue - expectedValue);
            actualValue = fabs(actualValue);
            expectedValue = fabs(expectedValue);
            double largest = (expectedValue > actualValue) ? expectedValue : actualValue;
            return (diff <= largest * FLT_EPSILON);
        }
  });

  failureMessageForTo(^NSString *{
    if (within) {
      return [NSString stringWithFormat:@"expected %@ to be close to %@ within %@",
              EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
    } else {
      return [NSString stringWithFormat:@"expected %@ to be close to %@",
              EXPDescribeObject(actual), EXPDescribeObject(expected)];
    }
  });

  failureMessageForNotTo(^NSString *{
    if (within) {
      return [NSString stringWithFormat:@"expected %@ not to be close to %@ within %@",
              EXPDescribeObject(actual), EXPDescribeObject(expected), EXPDescribeObject(within)];
    } else {
      return [NSString stringWithFormat:@"expected %@ not to be close to %@",
              EXPDescribeObject(actual), EXPDescribeObject(expected)];
    }
  });
}
EXPMatcherImplementationEnd

My POD files looks as follows:

platform :ios, 6.0
pod 'RestKit', '~> 0.20.0rc'

# Include optional Testing and Search components
pod 'RestKit/Testing', '~> 0.20.0rc'
pod 'RestKit/Search', '~> 0.20.0rc'


target :MTPROJTESTS do
  pod 'Expecta',     '~> 0.2.3'   # expecta matchers
  # pod 'Specta',      '~> 0.1.11'  # specta bdd framework
end

NEW ERROR after updating cocoa pods and EXPECTA: ld: library not found for -lPods-test clang: error: linker command failed with exit code 1 (use -v to see invocation)

Error:

Ld /Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Products/Debug-iphonesimulator/MYIOSPROJProjectTests.xctest/MYIOSPROJProjectTests normal i386
cd /Users/AUSER/Documents/Dev/MYIOSPROJProject/MYIOSPROJProject
setenv IPHONEOS_DEPLOYMENT_TARGET 7.0
setenv PATH "/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch i386 -bundle -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk -L/Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Products/Debug-iphonesimulator -F/Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Products/Debug-iphonesimulator -F/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator7.0.sdk/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -F/Applications/Xcode.app/Contents/Developer/Library/Frameworks -filelist /Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Intermediates/MYIOSPROJProject.build/Debug-iphonesimulator/MYIOSPROJProjectTests.build/Objects-normal/i386/MYIOSPROJProjectTests.LinkFileList -bundle_loader /Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Products/Debug-iphonesimulator/MYIOSPROJProject.app/MYIOSPROJProject -Xlinker -objc_abi_version -Xlinker 2 -ObjC -framework CFNetwork -framework CoreData -framework CoreGraphics -framework Foundation -framework MobileCoreServices -framework Security -framework SystemConfiguration -fobjc-arc -fobjc-link-runtime -Xlinker -no_implicit_dylibs -mios-simulator-version-min=7.0 -framework XCTest -framework UIKit -framework Foundation -lPods-test -lPods-MYIOSPROJProjectTests -Xlinker -dependency_info -Xlinker /Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Intermediates/MYIOSPROJProject.build/Debug-iphonesimulator/MYIOSPROJProjectTests.build/Objects-normal/i386/MYIOSPROJProjectTests_dependency_info.dat -o /Users/AUSER/Library/Developer/Xcode/DerivedData/MYIOSPROJProject-cmxbzcbzjfbvgncspsalqnjvlova/Build/Products/Debug-iphonesimulator/MYIOSPROJProjectTests.xctest/MYIOSPROJProjectTests

I hope someone out there has a clue :)

like image 736
Aziz Avatar asked Jan 13 '14 01:01

Aziz


1 Answers

Regarding the new linker error: Xcode likes to add a new build target for testing, so make sure all the appropriate files (e.g., your .m source files, your static libraries, your frameworks) are set to be included in the test build target. You can do this by selecting the file in the Project Navigator and looking at the "Target Membership" section in the File Inspector pane; make sure the box is checked for the test build target. Also, in your project settings you can select the test build target and go to Build Phases and look at "Link Binary With Libraries" to ensure the appropriate libraries are linked.

like image 122
bgfriend0 Avatar answered Oct 15 '22 14:10

bgfriend0