2014-11-26 2 views
5

내 회사의 iOS 앱간에 공유되는 유틸리티 프로젝트를 만들려고합니다. 나는 이전 직장에서이 일을 해왔지만 스위프트보다 먼저 선발했다. Obj-C가 아닌 모든 구현을 신속하게 유지하고 싶습니다.Swift 정적 라이브러리

this guide을 사용하여 cocoapod 경로를 시도했지만 기본 프로젝트에서 유틸리티 코드를 사용하기 전에 빌드 문제가 발생했습니다.

저는 '코코아 터치 정적 라이브러리'로 언어를 신속하게 사용하려고 노력하고 있습니다. 아직 운이 없습니다. 내 .xcodeproj 파일을 내 작업 영역으로 가져 왔습니다. 지금은 하나의 .swift 파일과 XCode에 의해 생성 된 헤더 파일이 있습니다. 프로젝트 이름이 IosUtilsTest입니다. 특히

, 내 테스트 폴더의 유틸리티 파일 :

extension UIBarButtonItem { 
    class func flexible() -> UIBarButtonItem { 
    return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil) 
    } 
} 

그리고 내 응용 프로그램에서

:

import IosUtilsTest 
.... 
toolbar.items = [UIBarButtonItem.flexible(), centeredButton, UIBarButtonItem.flexible()] 
.... 

내가 flexible이 존재하지 않는 컴파일러 오류가 발생합니다.

나는 브리징 헤더에 <IosUtilsTest/IosUtilsTest-swift.h><IosUtilsTest/IosUtilsTest.h>을 포함시켜 보았습니다.

기본적으로 확장 프로그램이 빌드에 포함되지 않은 것처럼 보입니다. FWIW - 특수 빌드 플래그가 필요한 카테고리에 문제가 있다는 것을 기억합니다. 그래서 인스턴스화를 시도한 클래스 만 시도했지만 동일한 기본 오류였습니다.

+0

이상적인 것은 아니지만 수용 가능한 해결 방법을 찾았습니다. util 프로젝트를 하위 모듈로 추가하고 Finder에서 내 신속한 파일이 들어있는 적절한 폴더를 내 응용 프로그램으로 드래그합니다. 적절한 그룹 등을 생성 할 것이므로 util 프로젝트에서 무언가를 업데이트하면 다음에 서브 모듈을 가져 오거나 리부팅 할 때 작업 영역에서 업데이트됩니다.아직'포드 인스톨'을하는 것만 큼 좋지는 않지만 받아 들일 것입니다. – cscott530

+0

스위프트는 여전히 과감한 ** 변화를 겪고 있습니다. 먼지가 조금 안정화 될 때까지 Swift에 정적 라이브러리를 구축하는 것에 대해서는 권장하지 않습니다. 현재 Xcode 버전에서는 라이브러리의 언어로 Swift를 선택할 수 없습니다 (다른 모든 경우에는 가능). 애플이 "이봐, 너는 스위프트 도서관을 만들면 안된다!" – nhgrif

+0

@nhgrif 그건 맞지 않아. 코코아 터치 프레임 워크의 언어로 Swift를 선택할 수 있습니다. 또한 Apple이 제공하는 경고는 바이너리, 특히 다른 버전의 Xcode로 빌드되고 다른 Swift 런타임이 임베드 된 타사 스위프트 바이너리에 관한 것입니다. 동일한 Xcode로 모두 동시에 빌드되는 경우 자체 프레임 워크는 타사와 마찬가지로 잘됩니다. 내 대답 읽기 ... 나는 그들을 사용하고 있으며 그들은 잘 작동합니다. – bandejapaisa

답변

6

우리는 모두 신속하게 프레임 워크 모듈을 구성하는 프로젝트를 가지고 있습니다.이 프레임 워크 모듈은 모두 응용 프로그램에 함께 구성되어 있으므로 도움이 될 것입니다.

먼저 프로젝트 유형으로 Cocoa Touch Framework를 만들고 싶습니다.

나를 잡았던 첫 번째 잡아 당김은 프레임 워크의 모든 것이 공개적으로 선언되어야한다는 것이 었습니다. 기본적으로 내부적으로 선언 되었기 때문입니다. 적어도 클라이언트의 API 부분에 노출 시키십시오. 그래서 사용

public extension UIBarButtonItem { 
    class func flexible() -> UIBarButtonItem { 
    return UIBarButtonItem(barButtonSystemItem: .FlexibleSpace, target: nil, action: nil) 
    } 
} 

당신은 방금 .swift 파일에 모듈을 가져, 더 이상 이것보다 할 필요도 라이브러리와 링크 바이너리 프레임 워크를 포함 할 수 없습니다.

우리도 cocoapods를 시험해 보았고, 그것에 꽤 많은 시간을 썼다. 빌드 오류가 많아서 Git 서브 모듈을 포기하고 사용했습니다. 당신 말이 맞아요. 코코아포드 셋업만큼 좋지는 않지만, 우리에게는 괜찮습니다. 약간의 오버 헤드가 있습니다. 원하는 경우 서브 모듈을 .git 모듈에서 '자동으로 가져 오기'플래그를 지정할 수 있습니다.

코코아 포드에주의해야 할 점 중 하나는 당분간 모든 앱이 동일한 버전의 Xcode를 사용해야한다는 것입니다. 따라서 이전 버전의 Xcode로 빌드 된 모듈을 코코아 더미에 넣으면 Xcode가 업데이트 될 때 다시 빌드해야합니다. 이는 빌드와 함께 패키지화 된 신속한 런타임 때문입니다. 자세한 내용은 Apple Swift 블로그를 참조하십시오.

+0

xcode 8로 우리는 정적 라이브러리로 신속한 프로젝트를 변환 할 수 있습니까 궁금해? –