如何在Framework中添加新xcassets文件夹?已做配置仍有遗漏
看起来你已经完成了基础的Target勾选和Build Phase添加,但还有几个容易忽略的关键步骤需要检查,帮你逐一梳理:
检查构建SDK的Target配置:你提到有一个专门用于构建SDK的Target,这个Target同样需要在新xcassets的「Target Membership」中勾选,并且在它的Build Phase的「Compile Asset Catalogs」阶段添加这个新文件夹。毕竟最终是通过这个Target产出SDK,漏掉它的话新资源根本不会被打包进最终的Framework里。
验证Build Settings里的Asset Catalog列表:在SDK Target的Build Settings中搜索
Asset Catalogs(对应配置键ASSETCATALOG_COMPILER_INPUTS),确认新的xcassets文件夹已经被加入到这个列表中。有时候仅在Build Phase操作不会自动同步到这里,手动添加能避免遗漏。确认资源的正确访问方式:Framework中的资源不能直接用
UIImage(named: "xxx")这种全局方法加载,必须指定Framework的Bundle。比如使用:UIImage(named: "yourImageName", in: Bundle(for: YourFrameworkClass.self), compatibleWith: nil)如果代码里没做这个处理,就算配置全对也会加载失败,很容易误以为是配置问题。
清理Xcode构建缓存:Xcode的缓存经常会导致新资源不生效,先执行
Cmd+Shift+K清理当前项目,再前往Xcode > Preferences > Locations找到Derived Data目录,删除整个文件夹后重新构建SDK。排查资源命名冲突:如果新xcassets里的资源和原有xcassets的资源重名,编译时会被覆盖,导致新资源无法正常加载。建议给新资源添加专属前缀(比如
NewSDK_xxx)来避免冲突。验证新xcassets的结构合法性:确保新文件夹是标准的xcassets格式,里面的资源项(比如Image Set)配置正确,没有损坏的图片文件。可以先在日常开发的Target中测试加载新资源,确认资源本身没问题后再排查Framework的配置。
内容的提问来源于stack exchange,提问作者Pierre F

