CocoaPods에서 use_frameworks를 사용하는 이유는 무엇입니까?


108

use_frameworksCocoaPods에서 Podfile여러 번 사용 했습니다 . 왜 우리가 그것을 사용하는지 궁금합니다. 나는 그것에 대한 직접적인 대답을 얻지 못했습니다.

예:

platform :ios, '8.0'
use_frameworks!

target "CityWhether" do
    pod 'Alamofire'
    pod 'SwiftyJSON'
end

1
use_frameworks를 의미합니까! 느낌표가 있습니까? 나는 그 이후로 항상 그것에 대해 혼란스러워했습니다! NOT을 의미합니다.
— Gabriel Jensen

답변:


121

use_frameworksCocoaPods에 정적 라이브러리 대신 프레임 워크를 사용하려고 함을 알립니다. Swift는 Static Libraries를 지원하지 않으므로 프레임 워크를 사용해야합니다.


또 다른 답변에서 정적 라이브러리와 프레임 워크의 차이점을 설명했습니다.

Cocoa Touch 프레임 워크

항상 오픈 소스이며 앱과 같이 빌드됩니다. (따라서 Xcode는 앱을 실행할 때 그리고 항상 프로젝트를 정리 한 후에 컴파일합니다.) 프레임 워크는 iOS 8 이상 만 지원하지만 프레임 워크에서 Swift 및 Objective-C를 사용할 수 있습니다.

Cocoa Touch 정적 라이브러리

이름에서 알 수 있듯이 정적입니다. 따라서 프로젝트로 가져올 때 이미 컴파일 된 것입니다. 코드를 보여주지 않고도 다른 사람과 공유 할 수 있습니다. 현재 정적 라이브러리는 Swift를 지원하지 않습니다. 라이브러리 내에서 Objective-C를 사용해야합니다. 앱 자체는 여전히 Swift로 작성할 수 있습니다.

출처 : 내 다른 답변 | AddThis.com 블로그


3
릴리스에 대한 긴 이야기 노트 blog.cocoapods.org/CocoaPods-0.36
— 제이미 Agudo

7
정적 라이브러리는 이제 Xcode 9 베타 4부터 swift를 지원합니다. CocoaPods
— JosephH

정렬 달콤한 description.it 정말 도움이
— Piyush

76

use_frameworks!은 코코아 포드에 동적 라이브러리를 사용하도록 지시하고, 특히 정적 라이브러리를 지원하지 않는 신속한 처리로 인해 한때 매우 널리 퍼졌습니다. 즉, 선택의 여지가 없었지만 더 이상 필요 하지 않은 경우 가 많습니다 use_frameworks!.

Xcode 9 베타 4 및 CocoaPods 1.5.0부터는 신속한 정적 라이브러리가 지원됩니다. 가장 큰 장점은 특히 포드가 많은 경우 앱 시작 시간이 더 빠르다는 것입니다. iOS 10 및 11은 dylib가 많을 때 가장 빠르지 않습니다.

CocoaPods 1.5.0은 2018 년 4 월 초에 출시 되었으므로 업그레이드해야 할 수 있습니다 sudo gem install cocoapods.

아직 정적 라이브러리에서 제대로 작동하지 않는 포드를 여러 개 찾았으므로 마일리지가 다를 수 있습니다.


2
나는 그렇게했고 같은 No such module오류가 발생했습니다. 그 코코아 포드의 문제입니까?
— Alper

3
use_modular_headers!아마도 필요하지만 아직 자체적으로 활성화하지 않은 포드와 함께 작동하도록 Podfile에 추가 해야했습니다.
— Adrian

4
@JosephH "가장 큰 장점은 더 빠른 앱 시작 시간입니다". 이것은 Apple의 Dynamic Library 문서 와 모순되는 것 같습니다. 이것은 dll에 대한 동일한 주장을합니다 : "실행 된 후에 메모리 사용을 최소화하면 앱 실행 속도가 빨라집니다". 여기에서 사용중인 라이브러리가 실행시 필요하지 않거나 인기있는 라이브러리이므로 이미 메모리에로드 된 경우 dll이 실행 시간을 단축한다는 의미입니까?
— TolkienWASP

3
@TolkienWASP 그 페이지는 iOS가 아닌 macOS에 관한 것 같습니다. 그러나 예, DLL이 시작될 때까지로드되지 않으면 dll이 승리합니다. 슬프게도 iOS의 경우 앱 실행이 완료되기 전에 모든 DLL이로드되는 것을 보았으므로 작업 속도가 느려집니다. iOS 앱 시작 시간을 최적화하는 주제에 대한 WWDC 강연이 적어도 한 번 있으며 3 ~ 4 개 이상의 dll이 없는지 확인하는 내용을 명시 적으로 언급했습니다.
— JosephH

1
위에서 언급 한 동영상이라고 생각합니다. developer.apple.com/videos/play/wwdc2016/406 DYLD_PRINT_STATISTICS 환경 변수를 사용하여 앱 실행 속도를 측정하고 무엇이 가장 적합한 지 확인하는 것이 좋습니다.
— iMacHumphries

2

use_frameworks정적 라이브러리 대신 동적 프레임 워크 를 사용할 것임을 선언합니다 .

Xcode 9.0 및 CocoaPods 1.5.0이 출시 된 상태에서 .NET을 사용하지 않으면 swift에서 정적 라이브러리를 사용할 수 있습니다 use_frameworks.

한 가지 문제 use_frameworks는 포드 / 제품의 모든 프레임 워크가 프레임 워크라는 것입니다.

관련 기사 : iOS의 정적 및 동적 프레임 워크에 대한 기본 개요


4
> One performance with use_frameworks is that all your framework in Pods/Products is frameworks. 하나의 공연은 무엇입니까?
— Alex Zavatone 2010 년

2

Cocoapod의 [About] use_frameworks! 은 바이너리 유형을 담당합니다.

  • 경우가 use_frameworks!있다 현재 -dynamic framework
  • 경우가 use_frameworks!있다 존재하지 -static library

use_frameworks!프로젝트 의 해당 대상 에서 Mach-O Type[정보] 에 반영됩니다 Pods.

타임 라인 :

  1. use_frameworks!Swift pod에 사용해야하는 CocoaPods 0.36 도입
  2. CocoaPods 1.5.0 및 Xcode 9를 사용하면 선택할 수 있습니다.

[어휘]


-1

첨가

use_frameworks!

Podfile에서는 나열된 프레임 워크가 정적 프레임 워크 대신 동적으로 설치되기를 원한다는 의미입니다.


감사합니다. 동적 설치와 정적 설치에 대해 자세히 설명해주세요.
— BuffK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.