2012-10-19 12 views
17

di Apple iOS linee guida per gli sviluppatori di stato:AppStore/App iOS e codice interpretato: dove tracciano la linea?

3.3.2 - Una domanda non può in sé installare o lanciare altro codice eseguibile con qualsiasi mezzo, compreso senza limitazione attraverso l'uso di un'architettura plug-in, chiamando altri framework, altre API o altro. Nessun codice interpretato può essere scaricato o utilizzato in un'applicazione, ad eccezione del codice interpretato ed eseguito dalle API documentate di Apple e dagli interpreti incorporati.

Supponendo che il download dati - XML ​​come e immagini, o di una descrizione livello di gioco, per esempio - (? Come è la mia impressione) in fase di esecuzione è permesso, mi chiedo dove tracciare la linea tra "dati" e "codice". Immagina lo scenario di un'app che offre "presentazioni" interattive agli utenti (ad esempio un sondaggio, ad esempio). Le presentazioni vengono aggiunte continuamente al server e diverse presentazioni sono rese disponibili a diversi utenti, quindi non possono essere parte del download iniziale dell'app (che sarebbe l'intero punto). Essi sono descritti in formato XML, ma essendo interattivo, potrebbero contenere branching condizionale di questo tipo (mostrato in forma pseudo per esemplificare):

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

Quando questo XML viene interpretato e "suonato" all'interno dell'applicazione, il sopra sarebbe presentato in due fasi. Prima viene visualizzata una schermata di selezione, in cui l'utente può fare clic su una delle due scelte ("Maschio" o "Femmina"). Successivamente, un'immagine sarà [scaricata dinamicamente] e visualizzata in base alla scelta effettuata nel passaggio precedente.

Ora, da questo, è facile immaginare tag aggiuntivi, che descrivono ulteriormente la logica. Ad esempio, potrebbe essere aggiunto un tag contenente:

<loop count="3"> 

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

</loop> 

Il risultato qui è che la coppia di schermi schermo/immagine di selezione sarà presentata sequenzialmente tre volte, naturalmente.

Oppure immagina un formato che descrive un livello in un gioco. È forse naturale considerarlo come "dati" passivi, ma se include, ad esempio, diverse porte che l'utente può attraversare e con vari trigger, trappole e punti ad esso collegati ecc., Non è lo stesso che usare un script (o, in effetti, codice interpretato) - per descrivere sequenze di esecuzione, opzioni e le loro risposte condizionali?

Supponendo che il motore di interpretazione per i dati sia già presente nell'app e che tali "presentazioni" possano essere solo consumate (non create o modificate) nell'app, come farebbero queste tariffe rispetto alle linee guida iOS di Apple? XML non costituisce fondamentalmente un linguaggio di scripting in questo senso (non si può descrivere alcun programma in un linguaggio interpretato in XML)?

Va bene se il linguaggio di scripting proprietario (ref XML utilizzato in precedenza) era strettamente in modalità sandbox (come si può dire?) E non ha dato l'accesso al sistema operativo in alcun modo (ma in grado di scaricare contenuti - come un sondaggio o livello di gioco - dinamicamente così come risultati di upload - risposte o punteggi - al server di sviluppo)?

Dove va la linea?

+0

Non si può sapere esattamente. Solo Apple lo sa. Vedi, Codea che usa un interprete Lua incorporato e lascia che il codice di scrittura dell'utente abbia ottenuto con successo il filtro. –

+0

Interessante. Anche se sono più interessato alla possibilità di scaricare nuove "presentazioni" ("script", se lo farete) di quanto l'utente sia in grado di scrivere/modificare codice * localmente *. – d7samurai

+0

Credo che l'utente sia in grado di eseguire liberamente qualsiasi codice è ben oltre ciò che si desidera :) Quindi direi che la tua app è accettata ha maggiori possibilità di non essere accettata, ma, chissà, ancora una volta. –

risposta

0

Penso che ciò che Apple intende sia la tua applicazione non dovrebbe dipendere da un altro modulo, prodotto compilato o eseguibile per funzionare che sarà scaricato da un sito web/server e che il componente aggiuntivo compilato non è stato revisionato da Apple.

Fondamentalmente quando ho chiesto qualcosa di simile mi hanno detto qualcosa del tipo: "Se la tua applicazione scaricherà un altro codice compilabile eseguibile che un downloader ftp, uno strumento di decrittografia o qualcosa del genere che non è stato approvato dalla mia Apple. per scaricare dati o file (come XML, HTML, file PDF, immagini) che non rappresentano un'applicazione

+0

Sì, ma la domanda è dove passa la linea tra "dati passivi" e "dati attivi", cioè dati che rappresentano la logica che può essere eseguita. Il codice sorgente è anche dati. Se il programma che lo scarica può compilarlo o eseguirlo interpretato, allora cosa. Questo è il problema qui. – d7samurai

0

Il concetto delle differenze tra "codice" e "dati" è stato discusso in precedenza su SO. vedere questa risposta: https://stackoverflow.com/a/642476/200696

Dal punto di vista di Apple, questo divieto impedisce il contenuto eseguibile non revisionato dall'app store. Sarebbe banale creare un programma approvato da Apple e quindi scaricare contenuti eseguibili che cambiano il comportamento pre-approvato.

+0

Il problema qui non era le differenze tra "codice" e "dati" in generale, ma specificamente dove Apple disegna la linea nel contesto del loro AppStore. Inoltre, si trattava di una situazione in cui un'app scarica dati che l'app stessa e solo lui può "eseguire" (cioè non contenuto eseguibile in modo nativo o indipendente). Immagina un'app di tipo PowerPoint che scarichi presentazioni simili a PowerPoint (ma con la funzionalità aggiuntiva della logica di ramificazione integrata, ad esempio) su richiesta e le "esegua" al suo interno, creando nuove "esperienze utente" per ogni presentazione. – d7samurai

1

C'è una grande differenza tra le linee guida e la pratica effettiva del team di revisione app.

attuali linee guida dello Stato:

2.7 Apps che scaricano il codice in qualsiasi modo o forma saranno respinte

2.8 Applicazioni che installano o lanciare altro codice eseguibile verrà respinta

Quindi, il vecchio divieto di codice interpretato è scomparso e sostituito da un divieto di app che potrebbero essere considerate IDE o auto-modificanti.

Tuttavia in pratica ci sono un certo numero di app che fanno questo, quindi la differenza tra theoria e prassi.

0

Tutto quello che posso dire è che ho rilasciato prodotti che usano XML per scrivere il comportamento all'interno dell'app e Apple li ha sempre approvati.

1

Si dovrebbe dare un'occhiata a ciò che Apple ha enabled in iOS7. Ora è possibile scaricare ed eseguire JavaScript all'interno della tua app.

2

Update come del WWDC 2017

strumenti come indicato di seguito CODEA programmazione sono ora esplicitamente autorizzati a scaricare il codice. Il App Store Guidelines attualmente dicono (sottolineatura mia):

2.5.2 Apps dovrebbe essere autonomo nei loro fagotti, e non può leggere o scrivere dati al di fuori della zona del contenitore designato, né possono scaricare, installare o eseguire codice, comprese altre app. Le app progettate per insegnare, sviluppare o testare il codice eseguibile possono, in circostanze limitate, scaricare il codice purché tale codice non sia utilizzato per altri scopi. Tali app devono rendere il codice sorgente fornito dall'applicazione completamente visibile e modificabile dall'utente.

C'è anche this tweet che cita più dettagli sulle clausole rilassate.

originale

Fa il download interpretato consentono all'utente di scrivere cicli infiniti o ricorsione?

Apple consente Javascript perché forniscono l'interprete e possono uccidere il codice.Ho la sensazione che ho letto che è un limite di 10 secondi ma non sono riuscito a trovarlo sul sito con una ricerca di pochi minuti. (Sì, il mio timeout autoimposto per la scrittura di una risposta a calci.)

penso che tu sia abbastanza sicuro se quello che fai è dichiarativa e non consente evidente loop nell'interprete.

Eviterei anche l'uso della parola "interprete" in qualsiasi descrizione visibile ad Apple inclusa la discussione pubblica. Forse "parser" sarebbe più sicuro.

Codea ha pattinato lungo il bordo di queste definizioni con il loro ambiente Lua e non può scaricare il codice. Sono had to remove a feature per il download di nuovi pacchetti come file ".codea".

2

Basato su 3.3.2, potrebbero rifiutare un'app per questo. Tuttavia, la cosa più spaventosa è che è possibile creare l'app, ottenerla approvata, farla scaricare e utilizzare da molti utenti, e quindi Apple potrebbe estrarre l'app dallo store.

Hai mai pubblicato l'app che hai descritto?