iOS Как использовать Entitlement.plist, чтобы указать свойство моего приложения
Я использую устройство Jailbreak + Appsync + iOS5.0.1 (без лицензии разработчика, но с некоторыми хитростями я могу запустить свое приложение на устройстве)
Теперь я хочу использовать закрытый API launchApplicationWithIdentifier: временно не работает. Так что мне нужно добавить
<key>com.apple.springboard.launchapplications</key>
<true/>
в файл myApp.entitlements.plist. Тогда это должно работать, но я все еще получил ошибку
'Receiver type 'UIApplication' for instance message does not declare a method
with selector 'launchApplicationWithIdentifier:suspended:''
Затем я обнаружил, что кто-то сказал, что подпись кода должна быть включена, если я хочу использовать Entitlements.plist. Это правда? У меня должна быть лицензия разработчика?
Или есть другой способ использовать этот метод? Я прочитал некоторый метод о том, как использовать частный API. Это кажется сложным. Я новичок в разработке iOS.
Спасибо.
1 ответ
Я вижу две проблемы / вопросы в вашем посте:
1) вы получаете ошибку
'Тип получателя'UIApplication'для сообщения экземпляра не объявляет метод с селектором'launchApplicationWithIdentifier: приостанавливается:''
Это ошибка компилятора? Похоже, может быть, это так. Вот вещь В наборе общедоступных фреймворков есть множество классов target-c, в которых все еще есть некоторые частные методы. Таким образом, в обычных заголовках (.h файлах) для общедоступных платформ эти частные методы не будут перечислены. Но они есть в динамических библиотеках. Если вы хотите создать приложение, которое использует их, то один из способов решения этой проблемы - найти копию полного заголовка.
Например, вот копия полного заголовка UIApplication.h.
Затем вы можете скопировать объявление закрытых методов и в своем собственном коде объявить их следующим образом:
// 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, и вы создали файл с правами authorlements.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
из другого источника, и тогда это сработало. Итак, будьте осторожны.