2012-03-09 2 views
0

필자는 좀 더 숙련 된 개발자로부터 다음과 같은 상황에 적합한 설정을 찾아야합니다.Xcode iOS 프로젝트를 올바르게 설정 했습니까?

우리는 App Store에서 iOS 앱을 제작하고 있습니다. 기능이 동일하기 때문에 기본 코드는 다양한 앱에서 동일해야합니다. 그러나 각 하나는 다른 프리 컴파일러 정보를 받아야합니다 (plist 파일을 통해 쉽게 알 수 있으므로 문제가 없습니다). 이제 각 앱마다 서로 다른 리소스가 있어야합니다. 이미지, 사운드 등 (현재 나는 다른 폴더에있는 모든 리소스를 갖고 있으므로 같은 이름을 붙일 수 있습니다. 언제든지 삭제할 수 있으며 앱이 변경 될 수도 있지만 최소한 말하기에는 더러운 것 같습니다).

초기 버전을 만들고 새 대상을 만들고 모든 것을 복사해야합니까? 아니면 목표를 복제해야합니까? 어떻게하면 다른 리소스 폴더를 지정할 수 있습니까?

감사


@j_mcnally

다음과 같은 제안 수행

CORE_PROJECT 
| 
|-- APP 1 PROJECT 
| |-- target -> free 
| |-- target -> paid 
| 
|-- APP 2 PROJECT 
| |-- target -> free 
| |-- target -> paid 
... 

다음 CORE 프로젝트는 다만 어떤 목표를 가지고 있지해야합니까? 간단하게 공유 소스? 나에게 논리적 인 것처럼 보인다. 다른 의견이 있으십니까?

답변

1

프로젝트 내에 프로젝트를 포함시킬 수 있습니다. 그래서 당신은 핵심 프로젝트를 가질 수 있고 부모의 더 구체적인 프로젝트에 그것을 포함시킬 수 있습니다. 이 방법을 사용하면 동일한 핵심 코드를 참조 할 수 있지만 다른 대상을 작성할 수 있어야합니다.

+0

내 업데이트를 참조하십시오. –

+0

네, 괜찮아 보이고 놀고 다른 사람들이하는 말을보세요. 이것은 당신이 처한 상황에 직면하여 내가하는 일입니다. –

+0

한 가지만 더하세요. 내 하위 프로젝트는 상위 프로젝트의 헤더 파일을 찾을 수 없습니다. 이 방향을 수정하는 방향은 무엇입니까? –

2

당신은 정말이 앱을 얼마나 비슷하게 만들 생각입니까? 목표가 구성의 일부에서만 다를 경우 중복 목표 또는 프로젝트를 유지하지 않는 것이 좋습니다. 변경하지 말아야 할 중복 구성은 다른 개발자와 동기화를 유지해야한다는 불일치가 버그를 유발할 수 있으며 궁극적으로 실수로 프로젝트를 포착 할 수 있다고 생각합니다.

대신 전체 프로세스를 자동화하고 가능하면 중복 된 구성을 만들지 않으려 고 노력합니다. 빌드 스크립트를 실행하기 전에 실행 스크립트 빌드 단계를 빌드 프로세스의 첫 번째 단계로 추가하여 빌드를 수행하기 전에 현재 응용 프로그램에 적합한 리소스 세트를 symlink 또는 복사합니다. 그렇게하면 환경 변수가 앱에서 사용하는 리소스 집합을 선택할 수 있습니다. 개발자는 xcode 내에서 빌드 할 때 환경 변수 값을 설정하고 바꿀 수있는 편리한 방법을 원한다면 비공유 방식을 로컬 작업 공간에 추가 할 수 있어야합니다.

개발/준비/프로덕션 백엔드 시스템과 통신하도록 응용 프로그램을 전환하는 것과 같이 작은 구성 변경으로이 기능이 매우 잘 작동한다는 것을 알았고 큰 프로젝트에서 작업 할 때 동일한 수준의 일관성을 잃어 버렸습니다. 다른 리소스 세트를 기반으로하는 여러 응용 프로그램을 만들었지 만 단일 코드 기반을 공유하는 호환되지 않는 시스템으로 급속하게 분산되었습니다.

이제 다른 응용 프로그램에 고유 한 동작을 추가해야 할 필요가 있다고 생각되면 각 응용 프로그램의 응용 프로그램 빌드 대상에 포함될 수있는 공통 코드에 대한 공유 정적 라이브러리 빌드 대상을 만드는 것이 좋습니다. 전체 클러스터를 작업 공간으로 공유하면 개발자는 적절한 구성표를 선택하기 만하면 응용 프로그램을 전환 할 수 있습니다. 많은 오버 헤드를 추가하지 않고도 공유 코드와 앱 고유 코드를 명확히 구분해야합니다. 앱이 성장하고 안정화되면 결국 다른 라이브러리의 공통 종속성으로 정적 라이브러리 프로젝트를 사용하여 여러 저장소로 브랜치하려고 할 수 있습니다.그렇게하면 앱과 공유 라이브러리 모두에서 작업하는 데 드는 비용이 발생하지만 공유 된 코드 기반을 변경하는 것에 대해 신중해야하는 경우 바람직 할 수 있습니다. 또한 여러 저장소를 사용하면 각 응용 프로그램이 공유 라이브러리의 특정 버전을 잠그고 새로운 변경 사항을 수용 할 때 제어 할 수 있습니다. 프로세스에 따라 좋거나 나쁨이 나타날 수 있습니다.

+0

나는 내 마음에서 벗어날거야. 나는 같은 프로젝트에서 (나는 그것을 가지고 어떻게) 별도의 목표를 사용하고 싶습니다하지만 문제가 실행 해요. 두 번째 타겟 (중복이 아닌)을 만들 자마자 문제가 발생하기 시작합니다. 그것은 그들을 가져올 때 헤더 파일을 찾았지만 컴파일 타임에 던졌습니다 : "아키텍처 i386에 대한 정의되지 않은 기호 :"_OBJ_CLASS _ $ _ ******* ",에서 참조 된 ..."여기서 객체의 참조 첫 번째 목표에서 사용하려고하는 클래스입니다. 어떤 아이디어? –

+0

.xib 파일로 UIViewController를 인스턴스화하려고하자마자 문제가되는 것 같습니다. 어떻게 공유 할 수 있는지 생각해보십시오. –

관련 문제