It’s been two weeks since I released Timelane and I’m really humbled by the community’s super positive response.

Since much has happened since the launch, I’m writing this to give everyone a detailed update.

The current versions are as follows:

  • TimelaneCombine 1.0.4
  • RxTimelane 1.0.3
  • TimelaneCore 1.0.3

I’ve merged 18 PRs (in the 14 days since launch!) on all Timelane repos and I pushed some changes myself too.

Here’s a summary of what’s new.

More platforms: tvOS, watchOS

You can now use Timelane to profile tvOS and watchOS projects:

Use Timelane in projects that support older platforms

This was an important point brought by the community and I wasn’t initially aware of it. (Full discussion)

You can now import Timelane in projects that support older platforms and cannot use signpost data to talk to instruments - the Timelane class will be unavailable.

Of course you can still profile your project on a newer platform by either 1) upping your deployment target, or 2) using the lane() operator inside an if #available(...).

In case your project already supports the minimum platform targets that provide signposting, there is no change for you.

CocoaPods and Carthage support alongside SPM



pod 'TimelaneCombine', '~> 1.0.4'
pod 'RxTimelane', '~> 1.0.3'
pod 'TimelaneCore', '~> 1.0.3'


github "icanzilb/TimelaneCombine" "1.0.4"
github "icanzilb/RxTimelane" "1.0.3"
github "icanzilb/TimelaneCore" "1.0.3"

New features!

Format the reported values

Available in TimelaneCombine and RxTimelane - the lane() operator now accepts a closure to format the reported values.

You can, for example, format numbers:

  .lane("Numbers") { number in
    return String(format: "%.2f", number)

Or for emitted arrays, log the count on the lane in Instruments:

  .lane("Photos") { photos in
    return "\(photos.count) photos"

Use a @PropertyWrapper to log in Timelane

Meet the easiest way to use TimelaneCombine. If you have a published property on your type like so:

@Published var timestamp: TimeInterval

Replace it with @PublishedOnLane() to log its values in Timelane:

@PublishedOnLane("Timer") var timestamp: TimeInterval

Where to go from here?

Big thank you to everyone involved in these early developments! As always for more details go to

Thank you and if you have any questions, feedback, or press inquiries do get in contact at

To learn about all Combine check Combine: Asynchronous programming with Swift - this is where you can see all updates, discuss in the website forums, and more.