Подтвердить что ты не робот

Приложения AppStore/iOS и интерпретируемый код - где они рисуют линию?

В руководстве для разработчиков Apple iOS указано:

3.3.2. Приложение не может самостоятельно устанавливать или запускать другой исполняемый код любыми способами, включая без ограничений, с помощью архитектуры подключаемого модуля, вызова других фреймворков, других API или иным образом. Никакой интерпретируемый код не может быть загружен или использован в приложении, кроме кода, который интерпретируется и запускается API-интерфейсами Apple Documented и встроенными интерпретаторами.

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

<options id="Gender">
    <option value="1">Male</option>
    <option value="2">Female</option>
</options>

<branches id="Gender">
    <branch value="1">
        <image src="Man" /> 
    </branch>
    <branch value="2">
        <image src="Woman" /> 
    </branch>
</branches>

Когда этот XML интерпретируется и "воспроизводится" в приложении, вышеуказанное будет представлено в два этапа. Сначала отображается экран выбора, в котором пользователь может нажать на любой из двух вариантов ( "Мужской" или "Женский" ). Затем изображение будет [загружено динамически] и отображено на основе выбора, сделанного на предыдущем шаге.

Теперь из этого легко представить дополнительные теги, описывающие дальнейшую логику. Например, можно добавить содержащий тег:

<loop count="3">

    <options... />
    <branches... />

</loop>

Результат состоит в том, что пара экрана выбора/экрана изображения будет последовательно представлена ​​три раза, конечно.

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

Предполагая, что механизм интерпретации данных уже присутствует в приложении и что такие "презентации" могут быть использованы только (не созданы или отредактированы) в приложении, как это будет связано с рекомендациями Apple iOS? Разве XML не является языком сценариев в этом смысле (не может ли описана какая-либо программа в интерпретируемом языке в XML)?

Было бы хорошо, если бы собственный скриптовый язык (ссылка на XML, использованный выше) был строго изолирован (как они могут сказать?) и не предоставлял доступ к операционной системе каким-либо образом (но мог загружать контент - например, опрос или игровой уровень - динамически, а также загружать результаты - ответы или оценки - на сервер разработки)?

Где идет линия?

4b9b3361

Ответ 1

Обновление по WWDC 2017

Программные средства, такие как Codea, упомянутые ниже, теперь явно разрешены для загрузки кода. Руководство по магазинам в магазине в настоящее время говорят (основное внимание):

2.5.2 Приложения должны быть автономными в своих пакетах и ​​не должны читать или записывать данные за пределами указанной области контейнера, а также не загружать, устанавливать и не выполнять код, включая другие приложения, Приложения, предназначенные для обучения, разработки или тестирования исполняемого кода, могут в ограниченных обстоятельствах загружать код при условии, что такой код не используется для других целей. Такие приложения должны сделать исходный код, предоставленный приложением, полностью видимым и редактируемым пользователем.

Существует также этот твит, в котором приводятся более подробные сведения о непринужденных предложениях.

Оригинал

Позволяет ли ваша интерпретированная загрузка пользователю писать бесконечные циклы или рекурсию?

Apple разрешает Javascript, потому что они предоставляют интерпретатор и могут убить ваш код. У меня такое чувство, что я читал, что это ограничение на 10 секунд, но я не смог найти его на сайте с несколькими минутами поиска. (Да, мой автоматический тайм-аут для написания ответа ударил.)

Я думаю, что вы достаточно безопасны, если то, что вы делаете, является декларативным и не допускает очевидного цикла в интерпретаторе.

Я бы также избегал использования слова "интерпретатор" в любых описаниях, видимых для Apple, включая публичное обсуждение. Может быть, "парсер" будет более безопасным.

Codea катается по краю этих определений со своей средой Lua и не может загрузить код. Они должны были удалить функцию для загрузки новых пакетов в виде файлов .codea.

Ответ 2

Основываясь на 3.3.2, они могут отклонить приложение для этого. Тем не менее, страшнее то, что вы можете создать приложение, получить его одобрение, загрузить его и использовать многие пользователи, а затем Apple может вытащить приложение из магазина.

Вы когда-нибудь публиковали приложение, которое вы описали?

Ответ 3

Существует существенное различие между Руководствами и фактической практикой командой App Review.

В текущем руководстве указано:

2.7 Приложения, которые загружают код каким-либо образом или формой, будут отклонены

2.8 Приложения, которые устанавливают или запускают другой исполняемый код, будут отклонены

Итак, старый запрет на интерпретируемый код ушел и заменен запретом на приложения, которые можно считать IDE или самомодифицированными.

Однако на практике существует множество приложений, которые делают это, следовательно, разница между теоремами и практиками.

Ответ 4

Вы должны взглянуть на то, что Apple включено в iOS7. Теперь разрешено загружать и запускать JavaScript в вашем приложении.

Ответ 5

Я думаю, что Apple означает, что ваше приложение не должно зависеть от другого модуля, скомпилированного продукта или исполняемого файла для работы, который будет загружен с веб-сайта/сервера, и что скомпилированное дополнение не было рассмотрено Apple.

В основном, когда я спросил что-то подобное, они сказали мне что-то вроде: "Если ваше приложение будет загружать другой исполняемый скомпилированный код, такой загрузчик ftp, инструмент для дешифрования ключей или что-то в этом роде, которое не было одобрено моим Apple. загружать данные или файлы (например, XML, HTML, PDF файлы, изображения), которые не представляют собой приложение.

Ответ 6

Концепция различий между "кодом" и "данными" обсуждалась ранее на SO. См. Этот ответ: fooobar.com/questions/306824/...

С точки зрения Apple этот запрет предотвращает неисповедимый исполняемый контент из хранилища приложений. Было бы тривиально создавать программу, одобренную Apple, а затем загружать исполняемый контент, который изменяет предварительно одобренное поведение.

Ответ 7

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