// Jackson Coxson #pragma once #include #include #include #include namespace IdeviceFFI { using ProcessControlPtr = std::unique_ptr>; class ProcessControl { public: // Factory: borrows the RemoteServer; not consumed static Result create(RemoteServer& server); Result launch_app(std::string bundle_id, Option> env_vars, Option> arguments, bool start_suspended, bool kill_existing); Result kill_app(u_int64_t pid); Result disable_memory_limit(u_int64_t pid); ~ProcessControl() noexcept = default; ProcessControl(ProcessControl&&) noexcept = default; ProcessControl& operator=(ProcessControl&&) noexcept = default; ProcessControl(const ProcessControl&) = delete; ProcessControl& operator=(const ProcessControl&) = delete; ProcessControlHandle* raw() const noexcept { return handle_.get(); } static ProcessControl adopt(ProcessControlHandle* h) noexcept { return ProcessControl(h); } private: explicit ProcessControl(ProcessControlHandle* h) noexcept : handle_(h) {} ProcessControlPtr handle_{}; }; } // namespace IdeviceFFI