はじめに
Bonjourは米アップルが開発したゼロ・コンフィギュレーション技術の実装で、主にLANにおいて何の設定も行わず機器を利用可能にすることができます。
Bonjourは、「サービスを発行する」と「サービスを検索する」に分かれています。
OS X/iOSは、どちらの役割にもなることができOS X同士、iOS同士、OS XとiOSの組み合わせが可能です。
今回は、OS Xがサービスを発行しiOSがサービスを検索したいと思います。
OS X(サービスを発行する)
ViewController.swift
import Cocoa
class ViewController: NSViewController, NSNetServiceDelegate {
let service = NSNetService(domain: "", type: "_test._tcp", name: "Hello World", port: 1900)
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
self.service.delegate = self
self.service.scheduleInRunLoop(NSRunLoop.currentRunLoop(), forMode: NSRunLoopCommonModes)
self.service.publish()
}
override var representedObject: AnyObject? {
didSet {
// Update the view, if already loaded.
}
}
func netServiceDidPublish(sender: NSNetService) {
println(sender.description)
}
}
NSNetServiceでサービスを作成します。
domainは空文字を指定するとローカル全体になります。
typeには任意の文字列を指定可能で、_文字列._プロトコル
という形式が一般的のようです。
iOS(サービスを検索する)
ViewController.swift
mport UIKit
class ViewController: UIViewController, NSNetServiceBrowserDelegate {
let browser = NSNetServiceBrowser()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
self.browser.delegate = self
self.browser.searchForServicesOfType("_test._tcp", inDomain: "")
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func netServiceBrowser(aNetServiceBrowser: NSNetServiceBrowser, didFindService aNetService: NSNetService, moreComing: Bool) {
println(aNetService.name)
}
}
NSNetServiceBrowserを作成します。
typeとinDomainにはOS Xで指定したものと同じものを指定します。
実行
OS Xのアプリケーションを起動してからiOSのアプリケーションを実行します。
iOSのアプリケーションにHello World
と表示されれば成功です。
次回
次回は、iOSアプリケーションから見つけたOS Xに簡単なメッセージを送信したいと思います。