2012-03-15 5 views
2

두 가지 프로젝트가 완료되었습니다. 하나는 iPhone에서 작동하고 다른 하나는 iPad에서 작동합니다. 유니버설 앱에 이들을 병합하고 싶습니다.iPhone 및 iPad 프로젝트를 유니버설 하나로 변환

지금까지 유일한 해결책은 '_iPhone'및 '_iPad'접미사로 클래스의 이름을 바꾸고 코드에있는 모든 참조를 변경하는 것입니다. 그런 다음 AppDelegates를 병합하고 시작할 때 올바른 컨트롤러를로드 할 수 있습니다.

두 가지 매우 큰 프로젝트이므로이 방법은 매우 많은 시간이 소요될 것입니다. 누구든지 더 나은 해결책이 있습니까?

+0

일부 사용자가 한 번 비슷한 질문을합니다. http://stackoverflow.com/questions/5280407/is-there-a-global-way-to-merge-an-iphone-and-an-ipad-app-into- 범용 애플 리케이션. – LuisEspinoza

답변

2

물론 내가 할 수있는 유일한 해결책은 새로운 보편적 인 프로젝트를 만들고 파일을 거기에 놓는 것입니다. iPhone과 iPad간에 공유 코드가 많기 때문에 장치가 사용되는지 확인할 수 있습니다 만약 UI_USER_INTERFACE_IDIOM()이 이면 UIUserInterfaceIdiomPad 또는 UIUserInterfaceIdiomPhone입니다. 이름을 변경하면 클래스 이름을 강조 표시하고 Refactor> 이름 바꾸기 및 xCode를 선택하면 쉽게 모든 클래스에서 클래스 이름을 바꿀 수 있습니다. 그것.

+1

리팩토링 팁을 보내 주셔서 감사합니다. 많은 시간을 절약 할 수 있습니다! –

2

초안 솔루션이 내가 아는 유일한 옵션 인 것 같습니다. 다른 답변을 보려면 궁금합니다.

한 가지; 실제로 두 개의 AppDelegates를 유지할 수 있습니다.

주요 구현 내에서 장치를 확인하고 iPad-AppDelegate 또는 iPhone-AppDelegate를 시작할 수 있습니다. 대부분의 경우

int main(int argc, char *argv[]) 
{ 
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; 
    int retVal = 0; 

    if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) 
    { 
     retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPad"); 
    } 
    else 
    { 
     retVal = UIApplicationMain(argc, argv, nil, @"XXXAppDelegate_iPhone");   
    } 
    [pool release]; 
    return retVal; 
} 

그러나, 나는 그런 솔루션을 재고 조언을 것입니다 - 자주이 불일치 및/또는 코드 복제로 발생합니다. 아직도, 나는 옵션을 지적해야한다고 생각했다.

+0

나는 그 옵션을 알고 있었지만 Main.m을 망치는 것을 좋아하지 않는다. Apple의 최신 iOS 템플릿에서는 AppDelegate에서 모든 작업을 수행하므로 가장 좋을 것입니다. 답변 해주셔서 감사합니다. –

관련 문제