2

问题

我遇到了一种奇怪的情况,我要么直接调用 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 框架

在此处输入图像描述

当我尝试编译和运行单元测试时

我在这里有点不知所措,因为据我所知,这两个“坏”电话基本上做的事情与电话工作完全相同。他们都在调用相同的代码——但他们中的两个不允许代码编译。

我在这里有什么明显的遗漏吗?有没有人遇到过类似的问题?

4

0 回答 0