命令行实用程序来配置Swift项目的编译时间

网友投稿 861 2022-10-26

命令行实用程序来配置Swift项目的编译时间

命令行实用程序来配置Swift项目的编译时间

xcprofiler

Command line utility to profile compilation time of Swift project.

This tool is developed in working time for Cookpad.

Installation

gem install xcprofiler

xcprofiler is tested on latest Ruby 2.3/2.4.

Usage

$ xcprofiler [PRODUCT_NAME or ACTIVITY_LOG_PATH] [options]

xcprofiler searches the latest build log on your DerivedData directory.

You can also specify the .xcactivitylog.

$ xcprofiler MyApp$ xcprofiler ~/Library/Developer/Xcode/DerivedData/MyApp-xxxxxxxxxxx/Logs/Build/0761C73D-3B6C-449A-BE89-6D11DAB748FE.xcactivitylog

Sample output is here

+----------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+| File | Line | Method name | Time(ms) |+----------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+| ResultProtocol.swift | 132 | public func ==(left: T, right: T) -> Bool | 14.2 || Result.swift | 66 | get {} | 13.1 || Result.swift | 78 | public static func error(_ message: String? = default, function: String = #function, file: String = #file, line: Int = #line) -> NSError | 6.3 || Result.swift | 69 | get {} | 2.2 || Result.swift | 132 | public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, try: (NSErrorPointer) -> T?) -> Result | 1.7 || Result.swift | 95 | get {} | 1.4 || Result.swift | 21 | public init(_ value: T?, failWith: @autoclosure () -> Error) | 0.9 || Result.swift | 142 | public func `try`(_ function: String = #function, file: String = #file, line: Int = #line, try: (NSErrorPointer) -> Bool) -> Result<(), NSError> | 0.9 || ResultProtocol.swift | 172 | @available(*, unavailable, renamed: "recover(with:)") public func recoverWith(_ result: @autoclosure () -> Self) -> Self | 0.7 || Result.swift | 72 | get {} | 0.6 || Result.swift | 75 | get {} | 0.6 || ResultProtocol.swift | 72 | public func recover(_ value: @autoclosure () -> Value) -> Value | 0.5 || ResultProtocol.swift | 111 | public func &&&(left: L, right: @autoclosure () -> R) -> Result<(L.Value, R.Value), L.Error> | 0.5 || ResultProtocol.swift | 144 | public func !=(left: T, right: T) -> Bool | 0.5 || ResultProtocol.swift | 92 | public func tryMap(_ transform: (Value) throws -> U) -> Result | 0.4 || Result.swift | 175 | @available(*, unavailable, renamed: "success") public static func Success(_: T) -> Result | 0.3 || ResultProtocol.swift | 55 | public func mapError(_ transform: (Error) -> Error2) -> Result | 0.3 || ResultProtocol.swift | 77 | public func recover(with result: @autoclosure () -> Self) -> Self | 0.3 || ResultProtocol.swift | 93 | (closure) | 0.3 || Result.swift | 31 | public init(attempt f: () throws -> T) | 0.2 |+----------------------+------+---------------------------------------------------------------------------------------------------------------------------------------------------------------+----------+

Available Options

optionshorthanddescription
--limit-lLimit for display
--thresholdThreshold of time to display (ms)
--show-invalidsShow invalid location results
--order-oSort order (default,time,file)
--derived-data-pathRoot path of DerivedData directory
--truncate-at-tTruncate the method name with specified length
--no-uniqueShow the duplicated results

Use custom reporters

You can use reporters to output tracking logs.

require 'xcprofiler'profiler = Xcprofiler::Profiler.by_product_name('MyApp')profiler.reporters = [ Xcprofiler::StandardOutputReporter.new(limit: 20, order: :time), Xcprofiler::jsONReporter.new(output_path: 'result.json'), Xcprofiler::BlockReporter.new do |executions| do_something(executions) end,]profiler.report!

You can also implement your own reporters.

See implementation of built-in reporters for detail.

danger-xcprofiler

You can integrate xcprofiler to danger.

https://github.com/giginet/danger-xcprofiler

License

MIT License

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/giginet/xcprofiler.

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:APP版本更新中比较APP的版本号高低并返回最高版本
下一篇:#yyds干货盘点# leetcode算法题:判断子序列
相关文章

 发表评论

暂时没有评论,来抢沙发吧~