質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

1576閲覧

自作のPackageが依存する外部のPackageがNo Such Module

Shunly

総合スコア152

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2023/06/13 02:55

実現したいこと

SwiftのPackageを使用してローカルに自作ライブラリをまとめていこうと思い、テスト用にアプリとパッケージを作成してみたのですが、そのパッケージに外部の依存パッケージを追加するとimportでNo Such Moduleとなり解決できていません。
設定や手順が抜けていたら教えていただきたいです。

手順

  1. Xcode でmacOSのコンソールアプリのプロジェクト(SpmTest)を作成
  2. File > New > Package で MyLibraryパッケージを追加 (Add ToでSpmTestを選択)
  3. (このままだとビルドエラーが出ていたので、Framework and LibrariesにMyLibraryを追加)
  4. MyLibraryのPackage.swiftのdependenciesにSwiftyJSONを追加
  5. MyLibraryにSwiftyJSONを呼び出すコードを追加
  6. SpmTestからMyLibraryを使用すると、SwiftyJSONのimportがNo such moduleになる

ソースコード

Package.swift

Swift

1import PackageDescription 2 3let package = Package( 4 name: "MyLibrary", 5 products: [ 6 .library( 7 name: "MyLibrary", 8 targets: ["MyLibrary"]), 9 ], 10 dependencies: [ 11 // これを追加 12 .package(url: "https://github.com/SwiftyJSON/SwiftyJSON.git", from: "5.0.1"), 13 ], 14 targets: [ 15 .target( 16 name: "MyLibrary", 17 dependencies: []), 18 .testTarget( 19 name: "MyLibraryTests", 20 dependencies: ["MyLibrary"]), 21 ])

MyLibrary/MyLibrary.swift

Swift

1import SwiftyJSON // <- No such module 'SwiftyJSON' 2 3public struct MyLibrary { 4 public init() {} 5 6 public func greeting() { 7 let text = "{\"greeting\": \"Hello World!!\"}" 8 let json = JSON(parseJSON: text) 9 print(json["greeting"].string ?? "No greeting") 10 } 11}

SpmTest/main.swift

Swift

1import Foundation 2import MyLibrary 3 4MyLibrary().greeting()

試したこと

以下を試してみましたが効果ありませんでした。

  • File > Package > Reset Package Caches
  • Product > Clean Build Folder

補足情報

  • Project NavigatorのPackage Dependenciesには"SwiftyJSON 5.0.1”が表示されています。
  • JSONオブジェクトを使用する際にコード補完は効いているので、Xcodeはライブラリを認識しているように思えます。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2023/06/13 11:52

コンソールアプリだからかも? .app にならないし…。
guest

回答1

0

自己解決

色々試した結果、Package.swiftのtargetのdependenciesにモジュールを追加した後、Reset Package Cacheをしたら解決しました。
質問前にdependenciesへの追加は試していたが、Reset〜をやっていなくて気づかなかったです、、、

Swift

1 targets: [ 2 .target( 3 name: "MyLibrary", 4 dependencies: ["SwiftyJSON"]), // これを追加

投稿2023/06/14 23:38

Shunly

総合スコア152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問