12
votes

Xcode à l'aide de schémas pour déterminer les URL de Dev / Staling / Production Server

Je souhaite utiliser les schémas de Xcode pour déterminer quel serveur exécuter mon application contre. J'ai une application qui récupère ses informations d'un serveur. Comme la plupart des gens, j'ai un serveur de développement, un serveur de stadification et un serveur de production.

Je souhaite créer un schéma pour chacun de ceux-ci où XCode injectera la bonne URL. Dois-je dupliquer le schéma d'exécution et ajouter des variables environnementales? Est-ce le meilleur moyen de faire des choses, je ne souhaite pas particulièrement avoir # IFDEF dans ma classe de serveur et la définition en code chaque fois que je change de serveur. Quelqu'un peut-il me dire dans la bonne direction s'il vous plaît?

FYI: J'utilise Xcode 5.0.2 IOS7 SDK.

[EDIT] Tout le monde a donné de grandes suggestions, mais je me sens à la suite de la réponse à la réponse à mes besoins. Bien que j'ai trouvé cela intéressant à ce qu'aucun ne suggère d'utiliser différents schémas. [/ EDIT]


3 commentaires

J'ai demandé quelque chose de simples il y a quelque chose de plus précisément Stackoverflow.com/questions/8743914 / ...


@Popeye Merci beaucoup pour le lien


La meilleure réponse à cela se trouve sur la question de Popeye, en fait: Stackoverflow.com/a/8744601/590767


3 Réponses :


5
votes

Utilisez une clé dans le plat (pour chaque schéma, par exemple: url_to_use), utilisez défini pour créer un «raccourci» pour obtenir la valeur.

  #define MyURL [[NSBundle mainBundle] objectForInfoDictionaryKey:@"URL_TO_USE"]


2 commentaires

Merci pour la réponse Rufo mais je ne vous comprends pas complètement. Vous suggérez-vous des fichiers de plis séparés pour chaque schéma? Ma compréhension de votre suggestion est que je créerais trois clés distinctes dans le plist (un pour chaque serveur)?


@Bennythemink: Voir la modification à la réponse. BTW: Il s'agit de 3 fichiers de plis différents, pas de 3 clés différentes (la même clé de chaque fichier).



0
votes

Je gère cela en définissant le pré-processeur personnalisé définit pour chaque schéma.


0 commentaires

10
votes

Je vous recommande de créer différents cibles Xcode pour chaque environnement. Je vous recommande de changer l'identifiant de l'application des applications, par exemple, l'application de production serait com.mycompany.app et la version devel serait com.mycompany.app-devel . De cette façon, vous pouvez suivre les applications séparément dans HockeyApp ou TestFlight, et vous pouvez avoir les deux applications dans le même périphérique en même temps.

Ajoutez ensuite des macros de préprocesseur qui définissent l'environnement pour chaque cible. devel pour le développement, par exemple.

Si l'URL est cotée en dur, ajoutez simplement une instruction #Ifdef pour choisir l'URL: < Pré> xxx

De cette manière est moins sujet à une erreur pour distribuer une version de développement, plus facile à entretenir et vous permet d'ajouter du code personnalisé à différentes versions. Par exemple, vous pouvez inclure le numéro de version dans l'écran de connexion ou Afficher les dialogues d'alerte pour le développement, mais pas pour la version de distribution.


4 commentaires

Je suis en désaccord avec cette réponse: je pense que les objectifs doivent être considérés comme de groupements de fichiers source afin que vous puissiez produire différentes «éditions» de ce qui est la même application. Il ne doit pas être utilisé pour la configuration car c'est précisément les configurations de Xcode. Ils sont beaucoup plus légers et vous permettent de définir des macros de préprocesseur exactement comme dans la réponse de @ Redent84.


@fatuhoku à l'aide de configurations Xcode Vous ne pouvez pas avoir d'identifiants de paquet différents, vous ne pouvez donc pas installer les différentes versions en même temps et que vous ne pouvez pas avoir différentes icônes, noms d'application ou ressources, ce qui est très pratique. Pour ne pas dire que c'est beaucoup moins sujet aux erreurs, car il est impossible de distribuer une version de pré-production à l'APPSTORE par erreur.


@ redent84 oui vous pouvez totalement! L'astuce consiste à utiliser un paramètre défini par l'utilisateur et à l'utiliser comme suffixe sur la fin de votre identifiant de paquet. Désolé - j'aurais dû mené avec ce lien pour justifier mon commentaire. blog.chrismiles.info/2011/04/... < / a>


@fatuhoku Vous devriez probablement rendre votre réponse à une réponse réelle au lieu d'un commentaire.