Есть ли простой способ заменить устаревший вызов метода в Xcode?

Таким образом, iOS 6 не поддерживает presentModalViewController:animated: и dismissModalViewControllerAnimated: и заменяет их на presentViewController:animated:completion: и dismissViewControllerAnimated:completion: соответственно. Полагаю, я мог бы использовать поиск-замену для обновления своего приложения, хотя было бы неудобно использовать present* методы, поскольку представляемый контроллер каждый раз разный. Я знаю, что могу справиться с этой ситуацией с помощью регулярного выражения, но я не чувствую себя достаточно комфортно с регулярным выражением, чтобы пытаться использовать его с моим приложением размером более 1000 файлов.

Так что мне интересно: есть ли в Xcode какая-то волшебная команда «обновить устаревшие методы» или что-то в этом роде? Я имею в виду, что я описал свою конкретную ситуацию выше, но в целом отказ от поддержки возникает с каждым выпуском ОС. Есть ли лучший способ обновить приложение, чем просто использовать поиск и замену?


person Alex Basson    schedule 17.12.2012    source источник
comment
Я нашел решение для этого в более раннем сообщении: stackoverflow.com/a/15208449. Он использует поиск / замену Xcode с использованием регулярных выражений. Сработало отлично!   -  person user1769627    schedule 01.10.2013


Ответы (2)


Возможно, вас заинтересуют Системы преобразования программ.

Это инструменты, которые могут автоматически изменять исходный код, используя преобразование источника в источник на основе шаблонов ("если вы видите этот шаблон уровня исходного кода, замените его тем исходным кодом -level pattern "), которые работают со структурами кода, а не с текстом. При правильном выполнении эти преобразования могут быть надежными и семантически правильными, и их намного проще написать, чем низкоуровневый процедурный код, который перемещается и разрушает наноскопические фактические древовидные структуры.

Дело не в том, что использовать такие инструменты легко; такие инструменты должны знать, как анализировать интересующий язык в структурах данных компилятора (например, ObjectiveC), обрабатывать шаблоны и восстанавливать компилируемый исходный код из измененных структур. Даже с базовым механизмом преобразования кто-то должен тщательно определить парсеры (и парсеры!) Для диалектов интересующих языков. И нужно время, чтобы научиться пользоваться таким, даже если у вас есть такие парсеры / разборщики. Это того стоит, если изменения, которые вам нужно сделать, являются «регулярными» (в смысле преобразования программы, а не в смысле регулярного выражения) и широко распространены (как кажется вам).

Наш набор инструментов для реинжиниринга программного обеспечения DMS имеет интерфейс ObjectiveC и может выполнять такие преобразования.

person Ira Baxter    schedule 18.12.2012

нет такой магии нет

person Daij-Djan    schedule 17.12.2012
comment
@downvoter Я понимаю, что это не очень полезный ответ, но, учитывая, что нет возможности использовать xcode, я считаю, что это совершенно правильно - person Daij-Djan; 19.06.2014