I'm trying to implement some UI tests in my project. Everything goes fine as long as I keep it simple: record the test case, add some asserts, then run the test. This works fine, however when I try to access the application module from inside my test, the linker throws an error (See below):
In the application source file:
func foo() {
assert(true)
}
In the UI tests:
import XCTest
@testable import MyApp
func testExample() {
foo()
}
Error:
Undefined symbols for architecture i386: "MyApp.foo () -> ()", referenced from: MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() -> () in MyAppUITests.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)
Undefined symbols for architecture x86_64: "MyApp.foo () -> ()", referenced from: MyAppUITests.MyAppUITests.testExample (MyAppUITests.MyAppUITests)() -> () in MyAppUITests.o ld: symbol(s) not found for architecture x86_64
I have found similar issue reported here:
https://forums.developer.apple.com/thread/20609
but no solution. Seems to me like the @testable
simply doesn't work correctly. The guy on the developer.apple.com tried to workaround by adding the Test Host and Bundle Loader in the settings, but I don't think this is the correct approach. I think the @testable
should just make everything work, and it doesn't look like it at the moment. Any help appreciated!
@testable
does not work in UITests, cuz you should not be accessing raw functions like this. – Kingfisher@testable
. – Ion