앱 확장과 함께 Cocoapods 사용


83

cocoapods 라이브러리를 사용하는 Xcode 6 Beta-6에서 사진 앱 확장을 빌드하려고합니다. Xcode가 사진 확장을 위해 생성하는 브리징 헤더는 cocoapods에서 아무것도 볼 수 없습니다.

예 : #import <GPUImage/GPUImage.h>오류가 발생 "GPUImage/GPUImage.h" file not found합니다.

나는 수입에 대해 생각할 수있는 모든 경로 (괄호와 따옴표 포함)를 시도했지만 거의 성공하지 못했습니다. 예외는 SVProgressHUD다음과 같은 끔찍한 끔찍한 해킹이 작동 한다는 것입니다 #import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h".

그러나 GPUImage의 경우 GPUImage.h헤더 로 들어가서 GPUImageContext.h앱 확장의 일부가 아닌 일반 신속한 코드에 대한 브리징 헤더로 가져올 때 문제가 없음에도 불구하고 갑자기 볼 수 없다고 결정합니다 .

브리징 헤더가 제대로 작동하지 못하게하는 앱 확장 컴파일의 차이점은 무엇입니까?

참고 : 이 튜토리얼 의 가능한 모든 순열을 읽었 으며 누군가가 답을 찾았다 고 생각하는 경우를 대비하여 즉시 적용 할 수는 없습니다.

또한 이 SO 질문에 설명 된 문제는 관련 있을 수 있지만 내 문제가 앱 확장과 관련된 경우 어쨌든이 질문을했습니다.


이것은 나에게 적합한 솔루션입니다. [위젯 (또는 대상)을위한 Cocopoads] [1] [1] : stackoverflow.com/a/17850444/1415713
kurtanamo dec

답변:


65

이를 수행하는 적절한 방법은 podfile을 업데이트하여 한 줄만 추가하는 것입니다.

link_with 'yourApp', 'yourAppExtension'

포드 업데이트로 문제가 해결됩니다.


3
옳은! 나는 이것을 찾지 못했다는 것을 믿을 수 없다.
DanBlakemore 2010 년

1
'youAppExtension'부분은 무엇입니까?
Nate Uni

6
포드 파일의 어디에 해당 줄을 추가해야합니까?
Dekel Maman

7
@Sti가 말했듯이, 이것은 더 이상 작동하지 않고 "잘못된 Podfile파일 : [!] link_withPodfile 의 사양이 지원되지 않습니다. 대신 대상 블록을 사용하십시오." 라는 오류 메시지를 반환합니다 .
Ryan

2
link_withPodfile의의 사양 이 지원되지 않습니다. 대신 대상 블록을 사용하십시오.이 솔루션은 더 이상 사용되지 않습니다.
Mehul

85

수정 (2015/03/10)

새로운 수락 답변을 참조하십시오. 내 테스트 포드가 모두 확장에서 허용되지 않는 sharedApplication을 사용했지만 새 프로젝트에서 시도해 보았지만 작동했습니다. 그들이 그러한 오류를 보여 주었다는 사실은 그것이 제대로 연결되었음을 의미합니다. @LeChatNoir로 이동합니다!


성공.

이 솔루션은 다음과 같습니다 : 당신은 당신의 앱 확장을하고 cocoapods를 사용하여 프로젝트에 헤더를 브리징 그리고 당신이 좋아하는 포드 포함하도록 노력하고, 그 cocoapods 라이브러리 중 하나를 사용하고자하면 #import <GPUImage/GPUImage.h>실패 할 것이다 file not found.

먼저 앱 확장 (프로젝트 파일을 클릭 한 다음 확장 대상을 클릭)에 libPods.a앱 대상과 마찬가지로 에 연결하도록 지시 해야합니다.

다음으로, Info 탭 아래의 실제 프로젝트 (프로젝트 파일을 클릭 한 다음 내부 사이드 바의 "Project"섹션에서 프로젝트 파일을 다시 클릭)에서 사용할 Debug, Release 및 Inhouse의 확장 구성을 설정합니다. 드롭 다운에서 "포드"구성. Pod 설치는이 작업을 수행하지 않으므로 직접 수행해야합니다.

마지막으로 Pods 프로젝트의 대상과 프로젝트의 대상이 모두 Valid Architectures 변수에서 빌드하는 데 필요한 모든 아키텍처를 가지고 있는지 확인하십시오. 그렇지 않으면 항상 재미있는 정의되지 않은 기호 오류가 발생합니다.

이렇게 하면 정상적으로 선택한 포드를 가져올 수 있습니다.


편집 (2014/10/14) : 옆으로 Swift 확장의 프로젝트 코드 내에서 Objective-C 파일을 포함 할 수도 있으므로 .m브리징 헤더에 넣은 모든 파일도 컴파일 되었는지 확인해야합니다. 확장 대상에 의해. .mXcode의 오른쪽 사이드 바에있는 "Target Membership"섹션을 사용하여 타겟에 대한 소스 컴파일 메뉴 또는 파일 자체 에서이 작업을 수행 할 수 있습니다 .


위의 모든 단계를 구현했지만 문제가 있습니다. armv7 아키텍처에 대한 정의되지 않은 기호 : "_OBJC_CLASS _ $ _ Location", 참조 : TodayViewController.o의 objc-class-ref 제발 도와주세요. 그것을 해결하는 방법
Urmi

나는 "Location.h"파일을 가져오고 오늘의 확장자에서 + 클래스 메소드를 사용합니다. 그러면 위의 문제가 발생합니다.
Urmi 2014 년

1
파일이 확장 대상의 구성원인지 확인 했습니까? 또한 올바른 아키텍처를 구축하고 있는지 확인하십시오.
DanBlakemore

아키텍처가 올바른지 확인했습니다. 그러나 확장 대상의 구성원이 아닌 경우 파일. 하지만 이미 앱에있는 파일은 사용할 수 없습니까?
Urmi 2014 년

3
또한 확장 빌드 설정에 OTHER_LD_FLAGS에 대해 $ (상 속됨)을 입력해야했습니다.
TWilly 2014

71

위의 답변은 작동하지만 내 확장 프로그램에 몇 개의 pod 만 필요했기 때문에 Podfile에 다음을 수행했습니다.

target '[Main App Target Name]' do
        pod ...
        pod ...
        pod ...
end

target '[Extension Target Name]' do
        pod ...
end

그리고 pod install의지가 그것을합니다!


2
베스트 답변. 이 방법은 내가 불필요한 포드 내 아이폰 OS 확장을 너무 많이 넣지 마십시오
marcelosalloum

대박! 감사!
user3427013

1
이것은 완벽한 대답입니다. xcode 오류로 인해 : link_withPodfile 의 사양이 지원되지 않습니다. 대신 대상 블록을 사용하십시오.
Mehul

4

여기에 이미지 설명 입력

link_with, 더 이상 사용하지 않습니다.

유효하지 않은 Podfile파일 : [!] link_withPodfile의의 사양이 지원되지 않습니다. 대신 대상 블록을 사용하십시오.

아래는 테스트 된 완벽한 answe입니다.

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, ‘9.0’
use_frameworks!
inhibit_all_warnings!

target 'DemoTodayWidget' do
    pod 'Reachability',                         '~> 3.2'
end

target 'My Widget' do
    pod 'Reachability',                         '~> 3.2'
end
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.