ENManager

Struct ENManager 

Source
pub struct ENManager { /* private fields */ }
Available on crate feature ENManager only.
Expand description

Manages Exposure Notification functionality.

See also Apple’s documentation

Implementations§

Source§

impl ENManager

Source

pub unsafe fn activityHandler(&self) -> ENActivityHandler

Available on crate feature block2 only.

Invoked when the app is launched for an activity while it might not be running. When the app is launched, it should create an ENManager instance, set this handler, and then activate the manager.

Source

pub unsafe fn setActivityHandler(&self, activity_handler: ENActivityHandler)

Available on crate feature block2 only.

Setter for activityHandler.

This is [copied][objc2_foundation::NSCopying::copy] when set.

§Safety

activity_handler must be a valid pointer or null.

Source

pub unsafe fn dispatchQueue(&self) -> Retained<DispatchQueue>

Available on crate feature dispatch2 only.
Source

pub unsafe fn setDispatchQueue(&self, dispatch_queue: &DispatchQueue)

Available on crate feature dispatch2 only.

Setter for dispatchQueue.

§Safety

dispatch_queue possibly has additional threading requirements.

Source

pub unsafe fn exposureNotificationStatus(&self) -> ENStatus

Overall status of Exposure Notification. KVO may be used to monitor for changes.

Source

pub unsafe fn invalidationHandler(&self) -> dispatch_block_t

Available on crate feature dispatch2 only.

Invoked exactly once when invalidation completes. This property is cleared before it’s invoked to break retain cycles.

Source

pub unsafe fn setInvalidationHandler( &self, invalidation_handler: dispatch_block_t, )

Available on crate feature dispatch2 only.

Setter for invalidationHandler.

This is [copied][objc2_foundation::NSCopying::copy] when set.

§Safety

invalidation_handler must be a valid pointer or null.

Source

pub unsafe fn activateWithCompletionHandler( &self, completion_handler: ENErrorHandler, )

Available on crate features ENCommon and block2 only.

Activates the object to prepare it for use. Properties may not be usable until the completion handler reports success.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn invalidate(&self)

Stops any outstanding operations and invalidates this object. Once this is called, the object can no longer be used. To start using ENManager again, a new instance of the class must be created and activated.

Source

pub unsafe fn getUserTraveledWithCompletionHandler( &self, completion_handler: ENGetUserTraveledHandler, )

Available on crate feature block2 only.

Reports if the user traveled within an exposure period (e.g. 14 days).

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn authorizationStatus() -> ENAuthorizationStatus

Available on crate feature ENCommon only.

Reports the current authorization status of the app. Apps can use this property to preflight authorization in order to determine if the user will be prompted.

Source

pub unsafe fn exposureNotificationEnabled(&self) -> bool

Indicates if Exposure Notification is enabled on the system. KVO may be used to monitor for changes. This will be NO until activateWithCompletionHandler has completed successfully. Note that even if it’s enabled, it may be inactive for other reasons, such as Bluetooth being turned off. The exposureNotificationStatus property can be monitored for the overall status of Exposure Notification.

Source

pub unsafe fn setExposureNotificationEnabled_completionHandler( &self, enabled: bool, completion_handler: ENErrorHandler, )

Available on crate features ENCommon and block2 only.

Enables or disables Exposure Notification. If not previously authorized, this shows a user dialog for consent to enable Exposure Notification. Note: Disabling stops Bluetooth advertising and scanning related to Exposure Notification, but the Diagnosis Keys and data will remain.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn detectExposuresWithConfiguration_completionHandler( &self, configuration: &ENExposureConfiguration, completion_handler: ENDetectExposuresHandler, ) -> Retained<NSProgress>

Available on crate features ENCommon and block2 only.

Detects exposures using the specified configuration to control the scoring algorithm. This uses the diagnosis keys already known to the system. Only available to apps with ENAPIVersion 2 or higher.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn detectExposuresWithConfiguration_diagnosisKeyURLs_completionHandler( &self, configuration: &ENExposureConfiguration, diagnosis_key_ur_ls: &NSArray<NSURL>, completion_handler: ENDetectExposuresHandler, ) -> Retained<NSProgress>

Available on crate features ENCommon and block2 only.

Detects exposures using the specified configuration to control the scoring algorithm and URLs to specify the files containing diagnosis keys the app has downloaded. The diagnosis key files must be signed appropriately. When the app’s ENAPIVersion is 2 or higher, keys already known to the system are included in the analysis.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn getExposureInfoFromSummary_userExplanation_completionHandler( &self, summary: &ENExposureDetectionSummary, user_explanation: &NSString, completion_handler: ENGetExposureInfoHandler, ) -> Retained<NSProgress>

👎Deprecated: Use getExposureWindowsFromSummary, if needed.
Available on crate features ENCommon and block2 only.

Gets info about each exposure from the summary provided when exposure detection completes. Using this API will inform the user that their exposure details have been revealed to the app. The user explanation string will be displayed as part of the UI to inform the user of using this API.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn getExposureWindowsFromSummary_completionHandler( &self, summary: &ENExposureDetectionSummary, completion_handler: ENGetExposureWindowsHandler, ) -> Retained<NSProgress>

Available on crate features ENCommon and block2 only.

Gets info about each exposure window from the summary provided when exposure detection completes.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn getDiagnosisKeysWithCompletionHandler( &self, completion_handler: ENGetDiagnosisKeysHandler, )

Available on crate features ENCommon and block2 only.

Requests the temporary exposure keys used by this device to share with a server. Each use of this API will present the user with system UI to authorize it.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn getTestDiagnosisKeysWithCompletionHandler( &self, completion_handler: ENGetDiagnosisKeysHandler, )

Available on crate features ENCommon and block2 only.

Requests the temporary exposure keys, including the current key, used by this device for testing. Each use of this API will present the user with system UI to authorize it. WARNING: This API is only for use by developers. It requires a special entitlement that is not allowed in the app store. It’s only intended to allow developers to test without needing to wait 24 hours for a key to be released.

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn diagnosisKeysAvailableHandler( &self, ) -> ENDiagnosisKeysAvailableHandler

Available on crate features ENCommon and block2 only.

Invoked after requestPreAuthorizedDiagnosisKeys if user authorization is still valid.

§Safety

The returned block’s argument must be a valid pointer.

Source

pub unsafe fn setDiagnosisKeysAvailableHandler( &self, diagnosis_keys_available_handler: ENDiagnosisKeysAvailableHandler, )

Available on crate features ENCommon and block2 only.

Setter for diagnosisKeysAvailableHandler.

This is [copied][objc2_foundation::NSCopying::copy] when set.

§Safety

diagnosis_keys_available_handler must be a valid pointer or null.

Source

pub unsafe fn preAuthorizeDiagnosisKeysWithCompletionHandler( &self, completion_handler: ENErrorHandler, )

Available on crate features ENCommon and block2 only.

Authorizes a one-time, future release of diagnosis keys without a user prompt at the time of release. This allows the user to authorize ahead of time in case they are unable to approve at the time of positive diagnosis. WARNING: Application should be in foreground to request the authorization

§Safety

completion_handler must be a valid pointer.

Source

pub unsafe fn requestPreAuthorizedDiagnosisKeysWithCompletionHandler( &self, completion_handler: ENErrorHandler, )

Available on crate features ENCommon and block2 only.

Requests diagnosis keys after previously using preAuthorizeDiagnosisKeys successfully. This will display a notification to the user for the user to know the keys will be returned. Keys are returned by invoking diagnosisKeysAvailable, which must be set before calling this.

§Safety

completion_handler must be a valid pointer.

Source§

impl ENManager

Methods declared on superclass NSObject.

Source

pub unsafe fn init(this: Allocated<Self>) -> Retained<Self>

Source

pub unsafe fn new() -> Retained<Self>

Methods from Deref<Target = NSObject>§

Source

pub fn doesNotRecognizeSelector(&self, sel: Sel) -> !

Handle messages the object doesn’t recognize.

See Apple’s documentation for details.

Methods from Deref<Target = AnyObject>§

Source

pub fn class(&self) -> &'static AnyClass

Dynamically find the class of this object.

§Panics

May panic if the object is invalid (which may be the case for objects returned from unavailable init/new methods).

§Example

Check that an instance of NSObject has the precise class NSObject.

use objc2::ClassType;
use objc2::runtime::NSObject;

let obj = NSObject::new();
assert_eq!(obj.class(), NSObject::class());
Source

pub unsafe fn get_ivar<T>(&self, name: &str) -> &T
where T: Encode,

👎Deprecated: this is difficult to use correctly, use Ivar::load instead.

Use Ivar::load instead.

§Safety

The object must have an instance variable with the given name, and it must be of type T.

See Ivar::load_ptr for details surrounding this.

Source

pub fn downcast_ref<T>(&self) -> Option<&T>
where T: DowncastTarget,

Attempt to downcast the object to a class of type T.

This is the reference-variant. Use Retained::downcast if you want to convert a retained object to another type.

§Mutable classes

Some classes have immutable and mutable variants, such as NSString and NSMutableString.

When some Objective-C API signature says it gives you an immutable class, it generally expects you to not mutate that, even though it may technically be mutable “under the hood”.

So using this method to convert a NSString to a NSMutableString, while not unsound, is generally frowned upon unless you created the string yourself, or the API explicitly documents the string to be mutable.

See Apple’s documentation on mutability and on isKindOfClass: for more details.

§Generic classes

Objective-C generics are called “lightweight generics”, and that’s because they aren’t exposed in the runtime. This makes it impossible to safely downcast to generic collections, so this is disallowed by this method.

You can, however, safely downcast to generic collections where all the type-parameters are AnyObject.

§Panics

This works internally by calling isKindOfClass:. That means that the object must have the instance method of that name, and an exception will be thrown (if CoreFoundation is linked) or the process will abort if that is not the case. In the vast majority of cases, you don’t need to worry about this, since both root objects NSObject and NSProxy implement this method.

§Examples

Cast an NSString back and forth from NSObject.

use objc2::rc::Retained;
use objc2_foundation::{NSObject, NSString};

let obj: Retained<NSObject> = NSString::new().into_super();
let string = obj.downcast_ref::<NSString>().unwrap();
// Or with `downcast`, if we do not need the object afterwards
let string = obj.downcast::<NSString>().unwrap();

Try (and fail) to cast an NSObject to an NSString.

use objc2_foundation::{NSObject, NSString};

let obj = NSObject::new();
assert!(obj.downcast_ref::<NSString>().is_none());

Try to cast to an array of strings.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);
// This is invalid and doesn't type check.
let arr = arr.downcast_ref::<NSArray<NSString>>();

This fails to compile, since it would require enumerating over the array to ensure that each element is of the desired type, which is a performance pitfall.

Downcast when processing each element instead.

use objc2_foundation::{NSArray, NSObject, NSString};

let arr = NSArray::from_retained_slice(&[NSObject::new()]);

for elem in arr {
    if let Some(data) = elem.downcast_ref::<NSString>() {
        // handle `data`
    }
}

Trait Implementations§

Source§

impl AsRef<AnyObject> for ENManager

Source§

fn as_ref(&self) -> &AnyObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<ENManager> for ENManager

Source§

fn as_ref(&self) -> &Self

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl AsRef<NSObject> for ENManager

Source§

fn as_ref(&self) -> &NSObject

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl Borrow<AnyObject> for ENManager

Source§

fn borrow(&self) -> &AnyObject

Immutably borrows from an owned value. Read more
Source§

impl Borrow<NSObject> for ENManager

Source§

fn borrow(&self) -> &NSObject

Immutably borrows from an owned value. Read more
Source§

impl ClassType for ENManager

Source§

const NAME: &'static str = "ENManager"

The name of the Objective-C class that this type represents. Read more
Source§

type Super = NSObject

The superclass of this class. Read more
Source§

type ThreadKind = <<ENManager as ClassType>::Super as ClassType>::ThreadKind

Whether the type can be used from any thread, or from only the main thread. Read more
Source§

fn class() -> &'static AnyClass

Get a reference to the Objective-C class that this type represents. Read more
Source§

fn as_super(&self) -> &Self::Super

Get an immutable reference to the superclass.
Source§

impl Debug for ENManager

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Deref for ENManager

Source§

type Target = NSObject

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl Hash for ENManager

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl Message for ENManager

Source§

fn retain(&self) -> Retained<Self>
where Self: Sized,

Increment the reference count of the receiver. Read more
Source§

impl NSObjectProtocol for ENManager

Source§

fn isEqual(&self, other: Option<&AnyObject>) -> bool
where Self: Sized + Message,

Check whether the object is equal to an arbitrary other object. Read more
Source§

fn hash(&self) -> usize
where Self: Sized + Message,

An integer that can be used as a table address in a hash table structure. Read more
Source§

fn isKindOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of the class, or one of its subclasses. Read more
Source§

fn is_kind_of<T>(&self) -> bool
where T: ClassType, Self: Sized + Message,

👎Deprecated: use isKindOfClass directly, or cast your objects with AnyObject::downcast_ref
Check if the object is an instance of the class type, or one of its subclasses. Read more
Source§

fn isMemberOfClass(&self, cls: &AnyClass) -> bool
where Self: Sized + Message,

Check if the object is an instance of a specific class, without checking subclasses. Read more
Source§

fn respondsToSelector(&self, aSelector: Sel) -> bool
where Self: Sized + Message,

Check whether the object implements or inherits a method with the given selector. Read more
Source§

fn conformsToProtocol(&self, aProtocol: &AnyProtocol) -> bool
where Self: Sized + Message,

Check whether the object conforms to a given protocol. Read more
Source§

fn description(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object. Read more
Source§

fn debugDescription(&self) -> Retained<NSObject>
where Self: Sized + Message,

A textual representation of the object to use when debugging. Read more
Source§

fn isProxy(&self) -> bool
where Self: Sized + Message,

Check whether the receiver is a subclass of the NSProxy root class instead of the usual NSObject. Read more
Source§

fn retainCount(&self) -> usize
where Self: Sized + Message,

The reference count of the object. Read more
Source§

impl PartialEq for ENManager

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl RefEncode for ENManager

Source§

const ENCODING_REF: Encoding = <NSObject as ::objc2::RefEncode>::ENCODING_REF

The Objective-C type-encoding for a reference of this type. Read more
Source§

impl DowncastTarget for ENManager

Source§

impl Eq for ENManager

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T> AnyThread for T
where T: ClassType<ThreadKind = dyn AnyThread + 'a> + ?Sized,

Source§

fn alloc() -> Allocated<Self>
where Self: Sized + ClassType,

Allocate a new instance of the class. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> AutoreleaseSafe for T
where T: ?Sized,