В iPhone OS mprotect () не будет работать, если вы попытаетесь использовать его, чтобы пометить доступные для записи разделы памяти как исполняемые. Это разрушает мосты, такие как RubyCocoa (и, возможно, MacRuby), которые используют libffi для создания обработчиков метода Objective-C во время выполнения. Я считаю, что это так, потому что так было не всегда.
В конечном счете, это больше вопрос политики платформ, чем технологий, но для этого существует технический обходной путь. Вместо того чтобы генерировать пользовательские обработчики методов во время выполнения, предварительно скомпилируйте пул реконфигурируемых из них, которые назначаются по мере необходимости, по существу делая процесс моста полностью управляемым данными. Насколько я знаю, это еще не сделано в RubyCocoa или MacRuby.
Еще одна важная вещь, которую следует учитывать, это то, что скомпилированные среды выполнения Ruby и RubyCocoa могут быть значительно больше, чем скомпилированные приложения Objective-C. Если бы эти библиотеки были доступны на iPhone, это не было бы проблемой, но сейчас, даже если у вас работал RubyCocoa, вы можете не захотеть использовать его для распространяемых вами приложений.