Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Import XCTest into a dynamic framework

I have a project where I have created a dynamic framework. Inside the framework itself, not the framework's tests, I have the following file:

import Foundation
import XCTest


public func assertThrowsException(function: () throws -> Void) {
    XCTAssertTrue(doesItThrowException(function))
}


public func assertDoesNotThrowsException(function: () throws -> Void) {
    XCTAssertFalse(doesItThrowException(function))
}


private func doesItThrowException(function: () throws -> Void) -> Bool {
    do {
        let _ = try function()
    } catch {
        return true
    }
    return false
}

They are utility methods to assert that a clojure is raising an exception. It's to make up for the missing Swift's XCTAssertThrows().

Of course I have to import the XCTest framework to be able to use XCTAssert* methods. But I am not able to achieve it. I keep receiving an error that a framework with that name is not available.

Do you have any idea how to successfully import XCTest?

Thank you very much

like image 320
Cla Avatar asked Oct 27 '15 14:10

Cla


1 Answers

I've run into similar issue and used build settings from Nimble project. To fix issue:

1: Add to Other Linker Flags:

-weak_framework XCTest -weak-lswiftXCTest

2: Add to Framework Search Paths:

$(DEVELOPER_FRAMEWORKS_DIR) $(PLATFORM_DIR)/Developer/Library/Frameworks

Now dynamic framework can import XCTest.

Sidenote: I also wanted to write something similar. I've ended up creating mini-framework for unit testing error handling in Swift, maybe someone will find it useful. Works both with CocoaPods and Carthage.

like image 73
Witold Skibniewski Avatar answered Nov 19 '22 12:11

Witold Skibniewski