6

Я использую Jailbreak + AppSync + iOS5.0.1 устройство (без лицензии разработчика, но с некоторыми трюками я могу запустить мое приложение на устройстве)IOS Как использовать Entitlement.plist указать свойство моего приложения

Теперь я хочу использовать private API launchApplicationWithIdentifier: suspended :. Поэтому мне нужно добавить

<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

примечание: если вам интересно, почему я сказал «Я не знаю» на ваш другой вопрос, но ответил на это, потому что ваш другой вопрос задан с помощью Xcode. этого не было. В настоящее время я знаю только, как это сделать ** вне ** Xcode. Я обычно строю с помощью Xcode (без подписи кода), а затем код за пределами Xcode (с ldid) при создании приложений для джейлбрейка. – Nate

ответ

5

Я вижу две проблемы/вопросы в вашем посте:

1) вы получите ошибку

«Тип приемника„UIApplication“, например, сообщения не объявлять метод с селектором» launchApplicationWithIdentifier: suspended: ''

Это ошибка компилятора? Похоже, что это так. Вот что. В наборе общедоступных фреймворков есть много классов с объективным классом, в которых все еще есть частные методы. Таким образом, в обычных заголовках (.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 из другого источника, а затем он сработал. Итак, будьте осторожны.

+0

Благодарим вас за ответ. Наконец, я преуспеваю, вы можете прочитать эту [ссылку] (http://stackoverflow.com/questions/11070089/ios-how-to-use-private-api). Для первого пункта. Если я импортирую UIApplication, который я сгенерировал с помощью класса-дампа, я получил «ошибку переопределения». Во втором случае я не пробовал, но это выглядит нормально :-). В целом, для использования launchApplicationWithIdentifier: suspend, я должен упаковать свое приложение в файл deb, чтобы установить его как системное приложение (например, Phone, Messages), чтобы предоставить ему свойство root. Затем включите этот метод там, где вы хотите его использовать, и просто вызовите его. – wyp

+1

@wyp, Спасибо, что поймали это. Это немного отличается, когда вы пытаетесь использовать частные методы в классах, которые находятся в открытом API (например, 'UIApplication'), в отличие от классов, которые полностью закрыты. Я обновил свой ответ на (1) выше, чтобы показать, как вы можете использовать частный метод 'UIApplication'. – Nate