Это ошибка компилятора? Похоже, что это так. Вот что. В наборе общедоступных фреймворков есть много классов с объективным классом, в которых все еще есть частные методы. Таким образом, в обычных заголовках (.h файлов) для общедоступных фреймворков эти частные методы не будут перечислены. Но они присутствуют в динамических библиотеках. Если вы хотите создать приложение, которое их использует, то одним из способов решения проблемы является найти копию полного заголовка .
Например, here's a copy of the full UIApplication.h header.
Затем вы можете скопировать объявление о частных методов, и в вашем собственном коде, объявить их так:
// Used to disable warning for non-public methods
@interface UIApplication (Extensions)
- (BOOL)launchApplicationWithIdentifier:(id)identifier suspended:(BOOL)suspended;
@end
Это должно остановить компилятор жаловаться, что частный метод не существовать.
В будущем вы должны прочитать о class-dump
, который является инструментом, который вы можете запускать в общедоступной или частной инфраструктуре SDK, и обращать генерировать заголовки, подобные тому, который указан выше. Они будут меняться при каждом выпуске SDK, поэтому хорошо иметь возможность генерировать их самостоятельно.
2) Вы спрашиваете об использовании прав без подписания кода.
Во-первых, read what Saurik originally wrote about it here. Да,, вам нужно ввести код подписи. Но, нет, это не должно быть с сертификатом Apple на взломанных телефонах.Вы можете поддельной код знака, загрузив ldid
исполняемый файл и делать
cd MyAppName.app
ldid -Sentitlements.xml MyAppName
предполагая, ваше приложение называется MyAppName и вы сделали Entitlements файл 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
из другого источника, а затем он сработал. Итак, будьте осторожны.
примечание: если вам интересно, почему я сказал «Я не знаю» на ваш другой вопрос, но ответил на это, потому что ваш другой вопрос задан с помощью Xcode. этого не было. В настоящее время я знаю только, как это сделать ** вне ** Xcode. Я обычно строю с помощью Xcode (без подписи кода), а затем код за пределами Xcode (с ldid) при создании приложений для джейлбрейка. – Nate