【问题标题】:Import XCTest into a dynamic framework将 XCTest 导入动态框架
【发布时间】:2016-01-27 00:11:29
【问题描述】:

我有一个项目,我在其中创建了一个动态框架。在框架本身内部,而不是框架的测试,我有以下文件:

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
}

它们是断言 clojure 正在引发异常的实用方法。是为了弥补缺少的 Swift 的XCTAssertThrows()

当然,我必须导入XCTest 框架才能使用XCTAssert* 方法。但我无法实现它。 我不断收到错误消息,提示该名称的框架不可用。

你知道如何成功导入XCTest吗?

非常感谢

【问题讨论】:

    标签: ios swift ios9 xctest


    【解决方案1】:

    我遇到了类似的问题,并使用了来自 Nimble 项目的构建设置。解决问题:

    1:添加到其他链接器标志:

    -weak_framework XCTest -weak-lswiftXCTest

    2:添加到框架搜索路径:

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

    现在动态框架可以导入XCTest了。

    旁注:我也想写一些类似的东西。我最终创建了mini-framework for unit testing error handling in Swift,也许有人会觉得它很有用。适用于 CocoaPods 和 Carthage。

    【讨论】:

    • 这很好用,谢谢!这不应该是公认的答案吗? @jollyr0ger
    • 2020 年有没有更好的方法来做到这一点?这行得通,但它似乎是一个漫长的回合来做一些应该简单的事情:/
    【解决方案2】:

    如果您使用Cocoapods 创建framework,则需要在.podspec 文件中添加XCTest

    Pod::Spec.new do |spec|
    
      ...
      spec.framework = 'XCTest'
    
    end
    

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 2015-01-13
      • 1970-01-01
      • 2013-10-14
      • 2015-12-14
      • 1970-01-01
      • 2012-10-16
      • 2015-10-23
      • 1970-01-01
      相关资源
      最近更新 更多