菜单

iOS导入事项

Unity3D-iOS 导入说明

1 iOS配置说明

利用Unity编译出Xcode工程后,打开Xcode工程,按各第三方平台指引引入其需要的SDK并链接其依赖的系统framework及lib等,也可以看Taku各平台接入帮助。

在Unity的sdk包里已经包含所有的第三方Framework包,可根据需要删除不需要的sdk包,详细哪些平台需要哪些包的引入请查看上面的帮助文档

根据以上罗列的信息引入各第三方网络所需SDK并根据各SDK要求引入系统framework和lib之后需要在Build Settings进行以下配置:

1 在Xcode 工程的Build Settings中,搜索bitcode,并将其值改为NO(当前版本Unity(2018.02)编译出来的Xcode工程中,此项设置默认为Yes),如图:

2 在Xcode 工程的Build Settings中,搜索runpath search paths,并将其值改为@executable_path/Frameworks 如图:

3 在Xcode 工程的Build Settings中,搜索other linker flags,在默认值基础上增加-ObjC, -fobjc-arc 如图:

注意:如果集成了穿山甲v3.5.0.0版本以上,还需要额外增加-l"c++"、 -l"c++abi" 、-l"sqlite3"、-l"z" 如图:

4 在Xcode 工程的Build Settings中,搜索C Language Dialect,将其值改为GNU99[-std=gnu99] 如图:

可以使用以下方法以编程方式完成上述所有配置 C# Editor Script:

#if (UNITY_5 && UNITY_IOS) || UNITY_IPHONE
using UnityEditor.iOS.Xcode;
#endif

public static class MyBuildPostprocess
{
    [PostProcessBuild(999)]
    public static void OnPostProcessBuild(BuildTarget buildTarget, string path)
    {
        #if (UNITY_5 && UNITY_IOS) || UNITY_IPHONE
            if (buildTarget == BuildTarget.iOS)
            {
                string projectPath = path + "/Unity-iPhone.xcodeproj/project.pbxproj";

                PBXProject pbxProject = new PBXProject();
                pbxProject.ReadFromFile(projectPath);

                //unity 2019.4.x以上使用
                string target = pbxProject.GetUnityFrameworkTargetGuid();
                //Unity 2019.4.x下使用
                // string target = pbxProject.GetUnityMainTargetGuid();
                //unity 2018,2017版可使用
                // string target = pbxProject.TargetGuidByName("Unity-iPhone"); 

                pbxProject.SetBuildProperty(target, "ENABLE_BITCODE", "NO");
                pbxProject.SetBuildProperty(target, "GCC_ENABLE_OBJC_EXCEPTIONS", "YES");
                pbxProject.SetBuildProperty(target, "GCC_C_LANGUAGE_STANDARD", "gnu99");

                pbxProject.AddBuildProperty(target, "OTHER_LDFLAGS", "-ObjC");
                pbxProject.AddBuildProperty(target, "OTHER_LDFLAGS", "-fobjc-arc");
                pbxProject.AddFileToBuild(target, pbxProject.AddFile("usr/lib/libxml2.tbd", "Libraries/libxml2.tbd", PBXSourceTree.Sdk));
                pbxProject.AddFileToBuild(target, pbxProject.AddFile("usr/lib/libresolv.9.tbd", "Libraries/libresolv.9.tbd", PBXSourceTree.Sdk));
                #if UNITY_2019_3_OR_NEWER
                pbxProject.AddFileToBuild(target, pbxProject.AddFile("Frameworks/AnyThinkAds/Plugins/iOS/Core/AnyThinkSDK.bundle", "Frameworks/AnyThinkAds/Plugins/iOS/Core/AnyThinkSDK.bundle", PBXSourceTree.Sdk));
                #else
                #endif
                pbxProject.WriteToFile (projectPath);

                var plistPath = Path.Combine(path, "Info.plist");
                PlistDocument plist = new PlistDocument();
                plist.ReadFromFile(plistPath);

                // 集成admob平台时需要设置,传入admob的Appid
                // plist.root.SetString("GADApplicationIdentifier", "ca-app-pub-9488501426181082~7319780494");
                // plist.root.SetBoolean("GADIsAdManagerApp", true);
                plist.WriteToFile(plistPath);
        }
        #endif
    }
}

注: 您需要将此代码写到C#文件并放到Unity3D IDE的Editor 目录下:

2 CocoaPods 引入说明

CocoaPods是一个用来帮助我们管理第三方依赖库的工具,他可以解决库与库之间的依赖关系,下载库的源码,同时通过创建一个 Xcode 的 workspace 来将这些第三方库与我们的工程连接起来,方便开发使。如果您还未安装Cocoapods环境,请参考CocoaPods官方教程。

从v5.7.98版本开始调整为Cocoapod方式引入广告平台SDK,请根据以下步骤进行操作:

  1. 在引入新版本SDK之前,必须先把旧版本的SDK全部删除干净,以免旧版本SDK残留影响后续pod集成。新版本调整后的文件只保留了对应平台的Editor文件,目录结构如图:
  2. 从Unity IDE导出Xcode项目后,到项目的目录找到Podfile文件,例如:
  3. 根据 iOS配置说明 完成Unity相关配置,Podfile文件可参考如图:
  4. 配置完成后,使用终端来到项目目录下,执行pod install或者pod update2.1 注意事项(1) 由于快手、Start.io、BigoAds和PubNative的SDK为动态库,通过CocoaPods引入会导致checkAdStatus判断有误,所以我们建议使用手动引入快手的SDK,以导入快手SDK为例,操作如下:
  5. 通过我们的文档中心下载选择相对应版本iOS的SDK包。如图:
  6. 解压后,找到AnyThinkKuaiShouAdapter.framework和快手相关SDK导入Xcode工程中。如图:
  7. 最后一步,导入完后,在主工程中修改KSAdSDK.framework的Embed属性。如图: 注:由于快手平台不支持bitcode,如果有集成快手平台,则需要在Xcode工程的Build Settings中,搜索bitcode,并将其值改为NO

(2) 如果同时集成穿山甲国内和海外,需要手动修改Podfile,把原本的pod 'AnyThinkiOS/AnyThinkTTAdapter','5.9.51'pod 'AnyThinkiOS/AnyThinkPangleAdapter','5.9.51'注释,改成使用:pod 'AnyThinkPangleGlobalAdapter','5.9.51'即可

如果一切顺利,则应编译您的项目了,如果使用了Cocoapod来管理三方库,请使用Unity-iPhone.xcworkspace这类带有xcworkspace后缀名的文件打开项目,如果是手动集成的三方SDK,请使用Unity-iPhone.xcodeproj打开项目。

3 常见问题

  1. Unity导出Xcode工程成功,但是提示:iOS framework addition failed due to a CocoaPods installation failure. This will will likely result in an non-functional Xcode project.

解决方法:
(1):终端执行$open ~/.bash_profile
(2):添加 export LANG=en_US.UTF-8
(3):保存关闭bash_profile文件
(4):重新执行untiy导出xcode

  1. 导入Unity Ads的广告SDK后,如果出现报错,如下图所示:

解决方法:需要再项目中创建一个Swift文件进行桥接,在Xcode目录右键点击New File, 选择Swift File,按照图中所示选择。点击Create后会出现一个对话框,点击确认即可。

  1. Xcode打包的时候出现 Invalid Bundle. The bundle at 'ProductName.app/Frameworks/ UnityFramework.framework' contains disallowed file 'Frameworks'。如图:

解决办法:
在Build Settings -> always embed swift standard Libraries 设置为NO。如图:

上一个
Android导入事项
下一个
更新Gradle
最近修改: 2025-05-30Powered by