Things take time

[SWIFT] FrameWork만들기! 본문

iOS (기능)

[SWIFT] FrameWork만들기!

겸손할 겸 2020. 10. 6. 17:00

[사용목적]

흔히 말하는 모듈화, 기능적으로 완전히 분리되며 다른 프로젝트에서도 공통적으로 쓸 수 있는 기능을 한 프로젝트 내에 두는 것이 아니라 프레임워크라 하는 것으로 만들어 이 프로젝트, 저 프로젝트에서 가져다 쓰기 위함이다.

 

설명을할 때 어렵게 쓰지 않을 것이다. 다른 곳 둘러보니 이 용어 저 용어 다 쓰는데, 그냥 이해하기 쉽게 표현하겠다.

 

 

[만들기]

새 프로젝트를 생성하고, 생성을 선택할 때 프레임워크를 선택한다. 이름은 ReusingFramework로 하였다.

일반 싱글 뷰 앱으로 생성할때와 달리, 메인스토리보드에 대한 설정이 보이지 않는다.

즉, 외부 프레임워크 자체는 일반 프로젝트처럼 메인 스토리보드에서 initial view controller라는 것이 없는 것이다. 

프레임워크는 가져다 쓰기 위한 기능, 화면만을 제공하는 것이지 앱자체가 아니다.

 

여기서 ViewController를 상속받는 클래스와 xib파일을 생성한다. (이름은 ReusingMainViewController)

그리고 아래와 같이 xib파일에서 File's Owner를 설정하고 Outlets에 View를 연결해준다.

 

그리고 위의 ReusingMainViewController.swift 파일은 다음과 같다.

import UIKit

public class ReusingMainViewController: UIViewController {
    
    override public func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
    }
    
    
    public init() {
        super.init(nibName: "ReusingMainViewController", bundle: Bundle(for:ReusingMainViewController.self))
    }
    
    required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

}

init이란 기본 생성자가 있는데, 이를 사용하여 원래 또 다른 생성자인 init을 호출하여, xib파일과 연결해주는 코드를 작성하며, required init은 문법적으로 작성해야한다.

 

그리고 init(), viewDidLoad(), class ReusingMainViewController 앞에 pulic이란 접근 제어자를 꼭 붙여준다.

이렇게 하고 프레임워크 프로젝트를 닫는다.

 

 

이제 이 프레임워크를 사용할 프로젝트를 생성한다.  (나는 Main이라 이름 지었다.)

 

워크스페이스를 만든다.

워크스페이스 파일은 보통 외부 라이브러리를 pod install하면 생성된다. 즉, 여러 개의 라이브러리나 프레임워크를 다 갖고 있는 프로젝트 파일을 의미한다.

 

나는 Hello라고 만들었는데, 아래와 같이 add를 통해 두 개의 프로젝트를 넣는다. (ReusingFramework.xcodeproj파일 + Main.xcodeproj)

이 때 두개의 프로젝트 파일은 닫혀 있어야 한다. 새로 생성한 워크스페이스 파일(hello)로만 작업한다!

그리고 왼쪽 탭에서 Main선택 후, General탭에서 Frameworks, ... 부분을 + 버튼 클릭하여 넣어준다.

그리고 아래와 같이 세팅하고 실행하면 끝이다.

- ViewController가 initial ViewController이며 버튼 하나를 넣었다. 버튼을 클릭하면 프레임워크의 ViewController를 띄운다.

- 실행 전 target을 Main으로 맞춰준다. (화면 왼쪽 위 재생, 멈춤 버튼 옆)

- 코드에서 import로 ReusingFramework한다.

 

그리고 실행을하면 

 

간단하게 끝!