2016-08-20 4 views
0

Недавно я поймал с мыслью о смене реализации методы после развертыванияПредоставления или изменения реализации методы во время выполнения в прошивкой

Когда я гугл об объективном время выполнения, и все, стало известно о методе swizzling methodExchangeImplementations и т.д.

Я знаю, что это возможно для https://rollout.io/ Но я думал, как сделать Hot Patching самостоятельно для простых вещей.

моя идея вводит код, используя вызов webservice. Webservice должен предоставить замену для конкретного метода. Эта строка должна быть преобразована в исполняемый код

Что я хочу знать ... Как ввести код в существующий метод корпоративного приложения.

Для экс: Рассмотрим этот метод в Objective C

-(void)fetchTheResult{ 
    // some code lines 
} 

После развертывания я хотел бы изменить реализацию метода в

-(void)fetchTheresult{ 

    NSLog(@"test log"); 
    //some Code lines 
    //some more lines 

} 

Пожалуйста направьте мне путь для достижения этой

ответ

-1

Это не так просто, как вы думаете, по крайней мере, в Objective C и других подобных скомпилированных языках. Такие изменения времени выполнения в коде возможны только на интерпретируемых языках, таких как Javascript.

Основная проблема заключается в том, что приложениям запрещено изменять сами исполняемые файлы. Приложения на iOS и Android работают в изолированной среде и, таким образом, имеют доступ только к ограниченным местам на диске.

Кроме того, после компиляции кода код не знает, где часть кода преобразуется и сохраняется на машинных языках. Вы должны понять основы компиляторов, чтобы понять это. Во время этого процесса происходят серьезные оптимизации с вашим кодом.

+0

Да, конечно @codetiger! Когда эта идея застряла в голове, я вернусь к основам компиляции, компоновки и исполнения во время исполнения. Тогда только я согласился, что это возможно в объективе c. После этого развертывание делает хорошую работу. Мне просто интересно, как мы это делаем сами. –

0

Это большой вопрос, и вам нужно провести какое-то исследование, чтобы выяснить ответ. Вот как некоторые вещи, которые вы можете посмотреть в:

  • Сначала вы ссылка Rollout, вы могли бы следовать тем же идеям и отправить обновление в JavaScript. Вам нужно будет изучить, как вызывать JavaScript, swizzle-методы и, возможно, динамически добавлять методы - больше об этом в одно мгновение.

    • Альтернативой вы можете исследовать это библиотека динамической загрузки - вы можете открыть и вызвать код, библиотека которых ваши приложения нагрузки во время выполнения. Поэтому вы можете посмотреть, как отправить свое обновление в виде библиотеки. Вам все равно придется выполнять метод swizzling и, возможно, динамически добавлять методы ...

    • Как и метод swizzling, вы можете обнаружить, что вам необходимо динамически добавлять методы - например. поэтому у вас есть возможность поменять существующую реализацию.Хорошее место, чтобы узнать, как сделать это труды Майка Эша на КВО - идут DuckDuckGo (или Google)

HTH

Смежные вопросы