Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@laiso
Forked from 0xced/XCDFakeCarrier.m
Last active December 31, 2015 05:49
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save laiso/7943708 to your computer and use it in GitHub Desktop.
Save laiso/7943708 to your computer and use it in GitHub Desktop.
iPhoneをSAMSUNG製品っぽくするtips http://d.hatena.ne.jp/laiso+iphone/20131213 のやつ
// https://gist.github.com/0xced/3035167
// Copyright (c) 2012-2013 Cédric Luthi / @0xced. All rights reserved.
//
#if TARGET_IPHONE_SIMULATOR
static const char *fakeCarrier = "🇰🇷GALAXY🇰🇷";
#import <objc/runtime.h>
typedef struct {
char itemIsEnabled[23];
char timeString[64];
int gsmSignalStrengthRaw;
int gsmSignalStrengthBars;
char serviceString[100];
// ...
} StatusBarData;
typedef struct {
char itemIsEnabled[24];
char timeString[64];
int gsmSignalStrengthRaw;
int gsmSignalStrengthBars;
char serviceString[100];
// ...
} StatusBarData_6;
typedef struct {
char itemIsEnabled[25];
char timeString[64];
int gsmSignalStrengthRaw;
int gsmSignalStrengthBars;
char serviceString[100];
// ...
} StatusBarData_7;
@interface XCDFakeCarrier : NSObject
@end
@implementation XCDFakeCarrier
+ (void) load
{
[self changeBatteryIcon];
BOOL __block success = NO;
Class UIStatusBarComposedData = objc_getClass("UIStatusBarComposedData");
SEL selector = NSSelectorFromString(@"rawData");
Method method = class_getInstanceMethod(UIStatusBarComposedData, selector);
NSDictionary *statusBarDataInfo = @{ @"^{?=[23c][64c]ii[100c]": @"fake_rawData",
@"^{?=[24c][64c]ii[100c]": @"fake_rawData_6",
@"^{?=[25c][64c]ii[100c]": @"fake_rawData_7" };
[statusBarDataInfo enumerateKeysAndObjectsUsingBlock:^(NSString *statusBarDataTypeEncoding, NSString *fakeSelectorString, BOOL *stop) {
if (method && [@(method_getTypeEncoding(method)) hasPrefix:statusBarDataTypeEncoding])
{
SEL fakeSelector = NSSelectorFromString(fakeSelectorString);
Method fakeMethod = class_getInstanceMethod(self, fakeSelector);
success = class_addMethod(UIStatusBarComposedData, fakeSelector, method_getImplementation(fakeMethod), method_getTypeEncoding(fakeMethod));
fakeMethod = class_getInstanceMethod(UIStatusBarComposedData, fakeSelector);
method_exchangeImplementations(method, fakeMethod);
}
}];
if (success)
NSLog(@"Using \"%@\" fake carrier", [[NSString alloc] initWithCString:fakeCarrier encoding:NSUTF8StringEncoding]);
else
NSLog(@"XCDFakeCarrier failed to initialize");
}
+ (void)changeBatteryIcon
{
Class UIStatusBarBatteryItemView = objc_getClass("UIStatusBarBatteryItemView");
SEL selector = NSSelectorFromString(@"contentsImage");
Method method = class_getInstanceMethod(UIStatusBarBatteryItemView, selector);
SEL fakeSelector = NSSelectorFromString(@"re_contentsImage");
Method fakeMethod = class_getInstanceMethod(self, fakeSelector);
BOOL success = class_addMethod(UIStatusBarBatteryItemView, fakeSelector, method_getImplementation(fakeMethod), method_getTypeEncoding(fakeMethod));
fakeMethod = class_getInstanceMethod(UIStatusBarBatteryItemView, fakeSelector);
method_exchangeImplementations(method, fakeMethod);
NSLog(@"Replace batteryIcon / success: %d", success);
}
- (id)re_contentsImage
{
return [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"samsung.png"]];
}
- (StatusBarData *) fake_rawData
{
StatusBarData *rawData = [self fake_rawData];
strlcpy(rawData->serviceString, fakeCarrier, sizeof(rawData->serviceString));
return rawData;
}
- (StatusBarData_6 *) fake_rawData_6
{
StatusBarData_6 *rawData = [self fake_rawData_6];
strlcpy(rawData->serviceString, fakeCarrier, sizeof(rawData->serviceString));
return rawData;
}
- (StatusBarData_7 *) fake_rawData_7
{
StatusBarData_7 *rawData = [self fake_rawData_7];
strlcpy(rawData->serviceString, fakeCarrier, sizeof(rawData->serviceString));
return rawData;
}
@end
#endif
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment