apptracer_flutter_ios 0.1.2
apptracer_flutter_ios: ^0.1.2 copied to clipboard
iOS implementation of apptracer_flutter, the unofficial Flutter integration with Tracer (apptracer.ru). Forwards Dart errors to the OKTracer iOS SDK.
Changelog #
All notable changes to this package are documented here.
The format follows Keep a Changelog,
and this package adheres to Semantic Versioning.
While the version is below 1.0.0, a breaking change bumps the minor version,
as pub.flutter-io.cn expects.
Unreleased #
0.1.2 - 2026-09-02 #
Changed #
-
OKTraceris now required at>= 1.5.2, in both the podspec andPackage.swift, rather than>= 1.4.0. On 2026-08-31 the vendor moved its binaries fromartifactory-external.vkpartner.rutonexus-external.vkteam.ruand took the old host down; 1.5.2 is the release that points at the new one and, by the vendor's own announcement, differs from 1.5.1 in nothing else. Every spec and tag before it still downloads from the old host and fails with a 404, so the old floor had become a promise the package could not keep.An application whose
Podfile.lockstill pins 1.5.1 does not move on its own: CocoaPods keeps the locked version and now stops at "could not find compatible versions for pod OKTracer", naming this constraint, where before it stopped at a 404 from the download. The step ispod update OKTracer, which also refreshes the vendor's spec repository — a git clone cached on the machine that has not heard of 1.5.2 until then; a plainpod install, even with--repo-update, does not touch a locked pod. Verified on the example:pod installreported exactly that,pod update OKTracerinstalled 1.5.2 ("was 1.5.1"). On Swift Package Manager, resolve the packages again (File → Packages → Update to Latest Package Versions in Xcode).
0.1.1 - 2026-08-30 #
Added #
-
Swift Package Manager support. Flutter warns on every iOS build that a plugin carrying only a podspec "does not support Swift Package Manager" and that this "will become an error in a future version of Flutter", so the package now ships a
Package.swiftbeside the podspec and both build the same sources from the layout Swift Package Manager expects.OKTraceris declared there the way the podspec declares it — by version, from the vendor's own repository, which publishes the SDK as binary targets — so nothing is redistributed and no SDK version is pinned into a host build.The manifest declares no dependency on
FlutterFramework, the package Flutter generates for its own framework:import Flutterresolves through the framework search paths Flutter passes to the build. That keeps theflutter:constraint honest at>=3.22.0for both paths — a manifest depending on../FlutterFrameworkwould need Flutter 3.41, where that package first appears, and would fail to resolve for anyone who turned Swift Package Manager on before then.url_launcher_iosfromflutter/packagesandvkid_flutter_sdkship the same shape.The product is static, because
OKTraceris a static xcframework — the same requirement the podspec'suse_frameworks! :linkage => :staticputs on a CocoaPods application.Verified on Flutter 3.44.9 in an application with no CocoaPods integration at all: the build links the plugin (
AppTracerFlutterPlugin,DartLogProviderandGeneratedPluginRegistrantare inRunner.debug.dylib) together with the vendor'sTracerResources.framework, and Flutter reports "All plugins found for ios are Swift Packages" instead of the warning. The CocoaPods path was rebuilt unchanged.
Changed #
- The build phase that uploads
dSYMs is now a file of its own,ios/tracer_dsym_upload_phase.sh, and the code that installs it is a standalone script,ios/tracer_add_upload_phase.rb, in the shape firebase_crashlytics uses. The podspec still runs it atpod install; on Swift Package Manager, where no podspec is evaluated, the same script is whatdart run apptracer_flutter:install_ios_dsym_phasecalls, and the phase's text is a file a reader can paste into Xcode rather than a heredoc inside Ruby.
0.1.0 - 2026-08-28 #
Added #
-
pod installadds a build phase to the application'sRunner.xcodeprojthat uploadsdSYMs on every release build, which is howfirebase_crashlyticsarranges the same thing. A phase declared in this pod's own podspec would not do: it belongs to the pod target and runs before the application is linked, whenRunner.app.dSYMdoes not exist yet. The phase reads the token fromTRACER_IOS_PLUGIN_TOKEN,TRACER_PLUGIN_TOKENorios/tracer_plugin_token, warns instead of failing the build when it cannot upload, and is skipped entirely withTRACER_SKIP_IOS_PHASE=1. -
Initial release.
-
Forwards Dart errors to
OKTracerasTracerNonFatalModel, carrying the Dart frames ascallStackSymbols. -
Synthesises an
issueKeyfrom the Dart error type and the innermost named frame, because a Dart trace has no native addresses to group on and Tracer ignores supplied symbols outside a debugger. The key deliberately excludes the file and line: Tracer omits both from its own grouping so that a code edit cannot split an issue, and anissueKeyis used verbatim, so including them would have reintroduced that instability. -
Delivers breadcrumbs through
TracerLogProviderProtocol, which leaves the SDK's own logging verbosity untouched. -
TracerOptions.debugnow wires the SDK's own console log and aTracerServiceDelegate, so a rejected or failed upload says so instead of vanishing. Note that the SDK's log includes the upload URL with its token.
Changed #
-
A non-fatal now carries a single placeholder native address rather than the real
Thread.callStackReturnAddresses. Both satisfy the SDK's requirement that the array not be empty, but the real stack filled every report with twenty frames of UIKit, CoreFoundation and libdispatch — none of them related to the error — and each renderedMissing Binary imagein the console, including in the event title. Uploading the app's dSYM does not resolve those: measured twice on 2026-08-26, symbols are accepted but not applied to non-fatal reports. The Dart stack trace travels in the attached log, which is the copy that is readable anyway.If you ran pre-release builds of this package against a live project, their issues do not carry over: Tracer builds an issue title from its rendering of the top frame, so the same
issueKeyunder a different top frame lands in a new group. Those events sit underMissing Binary image with UUID = … - <message>, these under+ 0 - <message>.
Fixed #
-
A non-fatal must carry a non-empty
callStackAddresses, or the SDK drops it before any network call — its delegate answerscallStackAddresses is emptyfromCrashReporterService.getThreadInfo, and nothing whatsoever reaches the project. A Dart stack trace has no native addresses, so the native stack of the reporting call is passed instead; it is the same for every Dart error, which is why grouping relies on theissueKeysynthesised on the Dart side. -
The README's
Podfilesnippet omitteduse_frameworks! :linkage => :static, so following it verbatim failedpod install:OKTracerships as a staticxcframework. The snippet is complete now, and the README also says thatpod installwrites adSYMupload phase intoRunner.xcodeprojand thatTRACER_SKIP_IOS_PHASE=1keeps it away from the project file.