今天接到个需求,把云屋ios的demo封装成framework,供其他项目组直接使用。
上网搜了搜,教程一大把,经过了长达8 9个小时的研究,终于在新建项目中引入了封装好的framework,并运行成功,记录一下遇到的问题和坑
1、先创建一个空的framework叫MeetingSDKHxm,把云屋sdk整个项目都拽进去,编译各种报错,都是一些基础库没有引入,不应该呀,看了下都在pch文件中引入的,那就是pch文件路径找的不对,改成:
$(SRCROOT)/$(PROJECT_NAME)/Meeting/Meeting.pch
如图:
2、这回不报错了,新建一个demo项目叫TestFrameworkkkkk,把MeetingSDKHxm.framework导入进去,运行报错:
dyld: Library not loaded reson:image not found
解决方案:Project->build Phases-> Link Binary with libraries中,将引入的MeetingSDKHxm项改为optional,如图:
3、由于MeetingSDKHxm里开会前和开会中页面都是storyboard写的,所以TestFrameworkKKK打开弹出viewcontroller的方式如下:
NSString *path = [[NSBundle mainBundle] pathForResource:@"MeetingSDKHxm" ofType:@"framework"];
NSBundle *meetingBundle = [NSBundle bundleWithPath:path];
UIStoryboard *meeting = [UIStoryboard storyboardWithName:@"Meeting" bundle:meetingBundle];
MeetingController *meetingVC = [meeting instantiateViewControllerWithIdentifier:@"MeetingController"];
[meetingVC setMeetInfo:meetInfo];
if (meetingVC) {
if(@available(iOS 13.0, *)) {
//ios13弹出不全屏问题
meetingVC.modalPresentationStyle = UIModalPresentationFullScreen;
}
[self presentViewController:meetingVC animated:YES completion:nil];
}
4、注意:网上的教程都是在MeetingSDKHxm.framework内新建bundle文件,把图片和storyboard拖拽进去,可我在TestFrameworkKKK中用上述代码测试根本调用不到storyboard
解决方案:只把图片拽到bundle文件中,storyboard不拖拽进去,打包framework后,storyboard会自动生成在framework的根文件夹下,位置如图:
5、成功调起MeetingViewController后打开的viewcontroller为空,啥都没显示出来。控制台打印:
Unknown class MeetingController in Interface Builder file.
各种搜解决方案,说啥的都有,都tm不对应我这种情况,最后是我自己实验出来的:
Project -> Build Phases -> Copy Bundle Resources 和 Embed Frameworks都加入MeetingSDKHxm就OK了。如图:
6、里面的各种view都展示出来了,可是MeetingSDKHxm工程内的图片不显示了,又各种试,各种搜解决办法。什么[UIImage imageNamed:@"Resources.bundle/back.png"]这种都试了,都不好使。
暂时找到的解决办法:不在MeetingSDKHxm.framwork内生成bundle,新建一个bundle,把图片都拖拽进去,再把bundle拖拽到TestFrameworkKKK项目中,和MeetingSDKHxm.framework平级,如图:
这样MeetingSDKHxm.framework内的页面就能访问Resources.bundle里的图片了,但是我觉得可能是哪里配置的不对,Resources.bundle应该还是可以放到MeetingSDKHxm.framework内,哪位看客有知道的指点一下。!!!!!!!!