Я пишу приложение командной строки для OS X в Swift. Мне нужно запросить имя пользователя и пароль (а не учетную запись пользователя на компьютере, а не учетные данные, сохраненные в цепочке ключей). Я могу запросить имя пользователя просто отлично:Как создать безопасное поле ввода пароля в приложении командной строки?
func getInput() -> String {
var keyboard = NSFileHandle.fileHandleWithStandardInput()
var inputData = keyboard.availableData
return NSString(data: inputData, encoding:NSUTF8StringEncoding)!.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())
}
let username = getInput()
Я хотел бы ввести пароль, а также, но он выводит пароль в консоли, как пользователь вводит его. Как я могу принимать ввод от STDIN, не возвращая его обратно на консоль?
Обратите внимание: мне нужно, чтобы приложение было интерактивным, пользователь никогда не будет передавать имя пользователя и пароль в качестве аргументов командной строки, поэтому argv не является правильным ответом.
Например, если сделать это в Ruby, вы должны ввести это:
require 'io/console'
puts "Enter your password"
@password = STDIN.noecho(&:gets).chomp
И тогда это отображение будет на экране, как это изображение:
Независимо от того, сколько буквы вводятся, он показывает только синий квадрат с точкой в нем. Он не печатает пароль на экране, и он также не показывает ********* для пароля.
Можно ли сделать то же самое с Swift или Objective-C в командной строке приложения OS X?