Aggiornamenti dell'app IOS che non richiedono l'invio all'App Store

4

Alcune app, ho notato che gli sviluppatori sono in grado di aggiornare i loro software senza inviarli all'App Store.

Ad esempio, Game of War ti informa occasionalmente che è disponibile un aggiornamento e riavvia il tuo dispositivo. Puoi quindi guardare attentamente la barra di avanzamento e vedere che gli aggiornamenti vengono inviati all'app.

Suppongo che stiano usando XML per cambiare determinati attributi e la loro posizione sul server. È un'ipotesi ma non lo so. Sono in grado di apportare modifiche significative al gioco, ad esempio aggiungere collegamenti ipertestuali per mappare posizioni, spingere promozioni di vendita, aggiungere determinati eventi, ecc. Questi metodi non richiedono la compilazione, poiché ovviamente richiederebbe la reinvio dell'app.

Quali tecnologie consentono questo? Sono tutte modifiche al lato server con gli oggetti XML in fase di aggiornamento sul client? Qual è la politica di Apple nei termini dello sviluppatore?

    
posta ctilley79 15.03.2014 - 14:50
fonte

3 risposte

3

Apple ora consente esplicitamente al codice interpretato come Javascript di essere 'Hot Code Pushed' su un dispositivo senza un aggiornamento.

3.3.2 An Application may not download or install executable code. Interpreted code may only be used in an Application if all scripts, code and interpreters are packaged in the Application and not downloaded. The only exception to the foregoing is scripts and code downloaded and run by Apple's built-in WebKit framework, provided that such scripts and code do not change the primary purpose of the Application by providing features or functionality that are inconsistent with the intended and advertised purpose of the Application as submitted to the App Store.

Vedi qui: Apple consente la funzione di hot code Push - Meteor

    
risposta data 06.11.2015 - 09:30
fonte
5

Dalle linee guida iOS, qualsiasi app che scarica codice in qualsiasi forma è (o almeno dovrebbe essere) automaticamente rifiutata per l'App Store. Molto probabilmente la tua app sta scaricando qualcosa che sarebbe coperto dal concetto di "contenuto". A seconda dell'app, potrebbero essere nuove immagini, effetti sonori / musica, nuove descrizioni strutturali (ad esempio un file che descrive una nuova zona nel tuo gioco, che specifica come il gioco lo costruisce da risorse esistenti o risorse incluse come parte dell'aggiornamento ), o un numero qualsiasi di oggetti simili. Fondamentalmente, il componente AppStore del programma conterrà la logica utilizzata per costruire e controllare l'app, mentre i dati scaricati controllano il contenuto specifico mostrato in un dato momento.

Dal tuo esempio (Game of War), essendo un gioco multiplayer online, probabilmente contiene codice nel componente AppStore che controlla l'interazione tra il server e il dispositivo, come inviare e ricevere messaggi chat, azioni del giocatore , ecc. Non ho giocato questo particolare gioco da solo, ma sembra che stia usando il modello standard della mappa a griglia - ogni edificio (incluse le sue fasi di costruzione), e ogni unità sulla mappa potrebbe essere generata dal componente AppStore basato su file di immagine scaricati e descrizioni di animazione. Il tuo gioco può includere aggiornamenti tra cui nuovi tipi di unità o nuovi edifici senza dover modificare alcun codice sul dispositivo, semplicemente scaricando i componenti necessari per visualizzarli.

La struttura è simile a quanti MMO (come World of Warcraft, ecc) lavorare sul PC, anche se il fatto che interpretato codice è ancora una zona abbastanza grigia per quanto riguarda la sua legalità in applicazioni per iOS (vedi this domanda ) significa che le applicazioni sono meno probabilmente scaricando componenti interpretati che possono modificare le interazioni fondamentali con l'app (cioè le azioni che è possibile eseguire in un gioco, o includere una funzione di chat in un gioco esistente, a meno che non sia stato progettato per e semplicemente non "attivato" in la versione iniziale) e più semplicemente includendo nuovi elementi che corrispondono a uno dei modelli esistenti di elementi compresi.

Probabilmente troverai questo tipo di interazione più nei giochi, dove la logica codificata costituisce solo una piccola parte della dimensione totale del gioco e la maggior parte delle dimensioni sono le immagini, i suoni, i modelli 3D, le descrizioni strutturali, ecc. che il gioco utilizza per costruire il proprio ambiente interno, rispetto alle app aziendali. In sostanza, le app Maps e Music integrate seguono un concetto simile:

  • le tue tracce audio sarebbero l'equivalente di un 'aggiornamento' scaricato in Musica
  • l'idea di scaricare il contenuto acquistato su un nuovo dispositivo tramite iTunes opera sullo stesso principal
  • mentre credo che Maps su iOS scarichi direttamente le immagini della mappa da un server, un software simile in dispositivi GPS portatili usa un archivio interno di immagini di mappe e descrizioni stradali che possono essere aggiornato in questo modo per fornire informazioni aggiornate su nuovi strade senza dover modificare alcun codice compilato
  • anche l'AppStore stesso funziona sotto la stessa teoria sottostante, se tu considera che le altre applicazioni installate sono essenzialmente 'contenuti' (l'App Store può scaricare un 'aggiornamento' su un'altra app installata senza averlo per cambiare il proprio codice)
risposta data 06.07.2014 - 14:32
fonte
-1

Ho sviluppato un'applicazione iOS aziendale che aveva lo scopo di fornire ai clienti informazioni dettagliate sui prodotti disponibili per il noleggio. Quando si installa inizialmente l'app viene fornita con un database sqlite locale.

Ospitato altrove su Internet da qualche parte, abbiamo archiviato un altro database che era identico al database locale.

Ho aggiunto una tabella per fungere da registro delle modifiche. Sono state fornite le chiavi per edit_start e revision. Valori iniziali impostati su 0.

Ora ogni volta che voglio aggiornare il contenuto del database, modifico il database ospitato in remoto e prima che io abbia finito, incremento il numero di revisione a 1 e annoto nel campo edit_start, a quale riga ho iniziato aggiungendo nuovi contenuti.

Ora ogni volta che l'app si chiude su un dispositivo degli utenti, tenterà di interrogare il database remoto e controlla il controllo della tabella dei log delle modifiche per vedere se il numero di revisione corrisponde a quello del database locale. In caso contrario, legge il valore edit_start e scarica e sovrascrive il database locale ma solo le righe effettuate. Ho anche deciso che è meglio farlo quando l'app si chiude piuttosto che si apre nel caso in cui ci sia una grande quantità di dati che deve essere scaricata in modo che l'utente non finisca per tentare di aprire l'app e dover attendere il contenuto per Scaricare. L'avvertenza è che gli utenti non vedono il nuovo contenuto fino alla seconda volta che aprono l'app.

Il codice sorgente completo di questo progetto è disponibile su Binpress .

    
risposta data 23.04.2016 - 22:29
fonte

Leggi altre domande sui tag