二、Unity调用Xcode封装方法

1、开始封装Unity调用接口

我们在Xcode中 写的接口需要在extern "C"中(加上extern "C"后,会指示编译器这部分代码按C语言的进行编译),需要了解这个作用的童鞋可以自行百度一下这个的作用

#ifdef __cplusplus
extern "C"{
#endif
    
    NSString * charToString(char * c){
        return [NSString stringWithCString:c encoding:NSUTF8StringEncoding];
    }

    void init(char * objserver){
        [UnityExtend share];
        [UnityExtend share].observer = charToString(objserver);
        NSLog(@"传入的物体名称%s:",objserver);
    }
    
#ifdef __cplusplus
}
#endif

2、打包.a库 复制到unity目录下方

我们先选择 下图这个样子,然后点击旁边的运行按钮

运行之后我们会出现这个.a文件  我们把这个文件从文件夹复制到unity的Plugins文件夹下


3、我们开始编写c#代码

using System.Collections;
using System.Collections.Generic;
using System.Runtime.InteropServices;

/// <summary>
/// ios 接口
/// </summary>
public class IosInterface 
{
   #if UNITY_IOS
   
    [DllImport("__Internal")]
    public static extern void init(string observer);

   #endif
}
using System.Collections;
using System.Collections.Generic;

/// <summary>
/// api 接口类 
/// </summary>
public class Extend:CvMonoSignten<Extend>
{
    public override void Init()
    {
        base.Init();
        DontDestroyOnLoad (this);
    }

    public void InitSDK(){
        #if UNITY_IOS
        IosInterface.init(this.gameObject.name);
        #endif
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 单例工具类
/// </summary>
/// <typeparam name="T">泛型</typeparam>
public abstract class CvMonoSignten<T> : MonoBehaviour where T :CvMonoSignten<T>
{
    private static T m_Instance;

    public static T Instance{
        get{
            if(m_Instance == null){
                m_Instance = GameObject.FindObjectOfType (typeof (T)) as T;
                if(m_Instance == null){
                    m_Instance = new GameObject ("CvSingleton of " + typeof(T).ToString(), typeof(T)).GetComponent<T> ();
					m_Instance.Init ();
                }
            }
            return m_Instance;
        }
    }

    public virtual void Init(){
        
    }
}

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TestExtend : MonoBehaviour
{
    private void Start()
    {
        Debug.Log("------开始运行");
        Extend.Instance.InitSDK();
    }
}

4、现在我们开始打包Ios 工程

5、打包成功之后我们开始运行

双击我们刚刚打包的这个文件

打包之后  选择我们的账号,等待验证通过 

通过之后我们直接运行,运行之后可以看到我们调用成功

阳光穿过叶的缝隙!
原文地址:https://www.cnblogs.com/Aaron-Han/p/14809289.html