TL;DR

Pulse (kean/Pulse) là framework logging mã nguồn mở viết bằng SwiftUI, ghi lại toàn bộ network traffic URLSession + structured logs ngay trong app iOS / macOS / tvOS / watchOS / visionOS. Phiên bản 5.2.1 ra ngày 20/04/2026, MIT license, 7.000+ stars trên GitHub. Không proxy, không root certificate, không VPN tunnel — chỉ thêm 1 dòng PulseProxy là capture sạch traffic. Đối thủ trực tiếp Charles / Proxyman vẫn cần MITM cert; Pulse chạy in-process nên QA và end-user cũng dùng được.

What's new trong 5.2.1

  • PulseProxy module: 1 dòng code bật auto-capture toàn bộ network traffic của app — cách nhanh nhất để dùng thử.
  • URLSessionProtocol & URLSessionProxy: cách track traffic mới được khuyến nghị, đồng thời mở khoá tính năng response mocking ngay trong console.
  • Hỗ trợ visionOS 1+, sẵn sàng cho Swift 6.
  • Yêu cầu Swift 5.10, Xcode 15.4.

Vì sao đáng chú ý

Debug network trên iOS xưa nay là chỗ đau: không có DevTools như Chrome, muốn xem 1 cái HTTP request đi qua phải cài Charles, generate cert, install profile, trust root CA, set proxy WiFi… và vẫn không thấy được traffic HTTP/2 hoặc QUIC nếu app pin certificate. Pulse cắt thẳng nỗi đau này bằng cách instrument URLSession từ trong process — bạn thấy đúng những gì app thấy: headers gốc, body đã decrypt, metrics chi tiết, redirect chain, JSON tree filterable.

Quan trọng hơn, vì chạy trong app, QA team mở build test cũng tự inspect được, bug report kèm .pulse bundle thay vì screenshot mờ. Đây là khoảng cách rất lớn so với cách làm cũ.

Thông số kỹ thuật

PropertyValue
Latest version5.2.1 (20/04/2026)
LicenseMIT
GitHub stars / forks7.000+ / 362
Releases / commits116 / 2.897
Min platformsiOS 15+, macOS 12+, tvOS 15+, watchOS 8+, visionOS 1+
ToolchainSwift 5.10+, Xcode 15.4+
ArchitectureSwiftUI + MVVM, SwiftLog backend

Framework chia 3 module: Pulse (core logging, SwiftLog handler), PulseUI (các SwiftUI view embed được như ConsoleView), và app companion macOS/iOS trên App Store để xem .pulse bundle hoặc remote logging real-time.

Quick start trong 30 giây

Add Pulse qua Swift Package Manager (https://github.com/kean/Pulse), rồi ở chỗ app khởi động:

import PulseProxy

#if DEBUG
NetworkLogger.enableProxy()
#endif

Một dòng đó là đủ. Mọi URLSession.shared request, mọi Alamofire call, mọi async data(from:) đều tự được log. Sau đó embed ConsoleView sau shake gesture là có DevTools bỏ túi.

So với Charles, Proxyman, Flipper

FeaturePulseCharles / ProxymanFlipper
Cài cert / MITMKhôngCó (root CA)Không
Cert pinning friendlyCó (in-process)Phải disable pinning
QA / end-user dùng đượcCó (embed in app)KhôngCần daemon desktop
Native Swift / SwiftUI100%Cần RN bridge
Response mockingCó (5.x)
PricingSDK free, App tuỳ chọn$50–90 licenseFree

Use cases thực tế

  • Dev hằng ngày: bind ConsoleView vào shake gesture, inspect mọi request không cần rời app.
  • QA test build: tester mở console ngay trong app, share .pulse bundle qua AirDrop khi gặp bug.
  • Remote bug report: user gửi log file, dev mở bằng Pulse macOS app để dò request lỗi.
  • Mock API: dùng URLSessionProxy để stub response — dev frontend không phải đợi backend.
  • Drop-in cho SwiftLog: đã dùng swift-log? Set PulseLogHandler là xong, log structured + network thống nhất 1 chỗ.
  • Alamofire / Get: dùng URLSession bên dưới nên Pulse tự bắt được, không cần adapter riêng.

Hạn chế & pricing

Free: framework Pulse + PulseUI (MIT, dùng tự do trong app commercial).

Trả phí: Pulse macOS / iOS App trên App Store dùng để mở log bundle, remote logging, response mocking trong UI riêng.

Hạn chế thật sự: Pulse không phải proxy. Chỉ thấy traffic đi qua URLSession. Nếu app dùng raw socket, Network.framework, hoặc thư viện C bên dưới (gRPC native), Pulse không bắt được. WebKit traffic cũng vậy. Min target iOS 15 / macOS 12, dự án còn đỡ iOS 13/14 thì stuck. Khi ship production nên gate sau #if DEBUG để tránh tăng binary size không cần thiết, trừ khi muốn cho QA dùng trên build TestFlight.

What's next

Sau 6 năm và 116 release, Pulse đang đi rất chắc tay. Các hướng đang được đẩy: integration sâu hơn với Alamofire / async-await, remote logging mượt hơn cho team distributed, và polish SwiftUI cho visionOS. Với việc Apple liên tục push URLSession làm chuẩn (kể cả với HTTP/3, async sequences), Pulse đang đứng đúng chỗ để hưởng lợi.

Nếu bạn build app Apple platforms và còn đang debug network bằng print() hoặc Charles — ngày hôm nay là ngày để chuyển. SPM 1 dòng, MIT license, không lý do gì để chần chừ.

Nguồn: GitHub kean/Pulse, kean.blog, Swift Package Index.