12
votes

Déploiement de mises à jour logicielles Beta et Sparkle

Mon application utilise le cadre de cacao Sparkle pour déployer des mises à jour. Je ne déploie généralement pas de bêta de mon logiciel mais pour ma prochaine mise à jour, j'ai l'impression d'avoir besoin de. Ma question est la meilleure stratégie de numérotation pour le déploiement d'une version bêta à l'aide de Sparkle. Pour quiconque teste ma version bêta, je voudrais que la mise à jour soit transparente lorsque je libère la prochaine version officielle, mais pour d'autres utilisateurs, je voudrais que tout le système soit totalement invisible. J'utilise actuellement un système de numérotation comme 1.2.3 pour mes mises à jour.


0 commentaires

3 Réponses :


8
votes

Le meilleur moyen est probablement de débrancher totalement votre CFBUndolversion (qui doit contenir uniquement. et les chiffres et sont utilisés par la comparaison de version d'Étincelle et le système d'exploitation) et CFBundleshorversions (qui peut par n'importe quoi, et que ce que les utilisateurs voient). < / p>

Ensuite, il suffit de vous assurer que votre CFBUndolversion augmente toujours au fil du temps, mais peut-être sinon quoi que ce soit [*], pendant que vous utilisez 1,2.4b et 1.2.4 en tant que CFBunDlestorsithString pour la version bêta et les versions finales respectivement. Tant que la cfbundolversion pour la version bêta est plus élevée que votre CFBunDolversion actuelle, et la CFBUndolversion de la libération éventuelle non-bêta est supérieure à la bêta, tout fonctionnera comme vous le souhaitez.

[*] Il suffit de garder à l'esprit que, malgré les documents de l'Apple, la version 9999.99.99 est à peu près la version la plus élevée que le lancement desservices reconnaîtra, et elle ignorera tous les blocs de nombre au-delà du troisième, planifiez donc d'utiliser un schéma qui ne sera même pas plus haut que cela; Les mises à jour Sparkle fonctionnent toujours, mais le système d'exploitation serait confus sur quelle copie était la dernière version.


1 commentaires

La façon dont j'ai choisi de le faire est de mettre à jour le CFBundolversion de 1,2,5 au 1.2.5.1 et de la CFBundlesShorSVersString à 1,2,6 bêta. Lorsque je relâche la version finale, je mettrai à jour la CFBUndolversion vers 1.2.6 et la dernière version sera alors disponible pour tous les utilisateurs, les testerers bêta et les testeurs non bêta. Le seul problème avec ceci est que je ne pourrai pas mettre à jour la version utilisée par les testeurs bêta à l'aide de Sparkle, mais pour le test actuel, j'espère seulement avoir besoin d'une version bêta.



7
votes

J'aime utiliser l'outil de version de pomme inclus avec Xcode. Il conserve un numéro de construction parallèle (E.G. 12345) distinct de votre numéro de version marketing (1.2.3). Vous l'invoquez à l'aide de l'outil de ligne de commande AGVTool .

De plus, si vous utilisez Subversion ou CVS comme système de version de version, cet outil a une assistance intégrée. Par exemple, que je veux incrémenter mon numéro de construction, je comprends simplement ceci dans le terminal: xxx

Ceci incrémente le numéro de construction de chaque cible de ma demande, met à jour le < code> info.plist fichiers, puis commet le tout à SVN automatiquement. Il y a aussi un nouveau-marketing-version VERBE que vous pouvez utiliser pour définir le cfbundleshorversionstring dans tous les objectifs de votre projet. Jetez un oeil à la page d'homme pour AGVTool (c'est-à-dire type homme agvtool sur le terminal) pour plus de détails.

Alors qu'est-ce que cela doit faire Avec Sparkle? J'utilise le numéro de construction comme mon Sparkle: version . L'utilisation du numéro de construction rend la morie simple pour Sparkle de déterminer s'il s'agit de la version actuelle ou non. Pour la prestation des utilisateurs, j'aime mettre le numéro de construction directement dans le numéro de version marketing. Donc, mes numéros de version bêta ressemblent à ceci comme suit: 1.2.3 (456) . Apple fait quelque chose de très similaire avec Safari. Si je vais safari> sur Safari en ce moment, je vois la version 4.0.2 (5530.19).


0 commentaires

9
votes

J'ai récemment examiné cela aussi. La configuration de développement pour mon application est Xcode (évidemment) avec Sparkle, et je maintiens mon code dans un référentiel mercurial. Dans le cadre de mon processus de construction, je requête Mercurial à l'aide de "ID HG" pour renseigner l'info.plit. Ceci est fait dans un script de construction pour ma cible Xcode. Ceci est le script:

#pragma mark -
#pragma mark SUUpdate Delegate methods

- (NSArray *)feedParametersForUpdater:(SUUpdater *)updater sendingSystemProfile:(BOOL)sendingProfile {
    if([[NSUserDefaults standardUserDefaults] boolForKey:BSEnableBetaUpdates]) {
        return [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:@"beta", @"key", [NSNumber numberWithBool:YES], @"value", @"Enable beta updates", @"displayKey", @"Yes", @"displayValue", nil], nil];
    } else {
        return nil;
    }
}


0 commentaires