2015-01-20 3 views
0

현재 여러 다른 웹 서비스에 연결되는 iPhone 응용 프로그램에서 작업하고 있습니다. 이 웹 서비스는에 연결하는 환경 우리에 따라 여러 가지 다른 주소를 가지고 :환경을위한 Xcode 빌드

내가 무엇을 알고 싶습니다 가장 좋은 규칙은 이러한 URL을 정의하고이를 위해 우리가 구축하고자하는 환경에 따라 전환하는 것입니다. 이것은 빌드 설정에서 정의 할 수있는 것입니까, 아니면 정의를 사용하여 환경을 지정하는 다양한 빌드를 설정할 수 있습니까?

참고 : 프로젝트의 수명이 다 끝난 후에 Swift를 통합 할 수도 있지만 문제는 중요하지만 현재는 Objective-c를 사용하고 있습니다. 나를 위해

답변

1

이 작품은 :

#ifdef TARGET_PROD 
    #define BASE_URL @" http://www.example.com/api/" 
#endif 
#ifdef TARGET_VAL 
    #define BASE_URL @"http://staging.example.com/api/" 
#endif 

#ifdef TARGET_TEST 
    #define BASE_URL @"http://staging.example.com/api/testing/" 
#endif 

Commons.h 또는 공통 프로젝트 파일, 예를 들어,이를 넣습니다.

모든 대상에 대해 빌드 설정으로 이동하여 "디버그"및 "릴리스"에 TARGET_PROD를 추가하고 대상 테스트에 TARGET_TEST를, 대상 준비를 위해 TARGET_VAL을 프로세서 매크로에 설정합니다.

NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@,%@", BASE_URL,yourService]]]; 
0

사용 NSUserDefaults : 당신이 요청을하면 단순히 BASE_URL에서이 같은 SERVICENAME을 추가합니다.

예를 들어, 사전에 -registerDefaults:을 전달하여 생산 값을 장애 조치 기본값으로 설정하십시오. 이 값은 NSRegistrationDomain에 있습니다. 그런 다음 유효성 검사 및 테스트를 수행 할 수 있습니다 :

  • 코드를 사용하여 NSArgumentDomain의 값을 설정하십시오. 이 값은 NSRegistrationDomain의 값보다 우선합니다.
  • 시작 인수로 값을 전달하십시오. 이렇게하면 NSArgumentDomain에 값이 삽입되고 NSRegistrationDomain의 값이 다시 무시됩니다.

NSUserDefaults은 도메인을 특정 순서로 검색하여 값을 찾습니다. 이 동작은 this post by oleb에서 잘 설명됩니다.

이 방법은 유연하며이 문제를 해결하기 위해 조건부 컴파일을 사용하는 데 따른 몇 가지 단점이 없습니다.