アプリ拡張機能でCocoapodsを使用する


83

cocoapodsライブラリを使用するXcode6Beta-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 2014

回答:


65

これを行う適切な方法は、podfileを更新して1行だけ追加することです。

link_with 'yourApp', 'yourAppExtension'

ポッドを更新すると問題が解決するはずです。


3
正しい!これが見つからなかったなんて信じられません。
ダンブレイクモア2015年

1
「youAppExtension」の部分とは何ですか?
ネイトユニ2015年

6
ポッドファイルのどこにその行を追加する必要がありますか?
Dekel Maman 2016

7
@Stiは、このもはや作品とリターンのエラーメッセージが言ったように「無効なPodfileファイルを:の仕様[!] link_withPodfileでは、使用対象ブロックしてください代わりに、今ではサポートされていません..」
ライアン

2
仕様link_withPodfileでは、このソリューションが推奨されていません..代わりに、対象ブロックを使用してください、今サポートされていません。
mehul 2017

85

編集(2015/03/10)

新しく受け入れられた回答を参照してください。新しいプロジェクトで試してみましたが、テストポッドは両方とも拡張機能で許可されていないsharedApplicationを使用していました。彼らがそれらのエラーを示したという事実は、それが適切にリンクされたことを意味します。@LeChatNoirへの道!


成功。

解決策は次のとおりです。アプリ拡張機能があり、cocoapodsを使用するプロジェクトでヘッダーをブリッジし、それらのcocoapodsライブラリのいずれかを使用#import <GPUImage/GPUImage.h>する場合、のようなポッドを含めようとすると失敗しfile not foundます。

まず、libPods.aアプリのターゲットと同じように、アプリの拡張機能(プロジェクトファイルをクリックしてから、拡張機能のターゲットをクリック)にリンクするように指示します。

次に、実際のプロジェクトで(プロジェクトファイルをクリックしてから、内側のサイドバーの[プロジェクト]セクションでプロジェクトファイルをもう一度クリックします)、[情報]タブで、使用するデバッグ、リリース、および社内の拡張機能の構成を設定します。ドロップダウンからの「ポッド」構成。Pod Installはこれを実行しないため、自分で実行する必要があります。

最後に、Podsプロジェクトのターゲットとプロジェクトのターゲットの両方に、Valid Architectures変数で構築する必要のあるすべてのアーキテクチャが含まれていることを確認してください。そうしないと、楽しい未定義のシンボルエラーが発生します。

これ機能し、通常のように選択したポッドをインポートできるようになります。


編集(2014/10/14):余談ですが、Swift拡張機能の独自のプロジェクトコード内からObjective-Cファイルを含めることもできるため.m、ブリッジヘッダーに配置するファイルもすべてコンパイルされていることを確認する必要があります拡張ターゲットによって。これは、ターゲットのソースのコンパイルメニューから、または.mXcodeの右側のサイドバーの[ターゲットメンバーシップ]セクションを使用してファイル自体で行うことができます。


私はすべてのステップの上に実装しました..しかし問題があります..アーキテクチャarmv7の未定義のシンボル: "_ OBJC_CLASS _ $ _ Location"、TodayViewController.oのobjc-class-refから参照してください。それを解決する方法
Urmi 2014年

「Location.h」ファイルをインポートし、今日の拡張子で+クラスメソッドを使用しています...その後、上記の問題が発生します。
urmi 2014年

1
ファイルが拡張子ターゲットのメンバーでもあることを確認しましたか?また、正しいアーキテクチャを構築していることを確認してください。
DanBlakemore 2014年

アーキテクチャが正しいことを確認しました。ただし、拡張ターゲットのメンバーでない場合はファイルします。しかし、すでにアプリにあるファイルを使用することはできませんか?
urmi 2014年

3
また、拡張機能のビルド設定でOTHER_LD_FLAGSの$(継承)を配置する必要がありました。
TWilly

70

上記の回答は機能しますが、拡張機能に2つのポッドしか必要なかったため、Podfileに対して次のことを行いました。

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

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

そして、それpod installを行います!


2
ベストアンサー。このようにして、iOS拡張機能を不要なポッドで過負荷にしない
marcelosalloum 2016年

驚くばかり!ありがとう!
user3427013 2017

これは完璧な答えです。Xcodeのエラーのbecouse:の仕様link_withPodfileでは、現在サポートされていません..代わりに、対象ブロックを使用してください
Mehul

3

ここに画像の説明を入力してください

link_with、もう使用しません。

無効なPodfileファイル:[!] link_withPodfileでの指定はサポートされなくなりました。代わりに、ターゲットブロックを使用してください。

以下は、テスト済みの完璧な回答です。

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.