본문 바로가기

iOS/develop

Swift Custom Framework 만들기(1)

회사에서 개발을 하다보면 비슷한 프로젝트에는 비슷한 중복코드가 들어 간 것을 확인할 수 있었습니다.

이런 부분은 Framework로 만들어 관리하면 좀더 효율적으로 관리할 수 있습니다.

그리고 (2)에서는 Framework를 cocoapod 에 올려서 코드를 공유하는 것 까지 해보겠습니다.

 

우선 기본 프로젝트를 만들고 프레임워크를 테스트할 버튼을 만듭니다.

그리고 새로운 프레임워크 프로젝트를 생성합니다.

(SampleFramework 명의 프로젝트를 생성하였습니다.)

 

그리고 Framework내 뷰컨트롤러 클래스 (SampleViewController.swift) 와 

오브젝트 SampleObj.swift를 생성하였습니다.

외부에서 호출될 클래스이므로 'open' 키워드를 넣어 생성하였습니다.

import UIKit

open class SampleViewController: UIViewController {

    public init() {
        super.init(nibName: "SampleViewController",
                   bundle: Bundle(for: SampleViewController.self))
    }
    
    required public init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    open override func viewDidLoad() {
        super.viewDidLoad()
    }
    
    @IBAction func tapBtnClose(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }
    
}
import UIKit

open class SampleObj: NSObject {
    open func openFunc() {
        self.hideFunc()
    }
    
    func hideFunc() {
        print("hideFunc")
    }
}

 

- SampleViewController 클래스에 xib에 다른화면임을 보여주는 label과 클릭시 컨트롤러를 닫는 단순 액션을 추가였습니다. 

- SampleObj 클래스 같은 경우, openFunc만 호출하여 사용되고

hideFunc은 외부호출 없이 사용되는 메소드로 'private'로 정의해두었습니다.

현재 코드는 oepnFunc을 통해서만 hideFunc을 호출하도록하는 단순 코드이고

실제 사용시 메소드 호출 가능여부를 open키워드를 통해 정의할 수 있습니다.

 

Framework의 기능은 이정도로 마무리 하고 저장후 프로젝트를 닫습니다!! 

(꼭 닫아야지만 Framework로 추가 가능합니다.)

 

기존의 프로젝트를 다시 열어 Framework를 추가해 줍니다.

(저는 새로운 그룹 Frameworks를 생성 후 그 안에 추가해 주었습니다.)

 

그리고 xcode버그로 강제 종료되는 경우가 있는데 그럴땐 폴더파일을 다 닫아줍니다.

 

그룹 생성
그룹안에 프레임워크 추가
프로젝트 파일 선택 -> Add
추가 완료 화면

그리고 Targets > General 에서 Frameworks, Libraries, and Embedded Content 에 Products>SampleFramework.framework를 추가해 줍니다.

Framework추가

이제 빌드를 한번 하고 SampleFramework를 import해줍니다

import UIKit
import SampleFramework

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let obj = SampleObj()
        obj.openFunc()
    }

    @IBAction func tapBtnTest(_ sender: Any) {
        self.present(SampleViewController(),
                     animated: true,
                     completion: nil)
    }
    
}

 

이제 Run 해주고 결과를 확인합니다.

완성된 결과

일반 프로젝트를 할때 자주는 사용안하지만 자주사용하는 기능을 정의한 프레임워크 하나정도 있으면 많은 시간을 

단축 시킬 수 있고, 그 프레임워크를 유지보수하여 개발 실력을 쌓는데도 많은 도움이 될 것이라 생각됩니다. :) 

위 소스는 아래 링크에서 확인 가능합니다.
https://github.com/daddy73e/blogDaddy73/tree/master/SampleFW

 

daddy73e/blogDaddy73

Daddy73blog Source. Contribute to daddy73e/blogDaddy73 development by creating an account on GitHub.

github.com