写在前面
我的项目DDD是swift 的,然后其中一个projectA 是swift 的,然后projectA中有使用OC混编,还在projectA中做了module,最后projectA 的动态库给到DDD用,DDD在打包的时候如题
这里面也是踩了不少坑。建议Swift制作Framework一些配置项的设置参考这个
解决过程
网上的多是类似于这样的多数是说静态库放到enbed frameworks 里面了。但是我的framework就是动态库,所以问题还是要看日志
查看verbose.log(如果这个没有东西,就挨个log,查看,总归不同的问题记录在不同的log的)
说的都是找不到libswiftXX的动态库
2020-03-08 12:15:29 +0000 [OPTIONAL] Can't have a profile, not a bundle at
<DVTFilePath:0x7fcd52a12e30:'/Users/XXX/Library/Developer/Xcode/Archives/2020-03-08/OVPNTestApp 2020-3-8, 8.14 PM.xcarchive/Products/
Applications/Gloable.app/Frameworks/libswiftDarwin.dylib'>
我的项目DDD是swift 的,然后log里有问题的全是libswiftXXX的dylib可执行文件
所以应该是和swift的编译有关。至少是swift的系统库
然后就把2020-3-8, 8.14 PM.xcarchive/Products/ Applications/Gloable.app/Frameworks/libswiftDarwin.dylib
在finder 中去看看,发现报错中的那些信息都在啊
然后一顿搜索
解决
最后自己对照着新建的demo,网络上文章里的可能原因,一个个对比,终于找到原因了。
我自己引入自己开发的swift 的framework 动静态设置没有问题,系统的动态库比如NetworkExtension.framework 如果你设置错,编译直接报错的。问题就在于这个Pods_[projectName].framework ,这是pods脚本创建的,我不知道啥时候改了它的embed属性,导致打包报错。把它改成不是embed的就可以打包了。这玩意影响了我swift项目对于系统库的编译引用。
总结
- swift 项目引入不同语言编写的动态静态库,对于编译设置有一定的要求,特别是混编的。所以,不可避免的一些配置属性可能不了解,这次又认识了几个,在参考部分我都罗列出来了
- framework和embed的关系是在target==>general==>Frameworks,Libraries,and Embeded Content 中配置的,其中的三个属性值,有三个,这次是搞清楚干啥的了
- 我的项目比Swift制作Framework一些配置项的设置里面的demo还要复杂一些,在文中开头有说结构,其中的modulemap也是花了我两天时间,但是没有做记录,因为那个玩意我还没有完全搞懂。
- 定好语言,能不混编就不要混编,用你最熟悉的一套搞下来,能省不少事。不过换个角度,尝试对自己而言的新东西总归要付出一定的时间精力的
参考
Embedding Content with Swift
dyld: Library not loaded: @rpath/libswiftCore.dylib
Swift制作Framework一些配置项的设置