2012-10-19 17 views
17

Apple iOS wytyczne dla programistów stan:Aplikacje AppStore/iOS i kod interpretowany - gdzie narysują linię?

3.3.2 - aplikacja sama w sobie nie może zainstalować lub uruchomić inny kod wykonywalny wszelkimi środkami, w tym między innymi poprzez zastosowanie plug-in architektury, wywoływanie innych ram, inne interfejsy API lub w inny sposób. Zinterpretowany kod nie może zostać pobrany lub użyty w Aplikacji z wyjątkiem kodu, który jest interpretowany i uruchamiany przez API Dokumentowane przez Apple i wbudowany interpreter (-y).

Zakładając, że pobieranie dane - jak XML i obrazy, lub opis poziom gry, na przykład - (? Jak to jest moje wrażenie) w czasie wykonywania jest dozwolone, zastanawiam się, gdzie przebiega granica między "dane" i "kod". Wyobraź sobie scenariusz aplikacji, która dostarcza użytkownikom interaktywne "prezentacje" (na przykład ankieta). Prezentacje są dodawane do serwera w sposób ciągły, a różne prezentacje są udostępniane różnym użytkownikom, więc nie mogą być częścią początkowego pobierania aplikacji (co byłoby tym punktem). Są one opisane w formacie XML, ale jest interaktywny, mogą zawierać warunkowego rozgałęzienia tego rodzaju (pokazane w formie pseudo egzemplifikować):

<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> 

Kiedy ten XML jest interpretowany i „gra” w aplikacji, powyższe zostałby przedstawiony w dwóch etapach. Najpierw wyświetlany jest ekran wyboru, w którym użytkownik może kliknąć jedną z dwóch opcji ("Mężczyzna" lub "Kobieta"). Następnie obraz zostanie [pobrane dynamicznie] i wyświetlony w oparciu o wybór dokonany w poprzednim kroku.

Teraz łatwo wyobrazić sobie dodatkowe tagi, opisujące dalszą logikę. Na przykład, zawierające znacznik może być dodawany:

<loop count="3"> 

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

</loop> 

wynik tu jest, że na ekranie obrazu/ekranu pary wybór będzie przedstawione kolejno trzy razy na oczywiście.

Albo wyobraź sobie jakiś format opisujący poziom w grze. Być może jest to naturalne, że jako pasywne "dane", ale jeśli obejmuje ono, powiedzmy, kilka bram, przez które użytkownik może przejść i różne wyzwalacze, pułapki i punkty do nich dołączone itd. - nie jest tym samym, co używanie skrypt (lub, w istocie, zinterpretowany kod) - aby opisać sekwencje wykonawcze, opcje i ich odpowiedzi warunkowe?

Zakładając, że mechanizm interpretacji danych jest już obecny w aplikacji i że takie "prezentacje" mogą być konsumowane (nie tworzone lub edytowane) w aplikacji, w jaki sposób byłoby to zgodne z wytycznymi Apple dotyczącymi iOS? Czy XML w zasadzie nie jest językiem skryptowym w tym sensie (czy w języku XML nie można opisać żadnego programu w języku interpretowanym)?

Czy byłoby dobrze, gdyby zastrzeżony język skryptowy (patrz powyższy kod XML) był ściśle piaskowany (w jaki sposób mogą to zrobić?) I nie miał dostępu do systemu operacyjnego w żaden sposób (ale mógł pobierać treść - jak ankieta lub poziom gry - dynamicznie, a także wyniki wysyłania - odpowiedzi lub wyniki - na serwer tworzenia treści)?

Gdzie idzie linia?

+0

Nie możesz dokładnie tego poznać. Tylko Apple to wie. Zobacz, Codea, która korzysta z wbudowanego interpretera Lua i pozwala użytkownikowi napisać kod pomyślnie przejdzie przez filtr. –

+0

Interesujące. Chociaż bardziej interesuje mnie możliwość pobierania nowych "prezentacji" ("skryptów", jeśli wolisz), niż użytkownik może pisać/edytować kod * lokalnie *. – d7samurai

+0

Uważam, że użytkownik, który ma swobodę wykonywania dowolnego kodu, wykracza daleko poza to, co chcesz. Tak więc akceptuję, że Twoja aplikacja jest akceptowana ma większe szanse niż nie jest akceptowana, ale znowu, kto wie. –

Odpowiedz

0

Myślę, że to, co oznacza Apple, to, że aplikacja nie powinna zależeć od innego modułu, skompilowanego produktu lub pliku wykonywalnego w celu pracy, która zostanie pobrana ze strony internetowej/serwera, a skompilowany dodatek nie został sprawdzony przez firmę Apple.

Zasadniczo, gdy zapytałem o coś podobnego, powiedzieli mi coś w stylu: "Jeśli twoja aplikacja pobierze kolejny skompresowany kod wykonywalny, taki downloader ftp, narzędzie do odszyfrowywania kluczy lub coś w tym rodzaju, które nie zostało zatwierdzone przez moje Apple. do pobierania danych lub plików (takich jak pliki XML, HTML, PDF, obrazy), które nie stanowią aplikacji

+0

Tak, ale pytanie brzmi: gdzie linia przechodzi pomiędzy "danymi pasywnymi" a "danymi aktywnymi", tj. Danymi reprezentującymi logikę, która może być wykonana. Kod źródłowy to również dane. Jeśli pobierany program może go skompilować lub uruchomić, zinterpretować, a następnie co. Tutaj jest problem. – d7samurai

0

Pojęcie różnic między "kodem" a "danymi" zostało wcześniej omówione na stronie SO. zobacz tę odpowiedź: https://stackoverflow.com/a/642476/200696

Z punktu widzenia Apple zakaz ten zapobiega nierecenzowanej wykonywalnej zawartości ze sklepu z aplikacjami. Utworzenie programu zatwierdzonego przez firmę Apple byłoby trywialne, a następnie pobieranie plików wykonywalnych, które zmieniają wstępnie zatwierdzone zachowanie.

+0

Problem tutaj nie był różnic między "kodem" i "danych" w ogóle, ale w szczególności, gdy Apple rysuje linii w kontekście ich AppStore. Co więcej, chodziło o sytuację, w której aplikacja pobiera dane, które sama aplikacja i tylko ona może "wykonać" (tj. Nie treścią, która jest natywnie lub niezależnie wykonalna). Wyobraź sobie podobną do PowerPointa aplikację, która pobiera na przykład prezentacje w formacie PowerPoint (ale z dodaną funkcjonalnością wbudowanej logiki rozgałęzień) na żądanie i "uruchamia" je w sobie, tworząc nowe "doświadczenia użytkownika" dla każdej prezentacji. – d7samurai

1

Istnieje zasadnicza różnica między wytycznymi a rzeczywistą praktyką zespołu ds. Oceny aplikacji.

Obecne wytyczne:

2.7 Aplikacje, które pobrać kod w jakikolwiek sposób lub forma zostaną odrzucone

2.8 aplikacje, które instalują lub uruchomić inny kod wykonywalny zostanie odrzucony

Tak więc stary zakaz interpretowanego kodu zniknął i zastąpiono go zakazem stosowania aplikacji, które można uznać za IDE lub samodopasowujące.

Jednak w praktyce istnieje wiele aplikacji, które to robią, stąd różnica między teorią a praktyką.

0

Wszystko, co mogę powiedzieć, to to, że wydałem produkty, które wykorzystują XML do zachowania skryptów w aplikacji, a Apple zawsze je zatwierdził.

1

Powinieneś rzucić okiem na to, co Apple ma enabled in iOS7. Teraz możesz pobierać i uruchamiać JavaScript w swojej aplikacji.

2

Aktualizacja jak z WWDC 2017

Programowanie narzędzia, takie jak Codea wymienionych poniżej są teraz wyraźnie dozwolone, aby pobrać kod. App Store Guidelines obecnie powiedzieć (Kopalnia nacisk):

2.5.2 Aplikacje powinny być powściągliwy w swoich pakietach, a nie może odczytywać lub zapisywać dane poza wyznaczonym obszarze pojemnika, ani nie mogą pobrać, zainstalować lub wykonać kod, w tym inne aplikacje. Aplikacje zaprojektowane do nauczania, rozwijania lub testowania kodu wykonywalnego mogą w ograniczonych okolicznościach pobierać kod pod warunkiem, że taki kod nie jest używany do innych celów. Takie aplikacje muszą sprawić, że kod źródłowy udostępniony przez Aplikację będzie w całości widoczny i edytowalny przez użytkownika.

Istnieje również this tweet, powołując się na więcej szczegółów na temat klauzuli "zrelaksowany".

Original

Czy Twój interpretować pobieranie pozwalają użytkownikowi napisać nieskończone pętle lub rekursji?

Apple pozwala na JavaScript, ponieważ zapewnia tłumacza i może zabić twój kod.Mam przeczucie, że przeczytałem, że jest to 10-sekundowy limit, ale nie mogłem go znaleźć na stronie z kilkuminutowym wyszukiwaniem. (Tak, mój własny narzucony czas na napisanie odpowiedzi został wprowadzony.)

Myślę, że jesteś całkiem bezpieczny, jeśli to, co robisz, jest deklaratywne i nie pozwala na oczywiste zapętlenie w tłumaczu.

Unikałbym również używania słowa "tłumacz" w jakichkolwiek opisach widocznych dla Apple, w tym w publicznej dyskusji. Może "parser" byłby bezpieczniejszy.

Codea jeździ na łyżwach wzdłuż krawędzi tych definicji ze środowiskiem Lua i nie może pobrać kodu. One had to remove a feature do pobierania nowych pakietów jako pliki ".codea".

2

Na podstawie wersji 3.3.2 mogą odrzucić aplikację. Jednak bardziej przerażające jest to, że możesz stworzyć aplikację, uzyskać ją zatwierdzoną, pobrać i użyć przez wielu użytkowników, a następnie Apple może pobrać aplikację ze sklepu.

Czy kiedykolwiek opublikowałeś aplikację, którą opisałeś?

Powiązane problemy