Storyboard 및 ARC가없는 Xcode


116

새로운 xcode-5를 다운로드하고 사용하기 시작했습니다.

스토리 보드와 ARC를 포함하여 직접 응용 프로그램을 만들 수 있지만 이전 버전과 같은 옵션을 요구하지 않습니다.

제 질문은 ARC와 스토리 보드없이 어떻게 xcode5를 사용할 수 있는가입니다. 스토리 보드 파일을 수동으로 제거해야합니까? 또는 다른 옵션이 있습니까?


3
아무도 이것에 답할 수는 없지만 스토리 보드와 ARC가 Xcode 또는 Objective-C로 앱을 개발할 때 미래가 될 것이기 때문에 Apple이 그렇게 한 것 같습니다. Xcode 5는 아직 베타 버전이기 때문에 올해 말에 지원을 추가 할 수도 있지만 그렇게되지 않을 것 같습니다.
HAS

6
스토리 보드 파일을 수동으로 제거 -fobjc-arc하고 프로젝트 설정에서 컴파일러 플래그를 제거합니다 .

19
프로그래머 주로 사용하는 도구에 대한 질문은 '최고'항목이나 '쇼핑'권장 사항을 요구하지 않는 한 주제 에 대한 질문입니다. 그에 따라 이것을 다시 열었습니다.
Tim Post

1
그러나 이것은 그렇게하기에 적절한 장소가 아닙니다. 이해하십시오.
MZimmerman6 2013

3
NDA 하에서 이것을 만드는 유일한 것은 "Xcode 5"부분입니다. 실제로 설명 된 모든 것은 이전 버전의 Xcode에서 수행 할 수 있으므로 기술적으로이 주제는 자유롭게 논의 할 수 있습니다.
AtomRiot 2013 년

답변:


150

빈 애플리케이션으로 프로젝트를 만들고 viewcontroller를 추가합니다 (여기에 TestViewController를 추가했습니다).

   - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions: (NSDictionary *)launchOptions
 {
   self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
   // Override point for customization after application launch.
   TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
   UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
   self.window.rootViewController = nav;
   [self.window makeKeyAndVisible];
   return YES;
 }

아크 제거 단계

1) 빌드 설정에서 Automatic Reference CountingNO로 설정 합니다.

////////////////////////////////////////////////// /////////////////////////종료//////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ////////////////////////////////////////////////// ///////////////////////

스토리 보드ARC 로 이미 만든 응용 프로그램이있는 경우

스토리 보드 제거 단계

1) 프로젝트에서 Main.storyboard 파일을 제거 합니다.

2) 컨트롤러 용 xib로 새 파일을 추가합니다. 빌드 단계에서 컴파일 된 소스에 추가되지 않은 경우 수동으로 추가합니다.

3) plist 에서 메인 스토리 보드 파일베이스 이름 을 제거 합니다 .

4) appdelegate didFinishLaunchingWithOptions 파일을 변경 하고 다음을 추가하십시오.

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

[self.window makeKeyAndVisible];

처럼 :

  - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
 {
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] ;

     // Override point for customization after application launch.

     TestViewController *test = [[TestViewController alloc]     initWithNibName:@"TestViewController" bundle:nil];
     UINavigationController *nav = [[UINavigationController alloc]  initWithRootViewController:test];
     self.window.rootViewController = nav;
     [self.window makeKeyAndVisible];

     return YES;
}


이제 위의 예에서는 다음과 같이 메모리 관리를 수동으로 관리해야합니다.

 self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease]; 

 [test release]; 

아크 제거 단계

1) 빌드 설정에서 Automatic Reference CountingNO로 설정 합니다.


7
더 이상 "빈 프로젝트"옵션이 없습니까? 나는 스토리 보드를 사용하기 시작할 때마다 생각하지 않습니다.
Sulthan

1
Target의 "Main interface"설정을 새 루트 <View Controller>로 변경해야합니다.
Paul Brady

당신이 맞습니다 @Sulthan 우리는 빈 프로젝트로 할 수 있지만 이미 뷰 기반 응용 프로그램을 만든 경우 변경 사항입니다. (appDelegate 파일에서 일부 스토리 보드 코드를 수동으로 제거해야합니다.) 빈 응용 프로그램에서 새 코드를 추가해야합니다. :)
PJR

: 나는 스토리 보드를 다시 제거하는 옵션을 추가하는 스크립트를 건너 왔어요 stackoverflow.com/a/19792955/329928
크리스 레이 바

UINavigationController * nav가 자동 해제되지 않는 이유는 무엇입니까? [UIWindow alloc]에서 _window를 사용해야합니까?
hariszaman 2014

44

스토리 보드 파일을 삭제하는 대신 빈 응용 프로그램 템플릿을 사용하여 새 프로젝트를 만들 수 있습니다. 따라서 스토리 보드 파일 생성을 피할 수 있습니다.

스토리 보드를 생략하려면 다음 단계를 사용하십시오. 여기에 이미지 설명 입력

  1. 빈 응용 프로그램 템플릿을 사용하여 새 프로젝트를 만듭니다.
  2. (예 : 새의 ViewController 추가 LoginViewController)
  3. 아래에 지정된대로 didFinishLaunchingWithOptionsin AppDelegate.m파일을 변경하십시오 .

로 변경:

#import "LoginViewController.h"

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

ARC 제거 : 빌드 설정-> Objective-C 자동 참조 계산-> 아니오로 이동합니다.


1
와! 매력처럼 작동하며 허용되는 답변보다 훨씬 간단합니다. 내 컨트롤러의 이름과 일치하도록 모든 참조를 변경해야했습니다 LoginViewController.
JohnK 2013 년

11

새 프로젝트 생성

! [새 프로젝트 생성]

정보에서 메인 스토리 보드 파일 기본 이름 제거

// Info에서 기본 스토리 보드 파일 기본 이름 제거

Appdelegate에이 코드 추가

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];

    LoginViewController *loginVC = [[LoginViewController alloc] initWithNibName:@"LoginViewController" bundle:nil];
    UINavigationController *navigationController = [[UINavigationController alloc]  initWithRootViewController:loginVC];

    self.window.rootViewController = navigationController;
    [self.window makeKeyAndVisible];

    return YES;
}

그런 다음 스토리 보드를 자동으로 제거합니다.

시도하십시오 ... 성공적으로 실행되었습니다. 감사


5

ShortCut : 선호

xcode4에서 Storyboard 및 ARC없이 프로젝트를 만든 다음 xcode5에서 해당 프로젝트를 엽니 다.


1
이를 위해 이전 버전의 Xcode를 유지하는 것은 가치가 없습니다. 차라리 새 프로젝트를 만들고 Storyboard 항목을 제거하고 appDelegate에 UIWindow 인스턴스화를 추가하고 나중에 사용할 수 있도록 템플릿 프로젝트로 저장합니다.
kervich

3

Xcode 4에는 새 프로젝트를 만들 때 "스토리 보드 사용"확인란이있었습니다. 이전 Xcode 4 애플리케이션 템플릿 (XML 파일)을 가져 와서 Xcode 5로 변환 할 수 있습니다. 이렇게하면 스토리 보드를 원하는지 여부를 선택할 수있는 이전 템플릿을 다시 가져올 수 있습니다.


나는 당신을 위해 일하는 모든 것을 수행하는 스크립트를 작성했습니다 : https://github.com/jfahrenkrug/Xcode4templates


스크립트를 실행하면 "새 프로젝트"화면에 "Xcode 4"섹션이 있습니다.

여기에 이미지 설명 입력

그리고-아아! -사랑하는 선택을 되 찾습니다.

여기에 이미지 설명 입력

이 스크립트를 사용하려면 http://developer.apple.com/ios 에서 Xcode 4 .app 번들의 사본이 필요합니다 .


1
그러나 이러한 템플릿은 오래되었으며 -registerClass : forCellReuseIdentifier :와 같은 사용 가능한 모든 새로운 변경 사항을 활용하지 않습니다.
mahboudz 2014 년

@mahboudz 사실입니다. 해당 기능이 중요한 경우이를 조정해야합니다. 물론 나는 애플이 Xcode의 향후 릴리스에서 스토리 보드를 옵트 아웃 할 수있는 옵션을 다시 가져올 수 있기를 바랍니다.
Johannes Fahrenkrug 2014 년

1
나는 희망한다. 여러분과 마찬가지로 저는 대부분의 빠른 TableView 개발로 인해 작은 앱에서 Storyboard를 사용하지만 큰 앱에서는 Storyboard가 큰 고통입니다. 스크롤링에서 segue ID 기억 (스토리 보드와 소스 파일 사이에 #defines 또는 const NSString *을 활용하는 방법을 추가해야 함), git 충돌 해결 수행 등에 이르기까지 스토리 보드는 모든 것이 아닙니다. 모두 끝내십시오.
mahboudz

그래도 V / A 화살표.
John Riselvato 2014

1
@JohnRiselvato 당신이 맞아요 :) 불쾌한 화살이 이제 사라졌습니다 :)
Johannes Fahrenkrug

0

팁이 있습니다.

  1. 첫 번째 : XCode 4.6으로 프로젝트를 만듭니다 (이 버전이 XCode 5에 가장 가깝기 때문에).
    • 물론 XCode 4.6에서는 ARC, Storyboard 사용 여부를 선택할 수 있습니다.
  2. 두 번째 : 그 후 XCode 5로 프로젝트를 열 것입니다. => Xcode 5는 프로젝트가 nonARC를 사용하고, 물론 Storyboard가 없다는 것을 이해할 것이라고 생각합니다.

당신의 프로젝트가 효과가 있기를 바랍니다! :디

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.