Closed buyu03 closed 2 years ago
关于上面 fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't open input file: build-arm64/libMKPFDataModule.a (No such file or directory) 的问题,搞清楚了,是因为从 GitHub上下载的tag上的代码,不是最新代码,是的,你没听错,就是不是最新代码,是真刺激,别问我是怎么知道的,差点EMO
然后不断的找源码,在framework_builder.rb 文件中,我好像发现了什么秘密,制作 framework 的时候,先执行到这里:
UI.section("Building framework #{@spec}") do
# defines = compile
# build_sim_libraries(defines)
output = framework.fwk_path + Pathname.new(@spec.name)
copy_static_framework_dir_for_ios
build_static_framework_machO_for_ios(output)
# copy_license
copy_framework_resources
#cp_to_source_dir#
# rescue Object => exception
# UI.puts exception
# end
end
然后我们看看 copy_framework_resources 方法:
def copy_framework_resources
resources = Dir.glob("#{framework.fwk_path + Pathname.new('Resources')}/*")
if resources.count == 0
framework.delete_resources
end
end
我不懂 ruby,但是,社会的毒打告诉我,这里好像不太对劲,不是copy resource吗,只是读取了一下 framework 下 Resources 文件夹里的东西,也没见往里放东西啊,这不是删了个寂寞吗?同时对比了一下另外一个方法 copy_resources,感觉 copy_resources 要正经一点,只是吧,这个方法是 为 Building static Library 准备的。
感觉我发现了惊天的秘密,可是,天杀的我不会 ruby。美柚的大佬们,能确认一下我发现的信息吗,万一被我碰到死耗子了呢,不然这业务库做不来 framework,KPI 就唧唧了。
已经准备了星爸爸给大佬们奉上,麻烦尽快确认一下,万分感谢了!
恶补ruby,自行解决,原因就是,没有把resource_bundle放到framework下面去,导致 resource_bundle丢失,参考 copy_resources 方法修改 copy_framework_resources 即可,简单点做法,就是通过 spec 中的 resource_bundle 字段找到对应的bundle,放到 framework 的 Resources 文件夹下,当然了,中间还有对比、去重、判空等等操作,不做赘述。结局就是,自行发现,自行解决。最终,还是要感谢美柚,提供了很好用的双私有源二进制方案。
制作完成framework后,发现资源丢了,在组件库中,资源的关联方式如下:
另外,补充一个问题,通过gem安装的 cocoapods-imy-bin,能够正常制作二进制framework,但将代码拉到本地,通过gem编译安装后,制作二进制报:fatal error: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/lipo: can't open input file: build-arm64/libMKPFDataModule.a (No such file or directory)