更改服务器而不重新编译iPhone应用程序,如何?

时间:2009-10-30 13:54:18

标签: iphone dynamic-data

我正在开发一个iPhone应用程序,我从当前位于局域网本地服务器上的Web服务中获取数据。

现在我正在使用类似这样的URL获取位于本地服务器上的数据:

HTTP:\ 192.168.0.150 \服务\ service.asmx \ dataFetchingMethod

但是将来如果我的网址发生了变化,即服务器就像这样:

HTTP:\ www.anotherDomain.com \服务\ service.asmx \ dataFetchingMethod

HTTP:\ www.anotherURL.com \服务\ service.asmx \ dataFetchingMethod

然后我如何动态地改变它。

目前我已在应用程序中对该网址进行了硬编码...

请说明您是否有任何教程或示例..

4 个答案:

答案 0 :(得分:2)

应用程序首选项是这样的:

- (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

答案 1 :(得分:1)

您应该编写一个从文件中读取属性的类(例如plist)。

这样,只要应用程序运行,它就会从plist中读取其配置,并调用指定的服务URL。这可以在不重新编译应用程序的情况下进行更改。

答案 2 :(得分:1)

您将需要连接到某种永不改变或不经常更改的资源。我看到了几种不同的方法。


代理方法

您可以设置一个主服务器(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/

  4. 对于您的应用程序的用户,没有任何更改,您无需更新您的应用程序并重新提交以供审核。


    位置文件方法

    您可以从文件中获取位置,例如txt或xml文件。

    假设您的文件位于http://someurl.com/location.txt且内容很简单:

    inside location.txt:
    
    http://someotherbaseurl.com/
    

    然后,您的应用会在此文本文件中阅读并使用http://someotherbaseurl.com/作为应用其余部分的基本网址。现在,如果您需要更改URL,则只需更新文本文件即可。

    如果您采用位置文件方法,我建议使用Amazon S3或Rackspace Cloud Files托管该文件,以便通过其内容分发网络上的URL提供该文本文件。

    我确信还有其他方法可以解决这个问题。无论哪种方式,您都需要一个永远或很少变化的主URL。否则,您将遇到必须重新编译并重新提交应用程序的情况。

答案 3 :(得分:1)

这不正是DNS的用途吗?您指定一个域名,可以在您喜欢的地方重新定位...在您设置域名之前调试并没有多大帮助,但现在可以设置一些内容并重新定位到您喜欢的位置。