iOS WatchKit - как определить, работает ли ваш код в расширении часов или в приложении

С WatchKit у вас есть приложение, которое работает на телефоне, и приложение для часов, которое работает как расширение.

Если вы создаете библиотеку, которая содержит общий код, который будет использоваться как в приложении телефона, так и в расширении часов, есть ли способ узнать, выполняется ли код в приложении телефона или в расширении часов?

Т.е.

if ([self isRunningInWatchExtension]) {
    NSLog(@"this is running on watch");
} else {
    NSLog(@"this is running on phone app");
}


- (BOOL)isRunningInWatchExtension {
    ???
}

3 ответа

Решение

Я сделал это, проверив идентификатор пакета:

if ([[[NSBundle mainBundle] bundleIdentifier] isEqualToString:kAppBundleIdentifier]) {

    // Running in main app
}
else if ([[[NSBundle mainBundle] bundleIdentifier] isEqualToString:kWatchBundleIdentifier]) {

    // Running in extension
}

В целевых условных выражениях есть некоторые условные обозначения, которые могут вам помочь,

#if TARGET_OS_WATCH
//do something for watch
#else
//do something for ios ==> assuming you only support two platforms
#endif
  • Это может быть легко, если вы вызываете какие-либо пользовательские методы в своем общем каркасном классе. Вам просто нужно добавить дополнительные параметры метода в метод. И если вы вызываете этот метод из приложения iOS или приложения Watchkit, добавьте соответствующую пару ключ-значение в словарь для параметров. И сравните это в ваших рамках методов.

  • Чтобы определить это из init или любого другого метода, вы все равно можете узнать по этому коду,

    NSLog(@"%@",[NSThread callStackSymbols]);
    

Итак, вам нужно проанализировать эту строку и получить соответствующие целевые имена. Если он вызывается приложением iOS, вы получите строку " UIKit ", а из расширения приложения watch kit вы получите строку " YourApp WatchKit Extension ". Вы также можете сослаться на этот SO-ответ для анализа этой строки и сравнить ее - /questions/15634761/tsel-c-najti-vyizyivayuschego-metoda/15634763#15634763

Другие вопросы по тегам