事情是这样的。
我正在用 Swift 写一个 Framework ,这个 Framework 的名字是 Final.framework 。
为了实现 Final.framework 各个 module 的功能,我又写了很多小的 Framework 以便重复使用,这些 sub-framework 的名字是 a.framework, b.framework, c.framework 。
当然,当一个 App 要用 Final.framework 的时候,它需要把 a.framework, b.framework, c.framework 也拖进自己的 Frameworks
文件夹。所以文件的结构是这样的:
|--- xxx.app
| |--- Frameworks
| |--- Final.framework
| |--- Final
| |--- a.framework
| |--- a
| |--- b.framework
| |--- b
| |--- c.framework
| |--- c
当然,把 a, b, c 放进 Final.framework 的 Frameworks
文件夹也是可以的:
|--- xxx.app
| |--- Frameworks
| |--- Final.framework
| |--- Final
| |--- Frameworks
| |--- a.framework
| |--- a
| |--- b.framework
| |--- b
| |--- c.framework
| |--- c
然而,无论哪种结构,当我要把 Final.framework 给用户用时,我都势必要把 a.framework, b.framework, c.framework 也暴露给用户。
以前使用 Objective-C 时,可以生成 *.a
的 Static Library ,然后使用如下命令就可以将多个静态库合并成一个:
libtool -static -o libFinal.a libA.a libB.a libC.a
现在 Swift 只支持 Dynamic Framework ,所以上述命令不再有效(即使将 -static
换成 -dynamic
)。
如果使用第三方库的话,大多数情况下都会使用 CocoaPod 来更新,但因为这些都是我自己写的,我希望最后给用户的是一个包含所有的、单一的、只有一个可执行文件的 Framework 。
有什么办法吗?
多谢阅读和指教:)
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.