工程导入外部sdk调用sdk逻辑没反应分析处理,以及@rpath

2023-05-10  本文已影响0人  toNull

场景描述:

我这边制作一个SDK(含用户登录、创角、支付、登出等功能),提供给游戏研发那边接入出包ipa;为了方便研发对接SDK出ipa给我们后,我们SDK有新更新内容,避免每次更新内容都要找游戏研发替换更新SDK,我们这边制作的SDK选择动态库(至于如何替换ipa中动态库请百度)。
之前按照提供的对接文档都好好的,这次遇到了有个问题,研发开发接入调试我们这边提供的动态库SDK时候,导入了我们SDK暴漏头文件,然后调用初始化并且开启了SDK打印设置,但是真机运行调试的时候没有任何执行SDK初始化相关打印日志记录,也就是说SDK初始化逻辑都没有执行。
然后我这边协同研发进行调试,找到并解决问题,以下是分析和处理方案

1、使用File + SDK二进制文件路径

2、Target > Build Phases > 搜索框搜索对应framework命名 > 在Link Binary With Libraries中看动态库对应的Status

3、为啥对应的动态库是Optional呢,在add对应外部SDK文件到工程中,默认不是Required吗?

dyld[2066]: Library not loaded: @rpath/GameSDK.framework/GameSDK
  Referenced from: <DA3C55C5-0011-38C1-BDE3-D9398755291A> /private/var/containers/Bundle/Application/8D726F8A-B0F2-4860-B8F3-279032424115/NewProject-mobile.app/NewProject-mobile
  Reason: tried: '/private/preboot/Cryptexes/OS@rpath/GameSDK.framework/GameSDK' (errno=2), '/System/Library/Frameworks/GameSDK.framework/GameSDK' (errno=2, not in dyld cache)
Library not loaded: @rpath/GameSDK.framework/GameSDK
  Referenced from: <DA3C55C5-0011-38C1-BDE3-D9398755291A> /private/var/containers/Bundle/Application/8D726F8A-B0F2-4860-B8F3-279032424115/NewProject-mobile.app/NewProject-mobile
  Reason: tried: '/private/preboot/Cryptexes/OS@rpath/GameSDK.framework/GameSDK' (errno=2), '/System/Library/Frameworks/GameSDK.framework/GameSDK' (errno=2, not in dyld cache)
dyld config: DYLD_LIBRARY_PATH=/usr/lib/system/introspection DYLD_INSERT_LIBRARIES=/usr/lib/libBacktraceRecording.dylib:/usr/lib/libMainThreadChecker.dylib:/usr/lib/libRPAC.dylib:/Developer/Library/PrivateFrameworks/DTDDISupport.framework/libViewDebuggerSupport.dylib:/Developer/Library/PrivateFrameworks/GPUTools.framework/libglInterpose.dylib

4、研发之所以将动态库link配置为可选,应该是为了解决上面的报错吧;将Link Binary With Libraries中Status改为“可选”时运行没报错,但是为啥SDK初始化逻辑没执行?

5、既然动态库SDK配置为“必须”,那么解决3中的真机调试报错不就能解决问题了?

6、延伸:如果打包提供的对接SDK是静态库,外部工程接入SDK项目Link Binary With Libraries中配置可选和必须两种情况下会不会和上面动态库一样情况呢?

上一篇 下一篇

猜你喜欢

热点阅读