问题
我遇到了一种奇怪的情况,我要么直接调用 uint 测试用例中的代码块,要么调用该代码的包装器。在包装器的情况下,测试将编译 - 在直接调用它的情况下,我遇到了架构问题。
我想知道是否有人可以提供一些见解
概述
我正在编写一个 iOS 应用程序来执行一些 SFTP 操作,并且我正在使用允许 SFTP的NMSSH 库。我已经通过Carthage将其包含在内,并且一切正常。
我的情况是,我在主要目标中编写了一些代码来测试 SFTP 功能。
项目代码
https://github.com/jeeftor/compileBug
源代码
import Foundation
import NMSSH
/**
SFTP Data Transfer Provider is a way of getting SFTP Data
*/
public class SFTPFileDataProvider {
private var privateKeyPath: String?
private var publicKeyPath: String?
private let keyPassword = ""
private let userName: String
private let host: String
private let port: Int
/**
Initializes a new SFTP Connection with host and (optional) port
- parameter host: hostname of SFTP server
- parameter port: _OPTIONAL_ defaults to 22
*/
init(host: String, port: Int = 22, userName: String) {
self.userName = userName
self.host = host
self.port = port
}
/**
Returns a NMSFTP session with the configured data elements
- returns: a session that is hopefully connected
*/
func ftpSession() -> NMSFTP {
let c = NMSSHSession.connectToHost(self.host, port: self.port, withUsername: self.userName)
c.authenticateByPassword("password")
return NMSFTP.connectWithSession(c)
}
public static func test() {
testFTP()
}
}
class TMonkey {
func test() {
testFTP()
}
}
func testFTP() {
let sftp: NMSFTP = SFTPFileDataProvider(host: "test.rebex.net:22", userName: "demo").ftpSession()
for f in sftp.contentsOfDirectoryAtPath("/") {
print (f)
}
}
测试代码
在我的测试用例中,我尝试以 3 种不同的方式调用 SFTP 逻辑。实际编译的唯一方法是如果我这样称呼它:
func test2Good() {
let t = TMonkey()
t.test()
testFTP()
}
如果我取消注释这些家伙中的任何一个:
// UNCOMMENT TO HAVE A BUILD FAILURE
func testCompileIssue() {
let sftp = SFTPFileDataProvider(host: "test.rebex.net:22", userName: "demo")
}
// UNCOMMENT TO HAVE A BUILD FAILURE
func testStatic() {
SFTPFileDataProvider.test()
}
我收到以下错误:
ld:未找到架构 x86_64 的 NMSSH 框架
当我尝试编译和运行单元测试时
我在这里有点不知所措,因为据我所知,这两个“坏”电话基本上做的事情与电话工作完全相同。他们都在调用相同的代码——但他们中的两个不允许代码编译。
我在这里有什么明显的遗漏吗?有没有人遇到过类似的问题?