All streams
Search
Write a publication
Pull to refresh
29
0
Олег Трахман @Trahman

User

Send message
void* arithmetic
На всякий случай исправил на char*
Согласен,
моя практика (1.5 года пользуюсь enterprise program) показывает, что по можно ставить любые аппы на любые девайсы, и никаких проблем.
Всё так и есть :)
Оба «магических числа» (52 и 116) получены при помощи ivar_getOffset.

Позже напишу почему.
Вы правы, разве что я использовал class-dump-z и в большей мере сам рантайм iOS.
И еще, технически, адресная арифметика — это единственный возможный момент вытянуть структуру из Objective-C объекта, насколько мне известно.

См. руководство
Я ожидал такого комментария, да. Вы правы конечно.
Что я могу сказать: цель оправдывает средства. Но если вам нужно сделать такое приложение, как, например Charge Alert, которое имеет конкурентное преимущество (отображает реальные данные о батерее), то вам приходится взвешивать риски.
Скорее всего так:

Высокоуровневый API (UIKit) -> SpringBoard -> тот же MIG

У многих API даже названия дублируются, например UIApplication и SBApplication

Собственно, вот вся цепочка
У меня самого сложилось впечатление, что использовать Private API всё-таки можно, главное не наглеть :) Потому что примеров таких приложений — масса.

Еще есть мнение, что есть несколько градаций «законности» API. blog.programmableweb.com/2011/11/03/private-api/
Есть такой класс-одиночка UIStatusBarServer, экземпляр которого поставляет актуальную информацию о состоянии сетей, заряде батареи и т.п. для элементов статус-бара. Вот собственно формат этой информации:

typedef struct { // from UIStatusBarServerThread
    char itemIsEnabled[24];
    char timeString[64];
    int gsmSignalStrengthRaw;
    int gsmSignalStrengthBars;
    char serviceString[100];
    char serviceCrossfadeString[100];
    char serviceImages[2][100];
    char operatorDirectory[1024];
    unsigned int serviceContentType;
    int wifiSignalStrengthRaw;  // !
    int wifiSignalStrengthBars;
    unsigned int dataNetworkType;
    int batteryCapacity;
    unsigned int batteryState;
    char batteryDetailString[150];
    int bluetoothBatteryCapacity;
    int thermalColor;
    unsigned int thermalSunlightMode : 1;
    unsigned int slowActivity : 1;
    unsigned int syncActivity : 1;
    char activityDisplayId[256];
    unsigned int bluetoothConnected : 1;
    unsigned int displayRawGSMSignal : 1;
    unsigned int displayRawWifiSignal : 1;
    unsigned int locationIconType : 1;
} StatusBarData;


На примере этого проекта можно разобраться, как работать UIStatusBarServer'ом (не моё): Battery Chart
Спасибо за статью!

Под катом я расскажу, как узнать все это без применения Private API и Jailbreak.

C чего вы взяли, что MIG subsystem и Apple System Log facility не являются Private API в iOS? В официальной документации к iOS SDK их описание отсутствует.

Итак, мы реализовали часть SystemConfiguration.framework самостоятельно и получили необходимые данные не прибегая к Jailbreak или незаконному использованию библиотек.

Я не знаю, что имеется в виду под «незаконным», но реверс-инжинеринг запрещен правилами iOS Developer Program

В общем-то, Public API не дает возможности узнать ничего, кроме SSID, BSSID и сетевых настроек адаптера. А режим шифрования? мощность сигнала?

Кстати, есть способ узнать мощность сигнала WiFi (RSSI) пользуясь только UIKit'ом. Но, правда, ни для чего более сложного (вроде режима шифрования) он не годится.
Ирония судьбы: сегодня же вышла iOS 7, в которой свойство MPMusicPlayerController.volume (на котором построено ваше решение) объявляется не рекомендованным к использованию (deprecated)


ссылка
1. Я конечно не знаю специфики вашего приложения, но например стандартный API, UIImagePickerController сам переопределяет кнопки громкости, и не нужно никаких хаков.
И ещё два момента:
1) По хорошему, если кнопки громкости используются для чего-то кроме, собственно, изменения громкости и камеры, вам стоило предупредить заказчика. Такое приложение могут забанить за нарушение гайдлайнов.

2) Об управлении кнопками громкости, среди всего прочего, я писал еще год назад в своей статье (Пример 3). Способ подобный вашему известен около 4 лет.
Громкость не изменится, индикатора не будет видно.
Можно проще:

@interface UIApplication (Private)
- (void) setWantsVolumeButtonEvents: (BOOL)flag;
@end
@implementation AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
	[[UIApplication sharedApplication] setWantsVolumeButtonEvents: YES];
	
	NSOperationQueue *mainQueue = [NSOperationQueue mainQueue];
	NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
	
	[center addObserverForName:@"_UIApplicationVolumeDownButtonDownNotification"
						object:nil
						 queue:mainQueue
					usingBlock:^(NSNotification *note) {
						NSLog(@"Volume '-' event(down)");
					}];
	[center addObserverForName:@"_UIApplicationVolumeDownButtonUpNotification"
						object:nil
						 queue:mainQueue
					usingBlock:^(NSNotification *note) {
						NSLog(@"Volume '-' event (up)");
					}];
	
	[center addObserverForName:@"_UIApplicationVolumeUpButtonDownNotification"
						object:nil
						 queue:mainQueue
					usingBlock:^(NSNotification *note) {
						NSLog(@"Volume '+' event(down)");
					}];
	[center addObserverForName:@"_UIApplicationVolumeUpButtonUpNotification"
						object:nil
						 queue:mainQueue
					usingBlock:^(NSNotification *note) {
						NSLog(@"Volume '+' event (up)");
					}];

    return YES;
}
Ну скорее всего меня тоже забанили, я после той истории пробовал зайти, не получилось.

Я-то как раз просил чтобы мою учетную запись удалили!

А с другой стороны, зачем он (аккаунт) нужен? Если научиться печатать, есть много прекрасных интернет-сервисов, программ. А больше вроде и незачем. Я даже те простыни что мне присылали никогда не читал.

Как это всё знакомо!

Еще год назад зарегистрировался на nabiraem.ru. Сначала потребовали заполнить анкету, иначе нельзя выполнять упражнения. Проставил во всех полях единицы. Потом какой-то админ потребовал чтобы я заполнил реальными данными. Я забил.

Потом зарегистрировался на прекрасном сайте vse10.ru и с его помощью освоил десятипальцевую печать. Так через год (!) мне начинает сыпаться глубокомысленный спам от nabiraem.ru, прямо на почту! Я отписался модератору, нет результата. Отписался Самому (т.е. Шахиджаняну), нет результата, сообщения продолжают приходить. Перестали спамить меня только когда я написал еще двум модераторам.

А вообще впечатление от этого сайта (nabiraem.ru) — как будто попал в секту. Я прихожу на сайт научиться печати, а мне предлагают стать членом Сообщества, выложить всю свою личную информацию (см. 2 абзац), внимать глубокомысленным текстам Учителя.
<sarcasm>
>> Заметил, что платформа популярная,
image

>> а статей на Хабре про iOS программирование крайне мало.
habrahabr.ru/hub/ios_dev/ 569 постов
</sarcasm>
iOS Developer Enterpise Program, точнее In-house distribution — можно установить iOS-приложение на любой аппарат. Можно установить такое приложение с самого телефона, просто скачав из интернета .ipa файл.

Ad hoc — зная серийный номер айфона, можно добавить устройство в профиль разработчика (правда есть ограничение в 100 устройств). Далее аналогично In-house distribution — хоть сразу с телефона качай. На таком принципе, например, работает TestFlight — из их приложения для iPhone можно устанавливать другие приложения (в обход App Store).

Это не говоря уж о том, что такое приложение может без проблем пройти в App Store, так как в том коде (см. UPDATE) ничего такого (приватного, недокументированного) нету. Только стандартные обработчик касаний и функция скрытия окна.

Information

Rating
Does not participate
Location
Москва, Москва и Московская обл., Россия
Registered
Activity