Я вижу две проблемы/вопроса в вашем сообщении:
1) вы получаете сообщение об ошибке
'Тип получателя 'UIApplication' для экземпляра сообщения не объявляет метод с селектором 'launchApplicationWithIdentifier: приостановлено:''
Это ошибка компилятора? Звучит так, как будто это так. Вот в чем дело. В наборе общедоступных фреймворков есть множество классов Objective-C, в которых все еще есть некоторые методы private. Таким образом, в обычных заголовках (файлах .h) для общедоступных фреймворков эти частные методы не будут перечислены. Но они есть в динамических библиотеках. Если вы хотите создать приложение, которое их использует, то один из способов решить проблему — найти копию полного заголовка.
Например, вот копия полного заголовка UIApplication.h .
Затем вы можете скопировать объявление методов private и в своем собственном коде объявить их следующим образом:
// Used to disable warning for non-public methods
@interface UIApplication (Extensions)
- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended;
@end
Это должно помешать компилятору жаловаться на то, что закрытый метод не существует.
В будущем вам следует прочитать об class-dump
, инструменте, который вы можете запускать в общедоступных или частных фреймворках в SDK и самостоятельно генерировать обратно заголовки, подобные приведенному выше. Они будут меняться с каждым выпуском SDK, поэтому хорошо иметь возможность создавать их самостоятельно.
2) вы спрашиваете об использовании прав без подписи кода.
Во-первых, прочитайте, что Саурик первоначально написал об этом здесь. Да, вам необходимо подписать права. Но нет, это не обязательно должен быть сертификат Apple на взломанных телефонах. Вы можете подделать знак кода, загрузив исполняемый файл ldid
и выполнив
cd MyAppName.app
ldid -Sentitlements.xml MyAppName
при условии, что ваше приложение называется MyAppName и вы создали файл прав entitlements.xml. Я полагаю, что этот файл прав будет работать для вас, если вы подделаете его кодовой подписью с помощью ldid:
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>com.apple.springboard.launchapplications</key>
<true/>
</dict>
</plist>
Будь осторожен. Я нашел ldid
в Интернете в нескольких местах. Я действительно не уверен, какой из них правильный. Я помню, что однажды я пытался это сделать, и версия ldid
, которую я использовал, не работала для подписания прав. Я скачал ldid
из другого источника, и тогда все заработало. Так что будьте осторожны.
person
Nate
schedule
19.06.2012