2015-10-09 21 views
0

我想在我的應用程序中使用RNCryptor來做一些數據加密。kRNCryptorAES256Settings引用錯誤

看看下面的代碼:

var encryptedData: NSData = RNEncryptor.encryptData(data, withSettings:kRNCryptorAES256Settings, password: aPassword, error: nil) 

Undefined symbols for architecture i386:
"_kRNCryptorAES256Settings", referenced from: __TFC8UtraceUI24ChatBubbleViewController21textFieldShouldReturnfS0_FCSo11UITextFieldSb in ChatBubbleViewController.o ld: symbol(s) not found for architecture i386 clang: error: linker command failed with exit code 1 (use -v to see invocation)

我不知道爲什麼它會嘗試尋找一個下劃線常量名;理想情況下,它應該試圖尋找kRNCryptorAES256Settings,這是他們在bridgesupport和其他頭文件中的。

任何線索可能會出錯?

謝謝!

+0

你使用的是什麼版本的Swift?如果Swift 2請更新標籤。 – zaph

+0

不,我沒有使用swift 2 –

回答

0

Swift無法處理C結構,它是kRNCryptorAES256Settings的一部分。這個問題與設備的體系結構無關。

所以爲了解決這個問題,我在RNEcryptor中創建了自己的方法,唯一的理由是抽象出C結構的需要。

+ (NSData *)EncryptDataForSwift:(NSData *)data password:(NSString *)password error:(NSError **)error 
{ 
    return [RNEncryptor encryptData:data withSettings:kRNCryptorAES256Settings password:password error:error]; 
} 

我不知道它是否好主意或沒有,但是這使得我的項目編譯,因爲我可以打電話給通過SWIFT我的方法,而無需引用任何C-唯一代碼:

var encryptedData:NSData = RNEncryptor.EncryptDataForSwift(data, password: Password, error: nil) 

希望這會幫助某人。

+0

這是最新的ObjC版本(3.0.1)。我以爲我已經修好了。這是Xcode的舊版本嗎? –

+0

我正在使用xcode版本6.2 –

+0

對於Swift,這已經過時了。你遇到麻煩並不奇怪。當前版本的Swift當然可以處理C結構(即使在Swift1.2中)。 –

1

您可能忘記了包含.m文件作爲您的構建的一部分。檢查Build階段中的「Build Sources」步驟。

如果你在斯威夫特工作,你可能想看看new Swift version。這將在下週合併爲主。

+0

該文件位於Build Sources中。 –