Я пытался придумать чистое решение RubyMotion, но я просто недостаточно понимаю «указатели», чтобы заставить его работать. Итак, я пошел другим путем: расширил класс NSData.
1) Создайте папку vendor / NSData + Hex внутри вашего проекта.
2) Создайте файл NSData + Hex.h внутри папки и поместите это внутрь:
#import <Foundation/Foundation.h>
@interface NSData (Hex)
@property (nonatomic, copy, readonly) NSString *hexString;
@end
3) Теперь создайте NSData + Hex.m в той же папке и поместите это в файл:
#import "NSData+Hex.h"
@implementation NSData (Hex)
- (NSString *) hexString
{
NSUInteger len = self.length;
if (len == 0) {
return nil;
}
const unsigned char *buffer = self.bytes;
NSMutableString *hexString = [NSMutableString stringWithCapacity:(len * 2)];
for (int i = 0; i < len; ++i) {
[hexString appendFormat:@"%02x", buffer[i]];
}
return [hexString copy];
}
@end
4) Добавьте это в ваш Rakefile:
app.vendor_project('vendor/NSData+Hex', :static)
5) Теперь вы можете просто позвонить deviceToken.hexString
в def application(application, didRegisterForRemoteNotificationsWithDeviceToken: deviceToken)
.
Если кто-то может придумать решение на чистом RubyMotion, не стесняйтесь отвечать. На данный момент, по крайней мере, работает. :)