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 из другого источника, и тогда это сработало. Итак, будьте осторожны.

Другие вопросы по тегам