我在使用我製作的Objective C插件在Xcode中構建Unity3d項目(以在設備上測試)時遇到問題。
以下是文件:Objective C適用於Unity的iOS插件
的TestPlugin.h
文件:
#import <Foundation/Foundation.h>
@interface TestPlugin : NSObject
+(int)getGoodNumber;
@end
的TestPlugin.m
文件:
#import "TestPlugin.h"
@implementation TestPlugin
+(int)getGoodNumber
{
return 1111111;
}
@end
最後的C#腳本在統一那是應該打印出來的值getGoodNumber()
回報:
using UnityEngine;
using System.Collections;
using System.Runtime.InteropServices;
public class PluginTest : MonoBehaviour
{
[DllImport ("__Internal")]
public static extern int getGoodNumber();
void OnGUI()
{
string goodNum = getGoodNumber().ToString();
GUILayout.Label (goodNum);
}
}
儘管我可以告訴代碼應該沒有任何問題。但是,即使我跟很多不同的教程,當我嘗試編譯我在Xcode中得到一個錯誤:
Undefined symbols for architecture armv7:
"_getGoodNumber", referenced from:
RegisterMonoModules() in RegisterMonoModules.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)
我嘗試一百萬個不同的東西,似乎沒有任何幫助。儘管我可以從其他教程中閱讀,但我不需要爲Xcode進行任何特殊設置,並且可以將其保留爲不帶插件的Unity項目。
我也想澄清一些事情:
- 插件文件位於
/Plugins/iOS/
文件夾中Unity3d - 構建目標是產品iPad Air 2採用最新的iOS,所以沒有問題應該出現那裏。還在最新的OS X版本上使用最新的Xcode。
- 我有最新的Unity3d可用版本,如果這很重要 - 我確實有Pro版本的Unity3d。
- 該項目如果插件被刪除,所以它不是Unity3d和Xcode之間的問題。
- 我認爲我不需要在Objective-C代碼中使用
extern "C"
包裝,因爲它是「.m」文件,而不是「 .mm」,所以不應該存在名稱混亂的問題。 - 插件是通過「Cocoa Touch Static Library」模板在Xcode中創建的。在將其導入到Unity3d之前,我能夠自己成功構建Xcode項目。
如果有人遇到這樣的問題解決了它,我很樂意聽到解決方案。
如果你能與plugin.m電話的延伸。例如你的答案,比如陀螺儀的getter (x,y或z,沒關係),我以後可以用Unity獲得,例如一個可以調用其他objective-c方法的插件。在這種情況下,我想給這個答案一個質量的賞金。 –
請等待48小時,直到我可以開始,然後指定賞金! :) –
哦哈哈!我太快了 - 以前從未做過賞金! – peterept