添加多个 pod 会使 iOS 应用程序启动时间增加 10 秒以上
Posted
技术标签:
【中文标题】添加多个 pod 会使 iOS 应用程序启动时间增加 10 秒以上【英文标题】:Adding several pods increases iOS app launch time by 10+ seconds 【发布时间】:2015-06-26 18:55:26 【问题描述】:我正在使用 Cocoapods 0.37.2、Xcode 6.3.2 在 Swift 1.2 中做一个 ios 应用项目。在我的项目中添加了大约 8 个 pod 后,设备(iPhone 5)上的应用程序启动时间大大增加(大约增加了 10 秒)。 (注:启动时间是指点击应用图标打开应用的时间)
iOS 终止它的速度太慢了,因为它没有及时启动。崩溃日志顶部如下...
Application Specific Information: com.tryslowappswift failed to launch in time
Elapsed total CPU time (seconds): 27.720 (user 27.720, system 0.000), 68% CPU
Elapsed application CPU time (seconds): 0.074, 0% CPU
Thread 0:
0 dyld 0x1ff0f4c8 ImageLoaderMachOCompressed::rebase(ImageLoader::LinkContext const&) + 456
1 dyld 0x1ff087be ImageLoader::recursiveRebase(ImageLoader::LinkContext const&) + 174
2 dyld 0x1ff07dca ImageLoader::link(ImageLoader::LinkContext const&, bool, bool, bool, ImageLoader::RPathChain const&) + 186
3 dyld 0x1ff012fc dyld::link(ImageLoader*, bool, bool, ImageLoader::RPathChain const&) + 204
4 dyld 0x1ff022d6 dyld::_main(macho_header const*, unsigned long, int, char const**, char const**, char const**, unsigned long*) + 2362
5 dyld 0x1fefe222 dyldbootstrap::start(macho_header const*, int, char const**, long, macho_header const*, unsigned long*) + 394
6 dyld 0x1fefe03c _dyld_start + 60
No thread state (register information) available
...
您可以通过以下方式进行测试:
注意:我创建了一个示例 Swift 项目,其中包含所有 pod 设置 in my github repo。您可以克隆并在您的设备上运行它,然后自己查看延迟。
新建一个空白项目,application:didFinishLaunchingWithOptions:
方法中什么都没有
在设备上运行应用程序并看到应用程序启动速度非常快。
停止。现在尝试添加带有大约 8 个 pod(无论 pod 大小)的 Podfile
,执行 pod install
。
为了清楚起见,这是我使用的Podfile
...
播客文件
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks! # required for Swift pods
pod 'Alamofire', '~> 1.2.1'
pod 'NPReachability', '~> 0.2.0'
pod 'ActionSheetPicker-3.0', '~> 1.6.1'
pod 'SDWebImage', '~> 3.7.2'
pod 'KVNProgress', '~> 2.2.1'
pod 'KeychainAccess'
pod 'JazzHands', '~> 0.2.1'
pod 'DGActivityIndicatorView'
然后再次在设备上运行。这一次您会注意到 10+ 秒延迟,甚至在调用 application:didFinishLaunchingWithOptions:
方法之前。没有import
,没有桥接头文件,只需将 pod 安装到项目中,它会减慢启动速度 (-- rage guy meme !!! ---)
我怀疑这与 Swift 1.2 有关,所以我尝试了一个 Objective-C 项目,但我仍然遇到同样的延迟。它似乎发生在正常的 pod 安装之后,我不知道如何优化或修复这个问题。 :(
更新 1(2015 年 7 月 27 日):
正如 Bryan Musial 所指出的,我尝试在架构设置中添加标志来记录每个库的加载时间。我在我的 iPhone 5 上运行它。这是 Xcode 的“设备”窗口中的结果:
Jul 27 13:56:02 Hlung SpringBoard[43] <Warning>: Installed apps did change.
Added: (
)
Removed: (
)
Modified: (
"th.in.hlung.TrySlowAppSwift"
)
Jul 27 13:56:03 Hlung com.apple.debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
[4964] <Warning>: debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
for armv7.
Jul 27 13:56:03 Hlung com.apple.debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
[4964] <Warning>: Connecting to com.apple.debugserver service...
Jul 27 13:56:03 Hlung com.apple.debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
[4964] <Warning>: Got a connection, waiting for process information for launching or attaching.
Jul 27 13:56:03 Hlung com.apple.debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
[4964] <Warning>: About to launch process for bundle ID: th.in.hlung.TrySlowAppSwift
Jul 27 13:56:03 Hlung com.apple.xpc.launchd[1] (UIKitApplication:th.in.hlung.TrySlowAppSwift[0x578b]) <Error>: The DisableASLR key is no longer respected. Please remove it.
Jul 27 13:56:03 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:04 Hlung kernel[0] <Notice>: xpcproxy[4965] Container: /private/var/mobile/Containers/Data/Application/6C097544-9C1E-4B73-ACF8-43701FDFC8C2 (sandbox)
Jul 27 13:56:04 Hlung com.apple.debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
[4964] <Warning>: In completion handler, got pid for bundle id, pid: 4965.
Jul 27 13:56:04 Hlung com.apple.debugserver-@(#)PROGRAM:debugserver PROJECT:debugserver-320.2.89
[4964] <Warning>: Got a connection, launched process /private/var/mobile/Containers/Bundle/Application/9F233F77-63BC-479E-827A-F08C964DE38C/TrySlowAppSwift.app (pid = 4965).
Jul 27 13:56:04 Hlung SpringBoard[43] <Warning>: LICreateIconForImage passed NULL CGImageRef image
Jul 27 13:56:04 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:04 Hlung locationd[4692] <Notice>: Gesture EnabledForTopCLient: 0, EnabledInDaemonSettings: 0
Jul 27 13:56:05 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:05 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:06 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:07 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:08 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:08 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:09 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:10 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:10 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:11 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:12 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung MobileMail[139] <Warning>: Attempting to badge the application icon but haven't received permission from the user to badge the application
Jul 27 13:56:12 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:13 Hlung assistant_service[4931] <Warning>: the local store doesn't allow tasks and we have no default calendar :(
Jul 27 13:56:13 Hlung assistant_service[4931] <Warning>: Error getting NanoAppRegistry workspace info: Error Domain=NSCocoaErrorDomain Code=4099 "The operation couldn’t be completed. (Cocoa error 4099.)" (The connection to service named com.apple.nanoappregistry.workspace was invalidated.) UserInfo=0x17ebf490 NSDebugDescription=The connection to service named com.apple.nanoappregistry.workspace was invalidated.
Jul 27 13:56:13 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:14 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:14 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:15 Hlung amfid[4918] <Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: dyld: loaded: /usr/lib/libcupolicy.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: dyld: loaded: /usr/lib/libTelephonyUtilDynamic.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total time: 13.1 seconds (100.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total images loaded: 149 (128 from dyld shared cache)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total segments mapped: 60, into 1700 pages with 112 pages pre-fetched
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total images loading time: 12.8 seconds (97.9%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total dtrace DOF registration time: 0.17 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total rebase fixups: 32,622
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total rebase fixups time: 34.74 milliseconds (0.2%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total binding fixups: 121,320
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total binding fixups time: 116.36 milliseconds (0.8%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total weak binding fixups time: 5.10 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total bindings lazily fixed up: 0 of 0
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total initializer time: 118.97 milliseconds (0.9%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libSystem.B.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 37.57 milliseconds (0.2%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libBacktraceRecording.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.77 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libc++.1.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.09 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libobjc.A.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.10 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: CoreFoundation
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.88 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: vImage
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.02 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libGLImage.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.12 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libFosl_dynamic.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.04 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: CoreImage
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 0.02 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: libswiftCore.dylib
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: : 2.14 milliseconds (0.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total symbol trie searches: 43149
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total symbol table binary searches: 0
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total images defining weak symbols: 18
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total images using weak symbols: 44
最重要的部分大概是这样的:
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total time: 13.1 seconds (100.0%)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total images loaded: 149 (128 from dyld shared cache)
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total segments mapped: 60, into 1700 pages with 112 pages pre-fetched
Jul 27 13:56:17 Hlung TrySlowAppSwift[4965] <Notice>: total images loading time: 12.8 seconds (97.9%)
加载图像需要整整 12.8 秒 (97.9%)。但是这个空项目没有任何图像文件。我浏览了这些豆荚,我认为它们也没有大量的图像文件。我还是卡在这里。
与 Bryan 的结果相比,相同的代码在 iPhone 6 上运行。图像加载时间百分比也很高。
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total time: 1.9 seconds (100.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total images loaded: 148 (127 from dyld shared cache)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total segments mapped: 60, into 1756 pages with 164 pages pre-fetched
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total images loading time: 1.5 seconds (81.6%)
此外,还有一条线索。在初始屏幕期间,有多个日志行显示<Error>: SecTrustEvaluate [leaf CriticalExtensions IssuerCommonName]
。谷歌搜索它只是显示这是一些企业应用程序问题,这对我没有多大帮助。
总的来说,我仍然卡住了。 T_T
【问题讨论】:
您是指从您点击打开应用程序开始在实际设备上的启动时间吗?或者从你在 xcode 中点击播放按钮到应用启动所花费的时间? 点击应用图标打开应用后的时间。不是播放按钮。 您是否尝试过重启设备? 也许还可以尝试删除一个 pod 并运行该应用程序。如果这不能解决它尝试不同的吊舱。可能是某个特定的 pod 导致了这种情况。 我已经尝试了每个 pod,但没有一个特定的 pod 会导致这种情况:(。只有当我有一定数量的 pod(大约 8 个)时,无论这些 pod 是哪个或多小,它大大减慢了启动时间。 【参考方案1】:您可能会发现应用程序启动缓慢的原因有很多,例如内存或磁盘空间不足、设备越狱和/或改装、需要全新安装的软件更新失败,甚至是硬件故障。虽然您提供的信息没有太多内容,但您可以查看一些内容以尝试消除潜在原因。
我已经克隆了您的示例项目并在 iPhone 5 到 iPhone 6 Plus 的设备上进行了测试,虽然我无法复制您在本地观察到的缓慢行为,但我一直处于外部和内部因素都有的情况导致启动性能变慢。
首先要做的是,鉴于我们只有您的崩溃日志的一部分,您应该进行一些快速验证,以确保我们正朝着正确的调查路径前进(理想情况下,查看完整的崩溃日志会有所帮助)——正如您可能知道也可能不知道,iOS 采用了看门狗进程来确保 iOS 应用程序在合理的时间内做出响应。当调试看门狗限制未强制执行以允许 Xcode 建立实时调试会话所需的时间时。作为独立应用程序启动,即在调试器之外,看门狗限制完全有效。查看您的崩溃日志,并检查异常代码是否为 0x8badf00d(阅读:“吃坏食物”)——在 64 位设备上,此代码将由前导零填充:0x000000008badf00d
通过TN2151 > Exception Codes:
异常代码 0x8badf00d 表示应用程序已被 iOS 终止,因为发生了看门狗超时。应用程序启动、终止或响应系统事件的时间过长。造成这种情况的一个常见原因是在主线程上进行同步网络。线程 0 上的任何操作:都需要移至后台线程,或以不同方式处理,以免阻塞主线程。
正如您指出的那样,application:didFinishLaunchingWithOptions:
直到等待 10 多秒后才会被击中,这表明延迟正在发生,而应用程序的引导正在发生 - 您的崩溃日志摘录通常似乎同意。 TrySlowSwiftApp.app 的线程 0 仅包含动态链接编辑器 dyld
的堆栈帧。您还想确保您的崩溃日志表明线程 0 是触发崩溃的帧(我不记得遇到过没有指责线程 0 的看门狗崩溃,但我想这是可能的!)。如果指责另一个线程,那么我们需要查看更多关于您手头的崩溃日志的信息。
TN2239 与许多 iOS 调试工具对话,并包含 Environment Variables for the Dynamic Linker 部分 - 我们希望将 DYLD_PRINT_STATISTICS
添加到当前运行方案中,其值为 YES
:
我们还应该在方案的诊断编辑器中启用“日志库加载”:
最后,Xcode 的控制台在 In-Xcode 控制台中不包含时间戳信息。但是,您可以使用 Xcode 的“设备”屏幕查看带有时间戳的实时控制台:
我们添加的环境变量将为您提供有关 dyld
花费时间在做什么的统计信息,而“日志库加载”选项将向您显示正在尝试加载的特定库。因为您在设备的控制台中查看此信息,所以您可以看到与每个日志条目关联的时间戳。
在 dyld 统计输出中,查找在您的设备上花费异常长时间的操作——作为参考,这是我的 iPhone 6 上的一个负载:
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total time: 1.9 seconds (100.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total images loaded: 148 (127 from dyld shared cache)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total segments mapped: 60, into 1756 pages with 164 pages pre-fetched
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total images loading time: 1.5 seconds (81.6%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total dtrace DOF registration time: 0.06 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total rebase fixups: 32,521
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total rebase fixups time: 24.03 milliseconds (1.2%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total binding fixups: 120,894
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total binding fixups time: 190.36 milliseconds (9.8%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total weak binding fixups time: 1.76 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total bindings lazily fixed up: 0 of 0
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total initializer time: 137.82 milliseconds (7.1%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libSystem.B.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 60.11 milliseconds (3.1%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libBacktraceRecording.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.39 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libc++.1.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.27 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libobjc.A.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.03 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: CoreFoundation
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 3.40 milliseconds (0.1%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: vImage
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.31 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libGLImage.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.08 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libFosl_dynamic.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.01 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: CoreImage
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 0.57 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: libswiftCore.dylib
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: : 1.74 milliseconds (0.0%)
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total symbol trie searches: 42394
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total symbol table binary searches: 0
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total images defining weak symbols: 17
Jul 22 16:44:02 iPhone-6 TrySlowAppSwift[939] <Notice>: total images using weak symbols: 44
在 'dyld: loaded:' 行中,查看每个已加载项目的时间戳 - 您正在寻找加载资源比加载周围资源所需的时间更长的地方。
根据您使用这些诊断工具发现的情况,将有助于确定下一个诊断步骤应该是什么 -- 这留给您根据通过这些步骤收集的其他信息进行解释。
正如其他人所建议的那样,我首先会仔细检查第二个相同型号和操作系统设备上的行为——只是为了排除某些特定于设备的情况。如果您可以在那里复制它,那么您应该将更多时间用于软件调查,但是如果它没有在那里复制,您应该将时间用于诊断受影响的设备。更激进的诊断步骤可能涉及擦除设备并执行 iOS 的全新安装。如果您这样做,我会准备至少执行两次 - 第一次不从 iCloud 或 iTunes 备份恢复并重新测试启动行为,然后重新加载第二次以将您的内容恢复到设备。
【讨论】:
感谢您的长时间回复!很高兴听到您无法复制缓慢的行为。我会按照您的建议尝试调试并通知您。 我已尝试按照您的建议添加标志,并将结果放入我的问题的“更新 1”部分。 我还是被卡住了:P 谢谢,我得到了total images loading time: 7.1 seconds (96.3%)
,它有办法知道它刚刚加载了什么图像吗?因为我的项目没有图片。
带有计时的日志似乎非常有用,虽然我在 Xcode 8 和 iOS 10 上找不到它们。Apple 删除了它们吗?【参考方案2】:
经过一些研究,我发现这个问题实际上不在 cocoapods 中,而是在嵌入式库中(我能够用 carthage 重现同样的问题)。
它不能在所有设备上重现(可能仅在 32 位上)。这个问题不会影响应用商店的构建。虽然它会使开发速度稍微慢一些,但并没有那么有害。
https://forums.developer.apple.com/message/64556#64556 https://forums.developer.apple.com/message/82399#82399
【讨论】:
我可以确认在appstore上发布应用后问题不存在。它只需要试飞构建【参考方案3】:这里有很多讨论:https://github.com/artsy/eigen/issues/586
【讨论】:
【参考方案4】:可能有一个 Pod 会增加启动时间(在最坏的情况下会增加更多 Pod)。如果您的问题得到解决,我的建议是一一移除 Pod。也许创建另一个项目来进行这个测试会更容易。
如果您有一个使用 -all_load 链接器标志的框架或 Pod,则很有可能会大大增加启动时间。
【讨论】:
看起来问题实际上不在 cocoapods 中,而是在嵌入式二进制文件中。而且它只发生在某些设备的开发和临时构建中。以上是关于添加多个 pod 会使 iOS 应用程序启动时间增加 10 秒以上的主要内容,如果未能解决你的问题,请参考以下文章
在 iOS Objective C 中添加 Cloudinary Pod
Kubernetes之NetworkPolicy,Flannel和Calico