81

I have started working with OCMock to write test cases for the existing project that I have integrated in my project workspace. After following all the steps mentioned in this link.

When I first executed my test case it's giving the error above. I searched it and tried following some of the solutions like creating new target, restarting Xcode but it didn't help me out. Any idea?

Paulo Mattos
  • 18,845
  • 10
  • 77
  • 85
Varun Mehta
  • 1,733
  • 3
  • 18
  • 39
  • 1
    The instructions are known to work. With the information you've provided it's not possible to diagnose the problem. Please go the build output (cmd-8), on the left side select the "Test" entry, then on the right select "Logs" on the top, then right click on "Test target X" below, select "Copy Transcript... as text", which copies the transcript onto the clipboard. Verify what's in there, and share what you can / think is relevant. – Erik Doernenburg Jan 25 '16 at 22:05
  • Got the reason for above error : ".m file was not linked under Build Phases - > Compile Sources" . But now getting another error "duplicate symbol _OBJC_METACLASS_$_ in:" after adding -ObjC flag as other linker flag. – Varun Mehta Jan 26 '16 at 06:19
  • You should only link the library once, as it is described in the documentation. – Erik Doernenburg Jan 26 '16 at 11:23
  • @ErikDoernenburg can you help me here. I am not able to identify reason – iKushal Jan 20 '20 at 02:36

24 Answers24

124

I have my notes and demo applications for both Cocoapods and Carthage here https://github.com/onmyway133/TestTarget

  • Make sure all frameworks are linked to the Test targets
  • Configure Runpath Search Paths to point to $(FRAMEWORK_SEARCH_PATHS)

More info

onmyway133
  • 45,645
  • 31
  • 257
  • 263
18

I'm using carthage and problem for me was searching for dependencies in a test target. Fix:

Add $(PROJECT_DIR)/Carthage/Build/iOS to Runpath Search Paths

You can find reference here: Carthage issue

Radosław Cięciwa
  • 1,011
  • 8
  • 6
  • 1
    This solved the issue for me, many thanks! Tests weren't running on my macOS target, so I added `$(PROJECT_DIR)/Carthage/Build/Mac`. – Kilian Nov 28 '16 at 18:13
11

There might another solution, if you are using CocoaPods and the UI test target is embedded inside the app target, which is, unfortunately, the case in the default template (pod init).

Try move the UI test target out of the app target as follows:

from:

platform :ios, '11.0'
use_frameworks!

target 'MyApp' do
  # Pods for MyApp

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing

  end
end

to:

platform :ios, '11.0'
use_frameworks!

# Pods shared between MyApp and MyAppUITests    

target 'MyApp' do
    # Pods for MyApp only

end

target 'MyAppUITests' do
    # Pods for testing

end

Credit goes to SpacyRicochet in this issue thread: https://github.com/CocoaPods/CocoaPods/issues/4752#issuecomment-305101269

Junfeng
  • 940
  • 10
  • 19
  • Thanks so much! but... why does this work?! and is there a bug tracking this with cocoapods? – Sam Jun 29 '18 at 14:32
  • @Sam, sorry I don't know why either. I only found this solution by trial and error. You might need to check the official CocoaPods repo for more information. – Junfeng Jul 02 '18 at 10:25
  • We found a cocoapod version update plus setting up our dependencies in the project (target dependency) seemed to teach Cocoapods about our dependencies and actually fix this.. – Sam Jul 02 '18 at 10:39
  • Interesting. I was already using the latest CocoaPods 1.5.3 when I hit the issue. The target dependency of the UI test target was simply the application target. Nothing else. Still I had to change the Podfile to the way I posted above, so that the UI test target could launch successfully. – Junfeng Jul 02 '18 at 10:52
  • Do both live inside the same project? – Sam Jul 02 '18 at 18:11
  • weird but this is the only solution that worked for me. – sandpat Mar 15 '19 at 23:30
6

My solution was to add a "Copy File phase" to my test target. There I set destination to Frameworks and added my framework with the + sign.

leizeQ
  • 795
  • 1
  • 7
  • 18
5

In my case there was nothing wrong with linked files. The Simulator was kind of stuck at the message that the app triggered, like: "App name would like to send you notifications". Pressed OK and the next time my XCTests worked fine.

FeltMarker
  • 510
  • 3
  • 8
5

Just to share my experience about this error:

I'm using fastlane + cocoapods.

I have a workspace with 2 dynamic frameworks:

  • A.framework
  • B.framework

Dependencies:

  • A depends by AFNetworking using cocoapods
  • B depends by A

Dependency are defined in the Podfile.

The error was raised executing framework B tests.

In my case the problem was related to the missing dependency to AFNetworking in B.framework target.

Adding a pod dependency to AFNetworking in B.framework in Podfile, all was resolved.

So even if the target B is compiling successfully, AFNetworking was not embedded into the B test app and the simulator wasn't able to run B test app raising this "very meaningful" (*) error.

(*) thanks to Apple for this!

Lubbo
  • 1,030
  • 1
  • 10
  • 18
3

Wow, I wasted a lot of time on this, my test bundle had the "Host Application" to my application selected. Other test bundles did not.

I expect this solution may not be the right solution for every situation, but my tests were mainly to test the dynamic library and it did not really need a Host Application to run. I was getting the above error, turning this off allowed me to run the tests without getting that error and the breakpoints worked. I was running MacOS but it probably does similar for other environments. I expect this solution may not be the right solution for every situation, but my tests were mainly to test the dynamic library and it did not really need a Host Application to run.

On the test bundle Go to General -> Testing -> Set "Host Application" to None.

possen
  • 8,596
  • 2
  • 39
  • 48
2

In my case Build Active Architecture Only was set to YES.

In project and targets : Build Settings -> Architectures -> Build Active Architecture Only should be NO instead of YES

Mihriban Minaz
  • 3,043
  • 2
  • 32
  • 52
2

My case was special. I used 2 files as test classes. one worked perfectly and the other had that error.
Both link against the same framework.

Solution

CLEAR DERIVED DATA

Window => Projects => Delete (at your project)

Good luck and happy testing!

Yitzchak
  • 3,303
  • 3
  • 30
  • 50
2

In my case I had not added a Run Script phase for the Quick and Nimble libraries which I integrated using Carthage.

Ben Thomas
  • 1,416
  • 2
  • 17
  • 25
2

I had the same issue and already tried everything proposed here without any success.

Running the tests on a different simulator solved the problem for me. After that, the original simulator also didn't cause fails any longer.

fredpi
  • 8,414
  • 5
  • 41
  • 61
1

I tried many different options but none helped me except below and wasted lot of time, posting this so that really help and save time on this:

Follow all of the instructions for Full Manual Configuration

https://github.com/appium/appium-xcuitest-driver/blob/master/docs/real-device-config.md#full-manual-configuration Tips When you come to the part where you are executing xcodebuild, if the build fails, and the log mentions "RoutingHTTPServer" or "YYCache", add these two frameworks on the Build Phases tab of the WebDriverAgentRunner target Open the WebDriverAgent.xcodeproj

Select 'Targets' -> 'WebDriverAgentRunner'

Open 'Build Phases' -> 'Copy frameworks'

Click '+' -> add RoutingHTTPServer

Click '+' -> add YYCache https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-382344697 https://github.com/facebook/WebDriverAgent/issues/902#issuecomment-383362376

The build/test may also fail due to the WebDriverAgentRunner app/developer being untrusted on the device. Please trust the app and try again.

While trying to access the WebDriverAgent server status, if it tries to connect on port 0, hardcode port 8100 in appium-xcuitest-driver/WebDriverAgent/WebDriverAgentLib/Routing/FBWebServer.m

Original line: server.port = (UInt16)port; New line: server.port = 8100; https://github.com/facebook/WebDriverAgent/issues/661#issuecomment-338900334

Sam Hanley
  • 4,707
  • 7
  • 35
  • 63
Ravi
  • 21
  • 4
1

During I was creating Cocoa Touch Framework every any attempt to run tests ended with the same error message like OP wrote.

I fixed it by changing build configuration of TEST from Debug to Release.

Step 1

enter image description here

Step 2

enter image description here

Step 3

enter image description here

Note: There was not need any extra configuration of Runpath Search Paths.

I am using Cocoapods in ver 1.6.1 and Xcode 10.1

Kamil Harasimowicz
  • 4,684
  • 5
  • 32
  • 58
  • Very strange. This worked for me as well in one project (using same versions) but another project works just fine using the Debug config to test ‍♂️ – phatblat Apr 03 '19 at 13:50
1

If anybody still experience this issue this answer helped me. Set Always Embed Swift Standard Libraries to No in the projects settings. I did it for the UI test target.

stellz
  • 130
  • 1
  • 8
0

Would like to share my answer hope it could save someones time.

For me .m file was not properly linked under Build Phases - > Compile Sources

Varun Mehta
  • 1,733
  • 3
  • 18
  • 39
0

In my case, I had declared a property as readonly in a header file:

// In .h file
@property (nonatomic, readonly) NSUInteger count;

but I forgot to add this declaration to the .m so a setter would be generated:

// In .m file
@property (nonatomic, assign) NSUInteger count;

Silly mistake, not totally sure why it manifested in this error, but adding that line to the .m fixed the problem.

JohnG
  • 653
  • 8
  • 14
0

In my case, my Build Settings -> Architectures was setting only for armv7 and I changed for ARCHS_STANDARD that was the same of my Host Application

Felipe FMMobile
  • 1,641
  • 20
  • 17
0

For me, I had to 'Trust' developer in 'Device Management' under 'Settings -> General' on my device. (Settings -> General -> Device Management -> DeveloperID -> 'Trust the app') As I was running app through side loading using my apple ID.

infiniteLoop
  • 2,135
  • 1
  • 25
  • 29
0

In my case I had to remove $(inherited) from Other Linker Flags in my ui test target. I have installed static libraries via cocoapods.

zuziaka
  • 575
  • 3
  • 10
0

for me the problem was the Pod file
I made a new target but forgot add target in the pod file

target 'mobilesdkIntegrationTests' do
  // write here any predefined pods if any, like
  testing_pods
end

just add target in the pod file fixed the issue

Sultan Ali
  • 2,497
  • 28
  • 25
0

There are some automatically added project settings that come with Xcode 10, and they come some of the time, not all of the time. After downloading Xcode 10, restart your computer. That is what fixed this for me. None of these answers fixed it for me. I hope this helps. I wish I could give a better answer.

ScottyBlades
  • 12,189
  • 5
  • 77
  • 85
0

Switching from Xcode 9.4.1 to Xcode 10.1 solved the problem in my case.

pmdj
  • 22,018
  • 3
  • 52
  • 103
0

In my case I had completely clean project with default empty tests. If I have added any pod I received this error. Solution was that at least one file in Test target should import Foundation

import XCTest
import Foundation

@testable import CVZebra

class CVZebraTests: XCTestCase {

    override func setUp() {
        // Put setup code here. This method is called before the invocation of each test method in the class.
    }

    override func tearDown() {
        // Put teardown code here. This method is called after the invocation of each test method in the class.
    }

    func testExample() {
        // This is an example of a functional test case.
        // Use XCTAssert and related functions to verify your tests produce the correct results.
    }

    func testPerformanceExample() {
        // This is an example of a performance test case.
        self.measure {
            // Put the code you want to measure the time of here.
        }
    }

}
Xavier Lowmiller
  • 1,381
  • 1
  • 15
  • 24
MarekM
  • 568
  • 1
  • 5
  • 11
0

In my case there was an issue with my app in the simulator. Before the issue came up, I processed a db-migration (realm) which failed and destroyed my db. So everything worked fine for me after I deleted the app on the simulator.

Sandu
  • 480
  • 5
  • 13