はじめに
- プログラム上で Mac 自身のホスト名を取得する必要があったので、ちょっと調べてみました
- 同一のローカルネットワーク上からアクセスするための名前を取得したかったため
- 実行する Mac が変わる可能性があるので、ホスト名を直書きしたくない
使うもの
- Foundation フレームワークにHost クラスがあるので、これが使えそうです
試した環境
- macOS Mojave 10.14.2
- Xcode 10.1
- Swift 4.2
ホスト名の取得方法
- 以下のようなコードで取得できます
if let hostName = Host.current().name {
print(hostName)
}
- 実行結果例(システム環境設定の共有から設定したコンピュータ名によって、結果は異なります)
my-business-mac.local
課題
- 上記のコードで、一見問題ないように見えます
- が、 Apple のドキュメント上ではこう書かれています
One of the hostnames of the receiver. Can be either a simple hostname, such as "sales", or a fully qualified domain name, such as "sales.anycorp.com".
- つまり、複数あるうちのどの形式で返されるかわからないということです
- 試しに、こんなコードを書いてみました
for hostName in Host.current().names {
print(hostName)
}
- 実行結果例
my-business-mac.local
MY-BUSINESS-MAC.local
localhost
- 場合によっては localhost が返されてしまう可能性があるということかもしれません
- 私の用途としては、ネットワーク上からアクセスできる名前が欲しかったので localhost が返されると厳しいです
- 常に一番上の形式を返してくれればいいのですが、確実な保証はなさそうです
最後に
- ホスト名を取得したい場面はいろいろありそうですが、少なくとも Host クラスでは指定した取得はできなさそうです
- 他の API で上手く取得できる、などがあれば情報を頂けるとうれしいです