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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

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

Swift

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

1回答

1124閲覧

【Xcodeビルドエラー】Unity使用したSwiftとObject-C間のエラーNo visible @interface for 'xxx' declares the selector 'xxx'

itit_503754

総合スコア0

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Xcode

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

Swift

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

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2022/01/20 02:31

編集2022/01/20 02:36

Xcodeでのビルドエラーが解決できません。
UnityでiOSネイティブのMapKitを使おうとしています。
どのように記述し直せばエラーが消えますでしょうか。

【エラー内容】:SwiftToUnityBridge.mm:6:32: No visible @interface for 'SwiftToUnity' declares the selector 'showMapWithFrame:placeJson:'

【SwiftToUnityBridge.mm】

#import <UnityFramework/UnityFramework-Swift.h> extern "C" { void showMap(float x, float y, float width, float height, char *placeJ) { [[SwiftToUnity shared] showMapWithFrame:CGRectMake(x, y, width, height) placeJson:[NSString stringWithUTF8String:placeJson]]; } }

【SwiftToUnity.Swift】

import Foundation import MapKit @objc public class SwiftToUnity: NSObject { @objc public static let shared = SwiftToUnity() @objc static func showMap(frame:CGRect, placeJson: String) { guard let view = UnityGetGLView() else { return } let mapView = MKMapView(frame: frame) // Unityから送られてくるピン情報はJSONなので、パースする。 let jsonData = placeJson.data(using: .utf8)! let decoder = JSONDecoder() let placeList = try! decoder.decode(PlaceList.self, from: jsonData) placeList.places.forEach { // ピンを配置する let annotation = MKPointAnnotation() annotation.coordinate = CLLocationCoordinate2DMake($0.latitude, $0.longitude) annotation.title = $0.title mapView.addAnnotation(annotation) } view.addSubview(mapView) } } /// ピン情報のリスト (UnityのJsonUtilityが配列がルートのJSONに対応していないため struct PlaceList: Codable { let places: [Place] } /// ピン情報のモデル struct Place: Codable { let id: Int let title: String let latitude: Double let longitude: Double }

【参考サイト】
⭕️UnityのiOSネイティブをSwiftで書く:https://re-engines.com/2018/09/19/unity%E3%81%AEios%E3%83%8D%E3%82%A4%E3%83%86%E3%82%A3%E3%83%96%E3%82%92swift%E3%81%A7%E6%9B%B8%E3%81%8F/
↑上記の方の方法を参考にしており、エラー箇所の 'showMapWithFrame:placeJson:' はそのまま使用しています。

❌github unity-swift:https://github.com/miyabi/unity-swift
↑この方のSwiftをUnityで使用するためのAssetは(2019年の6月のXcodeアップデートによってBridge-Headerファイルが使用できなくなったとかで)使用が出来ず(module.modulemapを手動で入れればできると書いている記事もありましたが素人なので理解及ばす)

なので、2019年の6月以降に更新されているものを探したところ
⭕️github SwiftToUnityExample:https://github.com/jwtan/SwiftToUnityExample
↑上記を見つけ参考にしています(サンプルコードは問題なく動きました)

今回のエラーは引数などの記述ミスが多いらしいのでObjective-Cの引数の書き方を中心に調べたのですが、参考サイトの記述方法が正しく思えてどこが間違ってるのかわかりません。
何か気づくことがあれば教えてください。よろしくお願いします。

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

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

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

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

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

guest

回答1

0

Unityのことはわかりませんが、showMap(frame:placeJson:)はstaticメソッドなので、

objc

1[[SwiftToUnity shared] showMapWithFrame:...];

ではなくて、

objc

1[SwiftToUnity showMapWithFrame:...];

で呼び出します。

投稿2022/07/29 03:03

fuzzball

総合スコア16731

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問