利用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 目录下:
CocoaPods是一个用来帮助我们管理第三方依赖库的工具,他可以解决库与库之间的依赖关系,下载库的源码,同时通过创建一个 Xcode 的 workspace 来将这些第三方库与我们的工程连接起来,方便开发使。如果您还未安装Cocoapods环境,请参考CocoaPods官方教程。
从v5.7.98版本开始调整为Cocoapod方式引入广告平台SDK,请根据以下步骤进行操作:
(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打开项目。
解决方法:
(1):终端执行$open ~/.bash_profile
(2):添加 export LANG=en_US.UTF-8
(3):保存关闭bash_profile文件
(4):重新执行untiy导出xcode
解决方法:需要再项目中创建一个Swift文件进行桥接,在Xcode目录右键点击New File, 选择Swift File,按照图中所示选择。点击Create后会出现一个对话框,点击确认即可。
解决办法:
在Build Settings -> always embed swift standard Libraries 设置为NO。如图: