2013-03-02 6 views
7

In una raffica di entusiasmo non pensante ho sandboxato e poi aggiornato la mia app. Poiché l'app ha solo accesso in lettura/scrittura ai file selezionati dall'utente (e alla directory musicale), non riesco ad aggiornare il mio binario. Ops.Aggiornamento di un'applicazione OSX sandboxed (purtroppo già distribuita) utilizzando la scintilla

Questo è stato ampiamente discusso con Andy Matuschak nell'ultimo anno circa (https://github.com/sparkle-project/Sparkle/pull/165) ma mentre le soluzioni proposte sono "abbastanza buone", non è stata fatta luce sul problema di aver già distribuito un'app non in modalità sandbox .

Oh, e sembra che sia importante che io stia usando il metodo di "immagine disco" della distribuzione della scintilla.

L'unica soluzione A TUTTO che posso pensare è di rilasciare un aggiornamento sparkle che solo presenta un messaggio agli utenti dicendo loro di scaricare manualmente. Qualcuno ha qualche idea migliore?

-Dave

risposta

1

Andy Matuschak sembra indicare che Sparkle può realmente gestire 'il download solo' con grazia per voi. Nelle sue parole, è sufficiente lasciare lo dal tuo <item> e aggiungere un elemento <sparkle:version>2.0</sparkle:version> come figlio di <item>.

leggere il suo commento qui: https://github.com/sparkle-project/Sparkle/issues/227#issuecomment-13192723

Proprio come Fermat prima di lui, ha lasciato fuori un pezzo di informazione. Ma a differenza del teorema, abbiamo accesso al codice sorgente di Sparkle, in particolare SUAppcastItem.m. Grazie al codice, ho capito che il pezzo mancante era un tag <link>. Ecco un esempio appcast:

<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0" xmlns:sparkle="http://www.andymatuschak.org/xml-namespaces/sparkle" xmlns:dc="http://purl.org/dc/elements/1.1/"> 
    <channel> 
     <title>FooBar</title> 
     <link>http://foobar.com/appcast.xml</link> 
     <description>Most recent changes with links to updates.</description> 
     <language>en</language> 
     <item> 
      <title>FooBar 2.0</title> 
      <sparkle:releaseNotesLink>http://foobar.com/release-notes-special.html</sparkle:releaseNotesLink> 
      <sparkle:minimumSystemVersion>10.9.0</sparkle:minimumSystemVersion> 
      <pubDate>2014-04-14T18:40:44+02:00</pubDate> 
      <sparkle:version>2013</sparkle:version> 
      <sparkle:shortVersionString>2.0</sparkle:shortVersionString> 
      <link>http://foobar.com/release-notes-special.html</link> 
     </item> 
    </channel> 
</rss> 

Nell'applicazione sandbox che riceve che appcast e non può essere aggiornato in caso contrario, il 'Installare l'aggiornamento' è andato, e al suo posto è presente un pulsante 'Learn More' che porterà il utente all'URL in quello <link>. Questo è un buon posto per avere istruzioni per il download.

Nella prossima versione della tua app, potresti quindi utilizzare un URL diverso per l'appcast, in modo che l'appcast precedente si applichi solo alle versioni precedenti (supponendo che tu abbia aggiustato le cose e ora usi il trucco XPC non ufficiale con Sparkle) .

+0

Siamo attualmente in fase di fusione del supporto sandboxing in Sparkle, vedere https://github.com/sparkle-project/Sparkle/issues/363 per maggiori informazioni. –