]> git.saurik.com Git - cydia.git/commitdiff
Use MobileGestalt to get device uniqueIdentifier.
authorJay Freeman (saurik) <saurik@saurik.com>
Sun, 29 Sep 2013 00:37:32 +0000 (17:37 -0700)
committerJay Freeman (saurik) <saurik@saurik.com>
Sun, 29 Sep 2013 00:37:32 +0000 (17:37 -0700)
CyteKit/WebViewController.mm
MobileCydia.mm
makefile

index 643c2b8be00d50fd8394d327e4d52166afd9c429..5846a66f8de1ceb1983e73280ac9127954a652fe 100644 (file)
@@ -38,6 +38,8 @@ extern NSString * const kCAFilterNearest;
 
 #define lprintf(args...) fprintf(stderr, args)
 
+JSValueRef (*$JSObjectCallAsFunction)(JSContextRef, JSObjectRef, JSObjectRef, size_t, const JSValueRef[], JSValueRef *);
+
 // XXX: centralize these special class things to some file or mechanism?
 static Class $MFMailComposeViewController;
 
@@ -138,6 +140,14 @@ float CYScrollViewDecelerationRateNormal;
 + (void) _initialize {
     [WebPreferences _setInitialDefaultTextEncodingToSystemEncoding];
 
+    void *js(NULL);
+    if (js == NULL)
+        js = dlopen("/System/Library/Frameworks/JavaScriptCore.framework/JavaScriptCore", RTLD_GLOBAL | RTLD_LAZY);
+    if (js == NULL)
+        js = dlopen("/System/Library/PrivateFrameworks/JavaScriptCore.framework/JavaScriptCore", RTLD_GLOBAL | RTLD_LAZY);
+    if (js != NULL)
+        $JSObjectCallAsFunction = reinterpret_cast<JSValueRef (*)(JSContextRef, JSObjectRef, JSObjectRef, size_t, const JSValueRef[], JSValueRef *)>(dlsym(js, "JSObjectCallAsFunction"));
+
     dlopen("/System/Library/Frameworks/MessageUI.framework/MessageUI", RTLD_GLOBAL | RTLD_LAZY);
     $MFMailComposeViewController = objc_getClass("MFMailComposeViewController");
 
@@ -994,7 +1004,8 @@ float CYScrollViewDecelerationRateNormal;
 
     JSGlobalContextRef context([frame globalContext]);
     JSObjectRef object([function JSObject]);
-    JSObjectCallAsFunction(context, object, NULL, 0, NULL, NULL);
+    if ($JSObjectCallAsFunction != NULL)
+        ($JSObjectCallAsFunction)(context, object, NULL, 0, NULL, NULL);
 }
 
 - (void) reloadButtonClicked {
index c1fbddc973400e8a2acd6fa660e75b5130324d0f..bdc5b7aec918563f5fb9932db3d5b1098999b71c 100644 (file)
@@ -267,6 +267,15 @@ static bool AprilFools_;
 
 static void (*$SBSSetInterceptsMenuButtonForever)(bool);
 
+static CFStringRef (*$MGCopyAnswer)(CFStringRef);
+
+static NSString *UniqueIdentifier(UIDevice *device = nil) {
+    if (kCFCoreFoundationVersionNumber < 800) // iOS 7.x
+        return [device ?: [UIDevice currentDevice] uniqueIdentifier];
+    else
+        return [(id)$MGCopyAnswer(CFSTR("UniqueDeviceID")) autorelease];
+}
+
 static bool IsReachable(const char *name) {
     SCNetworkReachabilityFlags flags; {
         SCNetworkReachabilityRef reachability(SCNetworkReachabilityCreateWithName(kCFAllocatorDefault, name));
@@ -725,7 +734,7 @@ static NSString *SerialNumber_ = nil;
 static NSString *ChipID_ = nil;
 static NSString *BBSNum_ = nil;
 static _H<NSString> Token_;
-static NSString *UniqueID_ = nil;
+static _H<NSString> UniqueID_;
 static _H<NSString> UserAgent_;
 static _H<NSString> Product_;
 static _H<NSString> Safari_;
@@ -4059,7 +4068,7 @@ static _H<NSMutableSet> Diversions_;
 }
 
 - (NSString *) device {
-    return [[UIDevice currentDevice] uniqueIdentifier];
+    return UniqueIdentifier();
 }
 
 - (NSString *) firmware {
@@ -10657,6 +10666,9 @@ int main(int argc, char *argv[]) {
     dealloc_ = dealloc->method_imp;
     dealloc->method_imp = (IMP) &Dealloc_;*/
 
+    void *gestalt(dlopen("/usr/lib/libMobileGestalt.dylib", RTLD_GLOBAL | RTLD_LAZY));
+    $MGCopyAnswer = reinterpret_cast<CFStringRef (*)(CFStringRef)>(dlsym(gestalt, "MGCopyAnswer"));
+
     /* System Information {{{ */
     size_t size;
 
@@ -10688,7 +10700,7 @@ int main(int argc, char *argv[]) {
     ChipID_ = [CYHex((NSData *) CYIOGetValue("IODeviceTree:/chosen", @"unique-chip-id"), true) uppercaseString];
     BBSNum_ = CYHex((NSData *) CYIOGetValue("IOService:/AppleARMPE/baseband", @"snum"), false);
 
-    UniqueID_ = [device uniqueIdentifier];
+    UniqueID_ = UniqueIdentifier(device);
 
     if (NSDictionary *info = [NSDictionary dictionaryWithContentsOfFile:@"/Applications/MobileSafari.app/Info.plist"]) {
         Product_ = [info objectForKey:@"SafariProductVersion"];
index d167f4ed0723a1fb812fb5e203b2e1a5e2f4902b..bcd811c555bd03d48e91e0feb66824ed739559cc 100644 (file)
--- a/makefile
+++ b/makefile
@@ -62,7 +62,6 @@ libs += -framework CoreGraphics
 libs += -framework Foundation
 libs += -framework GraphicsServices
 libs += -framework IOKit
-libs += -framework JavaScriptCore
 libs += -framework QuartzCore
 libs += -framework SpringBoardServices
 libs += -framework SystemConfiguration