2013-05-26 5 views
3

저는 종종 앱을 빌드하는 데 사용하는 것과 동일한 컴퓨터에서 실행되는 개발 서버와 함께 iOS 프로젝트에서 작업합니다. 일반적인 시나리오는 http://localhost:3000에서 실행중인 레일 앱을 보유하고 있으며 기기에서 테스트 중입니다. 장치에서 테스트하려면 내 IP 주소가 필요하므로 내 응용 프로그램이 로컬 네트워크의 개발 서버와 통신 할 수 있습니다.Xcode에서 동적 선행 처리기 매크로 만들기

GCC_PREPROCESSOR_DEFINITIONS을 사용하여 일부 환경 변수를 전 처리기 매크로로 설정할 수 있다는 것을 알고 있고, bash 스크립트에서 ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}'을 실행하여 컴퓨터의 IP 주소를 생성 할 수 있다는 것을 알고 있습니다. 내가 원하는 무엇

'@"http://${BUILD_MACHINE_IP_ADDRESS}:3000"' 같은 값을 사용하여 GCC_PREPROCESSOR_DEFINITIONSMY_SERVER_URL를 정의하지만, 내가 무엇을 알아낼 수있는 것은 위의 ifconfig 스크립트를 사용하여 ${BUILD_MACHINE_IP_ADDRESS}을 설정하는 방법입니다.

실행 스크립트 빌드 단계를 사용하여 구성 파일을 편집하는 것으로 생각했지만 변경 사항의 영향은 자극적입니다. 예를 들어, IP 주소가 자주 변경되어 충돌을 일으키기 때문에 소스 제어에 파일을 포함시키지 않을 것입니다. 하지만 응용 프로그램이 액세스 할 수 있도록 프로젝트 파일에 포함시켜야합니다. 이렇게하면 프로젝트를 빌드하는 데 필요한 파일이 생성되지만 소스 컨트롤에는 포함되지 않습니다. 이는 추한 것입니다.

실행 스크립트 빌드 단계에서 export BUILD_MACHINE_IP_ADDRESS=`ifconfig | grep -E 'inet.[0-9]' | grep -v '127.0.0.1' | awk '{ print $2}`을 실행 해 보았지만 결과가 나오지 않았습니다.

+0

어때? - BUILD_MACHINE_IP_ADDRESS = $ (ifconfig | grep -E 'inet. [0-9]'| grep -v '127.0.0.1'| awk '(print $ 2)') –

+0

@Jaypal 예 내가 뭘하고 싶은지 모르겠지만 컴파일 시간에 변수를 사용할 수있게하기 위해 어디에서 * 할 것인가. –

+0

명령 행에서 변수를'export '하거나 프로파일 파일에 추가하여 터미널을 열 때마다 변수를 전역 적으로 사용할 수 있도록 할 수 있습니다. –

답변

1

이렇게하는 한 가지 방법은 매크로 인 #define이 소스에 포함되어있는 .h 파일을 작성하는 실행 스크립트 빌드 단계를 만드는 것입니다.

빌드 중에 .xcconfig를 쓰는 것이 해당 빌드에 영향을 미치지 않는다고 생각합니다.

실행 스크립트 빌드 단계에서 환경 변수를 내보내는 것이 여러 가지 이유로 작동하지 않습니다. 우선 환경 변수는 빌드 설정에서 생성되지만 다른 방법으로는 작동하지 않습니다. 둘째, 그들이 수행 했더라도 하위 프로세스는 상위 프로세스에 환경 변수를 설정할 수 없습니다.

또 다른 접근법은 숫자로 된 IP 주소 대신 개발 컴퓨터의 .local 호스트 이름을 사용해 보았습니까? 시스템 환경 설정의 공유 패널에서 시스템의 도메인 이름을 확인할 수 있습니다.

+0

.json 또는 .plist 파일의 줄을 더 생각하고있는 질문에서 구성 파일을 말했을 때, 나는 더 구체적 일 것입니다. 컴퓨터의 .local 이름을 사용하면 내가 작업하는 프로젝트에서 작동하지만, 자신의 개발 서버가있는 팀을 소개하자마자 넘어집니다. 나는 이것을 할 수있는 이상적인 방법이 없다고 생각한다. 아마 .h 파일을 사용할 것이다. 감사합니다 :) –

+0

예 "숫자 IP 주소 대신 개발 컴퓨터의 .local 호스트 이름 사용". –