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.