Как загрузить новые сгенерированные заголовки частного API в iOS?

Я манекен в iOS, особенно в частном API.

У меня есть приложение для тестирования, и теперь мне нужно использовать частный API (это приложение не для App Store).

Я скачал сгенерированные заголовки из iOS-Runtime-Headers, и что дальше?

Под /System/Library/ у меня есть список библиотек, которые также содержат Frameworks,..., PrivateFrameworks.

Нужно ли заменить исходную структуру на скопированную из iOS-Runtime-Headers?

Потому что у меня есть другие приложения, которые используют только Public API, и я не хочу их повредить.

Из размещенной ссылки они говорят проверить библиотеку, например:

NSBundle *b = [NSBundle 
        bundleWithPath:@"/System/Library/PrivateFrameworks/GAIA.framework"];
BOOL success = [b load];

Но здесь путь указывает на исходный путь.

Или я что-то пропустил,

Спасибо


person snaggs    schedule 10.04.2014    source источник


Ответы (2)


Прежде всего, не заменяйте никакие заголовки, предоставленные Apple.

Как правило, это делается одним из двух способов:

1) Вы можете скопировать некоторые из этих заголовков в свой проект и просто включить эти файлы так же, как и любые другие заголовки.

#import "SomeHeader.h"

2) Иногда вам нужно их немного дезинфицировать (редактировать). Довольно часто в этих заголовках есть что-то вроде in:

#import "NSObject.h"

И компилятор его не найдет, потому что NSObject встроенный класс. Итак, вам нужно удалить этот лайк.

3) Если вам нужна всего пара методов, то решение Tuukka Nori подходит.

Кроме того, вам нужно будет связать (статически или динамически) соответствующую частную структуру (одного включения заголовков недостаточно).

person Victor Ronin    schedule 10.04.2014
comment
Обычно я хочу, чтобы устройство переходило в спящий режим, используя частный API. Я знаю, что это не относится к моему вопросу, но я видел, что ваши ответы на большинство вопросов относятся к частному API. У вас есть идеи, где искать правильный заголовок? Потому что большинство ответов сегодня не актуальны (использую 6.1). Спасибо в любом случае - person snaggs; 10.04.2014
comment
@fessy: я даже не смог найти решение, которое полностью работает на ios 6.x. Все эти DimScreen и BlankScreen лишь частично затемняли экран (ни один из них полностью не выключал экран). Итак, я не уверен. Вы можете попробовать перепроектировать Springboard и поискать там. Тем не менее, он может быть защищен некоторым правом. - person Victor Ronin; 11.04.2014

Не заменяйте никакие файлы. Вместо этого напишите заголовочный файл с символом, который вы собираетесь использовать. Если вам нужен метод Objective-C, добавьте категорию с уникальным именем, например.

@interface NSString (MyOwnPrivateCategory)
- (void) privateMethodDeclaredInRuntimeHeaders;
@end

Импортируйте его и используйте метод по своему усмотрению.

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

person tsnorri    schedule 10.04.2014