web-dev-qa-db-ja.com

App ExtensionでCocoapodsを使用する

Cocoapodsライブラリを使用するXcode 6 Beta-6で写真App Extensionを構築しようとしています。 Xcodeが写真拡張用に作成するブリッジングヘッダーは、ココアポッドからは何も見えません。

例えば: #import <GPUImage/GPUImage.h>はエラーになります"GPUImage/GPUImage.h" file not found

インポートのために考えられるすべてのパスを(括弧と引用符で)試しましたが、ほとんど成功しませんでした。例外は、SVProgressHUDのような単純なポッドでは、次の見苦しいひどいハックが機能することです:#import "../Pods/SVProgressHUD/SVProgressHUD/SVProgressHUD.h"

しかし、GPUImageの場合、GPUImage.hヘッダーで、突然表示されないと判断した場合GPUImageContext.hこれは、通常のSwiftアプリ拡張機能の一部ではないコードのブリッジヘッダーと共にインポートされる場合、問題はありません。

ブリッジングヘッダーの正常な動作を妨げているアプリ拡張機能のコンパイルの違いは何ですか?

注: このチュートリアル のすべての可能な順列を読みましたが、誰もが答えを見つけたと思う場合に備えて、すぐに適用できるわけではありません。

また、 this SO question で説明されている問題は関連している可能性がありますが、私の問題がアプリ拡張機能に固有の場合に備えてこの質問をしました。

80
DanBlakemore

これを行う適切な方法は、ポッドファイルを更新して1行だけ追加することです。

link_with 'yourApp', 'yourAppExtension'

また、ポッドの更新により問題が解決するはずです。

66
LeChatNoir

編集(2015/03/10)

新しい承認済みの回答を参照してください。私のテストポッドはどちらもsharedApplicationを使用していましたが、拡張機能では許可されていませんでしたが、新しいプロジェクトで試してみました。それらのエラーが表示されたという事実は、適切にリンクされていることを意味します。 @LeChatNoirへ行く方法!


成功。

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

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

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

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

このshouldは正常に機能し、通常のように選択したポッドをインポートできます。


編集(2014/10/14):余談ですが、プロジェクトコード内のObjective-CファイルをSwift拡張機能に含めることもできるため、.m Xcodeの右側のサイドバーの「Target Membership」セクションを使用して、ターゲットのコンパイルソースメニューから、または.mファイル自体で、これを行うことができます。

85
DanBlakemore

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

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

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

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

67
wyzkid207

enter image description here

link_with、もう使用しません。

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

以下も完璧な回答であり、テスト済みです。

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
1
Mehul