1背景介绍
因为公司业务需要,委托软件开发公司开发了一款可以在iOS设备中查看cbct的工具,具体工作原理是在PC端使用一款软件,将目标的cbct序列文件转换成nii格式的文件,通过网络将生成的nii文件传输到手机中,手机端接收后进行解析查看,可实现三个轴位的观察,切片位置切换以及窗宽床位调整等功能。项目结束后移交到我手中进行维护,经测试和用户反馈后发现该软件仅支持小视野cbct,以及分辨率和尺寸不大的cbct文件,全口的cbct数据发送到手机端后因为解析不成功 app直接闪退,且软件适配的cbct类型较少,不能满足客户需求,排查问题后发现系软件开发公司使用Unity进行开发,nii文件解析和显示使用的是Volume Viewer ProVolume Viewer Pro | Fullscreen & Camera Effects | Unity Asset Store 插件详情页明确说明:Not suited for mobile! Not suited for large data sets! 虽然他们做到了在手机中使用,但是可能存在bug而且大文件无法解析的问题还是无法得到解决,因为博主有在PC端进行vtk开发的基础,所以就想能不能在iOS设备中也使用vtk进行开发,在vtk源码中发现了对iOS设备的支持,查看官方文档确实支持。完美,开启万里长征第一步!
2编译源码
与vtk在PC端开发中第一步工作相同,编译源码,博主使用的是8.2.0版本(先后尝试了9.3.0和9.2.6、7.1.1)vtk,电脑用的是Mac Pro M2 Max芯片32GB内存,CMake版本为3.26.4,XCode版本为15.0.1,SDK版本为17.0。
因为现在vtk最新版本为9.2.6,所以想直接尝试在最新版本上编译iOS framework,与常规编译过程相同
1下载源码
VTK - The Visualization Toolkit 在官网上下载最新版本(9.3.0)vtk源码,https://www.vtk.org/files/release/9.3/VTK-9.3.0.tar.gz ,下载完成后,将源码解压到目标位置,同时创建 build和install目录
2使用cmake进行项目配置
打开cmake-gui,设置对应目录,注意此时先不要点击configure
点击 Add Entry按钮,在弹出的对话框中,name填入VTK_IOS_BUILD,type选择BOOL,value设为选中状态,点击OK。
完成后点击Configure
配置完成后,建议VTK group中进行如下设置,再次点击configure按钮
确保所有条目中不存在红色标识,点击generate按钮,
到此,cmake中配置环节就完成了。
3使用make命令进行编译
打开终端,切换到build所在目录,执行make -j128 命令,因为博主mac性能较高,所有选择了较高的线程数,大家可以根据自己的mac性能情况进行自己调整8 16 32 64等参数,输入命令后将会运行较长一段时间,大概在20min左右,
但是,辛苦等来的确实最后一步的报错,包括在9.2.6版本中也进行了尝试,会发生同样的错误,
也没花过多时间,在这两个版本编译问题的解决上,如果有大佬编译成功麻烦评论一下方法,直接转向了8.2.0版本,同样的步骤和方法,最后提示编译成功,功夫不负有心人。
可以在install目录中看到framework包
3用官方示例代码测试编译好的framework
根据官方文档描述,vtk的demo应该在build目录中的CMakeExternals目录中,但并没有发现demo工程文件,所以我们选择直接打开源码中的Example目录中的iOS目录中的示例工程,
以VTKVier工程为例,在XCode中打开项目,点击左侧的项目根条目,在中间窗口中滑到最底部找到,下图选项,将其中原本存在的vtk.framework移除,点击加号选择我们编译好的vtk.framework,
点击上方选项卡切换到Build Settings页面,在右侧搜索栏中输入header,滑动滚动条,找到Search Paths设置组,按照你电脑中vtk.framework所在位置配置红框中两个目录
这时候应该不会再提示找不到头文件,但要想真正编译运行起来还需要设置签名,因为避免各种问题,所以我选择连接真机进行调试,博主使用的是iPhone 10,建议不要使用太老或者性能太差的设备进行调试。
设置好以后就可以点击运行了,就可以看到程序在手机中安装并运行起来,以下是运行效果图,最后一张图片是我验证那全口的cbct文件在iOS中的解析,显示稍微存在点问题,但是已经说明这个方案用来解决大体积的cbct文件在iOS设备中的解析和显示是可能的。如果遇到什么问题可,以私信或者评论联系!
4最后
到这里其实我是探索了2周左右的时间,其中也是经历了很多试错,现在记录在这里希望大家和以后的自己能够少走弯路,在技术路上一帆风顺。编译好库只是开始,接下来的工作将会更加具有挑战性。
希望和大家一起学习,共同成长。
Sharp tools make good work.