#available
watchOS と iOS を区別する場合は機能しないようです。
iOS と watchOS の間で共有されるコードの例を次に示します。
lazy var session: WCSession = {
let session = WCSession.defaultSession()
session.delegate = self
return session
}()
...
if #available(iOS 9.0, *) {
guard session.paired else { throw WatchBridgeError.NotPaired } // paired is not available
guard session.watchAppInstalled else { throw WatchBridgeError.NoWatchApp } // watchAppInstalled is not available
}
guard session.reachable else { throw WatchBridgeError.NoConnection }
デフォルトでWatchOSに設定されているだけで#available
、コンパイラは考慮していないようです。
この API を悪用していますか、それとも iOS と WatchOS をコードで区別する方法は他にありますか?
更新: BPCorp で言及されているように、API を誤用していたようです
上記のコードに Tali のソリューションを使用すると、次のように機能します。
#if os(iOS)
guard session.paired else { throw WatchBridgeError.NotPaired }
guard session.watchAppInstalled else { throw WatchBridgeError.NoWatchApp }
#endif
guard session.reachable else { throw WatchBridgeError.NoConnection }
残念ながら#if os(watchOS)
、Xcode 7 GM の時点ではありません。
編集:いつ追加されたのかわかりませんが#if os(watchOS)
、Xcode 7.2で実行できるようになりました