diff --git a/GoogleUtilities/Environment/GULAppEnvironmentUtil.m b/GoogleUtilities/Environment/GULAppEnvironmentUtil.m index 7aa5840..8170c6a 100644 --- a/GoogleUtilities/Environment/GULAppEnvironmentUtil.m +++ b/GoogleUtilities/Environment/GULAppEnvironmentUtil.m @@ -217,6 +217,25 @@ + (BOOL)isAppExtension { #endif } ++ (BOOL)isAppClip { +#if TARGET_OS_IOS + // Documented by Apple + // App clips have an NSAppClip entry in the top level of their Info.plist. + NSDictionary *appClipEntry = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSAppClip"]; + return appClipEntry != nil; +#elif TARGET_OS_OSX || TARGET_OS_TV || TARGET_OS_WATCH || TARGET_OS_VISION + return NO; +#endif +} + ++ (BOOL)supportsBackgroundURLSessionUploads { + // Neither app extensions nor App Clips support background uploads. + BOOL isExtension = self.isAppExtension; + BOOL isAppClip = self.isAppClip; + return !(isExtension || isAppClip); +} + + (NSString *)applePlatform { NSString *applePlatform = @"unknown"; diff --git a/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h b/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h index dbce363..6eea4a8 100644 --- a/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h +++ b/GoogleUtilities/Environment/Public/GoogleUtilities/GULAppEnvironmentUtil.h @@ -46,6 +46,13 @@ NS_ASSUME_NONNULL_BEGIN /// Indicates whether it is running inside an extension or an app. + (BOOL)isAppExtension; +/// Indicates whether it is running inside an app clip or a full app. ++ (BOOL)isAppClip; + +/// Indicates whether the current target supports background URL session uploads. +/// App extensions and app clips do not support background URL sessions. ++ (BOOL)supportsBackgroundURLSessionUploads; + /// @return An Apple platform. Possible values "ios", "tvos", "macos", "watchos", "maccatalyst", and /// "visionos". + (NSString *)applePlatform;