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

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

新規登録して質問してみよう
ただいま回答率
85.49%
Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

1回答

2341閲覧

[Swift] SocketIO を import したいのに "No such module SocketIO" と表示されてしまう

coffeesleep

総合スコア5

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2020/05/01 14:56

編集2020/05/01 15:03

前提・実現したいこと

開発初心者です。
いくつか似たような記事がありますが、下記のような Socket.IO をつかった簡単な Node.js x Swift 動作を手元で作りたいと思っています。

https://qiita.com/hiyuzawa/items/15c9f10dcdf0fcb37b4a
https://qiita.com/Suna/items/75785a24daf759a72b11

ビルドしようとすると、main.swift で import SocketIO している部分にエラーが出て、 "No such module SocketIO" と表示されます。
ググっていくつかの解決策(下記)を試してみましたがどれもダメで一日ずっと困っているので、どなたかお助けいただけるととてもありがたいです。。

発生している問題・エラーメッセージ

No such module SocketIO

該当のソースコード

main.swift

Swift

1import Foundation 2import SocketIO //ここにエラーが出る 3 4let socket = SocketIOClient(socketURL: URL(string: "http://localhost:3000")!, config: [.forceWebsockets(true)]) 5 6socket.on("connect") { data, ack in 7 print("socket connected") 8 9 print("send message") 10 socket.emit("from_client", "Hello") 11} 12 13socket.on("from_server") { data, ack in 14 if let msg = data[0] as? String { 15 print("receive: " + msg) 16 } 17} 18 19socket.connect() 20 21CFRunLoopRun() 22

試したこと

####1. Socket.IO まわりの一通りの環境設定
#####サーバー側

  • ターミナル:npm install socket.io
  • → package.json に Socket.IO が追加されていることは確認

json

1{ 2 "name": "chat-app", 3 "version": "1.0.0", 4 "description": "", 5 "main": "index.js", 6 "scripts": { 7 "start": "./node_modules/.bin/nodemon server.js" 8 }, 9 "author": "", 10 "license": "ISC", 11 "dependencies": { 12 "ejs": "^3.1.2", 13 "express": "^4.17.1", 14 "mysql": "^2.18.1", 15 "nodemon": "^2.0.3", 16 "socket.io": "^2.3.0", 17 } 18}

#####クライアント側

  • ターミナル:pod init
  • Podfile に pod 'Socket.IO-Client-Swift', '~> 15.2.0' を追加
  • ターミナル:pod install
platform :ios, '9.0' use_frameworks! def install_pods pod 'Socket.IO-Client-Swift', '~> 15.2.0' end target 'chat-app-client' do install_pods end # Pods for chat-app-client target 'chat-app-clientTests' do inherit! :search_paths # Pods for testing install_pods end target 'chat-app-clientUITests' do # Pods for testing install_pods end

####2. Swift Package Manager のセットアップ

  • ターミナル:swift package init --type executable
  • Package.swift: .Package(url: "https://github.com/socketio/socket.io-client-swift", majorVersion: 15) を dependencies に追加

swift

1import PackageDescription 2 3let package = Package( 4 name: "chat-app-client", 5 dependencies: [ 6 // Dependencies declare other packages that this package depends on. 7 // .package(url: /* package url */, from: "1.0.0"), 8 .Package(url: "https://github.com/socketio/socket.io-client-swift", majorVersion: 15) 9 ], 10 targets: [ 11 // Targets are the basic building blocks of a package. A target can define a module or a test suite. 12 // Targets can depend on other targets in this package, and on products in packages which this package depends on. 13 .target( 14 name: "chat-app-client", 15 dependencies: []), 16 .testTarget( 17 name: "chat-app-clientTests", 18 dependencies: ["chat-app-client"]), 19 ] 20)

→ただし、この Package.swift の修正を加えるとこのような新たなエラーが出てきてしまいます。

'Package.Dependency' has no member 'Package' .Package(url: "https://github.com/socketio/socket.io-client-swift", majorVersion: 15)

####3. xcodeproj ファイルではなく xcworkspace を開く
こちらの記事を参照してやってみました。
xcworkspace 自体のビルドはできるのですが、元の全体ファイルのビルドエラーは治りませんでした。

補足情報(FW/ツールのバージョンなど)

Xcode Version 11.4.1

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

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

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

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

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

guest

回答1

0

ベストアンサー

こちらの環境で試してみましたが、SocketIOは問題なくimportできました。
次のことを試してみてはいかがでしょうか。

1. 一度Buildしてみる

pod でいれても、一度Buildしないとエラーになることはよくあります。
Cmd + B (もしくは、Product -> Build)を実行して関連ファイルを Build するとエラーが出なくなると思います。

2. Swift Package Managerの設定は Xcode 上で行う

File -> Swift Packages -> Add Package Dependency で設定できます。
Choose Package Repository のところで https://github.com/socketio/socket.io-client-swift を入れ、ダウンロードしたいバージョンを設定すれば、あとは自動的にダウンロードできます。

投稿2020/05/01 22:08

TsukubaDepot

総合スコア5086

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

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

coffeesleep

2020/05/02 06:26

丁寧なご回答本当にありがとうございます(TT) いま外出してしまっているのですが、帰宅し次第すぐに試させて頂きたいと思います。
TsukubaDepot

2020/05/02 09:31

ちなみに、ライブラリはcocoa pods か Swift Package Manager のいずれかで入れれば大丈夫ですので、重複して入れないようにお気をつけください。
coffeesleep

2020/05/02 11:34

TsukubaDepot 様 本当にご丁寧に説明していただきありがとうございます。。!!! いただいた指示通りに作業し前進した気がするのですが、少し違った問題に出くわしてしまったようで、申し訳ないですが以下の質問をさせていただいてもよろしいでしょうか。。? 素人な質問で本当に申し訳ありません。。 Xcode 経由で SocketIO をダウンロードできた画面では、 main.swift がみられません。おそらく chat-app.xcodproj を開いていると思います。 ここで新たな .swift ファイルを作り import SocketIO をしてもエラーにならずに済む(ありがとうございます。。!)のですが、別のエラー “Expressions not allowed at the top level” というのが出てきてしまいます。ググると、まずは main.swift 内で作業しなければいけないという回答を見つけました。しかし今の Xcode 上には main.swift がありませんでした。 (Atom など別のエディタで見ると Souces -> chat-app-client -> main.swift が存在するのは確認できました) そこで、Xcode -> File -> Open で、.xcodeproj ではないフォルダマークのアイコンを開きました。そうするとしっかりと Souces -> hat-app-client -> main.swift を Xcode 上で見ることができました。 よし!と思いこの main.swift に import SocketIO をしたところ、こちらではまた元の “No such module SocketIO” に戻ってしまいました。。。 Xcode で開いているファイル/フォルダや、見ているものに問題があるのでしょうか。。 素人質問で本当に恐縮ですが、もし可能でしたら何が間違っているのかご案内いただけるととても助かります。。 (フォルダ構成) - chat-app //親フォルダ。この中にnode_modulesやserver.jsもある -- chat-app-client //新規Xcode file --- chat-app-client ---- AppDelegate.swift ---- ContentView.swift ---- etc… --- chat-app-clientTests --- chat-app-clientUITests --- Sources ---- chat-app-client ----- main.swift
TsukubaDepot

2020/05/02 12:06

Podfile でフレームワークを追加したのであれば、開くプロジェクトは *.xcworkspace になりますのでご注意ください(Qiitaの記事にも一応記載されているようです)。 いま念のため確かめてみましたが、macOSコンソールアプリとしてプロジェクトを作り、Pod関連の操作をしたあと xcworkspace の方を開いたら、問題なく SocketIO を追加できました。もし追加できなければ Cmd + B などで一度 Build してみていただけますでしょうか。
coffeesleep

2020/05/02 12:38

ありがとうございます、ご指示の内容で無事に Build することができました!! Podfile と SPM、.xcodeproj と .xcworkspace を混同・同居させてしまっていたようで、すべて消してゼロから Podfile のみでやってみたところ無事に import SocketIO でエラーが出ずにビルドすることができました!! ↑のビルドは ContentView.swift 内で試しまして、このファイルで一定のコードを入れると "Expressions not allowed at the top level” エラーが出てきてしまいますが、それはまた別の問題っぽいので改めて調べさせていただきたいと思います。 ご丁寧に本当にありがうございました!ベストアンサーに選ばせていただきます m(_ _)m
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問