Embedded Framework를 도입하는 방법

개요



Embedded Framework의 도입 방법이나 빠진 곳에 대해 정리했습니다

Embedded Framework란?



Embedded Framework는 iOS 8, Xcode 6에서 추가된 기능입니다.
앱 코드를 분할하여 Framework로 처리할 수 있습니다.

Embedded Framework를 도입하는 이점



코드를 분할하고 Framework화하면 다음과 같은 이점이 있습니다.
  • 코드의 대상이 나뉘어져 차등 컴파일되어 빌드 성능이 향상됩니다.
  • App Extentions가있는 앱의 경우 기본 대상과 Extension간에 코드를 공유 할 수 있습니다.
  • Framework로 나누면 종속성이 단순 해집니다.
  • 각 Framework에 대한 테스트를 작성할 수 있습니다

  • 도입 방법



    Xcode 7.3.2 Swift 2.2에서의 도입 방법입니다.

    Framework를 만드는 방법



    Embedded Framework의 도입은 간단하고, Xcode의 툴바로부터 「File」→「New」→「Target」을 선택하면, 이하의 화면이 표시됩니다.



    거기에서 "Framework & Library"→ "Cocoa Touch Framework"를 선택하면 새로운 타겟이 추가됩니다.



    새로 만든 Target으로 나누고 싶은 코드를 추가해 갑니다.

    Framework 사용법



    Framework로서 취급하는 메소드나 class, 변수에는 메인 타겟으로부터 액세스 할 수 있도록 public 수식자를 붙여 주세요.
    import Foundation
    import Alamofire
    
    public class Util {
    
        public var name: String?
    
        public init() {
    
        }
    }
    

    사용하고 싶은 Framework를 import하는 것만으로 사용할 수 있게 됩니다.
    import UIKit
    import SampleFramework
    
    class ViewController: UIViewController {
    
        override func viewDidLoad() {
            super.viewDidLoad()
            let util = Util()
            util.name = "hoge"
        }
    }
    

    Embedded Framework의 도입은 매우 간단합니다.
    그러나 Framework 내에서 라이브러리를 사용하는 경우는 여러가지 빠지는 부분이 있었습니다.
    그 대응 방법을 몇 가지 소개하고 싶습니다.

    CocoaPods에서 라이브러리를 사용하는 경우



    Embedded Framework에서만 사용하는 라이브러리에서도 기본 대상에도 설치해야 합니다.
    Podfile에 대상마다 동일한 라이브러리 이름을 작성하는 것은 번거롭기 때문에, iQON에서는 abstract_target 로 정리하고 있습니다.
    // Podfile
    
    abstract_target 'All' do # Targetとかぶらなければ、名前の文字列は何でも大丈夫です
    
      pod 'Alamofire'
    
      target 'SampleApp' do # AlamofireとSVProgressHUDがインストールされる
        pod 'SVProgressHUD'
      end
    
      target 'SampleFramework' do # Alamofireがインストールされる
      end
    end
    

    Carthage에서 라이브러리를 사용하는 경우



    Carthage도 CocoaPods와 마찬가지로 Framework와 기본 대상 모두에 라이브러리를 설정해야합니다.
    메인 타겟의 Embedded Binaries 에 Framework에서 이용하고 있는 라이브러리를 설정합니다.



    Library not loaded에서 충돌하는 경우



    CocoaPods로 설치한 라이브러리가 Library not loaded 로 크래쉬 해 버릴 때는 「Build Phases」를 확인해 보세요.

    아마도 설치된 라이브러리를 앱에 통합하기 위한 Run Script가 없기 때문에 충돌이 있을 수 있습니다.[CP] Embed Pods Frameworks 라는 Run Script 는 본래 CocoaPods 가 자동적으로 추가하는 것으로, 왜 그 Run Script 가 존재하지 않는지는 자세한 것은 모릅니다만, 추가하면 크래쉬 하지 않게 됩니다.



    Framework not found Pods_**에서 빌드가 통과되지 않는 경우



    [Build Phases] -> [Link Binary With Libraries]를 확인해 보세요.
    오류로 표시되는 Framework를 삭제합니다.
    이전부터 CocoaPods에서 라이브러리를 관리하고 있는 프로젝트라면 Pod_**.framework 라는 것이 Link Binary With Libraries 로 설정되어 있습니다.
    그러나 Podfile을 abstract_target 로 쓰도록 했을 경우, 새롭게 Pods-**-**.framework 라는 것이 설정되므로 Pod_**.framework 가 불필요하게 됩니다.
    불필요한 것이 설정되어 있기 때문에 빌드에 실패했습니다.



    요약



    Embedded Framework의 도입은 일부 빠짐없이 넘으면 매우 편리하므로 추천입니다!

    좋은 웹페이지 즐겨찾기