V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
troyl
V2EX  ›  iDev

可以将多个 Dynamic Framework 合并成一个吗?

  •  
  •   troyl · 2016-07-14 05:44:16 +08:00 · 3616 次点击
    这是一个创建于 3050 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样的。

    我正在用 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 。

    有什么办法吗?

    多谢阅读和指教:)

    4 条回复    2021-11-20 09:36:07 +08:00
    hewigovens
        1
    hewigovens  
       2016-07-14 07:07:30 +08:00   ❤️ 1
    你也可以写个 podspec , a/b/c 作为 final 的 subspec ,这样最终出来的就是一个 framework 。
    kitalphaj
        2
    kitalphaj  
       2016-07-14 07:55:31 +08:00   ❤️ 1
    把 a\b\c 暴露给用户没什么,只要你保证 access control 做好,应该是没有什么问题的。
    FreshOldMan
        3
    FreshOldMan  
       2020-10-23 15:10:58 +08:00
    大神,最后怎么办的
    rshinich
        4
    rshinich  
       2021-11-20 09:36:07 +08:00
    同问,最后怎么办的呢。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   330 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 21:58 · PVG 05:58 · LAX 13:58 · JFK 16:58
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.