pub struct AndroidDeviceControl { /* private fields */ }Expand description
Android DeviceControl impl. Wraps smix_adb::AdbClient + holds an
active recording handle internally.
Some methods for operations not yet fully implemented surface
SimctlError::NonZeroExit with a clear message; smix-adb
translation lives in adb_to_simctl_err.
Implementations§
Source§impl AndroidDeviceControl
impl AndroidDeviceControl
pub fn new() -> Self
Sourcepub fn with_client(client: AdbClient) -> Self
pub fn with_client(client: AdbClient) -> Self
Construct with an existing AdbClient (tests / non-PATH adb).
Trait Implementations§
Source§impl Default for AndroidDeviceControl
impl Default for AndroidDeviceControl
Source§impl DeviceControl for AndroidDeviceControl
impl DeviceControl for AndroidDeviceControl
fn launch<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
serial: &'life1 str,
bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<u32, SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn launch_with_args<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
serial: &'life1 str,
bundle_id: &'life2 str,
args: &'life3 [String],
) -> Pin<Box<dyn Future<Output = Result<u32, SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn terminate<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
serial: &'life1 str,
bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn install<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
serial: &'life1 str,
app_path: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn uninstall<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
serial: &'life1 str,
bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn keychain_reset<'life0, 'life1, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn open_url<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
serial: &'life1 str,
url: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn send_push<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_serial: &'life1 str,
_bundle_id: &'life2 str,
_apns_json_path: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn screenshot<'life0, 'life1, 'async_trait>(
&'life0 self,
serial: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<Vec<u8>, SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn pasteboard_set<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_serial: &'life1 str,
_text: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn pasteboard_get<'life0, 'life1, 'async_trait>(
&'life0 self,
_serial: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<String, SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn add_media<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_serial: &'life1 str,
_paths: &'life2 [String],
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn location_set<'life0, 'life1, 'async_trait>(
&'life0 self,
serial: &'life1 str,
lat: f64,
lon: f64,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn location_start<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_serial: &'life1 str,
_points: &'life2 [(f64, f64)],
_speed_mps: Option<f64>,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn set_permission<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
serial: &'life1 str,
bundle_id: &'life2 str,
permission: Permission,
action: PermissionAction,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn start_recording<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_serial: &'life1 str,
_output_path: &'life2 Path,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn stop_recording<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Source§fn as_ios_simctl(&self) -> Option<&SimctlClient>
fn as_ios_simctl(&self) -> Option<&SimctlClient>
iOS-only escape hatch: downcast to
&SimctlClient for legacy
App::simctl() API surface. Android impl returns None.Source§fn privacy_reset_all<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
_bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn privacy_reset_all<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
_bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
v1.0.4 §D12 — reset all granted privacy permissions for a
bundle. Companion to
clear_app_sandbox; together they form
the in-place launchApp: clearState: true replacement that
avoids simctl uninstall + install and its downstream
XCUITest binding loss (feedback §F) + ReportCrash dialog
(feedback §H). Default impl no-ops so non-iOS device controls
(Android) keep compiling; iOS override supplies real behavior.Source§fn clear_app_sandbox<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
_bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
fn clear_app_sandbox<'life0, 'life1, 'life2, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
_bundle_id: &'life2 str,
) -> Pin<Box<dyn Future<Output = Result<(), SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
v1.0.4 §D12 — wipe an app’s
Documents/, Library/, tmp/
directories in the sim’s Containers/Data root, without
uninstalling the app. Preserves the XCUITest binding.
Default impl no-ops; iOS override does the real wipe.Source§fn user_defaults_delete<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
_bundle_id: &'life2 str,
_key: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<bool, SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
fn user_defaults_delete<'life0, 'life1, 'life2, 'life3, 'async_trait>(
&'life0 self,
_udid: &'life1 str,
_bundle_id: &'life2 str,
_key: &'life3 str,
) -> Pin<Box<dyn Future<Output = Result<bool, SimctlError>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
'life2: 'async_trait,
'life3: 'async_trait,
v1.0.27 — delete a single key from the target app’s persisted
user-defaults / preferences store. iOS:
simctl spawn defaults delete <bundle> <key> (NSUserDefaults via the sim’s cfprefsd).
Returns Ok(true) when the key existed, Ok(false) when
already absent (both are the “ensure absent” target state). Read moreAuto Trait Implementations§
impl !Freeze for AndroidDeviceControl
impl !RefUnwindSafe for AndroidDeviceControl
impl Send for AndroidDeviceControl
impl Sync for AndroidDeviceControl
impl Unpin for AndroidDeviceControl
impl UnsafeUnpin for AndroidDeviceControl
impl UnwindSafe for AndroidDeviceControl
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more