Сменить сервер без перекомпиляции приложения iPhone, как? - PullRequest
0 голосов
/ 30 октября 2009

Я занимаюсь разработкой приложения для iPhone, в котором я получаю данные из веб-службы, в настоящее время расположенной на локальном сервере в локальной сети.

Теперь я получаю свои данные, расположенные на локальном сервере, с помощью URL-адреса примерно так:

HTTP: \ 192.168.0.150 \ сервис \ service.asmx \ dataFetchingMethod

Но в будущем, если мой URL-адрес изменится, то есть сервер будет выглядеть примерно так:

HTTP: \ www.anotherDomain.com \ сервис \ service.asmx \ dataFetchingMethod

и

HTTP: \ www.anotherURL.com \ сервис \ service.asmx \ dataFetchingMethod

тогда как я могу изменить это динамически?

В настоящее время я жестко запрограммировал URL-адрес в приложении.

Ответы [ 4 ]

2 голосов
/ 30 октября 2009

Настройки приложения сделаны для этого:

- (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];        
}

Подробнее

1 голос
/ 30 октября 2009

Разве это не то, для чего DNS? Вы указываете одно доменное имя, которое перенаправляет вас туда, куда вам нравится ... это не сильно помогает в отладке до того, как вы настроили домен, но настраиваете что-то сейчас и перенаправляете куда хотите.

1 голос
/ 30 октября 2009

Вам понадобится подключиться к какому-либо ресурсу, который либо никогда не меняется, либо меняется очень редко. Я вижу пару разных подходов.


Прокси-подход

Вы можете настроить главный сервер (http://masterurl.com/), который передает ваш запрос на другой сервер. Идея заключается в том, что главный сервер никогда не изменяется, но машина, к которой он подключается, может измениться в любое время. пример:

Предполагается, что ваше приложение для iPhone подключается к http://masterurl.com/:

  1. Все запросы к http://masterurl.com/ проксируются до http://someotherurl.com/.

  2. В какой-то момент в будущем вы нужно заменить http://someotherurl.com/ с http://snazzynewurl.com/.

  3. Теперь вы можете просто изменить http://masterurl.com/ для прокси на http://snazzynewurl.com/.

Для пользователя вашего приложения ничего не изменилось, и вам не нужно обновлять приложение и повторно отправлять его на проверку.


Подход к файлу местоположения

Вы можете получить местоположение из файла, например, из txt или xml файла.

Предполагается, что ваш файл живет в http://someurl.com/location.txt и его содержимое простое:

inside location.txt:

http://someotherbaseurl.com/

Ваше приложение будет читать этот текстовый файл и использовать http://someotherbaseurl.com/ в качестве базового URL для остальной части вашего приложения. Теперь, если вам нужно изменить URL-адрес, вы можете просто обновить текстовый файл.

Если вы используете подход с использованием файла местоположения, я бы порекомендовал разместить этот файл в Amazon S3 или Rackspace Cloud Files, чтобы текстовый файл был доступен через URL в сети доставки контента.

Я уверен, что есть и другие способы решения этой проблемы. В любом случае вам понадобится главный URL-адрес, который никогда не меняется или редко меняется. В противном случае вы столкнетесь с ситуацией, когда вам придется перекомпилировать и повторно отправить ваше приложение.

1 голос
/ 30 октября 2009

Вы должны написать класс, который читает свойства из файла (например, plist).

Таким образом, всякий раз, когда приложение запускается, оно считывает свою конфигурацию из plist и выполняет обращения к указанному URL-адресу службы. Это можно изменить без перекомпиляции приложения.

...