2017-07-29 105 views
3

我在Swift中有项目,当我用DYLD_PRINT_STATISTICS测量时,我可以看到1.0秒的pre-init时间,其中70%是动态库链接。iOS慢启动时间

是否有任何干净和安全的方式来处理这个问题?

+0

Cocoapods我想,你用那个吗? –

+0

这可能是链接框架。没有更具体的信息,我不能给出更具体的答案。也就是说,[WWDC 2017 Session](https://developer.apple.com/videos/play/wwdc2017/413/)对此非常有启发性。 –

+0

@ J.Doe椰子树的确如此。但如果我手动添加库,它不会解决问题,因为动态链接将以这种或那种方式出现。我遇到了将所有Pod转换为静态库的解决方案。但是,这不看起来像我的意见干净的解决方案 – Roma

回答

1

根据苹果公司关于Optimizing App Startup Time的WWDC 2016会议,无论大小如何,拥有大量dynamically linked libraries都会显着减慢应用程序启动时间。

要解决这个问题,可以将几个动态库合并到一个库中。如果它们已经是static libraries,那么可以使用libtool来合并它们,使用this SO answer的命令。但是,如果它们不是静态的,那么要合并它们,就必须有权访问它们的源代码。如果源代码是可访问的,那么将代码从一个库复制到另一个库中,并使用生成的库就足够了。

当然,从开发者的角度来看,将不同的库合并成一个库是非常不方便的。为了解决这个问题,Xcode允许在设置不同标志(即RELEASE和DEBUG)时连接不同的库,as described in this forum

如果可能,最好合并静态库,因为合并过程远不易出错。 CocoaPods allows users to use static libraries在他们的项目。

+1

请注意,自从他们加载时间已经得到改善。延迟加载dylib而不是引用appdelegate中的整个应用程序会减少应用程序需要响应的时间。 – Jano