如何在OSX上使用Swift获取蓝牙MAC地址

时间:2016-10-17 16:59:39

标签: swift macos bluetooth

我试图获取Macbook Air的蓝牙MAC地址,在许多地方都在线查看。我偶然发现的一切都只是基于iOS开发,而不是基于macOS领域。其他一切都说它已经过了iOS 7的折旧,所以我不知道它是否可以在最新的Mac操作系统上使用。有谁知道在任何框架下是否可能?我不打算将此内容提交到App Store。

2 个答案:

答案 0 :(得分:0)

我可以找到从使用Swift的macOS应用程序获取蓝牙MAC地址的最佳选项围绕executing a terminal command,然后格式化输出。

只需指定launchPath的{​​{1}}即可 &安培;使用标记networksetup获取output

答案 1 :(得分:0)

使用Bash脚本

我要感谢@MattGalaxy在他的回答下面的评论中提出的建议和帮助。最终,这一切都很顺利,这就是我如何解决这个问题。这可以在Playground或使用Xcode构建的macOS应用程序中运行。

以下是与之相关的代码:

 import Foundation
 let task = Process()
 task.launchPath = "/usr/bin/env"
 task.arguments = ["networksetup", "-getmacaddress", "en2"]
 let pipe = Pipe()
 task.standardOutput = pipe
 task.standardError = pipe
 task.launch()
 task.waitUntilExit()
 let data = pipe.fileHandleForReading.readDataToEndOfFile()
 let output: String = NSString(data: data, encoding: String.Encoding.utf8.rawValue) as! String

原来是这样的:

Ethernet Address: XX:XX:XX:XX:XX:XX (Device: en2)

这确实说以太网地址,然而,设备en2专门用于蓝牙,因此所有这些捕获都是。

我将变量bluetoothAddress设置为等于上面的输出。

var bluetoothAddress = output

然后只是玩了一下,直到我能够只处理这些之间的地址。

let startIndex = bluetoothAddress.index(bluetoothAddress.startIndex, offsetBy: 18)
let endIndex = bluetoothAddress.index(bluetoothAddress.startIndex, offsetBy: 34)
bluetoothAddress = bluetoothAddress[startIndex...endIndex]

然后最后,放弃我原来在问题中要求的输出:

XX:XX:XX:XX:XX:XX

(请记住,我在整个答案中使用占位符XX来保护我的隐私:P)