Получение текста, отображаемого на экране iPhone / iPad - PullRequest
0 голосов
/ 14 сентября 2011

Я хочу знать, возможно ли перехватить весь текст, отображаемый на экране iPhone или iPad. Мы хотим собрать все распространенные формулировки, используемые на мобильных устройствах. Если кто-то может помочь, пожалуйста, дайте мне знать.

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Нет, это невозможно.Существует два основных способа рисования текста в iOS: WebKit и Core Text.Вам нужно было бы перехватывать вызовы (а в случае с WebKit - перехватывать его внутренние структуры данных).Нет практического способа атаковать это, даже в ваших собственных программах (не говоря уже о том, чтобы пытаться сделать это на системном уровне).Я даже не верю, что был бы практичный способ атаковать это на взломанном устройстве.

Мне трудно представить практический вариант использования этой информации, но если бы она была достаточно ценной,нанял бы кого-нибудь, чтобы он делал снимки экрана вручную и распознавал их.

0 голосов
/ 24 сентября 2011

ну, нет способа сделать это для не сломанных iphone, так как каждое приложение запускается в своей собственной песочнице. приложения не могут общаться друг с другом.

Для взломанных iPhone может быть способ. просто подумайте о голосе яблок - он читает все, к чему прикасается пользователь. так что ДОЛЖЕН быть способ. что может вам помочь:

  • http://chrisalvares.com/blog/?p=7 (руководство по созданию демона на взломанном iphone)
  • взгляните на частные фреймворки ios - есть несколько, начинающиеся с "screenreader". Вы можете посмотреть на их заголовки, используя class-dump-z.
0 голосов
/ 14 сентября 2011

Я не уверен, что понимаю ваш вопрос. Вы имеете в виду текст, отображаемый в КАЖДОМ приложении? Ответ на это будет нет.

Если вы хотите прочитать каждый UILabel текст в вашем собственном приложении, вы можете рекурсивно просматривать иерархию представлений и обнаруживать каждое UILabel. Пример:

- (void)printLabelTextsRecursive:(UIView *)view {
    if ([view isKindOfClass:[UILabel class]]) {
        NSLog(@"Label: %@", ((UILabel *)(view)).text)
    } else {
        for (UIView *subView in view.subViews) {
            [self printLabelTextsRecursive:subView];
        }
    }
}

и назовите его своим UIWindow в классе AppDelegate, например:

[self printLabelTextsRecursive:self.window];
...