我必须将Adobe Omniture集成到我的Unity项目中。我设法调用了Android所需的大部分功能,但现在出现了问题的iOS部分。
Omniture带有* .a文件(AdobeMobileLibrary.a),它必须是库本身,头文件(AdobeMobile.h)和用于配置的json文件。该库是用Objective C编写的。 我将所有这些文件放在Assets / Plugins / iOS中。
从名为version()的库中调用一个返回字符串的函数
[DllImport("__Internal")]
extern static string version();
目标C中的签名是
NSString *libraryVersion = [ADBMobile version];
Unity精确编译,但在Xcode中,Apple-Mach-O-Linker表示没有名为_version()的函数。 我检查了头文件,.a文件和.json文件是否在为我创建的项目统一中。我还尝试将.a文件添加到Buildphase - >链接Binary与图书馆,但没有任何帮助。
是否可以在C#脚本中调用纯Objective C函数,或者我是否必须使用一些调用实际Omniture函数的包装函数编写我自己的用c语言编写的库?
答案 0 :(得分:1)
试试这个:
首次将“AdobeMobile”文件夹添加(拖动)到Xcode项目中时,请确认以下设置:
在项目目标的Build Phases选项卡中,展开Link Binary with Libraries部分并添加以下库:
另外,我发现这篇文章,似乎澄清了你可以从Unity调用Objective C函数:Passing complex data type from a pure c plugin to Unity C# scripts:
基本功能已经有效。也就是说,我已经拥有了 在我的插件中调用基本函数来启动产品请求 Apple App Store可以从Unity调用。在统一脚本中 你只需要这样调用这个方法:
[DllImport ("__Internal")] private static extern void RequestProducts(string[] productIdentifiers, int arrayCount); public static void RequestProductData( string[] productIdentifiers ) { RequestProducts(productIdentifiers, productIdentifiers.Length); }
这会调用C函数,如下所示:
void RequestProducts(char* productIdentifiers[], int arrayCount) { // Call the In-App purchase manager to initialize the product request [[InAppPurchaseManager sharedInAppPurchaseManager] RequestProductData:productIdentifierCollection]; }