web-dev-qa-db-ja.com

Xcodeを使用してエラー "No such module"を取得しましたが、フレームワークはそこにあります

私は現在Swiftでコーディングしていますが、エラーがあります。

そのようなモジュールはありません

しかし、モジュールは私のプロジェクトの中にあり、 "リンクされたフレームワークとライブラリ"と "組み込みバイナリ"で宣言されているので、私は理解していません。

フレームワークはObjective-Cにあるので、そのためのブリッジヘッダを書きました。

どうやってXcodeにフレームワークを認識させるのですか?

Error module

Project

Linkes Frameworks, Libraries

Header bridge

272

なぜこれが起こるのかよくわかりませんが、あなたの問題を解決する一つの方法はあなたの build settings そして Framework Search Paths を問題のフレームワークを含むフォルダに定義することです。フレームワークがプロジェクトディレクトリに配置されている場合は、フレームワーク検索パスを$(SRCROOT)に設定して再帰的に設定するだけです。

271
terhechte

金曜日の午後、または午前1時以降であれば:

xcodeprojの代わりにxcworkspaceを開くと、このようなエラーが発生します。

420
capikaw

質問に対するコメントの Martin R の答えがそれほど無視されている理由はよくわかりません。

ブリッジングヘッダー がすでに追加されているため、フレームワークのインポートをスキップしたことを確認してください。

お役に立てれば

35
Mike K

私はCocoapodsと Swift を使って同じ問題を抱えていました。 Podfileの次の行に気付かなかった。

# Uncomment this line if you're using Swift
# use_frameworks!

それで、私がしなければならなかったすべてはそれをそれに変えることでした:

# Uncomment this line if you're using Swift
use_frameworks!

...そしてそれはうまくいきました:)

31
nburk

サブプロジェクトの設定の名前が、「親」プロジェクトの名前と一致していることを確認してください。設定の命名が完全に一致しない場合(大文字と小文字を区別)、Xcodeはアーカイブプロセスを中止し、エラー「No such module ...」を表示します。

つまり、 "AppStore"という名前の設定を持つ "親"プロジェクトがある場合は、 all サブプロジェクトにもこの設定名があることを確認する必要があります。

添付のスクリーンショットを参照してください。

Configuration setup in "parent" project

Configuration setup in 1st sub project

Configuration setup in 2nd sub project

29
Groot

このスクリーンショットをあなたのビルド設定と比較してください。これでうまくいくかもしれません。フレームワークの検索パスに移動します。

Enter image description here

20
Krutarth Patel

私もこの問題を経験していました。私にとっての修正は、2つのプロジェクト間のアーカイブ方式が一致しないことでした。フレームワークプロジェクトとアプリプロジェクトを含むxcworkspaceがあります。問題は、私のアプリのArchiveスキームでは、フレームワークがそのArchiveスキームに使用していたものとは異なるBuild Configurationを使用していたことです。両方のBuild ConfigurationsをReleaseに設定すると、問題が解決しました。

16
mikepj

私の場合、何をしていたのかを理解しようとした結果、フレームワークのインポートが誤ったため、フレームワーク自体が問題であることがわかりました。信頼できるソースからフレームワークを入手していない場合は、フレームワークを調べて、その中にmodule.modulemapファイルを含むModulesフォルダーが含まれていることを確認してください。 module.modulemapが存在しない場合は、 "No such module 'MyFramework'"エラーが発生します。

Example showing directory structure of SwiftyJSON.framework

Modulesフォルダに "MyFramework.swiftmodule"フォルダがない場合、フレームワークは見つかりますが、Xcodeはその内容を認識しないため、さまざまなエラーが発生します。

9
mcsheffrey

次のステップは私のために働いた。

  1. Xcodeを終了する
  2. 端末で"pod update"を実行する
  3. .xcworkspaceを開いて、もう一度ビルドしてください。
8
john raja

フレームワークが実際にそこにあり、パスなどにあると仮定して...〜/ Library/Developer/Xcode/DerivedData/ModuleCacheディレクトリを削除します(そしてプロジェクトをきれいにし、プロジェクト固有の派生データを削除します)。

標準のクリーンアップを実行しても、ModuleCacheディレクトリは再構築されません。

8
Brad Brighton

SchemeのビルドオプションのFind implicit Dependenciesがオンになっていることを確認してください。

7
Nik Kov

私も数日前に同じエラーに遭遇しました。これが私が問題を解決した方法です:

エラーは「モジュールが見つかりません」です

  • ルートプロジェクトディレクトリにPodfileを作成します。
  • Cocoapods(SwiftおよびiOSプロジェクト用の依存関係マネージャ)をインストールしてください。
  • ポッドインストールを実行する
  • プロジェクトビルド設定に移動します。

    • Swiftコンパイラの下でObjective-cブリッジヘッダを見つける - コード生成(ここでSwiftコンパイラが見つからない場合は、おそらく新しいSwiftファイルをプロジェクトに追加してください)
    • ライブラリのヘッダーファイルを左側からブリッジングヘッダーにドラッグアンドドロップします(添付の画像を参照) enter image description here
  • TestProject-Bridging-Header.hなどの新しいブリッジヘッダファイルを作成し、Swift Compiler→Objective-Cで生成されたインタフェースヘッダ名の下に置きます(上記の画像を参照)

  • TestProject-Bridging-Header.hファイルに#import "Mixpanel/Mixpanel.h"と記述します。
  • Swiftファイルでは、コードは次のようになります。Import Mixpanel(つまり、ライブラリの名前)

それで全部です。

6

TvOSのようなプラットフォーム用に構築している場合は、必ずApple TV(つまりマッチング)シミュレータを選択してください。

IOSシミュレータを選択してtvOSアプリをビルドすると、まさにこのエラーが発生しました。 1時間の大部分を費やして、あらゆる種類のビルドの問題を探していました……。

5
Jordan Smith

さて、私にとって同じ問題がどのように解決されたかというと、デフォルトのままではなく、ワークスペースディレクトリを基準にして派生データの場所を設定することでした。 xcodeの設定に行きます。環境設定の位置タブに行き、派生データを相対に設定します。それが役に立てば幸い。

5
harshitpthk

私は同じエラーを受けていました

import Firebase

しかし、私はメインのターゲットセクションにpodを追加するのではなく、PodfileのTestおよびTestUIターゲットに追加するだけであることに気付きました。

コマンドで

pod init

xcode Swiftプロジェクトの場合は、次のPodfileが生成されます。

# Uncomment the next line to define a global platform for your project
# platform :ios, '9.0'

target 'MyApp' do
  # Comment the next line if you're not using Swift and don't want to use dynamic frameworks
  use_frameworks!

  # Pods for MyApp

  target 'MyAppTests' do
    inherit! :search_paths
    # Pods for testing
  end

  target 'MyAppUITests' do
    inherit! :search_paths
    # Pods for testing
  end

end

そのため、適切なプレースホルダーにポッドを追加したことを確認する必要があります。

4
zeeawan

私の場合、アプリはIPHONEOS_DEPLOYMENT_TARGETが9.3に設定されていましたが、新しく作成されたフレームワークでは10.2に設定されていました。

ターゲットプラットフォームの要件がアプリの要件よりも高いため、暗黙の依存関係リゾルバはmy new framework を無視しました。

フレームワークを調整した後、 iOS展開ターゲット 私のアプリケーションの展開ターゲットに合わせて、フレームワークは正常にコンパイルおよびリンクされました。

4
berbie

私のために働いたのは これ /別の質問への解決策です。 Xcodeを閉じてプロジェクトをワークスペースとして再び開きます。
プロジェクトフォルダに移動して.xcodeworkspaceファイルを開きます。
(プロジェクトの代わりに)ワークスペースを開くと、PodはProject Navigatorに最上位プロジェクトとして表示されます。

4
cenkarioz

私はCocoapodsを使用してフレームワークをいくつか追加したのと同じエラーが出ました。私たちのプロジェクトでPodを使っているのなら、xcodeworkspaceの代わりにxcodeprojectを使うべきです。 xcodebuildでプロジェクトを実行するために、xcodebuildコマンドに-workspace <workspacename>パラメーターを追加しましたが、それは完璧に機能しました。

3
pawan singh

私はすでにポッドを取り付けました。私のデバイス上でアプリケーションをビルドしてもビルドは問題なく動作しましたが、アーカイブは動作しませんでした。私はただ走ります:

pod install

新しいポッドはインストールされず、ただ.xcodeprojファイルが再生成され、アーカイブが機能し始めました

3
Vojta

私はちょうど私のカカオポッドを削除しました。それから、私はそれを削除するためにポッドインストールをしました。それから私はそれを私のpodfileに戻して再インストールしました。それがうまくいった。理由がわからない。

2
Daniel Jones

これで直しました

ターゲット - >一般 - >リンクされたフレームワークとライブラリ

Workspaceフォルダーの一番上にあるはずのフレームワークを追加します。お尻の痛み。

2
Magoo

General => Linked Frameworks and Librariesに、私は./Pods/Pods.xcodeprojを追加しました。

2
michel

Xcode 10.1では、私のための解決策は、Fileメニューの build system on Workspace Settings を変更することでした。デフォルトでは New Build System に設定されていますが、これを Legacy Build System に変更するとうまくいきます。

enter image description here

2
MFA

カルタゴを使用している場合は、建物の設定のフレームワークは通常

$(PROJECT_DIR)/Carthage/Build/iOS

(時間を節約するために)carthage update --platform ios --no-buildを実行すると、Buildフォルダ内のファイルは再作成されず、そのモジュールはXCodeで利用できなくなります。

私の場合は、carthage update --platform iosを実行しましたが、問題は解決しました。

1

別の可能性を補完するためだけに、このエラーは「暗黙の依存関係を検索」オプションのチェックが外されている場合に発生する可能性があります。スキームの編集 - >ビルドに移動します。

enter image description here

その後、このオプションを確認してください。

enter image description here

自分用 アクティブアーキテクチャのみを構築 選択した設定で[はい]に設定されていた。これはトリックでした:

左側のプロジェクトナビゲータから[ポッド]を選択し、[ビルド設定]を選択します。アクティブアーキテクチャのみを いいえ にビルドします。

1
boa_in_samoa

カスタムPodを開発中にこの問題が発生しました。 Procfileで依存関係を指定するだけでよいことがわかりました。

Pod::Spec.new do |s|
   # ... other declarations

   s.dependency 'Alamofire', '~> 4.3'
end
1
iljn

私の問題は複数のターゲットに関するものでした。私は以下のリンクでそれを解決しました: 正しい方法でポッドファイルを設定してください そして // - ビルド設定を修正してください

誰かがそれが役に立つことを願っています。

1
Alok

私は、Import Paths内のBuild Settingsがカスタム(MySQL)モジュールには間違っていることを発見しました。それを正しい方向に向けた後、メッセージは消えました。

1
Thomas Kilian

これがようやく私のために働いたのです。私はこれをすべてやらなければならなかったことをそのかなり不幸ですが、これは私がそれがうまくいくのを見つけることができる唯一のものでした。

ライブラリがlinked framework and librariesの下にリストされていることを確認した後。表示されていない場合は、+をクリックして、フレームワーク/ポッドが一覧表示されていることを確認してください。

enter image description here

スキームアイコンでプロジェクトをクリックします(下の画像を参照)。

enter image description here

それからあなたは焦点のあなたのフレームワークがリストされるのを見るべきです:

enter image description here

Manage Schemes.をクリック

それからあなたはこのような何かを見るべきです:

enter image description here

あなたのフレームワークのboxにチェックを入れ、AutoCreate Schemes nowをクリックしてからcloseをクリックします。

それからフレームワーク/ポッドをもう一度インポートしてみてください。

それは私のために働きました。

1
ScottyBlades

私の場合は、上記のすべての提案を試してもまだ機能しません。私はただインポートするものなしでエラーを示すファイルの内容をコピーして、同じインポートで別のファイルに貼り付けて、エラーファイルをコメントアウトします。それがうまくいったプロジェクトをもう一度実行してから、元のエラーファイルを削除して同じ名前のファイルを作成し、同じインポートで再び内容を元に戻します。私の場合は、これらのインポートを一度リンクできるようにする方法を考えてみれば、それは問題ないはずです。

1
kidnapper

ポッドファイルに間違ったターゲットを設定したため(UITestsセクションではなくプロジェクト自体)、この問題が発生していました。

1

私にとってこれはRxSwiftで起こり、問題はPodfileで3.0.0に修正したことでした。バージョン制限を取り除き、ポッドをアップデートすると、それが修正された3.1.0にアップグレードされました。

0
Jensie

"No such module"エラーの最も深刻な原因で賞を受賞しました。私の場合は、付属のフレームワークを手作業で構築し、それを自分のプロジェクトディレクトリにコピーします。私のフレームワーク検索パスは正しく設定されていて、フレームワークは正しくプロジェクトに追加されています。

私が構築していたフレームワークをアーカイブしたとき、私は派生データのリリースフォルダーに私を連れて行くために "ファインダーに表示"を使用しました。しかし、フォルダにはフレームワークへのエイリアスだけが含まれ、フレームワーク自体は含まれていないことに気付きませんでした。元のフレームワークは派生データディレクトリに残っていたので、後で派生データをクリアしたときにフレームワークは削除されましたが、 私のプロジェクトはそれを知りませんでした

実際のフレームワークへのエイリアスに従ってフレームワークを再アーカイブし、それを私のプロジェクトディレクトリにコピーすることはうまくいきました。

0

それが私が持っていたように、cocoapodsなしで、単なる単純なプロジェクトであるならば、あなたのプロジェクトディレクトリの中にあなたのフレームワークを移動して、再リンクを試みることができます。私はデスクトップでそれを持っていました、しかしリンクされて、そして「Import MyFramework」は誤りをしました。プロジェクトディレクトリ内に移動して再度リンクしたところ、うまくいきました。

Xcode 10+とXcodeのバージョン<10で作成されたプロジェクトに対するもう1つの提案2.メインプロジェクトが依存するフレームワークを持つサブプロジェクトを含みます。問題は、Xcodeがサブプロジェクトで指定されたディレクトリにコンパイル済みフレームワークを配置することです。これは、メインプロジェクトのビルドディレクトリとは異なる可能性があります。

ファイル>プロジェクト設定を確認してください。さて、 "詳細..."をクリックして "レガシ"以外のものをビルドパスとして選択してください。その場合、Xcodeはすべてのビルドされたコンポーネントを1つのフォルダに入れるでしょう、そしてそれは "足りない"モジュールを見つけることができるはずです。

0
Anton

コンパイル時エラーです

module.modulemap

Objective-C、ライブラリ/フレームワークターゲット。

独自のライブラリまたはフレームワークをホストする場合は、module.modulemapファイルがあり、そのヘッダーがBuild Phases -> Headers sectionにあることを確認してください

Framework Search Paths

Swiftコンシューマー-> Swift静的フレームワーク
Swiftコンシューマー-> Objective-C静的フレームワーク
Objective-Cコンシューマー-> Swift静的フレームワーク
Objective-Cコンシューマ-> Objective-Cフレームワークライブラリ

Framework Search Pathsを設定せずにアプリをビルドしようとすると、以前と同じエラーNo such module...が表示されます。フレームワークリソースを指すようにFramework Search Pathを設定すると、Xcodeはプロジェクトを正常にビルドします。ただし、シミュレータでアプリを実行すると、次の理由でクラッシュが発生します:Image not found

Import Paths

Swiftコンシューマ-> Swift静的ライブラリ

Import Paths.swiftmoduleを指す必要があります

0
yoAlex5

上記の方法がすべてうまくいかなかった場合は、私の場合と同じです。前日は問題ありませんでしたが、翌朝も同じエラーに直面しました。参照を削除してフレームワークを削除し、もう一度追加しました。これは愚かに聞こえるかもしれませんが、うまくいったと思います。

0
Ray_Soham

1 - ポッドファイルで、問題を引き起こしているポッドを削除し、ファイルを保存します。2 - ポッドインストールを実行します3 - ポッドを再追加し、ファイルを保存します4 - ポッドインストールを再実行します

問題は解決されるべきです。

こんにちは

0

私の問題(今回)は、Podfileで古いバージョンのライブラリを使用していたことです。

私は使った:

pod 'LBTAComponents', '~> 0.1.9'

これはうまくいきませんでしたが、私がそれを次のように変更したとき:

pod 'LBTAComponents', '~> 1.0.2'

出来た。

0
instanceof

私の場合、問題は単に、フレームワークを使用していたプロジェクトのいくつかが、デプロイ先のiOSバージョンのフレームワークよりも前のデプロイ先のiOSバージョンを持っていたことです。 iOSのフレームワークデプロイメントターゲットのバージョンを変更すると、エラーは消えました。 enter image description here

0

あなた自身のライブラリやフレームワークをホストする場合、それがmodule.modulemapファイルを持っていて、そこからのヘッダがBuild Phases -> Headersセクションにあることを確認してください。

0
yoAlex5

私はFacebookSDKをロードするのと同様の問題を抱えていました、私は 〜/ Documents/FacebookSDK (あなたのフレームワークがあるところで検索)を フレームワーク検索パス in ビルド設定 そしてその後追加しましたFBSDKShareKitモジュールをインポートできました

0
kalafun

私の場合は、プロジェクトをリロードするだけでした。プロジェクトのクローンを作成するためにコマンドラインを使用しましたが、サブモジュールが正しくインストールされませんでした。改善するために、私はXCodeを通してプロジェクトを複製し、そしてすべてがうまくいった。まず変更を確実にバックアップしてください。

0
JFed-9

ワークスペースに複数のプロジェクトがある場合は、以下の作業が必要です。

1) すべてのプロジェクトに新しい設定を追加する

2) product - > clean

3)derived dataを削除

4)端末のpod install

5)あなたのプロジェクトを構築します。

誰かに役立つことを願っています。

0
Vlad Pulichev

build-debug.xconfigの最後に追加することで、私は実際にこれをはるかに簡単に解決しました

#include "../Pods/Target Support Files/Pods-IAP/Pods-IAP.debug.xcconfig"

そしてbuild-release.xconfigの終わりまで

#include "../Pods/Target Support Files/Pods-IAP/Pods-IAP.release.xcconfig"

なぜならそれらのファイルは既にPODS_ROOTと関連するビルド変数を定義しているからです。

0
NoodleOfDeath

上記のことをすべて行ってもまだ何もうまくいかない場合は、ターゲットのビルド設定のFramework検索パスに$(inherited)を追加してみてください。

0
iHulk

私の場合Swift 4のプロジェクトではライブラリはコンパイルされていないので、それらを見つけてインポートすることは不可能でした。解決策はSwift 3.2 のようにcocoapodsのライブラリのコンパイルバージョンを設定することでした。 enter image description here

0
user3007870

このエラーは、フレームワークにモジュールマップがないことによっても発生する可能性があります。インポートしようとしているフレームワークが自分のものである場合は、フレームワーク自体にコンパイラの警告がないか確認してください。私の場合、私のフレームワークは構築されていて適切な場所にありましたが、構築の警告がありました。

警告:ターゲット 'MyFramework'のアンブレラヘッダが見つかりません。モジュールマップは生成されません

この警告を解決することにより(これは モジュール名と一致しないフレームワークヘッダーに関連する )、フレームワークをインポートすることができました。

0
Adam Preble

私の場合は、カスタムパスのチルダ(〜)文字を$(HOME)に置き換えることで修正しました。カスタムパスは、 Locations タブの下のXcode設定にあります。

0
Nate Whittaker

時々あなたはポッドを設置しなければなりません。

  1. ターミナルを開く
  2. cDプロジェクト
  3. ポッドインストール
  4. .xcworkspaceを開き、
  5. ビルドは成功しました
0
Umitk

XCode 10でもう1つ考えられる原因は、Podsプロジェクトの場合、Supported PlatformsmacOSに変更され、Valid Architecturesi386 x86_64に変更されることです。プロジェクトがiOS用であると仮定してから、Podsプロジェクトを選択し、Supported PlatformsiOSに、そしてValid Architecturesarm64 arm64e armv7 armv7sに変更します。書かれたSwiftのフレームワークのSwift versionも間違ったバージョンに設定されることがあります。

0
Mark Dail

私はポッドFakeryをインストールしました、ポッドは私のポッドファイルの下に追加されました、しかし私がそれを使用しようとしたとき私は同じエラーを受けました。問題は、ビルドしなかったのですが、ビルドした後、SwiftコンパイラがFakery Swiftファイルにいくつかの関数の名前を変更したというエラーを投げました。これらすべてのコンパイラの問題を解決した後、ビルドは成功し、私はモジュールを使用することができました。だから私の場合はSwiftの言語互換性が問題でした。

0
Khazana

私にとっての解決策はでした。ターゲットの内側 - >ビルド設定 - >フレームワーク検索パスと$(継承)の追加。しかし、それがcocoapodsならあなたの答えはおそらくターミナルの出力の中にあります。

0
Yigit Alp Ciray

その価値はあるが(私はXcode 7.2/Swift 2を使ってこれに馴染みがない)、プロジェクトディレクトリにライブラリからの.Swiftファイルを持っているだけで自動的にアクセスできるようになるので、usingステートメントは必要ない。

例:私はSwiftyJSONを使用していますが、プロジェクトにSwiftyJSON.Swiftファイルを含めるだけで済みました。 usingステートメントは、実際には 'no such module'エラーを出し、それを解決することで解決しました。それで問題なく動作します。

0
markiyanm