2009-10-30 5 views
0

Je développe une application iPhone dans laquelle je récupère des données d'un service web actuellement situé sur un serveur local en réseau local.Modifier le serveur sans recompiler l'application iPhone, comment?

Maintenant, je suis mes données situées aller chercher sur un serveur local avec quelque chose comme url ceci:

http: \ 192.168.0.150 \ Service \ Service.asmx \ dataFetchingMethod

Mais à l'avenir si mes changements d'URL à-dire serveur quelque chose comme ceci:

http: \ www.anotherDomain.com \ Service \ Service.asmx \ dataFetchingMethod

et

http: \ www.anotherURL.com \ Service \ Service.asmx \ dataFetchingMethod

alors comment je peux changer dynamiquement.

Actuellement, j'ai codé en dur l'URL dans l'application ...

S'il vous plaît indiquer si vous avez un tutoriel ou un exemple ..

Répondre

2

Préférences de l'application sont faits pour cela:

- (BOOL) getDataFromWebserver 
{ 

    NSString *url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"]; 

    if(url == nil) 
    { 
     [self setDefaultPrefs]; 
     url = [[NSUserDefaults standardUserDefaults] stringForKey:@"dataUrl"]; 
    } 
    [self fetchData:url];//to implement 
} 

- (void)setDefaultPrefs 
{ 
     NSDictionary *appPrefs = [NSDictionary dictionaryWithObjectsAndKeys: 
            @"hardCodedUrl", @"dataUrl", nil]; 

    [[NSUserDefaults standardUserDefaults] registerDefaults:appPrefs]; 
    [[NSUserDefaults standardUserDefaults] synchronize];   
} 

Read more

+0

Merci. Je pense que vous avez compris. – harshalb

1

Vous devriez écrire une classe qui lit les propriétés d'un fichier (par exemple une plist).

De cette façon, chaque fois que l'application fonctionne, il va lire sa configuration à partir du plist, et faire des appels à l'URL du service spécifié. Cela peut être changé sans recompiler l'application.

1

Vous allez avoir besoin de se connecter à une sorte de ressource qui soit ne change jamais ou très rarement des changements. Je vois plusieurs approches différentes.


approche Proxy

Vous pouvez configurer un serveur maître (http://masterurl.com/) qui proxie votre requête à un autre serveur. L'idée ici est que le serveur maître ne change jamais, mais la machine à laquelle il fait appel peut changer à tout moment. Par exemple:

En supposant que votre application iPhone se connecte à http://masterurl.com/:

  1. Toutes les demandes de http://masterurl.com/ sont à http://someotherurl.com/ proxy.

  2. À un certain moment dans l'avenir, vous besoin de remplacer http://someotherurl.com/ avec http://snazzynewurl.com/.

  3. Maintenant, vous pouvez simplement changer http://masterurl.com/ à proxy http://snazzynewurl.com/.

Pour l'utilisateur de votre application, rien n'a changé et vous n'avez pas besoin de mettre à jour votre application et de la soumettre à nouveau pour examen.


Lieu fichier Approche

Vous pouvez obtenir l'emplacement d'un fichier, comme un fichier txt ou xml.

En supposant que votre fichier vit à http://someurl.com/location.txt et le contenu sont simples:

inside location.txt: 

http://someotherbaseurl.com/ 

Votre application se lirait alors dans ce fichier texte et utiliser http://someotherbaseurl.com/ comme URL de base pour le reste de votre application. Maintenant, si vous devez modifier l'URL, vous pouvez simplement mettre à jour le fichier texte. Si vous adoptez l'approche de fichier de localisation, je vous recommande d'héberger le fichier à l'aide d'Amazon S3 ou de Rackspace Cloud Files afin que le fichier texte soit disponible via une URL sur leur réseau de diffusion de contenu.

Je suis sûr qu'il existe d'autres façons d'aborder cela. De toute façon, vous aurez besoin d'une URL maître qui ne change jamais ou rarement. Sinon, vous rencontrerez une situation où vous devrez recompiler et soumettre à nouveau votre application.

+0

Je pense que la deuxième approche est pour moi – harshalb

1

est-ce pas exactement ce que le DNS est pour? Vous spécifiez un nom de domaine unique, qui redirige où vous voulez ... ce n'est pas beaucoup d'aide pour le débogage avant que le domaine ne soit configuré, mais obtenez quelque chose configuré maintenant et re-diriger où vous voulez.

Questions connexes