스토리 보드없이 Xcode에서 빈 응용 프로그램을 만드는 방법


146

Xcode6Empty Application새 프로젝트를 만들 때 템플릿 을 제거했습니다 . Xcode6이전 버전 에서처럼 스토리 보드없이 빈 응용 프로그램을 어떻게 만들 수 있습니까?


3
codefromabove.com/2014/09/… , 이것에 대한 아주 좋은 자습서
Anurag Bhakuni

이것을 읽으십시오 : xcodenoobies.blogspot.my/2015/10/…
GeneCode

iOS9 및 Xcode 7의 최신 자습서 7 : medium.com/frozen-fire-studios/…
Ryan Poolos 2012

답변:


270

XCode6이전 버전과 같이 비어있는 애플리케이션을 직접 작성하기위한 버전 이상 에는 옵션이 없습니다 XCode5. 그러나 Storyboard다음 단계를 수행 하지 않고도 응용 프로그램을 만들 수 있습니다 .

  1. 을 만듭니다 Single View Application.
  2. 제거 Main.storyboard하고 LaunchScreen.xib(선택하고 마우스 오른쪽 단추를 클릭 한 후 프로젝트에서 제거하거나 완전히 삭제하도록 선택하십시오).
  3. 파일에서 "주 스토리 보드 파일 기본 이름"및 "시작 화면 인터페이스 파일 기본 이름"항목을 제거 Info.plist하십시오.
  4. AppDelegate.m을 열고 다음과 같이 applicationDidFinishLaunchingWithOptions를 편집하십시오.

스위프트 3 이상 :

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    {
        self.window = UIWindow(frame: UIScreen.main.bounds)
        self.window?.backgroundColor = UIColor.white
        self.window?.makeKeyAndVisible()
        return true
    }

스위프트 2.x :

    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 
    {
        self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
        self.window?.backgroundColor = UIColor.whiteColor()
        self.window?.makeKeyAndVisible()
        return true
    }

목표 -C :

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
    {
        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        // Override point for customization after application launch.
        self.window.rootViewController = [[ViewController alloc] init];
        self.window.backgroundColor = [UIColor whiteColor];
        [self.window makeKeyAndVisible];
        return YES;
    }

22
나는 유지 LaunchScreen.xib하고 해당 Info.plist항목을 좋아합니다 . 그것 없이는 앱이 더 큰 아이폰에서 전체 화면 크기를 차지하지 않습니다.
tboyce12

2
스토리 보드를 유지하고 싶습니다. 다양한 물건을 만드는 데 편리하지만 스토리 보드에 의존하지 않고 초기 설정을 수행해야합니다.
Mazyod

어쩌면 Xcode 7의 버그로 인해 프로젝트 정보 설정 화면에서 Main.storyboard를 전혀 제거하지 못했습니다. @Silentwarrior가 언급 한대로 Xcode 5 빈 응용 프로그램 템플릿을 사용했습니다.
GoodSp33d

3
이유를 'NSInternalInconsistencyException': 수동으로 루트의 ViewController를 설치하지 않는 한,이 답변이 XCode7에서 런타임 오류가 발생합니다 '응용 프로그램 창은 응용 프로그램 실행의 끝에서 루트 뷰 컨트롤러가 예상된다'

11
이 코드도 추가하십시오 : self.window.rootViewController = [[ViewController alloc] init]; didFinishLaunchingWithOptions 메소드 아래의 AppDelegate.m에서. 그렇지 않으면 다음과 같은 오류가 발생합니다. '응용 프로그램 창에는 응용 프로그램 실행이 끝날 때 루트 뷰 컨트롤러가 있어야합니다'
Rizwan Ahmed

32

간단한 방법은 XCode 5Empty Application템플릿을 XCode의 템플릿 디렉토리 에 복사하는 것 입니다.

당신은 다운로드 할 수 XCode 5Empty Application에서 템플릿을 여기에 그것을 압축을 풀고 다음과 복사 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS/Application디렉토리.

추신 :이 방법은 신속하게 작동합니다!

편집
아래 주석에서 @harrisg가 제안한대로 ~/Library/Developer/Xcode/Templates/Project Templates/iOS/Application/Xcode가 업데이트 된 경우에도 사용할 수 있도록 위에 언급 된 템플릿을 폴더에 배치 할 수 있습니다.
그런 디렉토리가 존재하지 않는 경우 그리고, 당신은이 디렉토리 구조를 만들어야 할 수도 있습니다 : Templates/Project Templates/iOS/Application/~/Library/Developer/Xcode/

이 간단한 접근법을 사용하여 Empty Applicationin 을 만들 수 있습니다 XCode 6. (아래 첨부 된 스크린 샷)

Xcode 빈 응용 프로그램 템플릿 도움이 되었기를 바랍니다!


감사. 참고로 Xcode 업데이트 후이 템플릿을 교체해야합니다.
elliotrock

1
~ / Library / Developer / Xcode / Templates / Project Templates / iOS / Application /에
넣으면

@harrisg가 Yosemite에서이 디렉토리를 찾을 수 없습니다. 그 존재를 확인할 수 있습니까? 감사합니다
S1LENT WARRIOR

1
이 접근 방식은 Xcode 7.1에서 작동하지만 LaunchScreen.storyboard는 일부는 원하지 않을 수도 있습니다. 수동으로 만든 뷰를 방해하지 않으므로 사용했습니다.
bitsand

1
복사는 충분하지 않으므로 파일을 디렉토리에 압축 해제하십시오.
Balaban Mario

17

몇 가지 단계를 더 수행해야합니다.

  1. 접두사 파일을 추가합니다. (필요한 경우)
  2. 기본 실행 이미지를 추가하려면 iPhone 5에서 앱 크기가 320x480입니다.

전체 튜토리얼은 다음과 같습니다.

  1. Main.storyboard 파일 제거
  2. LaunchScreen.xib 파일 제거
  3. Info.plist에서 "주 스토리 보드 파일 기본 이름"특성 제거
  4. Info.plist에서 "시작 화면 인터페이스 파일 기본 이름"특성 제거
  5. 내용이있는 지원 파일에 "[app name] -Prefix.pch"파일을 추가하십시오.

    #import <Availability.h>
    
    #ifndef __IPHONE_3_0
    #warning "This project uses features only available in iOS SDK 3.0 and later."
    #endif
    
    #ifdef __OBJC__
    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    #endif
  6. "$ SRCROOT / $ PROJECT_NAME / [pch 파일 이름]"을 프로젝트 설정에 추가-> 빌드 설정-> Apple LLVM 6.0-언어-> "접두사 헤더"

  7. 프로젝트 설정에 "예"를 추가-> 빌드 설정-> Apple LLVM 6.0-언어-> "프리 컴파일 접두사 헤더"
  8. "Image.xcassets"를 열고 LaunchImage를 추가하십시오
  9. 프로젝트를 빌드하면 기본 실행 이미지 누락에 대한 경고가 표시됩니다. 경고를 누르고 기본값을 추가하도록 선택하면 "Default-568h @ 2x"가 추가됩니다. 또는- "이미지에서 스플래시 이미지를 사용하려는 경우 .xcassets ", 프로젝트 설정으로 이동-> 대상-> 일반->"이미지 소스 실행 "에서 자산 카탈로그를 사용하도록 선택하면 새로운 자산 카탈로그가 생성됩니다. .
  10. 구현 application:didFinishLaunchingWithOptions:방법 :

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    //Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    
    return YES;

16

Akhils의 답변은 완전히 정확합니다. Swift를 사용하는 사람들에게는 다음과 같습니다.

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.window = UIWindow(frame: UIScreen.mainScreen().bounds)
    self.window?.backgroundColor = UIColor.whiteColor()
    self.window?.makeKeyAndVisible()
    return true
}

12

Xcode 9.3.1Swift 4

  1. 우선 프로젝트 탐색기 메뉴 에서 Main.storyboard 를 삭제해야 합니다.
  2. 그런 다음 Info.plist 에서 행 메인 스토리 보드 파일 기본 이름 을 삭제 하십시오 .
  3. 그리고 프로젝트 대상 - 일반 - 배포 정보 에서 셀 기본 인터페이스 삭제 ( 주요 제거 )를 잊어 버리지 마십시오 .
  4. 그 단계 후에 AppDelegate.swift 로 가서 didFinishLaunchingWithOptions 기능 에서 다음을 작성하십시오.

    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.
    
        window = UIWindow(frame: UIScreen.main.bounds)
        window?.makeKeyAndVisible()
        window?.rootViewController = UINavigationController(rootViewController: ViewController())
    
        return true
    }

Xcode 11.2.1Swift 5

  1. 우선 프로젝트 탐색기 메뉴 에서 Main.storyboard 를 삭제해야 합니다.
  2. 그런 다음 Info.plist 에서 행 메인 스토리 보드 파일 기본 이름 을 삭제 하십시오 .
  3. 그리고 프로젝트 대상-일반-배포 정보 에서 셀 기본 인터페이스 삭제 ( 주요 제거 )를 잊어 버리지 마십시오 .
  4. 이 단계는 중요하며 이전 버전의 Xcode 및 Swift에는 없었습니다. 에서 의 Info.plist 로 이동 : 응용 프로그램 장면 매니페스트장면 구성응용 프로그램 세션 역할항목 0 여기 삭제 Storyboard.name의 행.
  5. 그 단계 후에 SceneDelegate 로 이동하고 함수 장면 에서 다음을 작성하십시오.

    func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let windowScene = (scene as? UIWindowScene) else { return }
    
        window = UIWindow(frame: windowScene.coordinateSpace.bounds)
        window?.windowScene = windowScene
        window?.rootViewController = ViewController()
        window?.makeKeyAndVisible()
    }

10

수행해야 할 단계가 하나 더 있습니다.

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

//AppDelegate.h


@property (strong, nonatomic) UIViewController *viewController;
@property (strong, nonatomic) UINavigationController *nav;

//AppDelegate.m

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {`enter code here`
    // Override point for customization after application launch.

    CGRect screenBounds = [[UIScreen mainScreen] bounds];

    UIWindow *window = [[UIWindow alloc] initWithFrame:screenBounds];


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



    self.viewController = [[UIViewController alloc] initWithNibName:@"ViewController" bundle:nil];

    self.nav = [[UINavigationController alloc] initWithRootViewController:self.viewController];

    [window setRootViewController:  self.nav];

    [window makeKeyAndVisible];

    [self setWindow:window];

    return YES;
}

2
경계 문제가 있습니다. UIScreen.mainScreen (). bounds가 : (0.0,0.0,320.0,480.0)을 인쇄 중입니다. 왜 그런 겁니까?
Esqarrouth

9

업데이트 : Swift 5 및 iOS 13 :

  1. 단일 뷰 응용 프로그램을 만듭니다.
  2. Main.storyboard를 삭제하십시오 (마우스 오른쪽 단추를 클릭 한 후 삭제).
  3. Info.plist 파일의 기본 장면 구성에서 "스토리 보드 이름"을 삭제하십시오. 여기에 이미지 설명을 입력하십시오
  4. SceneDelegate.swift다음 func scene에서 열고 변경하십시오 .
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
    guard let _ = (scene as? UIWindowScene) else { return }
}

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
    // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
    // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
    // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).x

    if let windowScene = scene as? UIWindowScene {
        let window = UIWindow(windowScene: windowScene)
        window.rootViewController = ViewController()
        self.window = window
        window.makeKeyAndVisible()
    }
}

2
또한 Info.plist에서 "메인 스토리 보드 파일 기본 이름"을 삭제해야합니다. 그렇지 않으면 " '메인'이라는 스토리 보드를 찾을 수 없습니다"오류가 발생합니다.
Ziad Hilal

6

Xcode 6 이전의 Xcode 버전에서 사용 된 원본 Empty Application 템플릿이 있습니다 . 여기에 업로드했습니다 .

Xcode 템플리트 디렉토리에 수동으로 다운로드하여 붙여 넣거나 Alcatraz Xcode의 패키지 관리자를 사용하여 설치할 수 있습니다. Xcode Empty Application을 검색하십시오 .


5

Main.storyboard 파일 제거

간단하게 삭제할 수 있습니다.

ProjectName-Info.plist 파일 업데이트

Main storyboard base file name키를 제거하십시오 .

펜촉 파일을 생성하고 프로젝트의 뷰 컨트롤러에 연결

1. 펜촉 파일 생성 (파일 –> 새로 만들기 –> 파일 –>보기)

2. File's Owner's프로젝트의 뷰 컨트롤러가 호출 되는 클래스를 업데이트하십시오.

3. File's Owner's view콘센트를 view펜촉 파일 의 객체에 연결하십시오.

앱 대리인 업데이트

1. 프로젝트의 뷰 컨트롤러의 헤더 파일을 가져옵니다

2. 신청 :didFinishLaunchingWithOptions:방법 업데이트 :

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

5

들어 Xcode 8Swift 3. 그냥 삭제 .storyboard파일을 자동으로 귀하의에서 해당 참조를 삭제 .plist하고에 AppDelegate.swift다음 코드를 추가합니다.

    let initialViewController = UIViewController()
    initialViewController.view.backgroundColor = .white
    window = UIWindow(frame: UIScreen.main.bounds)
    window?.rootViewController = initialViewController
    window?.makeKeyAndVisible()

당신은에 있다는 점에서 사용자 정의 ViewCountroller 및 사용을 쓸 수 있습니다 AppDelegate.swift당신의 등 self.window?.rootViewController바로 위의 코드에서 자신의 ViewController로의 UIViewController를 교체.


1
Xcode 9.1 & Swift 4를 사용하여 .plist에서 해당 참조를 수동으로 제거하지 않고 스토리 보드 파일을 삭제하면 "번들에서 'Main'이라는 스토리 보드를 찾을 수 없습니다"라는 오류가 발생합니다. 참조를 수동으로 제거해야합니다.
peacetype

3

XCode6 Beta를 사용하고 있으며 XCode5.xx의 빈 템플릿을 XCode6 Beta에 추가 하여이 문제의 다른 솔루션을 검색했습니다.

이 응용 프로그램에서 XCode5.xx를 마우스 오른쪽 버튼으로 클릭하면 '패키지 내용 표시'를 클릭하고 주어진 경로에서 '빈 응용 프로그램 .xctemplate'을 복사하십시오.

컨텐츠 / 개발자 / 플랫폼 /iPhoneOS.platform/ 개발자 / 라이브러리 / Xcode / 템플릿 / 프로젝트 템플릿 / 응용 프로그램

이제 창을 종료하고 XCode6에 대해 주어진 경로를 엽니 다.

컨텐츠 / 개발자 / 플랫폼 /iPhoneOS.platform/ 개발자 / 라이브러리 / Xcode / 템플릿 / 프로젝트 템플릿 / iOS / Application /

Application 폴더 안에 'Empty Application.xctemplate'을 붙여 넣습니다. 이제 종료하고 새 프로젝트를 만들어 XCode6을 다시 시작하십시오. '빈 신청서'옵션이 나타납니다.

이제 새 빈 프로젝트를 만들 때 프로젝트에 .pch 파일이 자동으로 추가됩니다 (XCode6에서 수동으로 추가 해야하는 경우)

그것이 효과가 있기를 바랍니다.


1

예. 또는 이전 베타 중 하나를 사용하여 베타를 만들고 최신 버전을 계속 사용하십시오.



1

다른 사람들은 스토리 보드를 제거하는 방법을 이미 설명 했으므로 여기서는 건너 뜁니다. 이것은 덜 선택적 체인 (Swift 3.1으로 작성)으로 코드에서 선호하는 방법입니다.

func application(_ application: UIApplication,
                 didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

    let window = UIWindow(frame: UIScreen.main.bounds)
    window.backgroundColor = .white
    window.rootViewController = MyRootViewController()
    window.makeKeyAndVisible()
    self.window = window

    return true
}

1

Xcode 11 및 ios 13에서 업데이트합니다. 모든 것을 설정했지만 여전히 검은 화면이 표시되면 UISceneDelegate가 수명주기를 처리하고 새 프로젝트를 만들면 UISceneDelegate.m 및 UISceneDelegate.h가 자동 생성됩니다. UISceneDelegate에 익숙해지기 전에 옛날로 돌아 가기 위해. 다음 단계가 도움이 될 수 있습니다.

  1. plist에서 Application Scene Manifest를 삭제하십시오.

  2. Application Scene Manifest.h 및 Application Scene Manifest.m을 삭제하십시오.

  3. #pragma mark-APPdelegate.m의 UISceneSession 라이프 사이클에서 코드 삭제

  4. @property (강하고 비원 자적) UIWindow * window 추가; APPdelegate.h에서

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