問題
uint テスト ケースでコード ブロックを直接呼び出しているか、そのコードのラッパーを呼び出しているという奇妙な状況に陥っています。ラッパーの場合、テストはコンパイルされます - 直接呼び出す場合、アーキテクチャの問題が発生します。
誰かが洞察を提供できるかどうか疑問に思っています
概要
SFTPアクションを実行するiOSアプリケーションを作成しており、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
単体テストをコンパイルして実行しようとすると
私が知る限り、この 2 つの「悪い」呼び出しは、基本的に呼び出しとまったく同じことを行っているため、ここではやや途方に暮れています。どちらも同じコードを呼び出していますが、そのうちの 2 つはコードのコンパイルを許可しません。
ここで私が見逃している明らかなものはありますか?誰かが同様の問題に遭遇しましたか?