@@ -43,6 +43,8 @@ @implementation FlutterObservatoryPublisher
4343#include " flutter/fml/platform/darwin/scoped_nsobject.h"
4444#include " flutter/fml/task_runner.h"
4545#include " flutter/runtime/dart_service_isolate.h"
46+ #include " flutter/shell/common/switches.h"
47+ #include " flutter/shell/platform/darwin/common/command_line.h"
4648
4749@protocol FlutterObservatoryPublisherDelegate
4850- (instancetype )initWithOwner : (FlutterObservatoryPublisher*)owner ;
@@ -219,27 +221,32 @@ - (instancetype)init {
219221 self = [super init ];
220222 NSAssert (self, @" Super must not return null on init." );
221223
222- if (@available (iOS 9.3 , *)) {
223- _delegate.reset ([[ObservatoryDNSServiceDelegate alloc ] initWithOwner: self ]);
224+ auto command_line = flutter::CommandLineFromNSProcessInfo ();
225+ auto settings = flutter::SettingsFromCommandLine (command_line);
226+ if (settings.enable_observatory_publication ) {
227+ if (@available (iOS 9.3 , *)) {
228+ _delegate.reset ([[ObservatoryDNSServiceDelegate alloc ] initWithOwner: self ]);
229+ } else {
230+ _delegate.reset ([[ObservatoryNSNetServiceDelegate alloc ] initWithOwner: self ]);
231+ }
232+ _weakFactory = std::make_unique<fml::WeakPtrFactory<FlutterObservatoryPublisher>>(self);
233+
234+ fml::MessageLoop::EnsureInitializedForCurrentThread ();
235+ _callbackHandle = flutter::DartServiceIsolate::AddServerStatusCallback (
236+ [weak = _weakFactory->GetWeakPtr (),
237+ runner = fml::MessageLoop::GetCurrent ().GetTaskRunner ()](const std::string& uri) {
238+ if (!uri.empty ()) {
239+ runner->PostTask ([weak, uri]() {
240+ if (weak) {
241+ [[weak.get () delegate ]
242+ publishServiceProtocolPort: [NSString stringWithUTF8String: uri.c_str ()]];
243+ }
244+ });
245+ }
246+ });
224247 } else {
225- _delegate. reset ([[ObservatoryNSNetServiceDelegate alloc ] initWithOwner: self ]) ;
248+ FML_LOG (INFO) << " Skipping mDNS obsesrvatory publishing " ;
226249 }
227- _weakFactory = std::make_unique<fml::WeakPtrFactory<FlutterObservatoryPublisher>>(self);
228-
229- fml::MessageLoop::EnsureInitializedForCurrentThread ();
230-
231- _callbackHandle = flutter::DartServiceIsolate::AddServerStatusCallback (
232- [weak = _weakFactory->GetWeakPtr (),
233- runner = fml::MessageLoop::GetCurrent ().GetTaskRunner ()](const std::string& uri) {
234- if (!uri.empty ()) {
235- runner->PostTask ([weak, uri]() {
236- if (weak) {
237- [[weak.get () delegate ]
238- publishServiceProtocolPort: [NSString stringWithUTF8String: uri.c_str ()]];
239- }
240- });
241- }
242- });
243250
244251 return self;
245252}
@@ -262,7 +269,9 @@ - (NSData*)createTxtData:(NSURL*)url {
262269- (void )dealloc {
263270 [_delegate stopService ];
264271
265- flutter::DartServiceIsolate::RemoveServerStatusCallback (std::move (_callbackHandle));
272+ if (_callbackHandle) {
273+ flutter::DartServiceIsolate::RemoveServerStatusCallback (std::move (_callbackHandle));
274+ }
266275 [super dealloc ];
267276}
268277@end
0 commit comments