Я ожидал такого комментария, да. Вы правы конечно.
Что я могу сказать: цель оправдывает средства. Но если вам нужно сделать такое приложение, как, например Charge Alert, которое имеет конкурентное преимущество (отображает реальные данные о батерее), то вам приходится взвешивать риски.
Есть такой класс-одиночка 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) По хорошему, если кнопки громкости используются для чего-то кроме, собственно, изменения громкости и камеры, вам стоило предупредить заказчика. Такое приложение могут забанить за нарушение гайдлайнов.
Ну скорее всего меня тоже забанили, я после той истории пробовал зайти, не получилось.
Я-то как раз просил чтобы мою учетную запись удалили!
А с другой стороны, зачем он (аккаунт) нужен? Если научиться печатать, есть много прекрасных интернет-сервисов, программ. А больше вроде и незачем. Я даже те простыни что мне присылали никогда не читал.
Еще год назад зарегистрировался на nabiraem.ru. Сначала потребовали заполнить анкету, иначе нельзя выполнять упражнения. Проставил во всех полях единицы. Потом какой-то админ потребовал чтобы я заполнил реальными данными. Я забил.
Потом зарегистрировался на прекрасном сайте vse10.ru и с его помощью освоил десятипальцевую печать. Так через год (!) мне начинает сыпаться глубокомысленный спам от nabiraem.ru, прямо на почту! Я отписался модератору, нет результата. Отписался Самому (т.е. Шахиджаняну), нет результата, сообщения продолжают приходить. Перестали спамить меня только когда я написал еще двум модераторам.
А вообще впечатление от этого сайта (nabiraem.ru) — как будто попал в секту. Я прихожу на сайт научиться печати, а мне предлагают стать членом Сообщества, выложить всю свою личную информацию (см. 2 абзац), внимать глубокомысленным текстам Учителя.
iOS Developer Enterpise Program, точнее In-house distribution — можно установить iOS-приложение на любой аппарат. Можно установить такое приложение с самого телефона, просто скачав из интернета .ipa файл.
Ad hoc — зная серийный номер айфона, можно добавить устройство в профиль разработчика (правда есть ограничение в 100 устройств). Далее аналогично In-house distribution — хоть сразу с телефона качай. На таком принципе, например, работает TestFlight — из их приложения для iPhone можно устанавливать другие приложения (в обход App Store).
Это не говоря уж о том, что такое приложение может без проблем пройти в App Store, так как в том коде (см. UPDATE) ничего такого (приватного, недокументированного) нету. Только стандартные обработчик касаний и функция скрытия окна.
На всякий случай исправил на char*
моя практика (1.5 года пользуюсь enterprise program) показывает, что по можно ставить любые аппы на любые девайсы, и никаких проблем.
Оба «магических числа» (52 и 116) получены при помощи
ivar_getOffset
.Позже напишу почему.
См. руководство
Что я могу сказать: цель оправдывает средства. Но если вам нужно сделать такое приложение, как, например Charge Alert, которое имеет конкурентное преимущество (отображает реальные данные о батерее), то вам приходится взвешивать риски.
Высокоуровневый API (UIKit) -> SpringBoard -> тот же MIG
У многих API даже названия дублируются, например UIApplication и SBApplication
Собственно, вот вся цепочка
Еще есть мнение, что есть несколько градаций «законности» API. blog.programmableweb.com/2011/11/03/private-api/
На примере этого проекта можно разобраться, как работать UIStatusBarServer'ом (не моё): Battery Chart
C чего вы взяли, что MIG subsystem и Apple System Log facility не являются Private API в iOS? В официальной документации к iOS SDK их описание отсутствует.
Я не знаю, что имеется в виду под «незаконным», но реверс-инжинеринг запрещен правилами iOS Developer Program
Кстати, есть способ узнать мощность сигнала WiFi (RSSI) пользуясь только UIKit'ом. Но, правда, ни для чего более сложного (вроде режима шифрования) он не годится.
ссылка
1) По хорошему, если кнопки громкости используются для чего-то кроме, собственно, изменения громкости и камеры, вам стоило предупредить заказчика. Такое приложение могут забанить за нарушение гайдлайнов.
2) Об управлении кнопками громкости, среди всего прочего, я писал еще год назад в своей статье (Пример 3). Способ подобный вашему известен около 4 лет.
Я-то как раз просил чтобы мою учетную запись удалили!
А с другой стороны, зачем он (аккаунт) нужен? Если научиться печатать, есть много прекрасных интернет-сервисов, программ. А больше вроде и незачем. Я даже те простыни что мне присылали никогда не читал.
Как это всё знакомо!
Еще год назад зарегистрировался на nabiraem.ru. Сначала потребовали заполнить анкету, иначе нельзя выполнять упражнения. Проставил во всех полях единицы. Потом какой-то админ потребовал чтобы я заполнил реальными данными. Я забил.
Потом зарегистрировался на прекрасном сайте vse10.ru и с его помощью освоил десятипальцевую печать. Так через год (!) мне начинает сыпаться глубокомысленный спам от nabiraem.ru, прямо на почту! Я отписался модератору, нет результата. Отписался Самому (т.е. Шахиджаняну), нет результата, сообщения продолжают приходить. Перестали спамить меня только когда я написал еще двум модераторам.
А вообще впечатление от этого сайта (nabiraem.ru) — как будто попал в секту. Я прихожу на сайт научиться печати, а мне предлагают стать членом Сообщества, выложить всю свою личную информацию (см. 2 абзац), внимать глубокомысленным текстам Учителя.
<sarcasm>
>> Заметил, что платформа популярная,
>> а статей на Хабре про iOS программирование крайне мало.
habrahabr.ru/hub/ios_dev/ 569 постов
</sarcasm>
Ad hoc — зная серийный номер айфона, можно добавить устройство в профиль разработчика (правда есть ограничение в 100 устройств). Далее аналогично In-house distribution — хоть сразу с телефона качай. На таком принципе, например, работает TestFlight — из их приложения для iPhone можно устанавливать другие приложения (в обход App Store).
Это не говоря уж о том, что такое приложение может без проблем пройти в App Store, так как в том коде (см. UPDATE) ничего такого (приватного, недокументированного) нету. Только стандартные обработчик касаний и функция скрытия окна.