

現在、Swiftを使ってUUID問わず、近くにあるiBeaconの一覧を出したいと考えています。  
UUIDを指定せずにiBeaconの電波を受信することは可能でしょうか。


CC BY-SA 3.0
2016-06-14T03:28:07.077
26728
2016-06-18T16:26:31.070
16840
question
iphone swift2
Swiftを使用したiBeacon受信（UUID未指定）


結論から申し上げますと、  
`CoreLocation.framework`を利用してiBeaconを検知するのであれば、  
`UUID`の指定は必須となります。

`CoreBluetooth.framework`を利用すれば、  
ブロードキャストされているBluetoothの電波は全て受信することができるので、  
iBeaconの電波も拾うことが可能です。

しかしながら、`CoreBluetooth.framework`を使ってiBeaconを受信しようとすると下記の懸念があります。

  1. Apple Storeへの申請時に意図したframeworkの利用をしていないためリジェクトされる
  2. アプリを起動していない状態ではiBeaconを検知できない

少し詳しく説明すると、

>   1. Apple Storeへの申請時に意図したframeworkの利用をしていないためリジェクトされる
>

AppleはiBeaconの受信は`CoreLocation.framework`を利用することを想定しています。  
`CoreBluetooth.framework`はBluetoothの送受信に利用するのですが、  
iBeaconの検知はユーザの位置情報検知ということでジオフェンスの一貫と考えられています。

また、AppleはiPhoneの電池消耗が速いと揶揄されることに昔から敏感であるため、  
電池を過剰に消耗させてしまうようなframeworkの使い方を良しとはしない可能性があります。

>   2. アプリを起動していない状態ではiBeaconを検知できない
>

`CoreLocation.framework`を使って実装可能なジオフェンス機能は  
アプリを起動していなかったとしても利用することができます。  
しかしながら、  
`CoreBluetooth.framework`は最低限アプリをバックグラウンドで起動しておく必要があります。

もし、アプリの利用シーンの中に、  
**『ユーザーがアプリを起動しない』** シーンが含まれているのであれば、  
`CoreBluetooth.framework`の利用は適さないでしょう。

個人的な見解ですが、  
Appleが想定するiBeaconの使い方から外れないように気をつけることをオススメしたいと思います。

少しでも参考になれば幸いです。


CC BY-SA 3.0
2016-06-18T16:26:31.070
26835
2016-06-18T16:26:31.070
8968
26728
answer