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

Yes!

CocoaPods

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

Carthage

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:

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

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

myPhotosPublisher
  .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 http://timelane.tools.

Thank you and if you have any questions, feedback, or press inquiries do get in contact at https://twitter.com/icanzilb.

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.