首页 > 编程知识 正文

unity常用API,unity开发苹果电脑推荐

时间:2023-05-04 08:46:01 阅读:169968 作者:1014

表现:

打包的ipa在腾讯的wetest的ios预审中报告了以下错误。

最主要的是这个【dlopen】【dlsym】,据公司考试的姐姐说,这是苹果很严格的目标。 那么,如何从项目中找到问题代码并加以纠正呢?

解决方案:

1 .首先,确定空项目是否报告错误。

可以看出空项目没有这两个问题函数。

2 .下一步是将项目中的可疑文件拖到空项目中逐个检查,以查看导出的软件包是否存在问题。 如果没有任何重点值得怀疑,就采用二分法,一次拖一半文件。

在这个过程中还比较顺利的是,分成几次,最后定位在一个插件中TextFX的具体的一个脚本上【EffectManager】。 下图显示了我将文件添加到空项目中的所有测试。 (PS:腾讯的WeTest平台可以通过学校邮箱或企业邮箱获得50次ios预审核限额。 最后已经是传真的好项目,不再向dlopen报告了。

也就是说,这个脚本报告整个项目的错误。 那么具体是什么代码导致了dlopen呢? (当然,并不是可以直接搜索函数名称。)。 这个EffectManager脚本有一千多行,如何定位? 我感觉考试的姐姐说dlopen是文件操作。 显示脚本的前几行。

using UnityEngine; using System.Collections; using system.collections.generic; using System.Xml; using System.IO; 使用系统; 呃,这个System.IO和System.Xml是什么? 注释掉这两行,看看它在脚本的什么地方被使用了。 是的,我找到了合适的代码:

xmltextreader reader=new xmltextreader (new string reader ) m_font_data_file.text ) ); while(reader.read () (if ) reader.isstartelement ) ) if ) reader.name.equals ) common ' ) texture _ wile textexture } else if (reader.name.equals (' char ) ) uv _ x=int.parse (reader.getattribute ) ) ); uv _ y=int.parse (reader.getattribute (' y ) ); idth=float.parse (reader.getattribute ) (width ); height=float.parse (reader.getattribute (' height ' ) ); xoffset=float.parse (reader.getattribute ) (xoffset ); yoffset=float.parse (reader.getattribute (' yoffset ' ) ); xadvance=float.parse (reader.getattribute ) (x advance ); character _ info=newcustomcharacterinfo (; character_info.flipped=false; Character_info.UV=newrect () float ) uv _ x/(float ) texture_width, 1--(float ) uv_y/) float ) texture_height ) float ) height/(float ) texture_height ) width/) float ) ture ) ttre ) ture ) teshesh (fled ) flit (ted ) flit (character_info.width=xadvance; m _ custom _ font _ data.m _ Character_ infos.add (int.parse (reader.getattribute (id ' ) ) character _ ) 游戏还能正常工作! 然后测试单独注释掉这些代码的EffectManager脚本是否仍然报告错误,以及注释掉代码的原始项目是否仍然报告错误。 结果显示没有错,问题解决了。

背后原理:

这个dlopen/dlsym到底是什么API呢?

可以看出以下内容。

“Linux提供了一组用于动态装载库的API。 这些API如下所示。

dlopen :此函数打开新库并将其加载到内存中。 此函数主要用于加载库中的元件,在编译时不知道。 这样,即使在系统中添加或删除模块,也不需要重新编译。 dlsym :在打开的动态库中查找元件值。 dlclose :关闭动态库。 dlerror :返回描述上次调用dlopen、dlsym或dlclose的错误消息的字符串。 C语言用户必须包括头文件dlfcn.h才能使用上述API。 ”

所以dlopen是操作系统提供的API吗? 打包XCode项目时,Unity将被编译为c代码。 在XCode中搜索dlfcn时,会在名为UnityAppController Rendering.mm的文件中显示

#includedlfcn.h是未修改的EffectManager单独打包的Xcode项目和修改后的effect manager xcode项目,分别搜索dlopen

读取XML代码时,它似乎在编译为c代码后包含dlopen。 我觉得有点无辜。 苹果爸爸打击了动态库的调用,但移动XML并不是主观上调用动态库啊。 但是,为了以防万一,请消灭这个预审错误吧。

让我们看看读取XML的这是什么函数。 要导入c#XML文档,请使用XMLTextReader类进行浅析。 我感觉更无辜了。

感想

今后如果再次出现【dlopen】【dlsym】的错误,可以直接在项目中检索“System.IO”,缩小目标范围。使用外部的插件最好使用正版的最新版,TextFx是30美元。 我觉得最新版是针对2018的build进行修复的。 这个也可能解决问题。 )如果使用旧版本无法解决问题,这个成本会很高。 ……就算打算浪费我好几天,把钱花在技术支持上,到时候也不是200元的事。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。