Вы МОЖЕТЕ создавать приложения iBeacon, используя XCode 4.x для более старых версий iOS. Настройка немного сложна, и эти приложения могут использовать функции iBeacon только на телефонах с iOS7 или более поздней версии. Но он все еще может работать на более ранних версиях iOS.
Хитрость заключается в том, что вам сначала нужно создать двоичную оболочку вокруг API-интерфейсов iBeacon с помощью XCode 5. Этот код-оболочка должен запрашивать классы CoreLocation
, чтобы узнать, существуют ли API-интерфейсы iBeacon, и корректно завершать работу, если их нет. Вам нужно только использовать XCode 5 для компиляции этого двоичного файла, затем вы добавляете его в свой проект XCode 4.x (вместе с вашим заголовочным файлом, чтобы исходный код мог получить доступ к интерфейсу класса).
Ниже приведен фрагмент кода из класса, который выполняет это для мониторинга iBeacons. Вам придется добавить дополнительные методы для ранжирования.
typedef void(^RNDetermineStateCompletionHandler)(NSInteger state, CLRegion *region);
- (id)init {
self = [super init];
if (self != nil) {
_locationManager = [[CLLocationManager alloc] init];
_locationManager.delegate = self;
}
return self;
}
- (BOOL)isIBeaconCapable {
return [CLLocationManager isRangingAvailable];
}
- (void)setUUID:(NSString *)uuidStr {
NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:uuidStr];
NSLog(@"RNLocation Wrapper: Set UUID to %@", uuidStr);
_beaconRegion = [[NSClassFromString(@"CLBeaconRegion") alloc] initWithProximityUUID:uuid identifier:@"my.region.identifier"];
}
- (void)monitorBeaconRangeWithHandler:(RNDetermineStateCompletionHandler)completionHandler {
for (CLBeaconRegion *region in [_locationManager monitoredRegions]) {
NSLog(@"Stopping monitoring on: %@ ", region.identifier);
[_locationManager stopMonitoringForRegion:region];
}
_stateBlock = completionHandler;
[_locationManager startMonitoringForRegion:_beaconRegion];
}
- (void)locationManager:(CLLocationManager *)manager didDetermineState:(CLRegionState)state forRegion:(CLRegion *)region {
if (_stateBlock) {
_stateBlock(state, region);
}
}
person
davidgyoung
schedule
28.01.2014