前提・実現したいこと
iBeaconを検知してUUIDやMajor,MinorIDをXcodeのコンソールに表示させたいです。
下記コードを実行したところコンソールには何も表示されず、原因や改善方法を知りたいです。
CoreLocationというフレームワークを使っております。
公式ドキュメント
https://developer.apple.com/documentation/corelocation
エラーメッセージは出ておりません。
各関数の使い方が間違っていたり、関数を呼び出さないといけないところで呼び出してなかったり
のような間違いなのか、どこが上手く機能していないのか分かりません。
ソースコードのどのあたりを変更したら良いかご教示頂けると幸いです。
発生している問題・エラーメッセージ
エラーメッセージは出ていません。
該当のソースコード
Swift
1import UIKit 2import CoreLocation 3 4class ViewController: UIViewController, CLLocationManagerDelegate { 5 6 var myLocationManager : CLLocationManager! 7 var myBeaconRegion : CLBeaconRegion! 8 9 override func viewDidLoad() { 10 super.viewDidLoad() 11 // Do any additional setup after loading the view. 12 13 // 受信対象のビーコンのUUIDを設定 14 let uuid:UUID? = UUID(uuidString: "********-****-****-****-************") 15 16 // ビーコン領域の初期化 17 myBeaconRegion = CLBeaconRegion(uuid: uuid!, identifier: "BeaconApp") 18 19 // ロケーションマネージャを作成する 20 myLocationManager = CLLocationManager(); 21 22 // デリゲートを自身に設定 23 myLocationManager.delegate = self; 24 25 } 26 27 //インスタンス作成時に呼ばれる 28 func locationManagerDidChangeAuthorization(_ manager: CLLocationManager) { 29 let status = manager.authorizationStatus 30 switch status { 31 case .authorizedAlways, .authorizedWhenInUse: 32 break 33 case .notDetermined, .denied, .restricted: 34 myLocationManager.requestWhenInUseAuthorization() 35 default: 36 break 37 } 38 } 39 40 //位置認証のステータスが変更された時に呼ばれる 41 func locationManager(_ manager: CLLocationManager, didChangeAuthorization status: CLAuthorizationStatus) { 42 //観測を開始させる 43 myLocationManager.startMonitoring(for: self.myBeaconRegion) 44 } 45 46 //観測の開始に成功すると呼ばれる 47 func locationManager(_ manager: CLLocationManager, didStartMonitoringFor region: CLRegion) { 48 //観測開始に成功したら、領域内にいるかどうかの判定をおこなう。→(didDetermineState)へ 49 myLocationManager.requestState(for: self.myBeaconRegion) 50 } 51 52 // ビーコン領域のステータスを取得 53 func locationManager(_ manager: CLLocationManager, didDetermineState state: CLRegionState, for inRegion: CLRegion) { 54 55 switch (state) { 56 case .inside: // ビーコン領域内 57 // ビーコンの測定を開始 58 self.myLocationManager.startRangingBeacons(satisfying: self.myBeaconRegion.beaconIdentityConstraint) 59 break 60 case .outside: // ビーコン領域外 61 break 62 63 case .unknown: // 不明 64 break 65 66 } 67 } 68 69 // ビーコン領域に入った時 70 func locationManager(_ manager: CLLocationManager, didEnterRegion region: CLRegion) { 71 // ビーコンの位置測定を開始 72 self.myLocationManager.startRangingBeacons(satisfying: self.myBeaconRegion.beaconIdentityConstraint) 73 } 74 75 //領域から出た時 76 func locationManager(_ manager: CLLocationManager, didExitRegion region: CLRegion) { 77 //測定を停止する 78 self.myLocationManager.stopRangingBeacons(satisfying: self.myBeaconRegion.beaconIdentityConstraint) 79 } 80 81 // ビーコンの位置測定 82 func locationManager(_ manager: CLLocationManager, didRangeBeacons beacons: [CLBeacon], in region: CLBeaconRegion){ 83 for beacon in beacons { 84 print("uuid:(beacon.uuid)") 85 print("major:(beacon.major)") 86 print("minor:(beacon.minor)") 87 if (beacon.proximity == CLProximity.immediate) { 88 print("proximity:immediate") 89 } 90 if (beacon.proximity == CLProximity.near) { 91 print("proximity:near") 92 } 93 if (beacon.proximity == CLProximity.far) { 94 print("proximity:Far") 95 } 96 if (beacon.proximity == CLProximity.unknown) { 97 print("proximity:unknown") 98 } 99 print("accuracy:(beacon.accuracy)") 100 print("rssi:(beacon.rssi)") 101 print("timestamp:(beacon.timestamp)") 102 } 103 } 104} 105
試したこと
print関数が機能していないのではと思ったのですが、他のプログラムでは動いていたのを確認できました。設定しているUUIDも間違いはございませんでした。iBeaconはbluetoothをonにしていないと動かないと聞いたことがあり、wi-fiやbluetoothもonの状態で実行致しましたが上手くいきませんでした。
補足情報(FW/ツールのバージョンなど)
Swift5
Xcode.Ver.13.2.1
回答1件
あなたの回答
tips
プレビュー