动态库中公开.m文件修改方法及Framework改.m不生效解决方案问询
关于修改Framework中公开.m文件后不生效的解决方案
嘿,这个问题我太熟悉了!很多刚做Framework的朋友都会踩这个坑——你直接修改.m源文件没用,因为Framework本质是编译好的二进制产物,系统运行时调用的是打包后的二进制,不是你的原始代码文件。给你捋清楚正确的操作步骤:
核心逻辑先搞懂
当你把.h和.m设为公开并打包Framework后,最终输出的.framework包里只有:
- 编译后的二进制可执行文件(比如和Framework同名的那个文件)
- 公开的头文件(.h)
原始的.m文件根本不会被包含进去,所以你改了源文件但不重新编译打包,等于白忙活。
一步步解决问题
- 打开你制作Framework的Xcode项目,找到要修改的那个.m文件,改完内容保存好。
- 重新编译Framework项目:
- 如果只针对某类设备(比如模拟器或真机),直接选对应的目标,点Xcode左上角的编译按钮就行。
- 如果要做支持全设备的通用Framework,得先分别编译模拟器和真机版本,再用终端命令合并:
把合并好的二进制替换到Framework包里的对应位置。lipo -create 真机编译路径/YourFramework.framework/YourFramework 模拟器编译路径/YourFramework.framework/YourFramework -output 合并后的二进制路径
- 替换主项目里的旧Framework:先删掉项目中已有的旧版本,再把新编译好的Framework加进去(或者直接覆盖,但建议先清理缓存避免残留)。
- 清理主项目的缓存(按下
Cmd+Shift+K),然后重新编译主项目,这时候你的修改就会生效了!
额外提醒
- 别改错文件:确保你修改的是Framework项目里的原始.m,不是主项目里不小心复制的副本——很多人会犯这个低级错误。
- 如果你的主项目是直接引用Framework的源文件(不是打包后的.framework),那改完.m直接编译主项目就有用,但这不是Framework的正确用法哦,Framework的意义就是提供编译好的二进制供其他项目复用。
内容的提问来源于stack exchange,提问作者user6698286




