From 8553b1e3ea5f801000d31b77dd58473a072356e2 Mon Sep 17 00:00:00 2001 From: jiangyitao <451988022@163.com> Date: Wed, 8 Jul 2020 22:06:17 +0800 Subject: [PATCH] better --- pom.xml | 2 +- .../daxiang/core/mobile/ios/IosDevice.java | 25 +++++++++++-------- .../com/daxiang/core/mobile/ios/IosUtil.java | 25 +++++++++++++++++++ 3 files changed, 41 insertions(+), 11 deletions(-) diff --git a/pom.xml b/pom.xml index 5511c02..cae1000 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ com.daxiang agent - 0.7.0 + 0.7.1 jar diff --git a/src/main/java/com/daxiang/core/mobile/ios/IosDevice.java b/src/main/java/com/daxiang/core/mobile/ios/IosDevice.java index caa3580..9399e98 100644 --- a/src/main/java/com/daxiang/core/mobile/ios/IosDevice.java +++ b/src/main/java/com/daxiang/core/mobile/ios/IosDevice.java @@ -6,7 +6,6 @@ import com.daxiang.core.mobile.appium.AppiumServer; import com.daxiang.core.mobile.appium.IosNativePageSourceHandler; import com.daxiang.core.mobile.Mobile; -import com.daxiang.utils.Terminal; import com.daxiang.utils.UUIDUtil; import io.appium.java_client.ios.IOSDriver; import io.appium.java_client.ios.IOSStartScreenRecordingOptions; @@ -33,11 +32,6 @@ @Slf4j public class IosDevice extends MobileDevice { - /** - * iproxy localPort remotePort mobileId - */ - private static final String IPROXY_CMD = "iproxy %d %d %s"; - private ExecuteWatchdog iproxyMjpegServerWatchdog; public IosDevice(Mobile mobile, AppiumServer appiumServer) { @@ -93,6 +87,19 @@ protected Capabilities newCaps(Capabilities capsToMerge) { return capabilities; } + @Override + public void installApp(File appFile) { + if (appFile.getName().endsWith(".ipa")) { + try { + IosUtil.installAppByIdeviceinstaller(getId(), appFile.getAbsolutePath()); + } catch (IOException e) { + throw new RuntimeException(e); + } + } else { + super.installApp(appFile); + } + } + @Override public void uninstallApp(String app) { IosUtil.uninstallApp(driver, app); @@ -143,10 +150,8 @@ public long getMjpegServerPort() { public long startMjpegServerIproxy() throws IOException { long mjpegServerPort = getMjpegServerPort(); - String cmd = String.format(IPROXY_CMD, mjpegServerPort, mjpegServerPort, getId()); - - log.info("[{}]startMjpegServerIproxy: {}", getId(), cmd); - iproxyMjpegServerWatchdog = Terminal.executeAsyncAndGetWatchdog(cmd); + log.info("[{}]startMjpegServerIproxy", getId()); + iproxyMjpegServerWatchdog = IosUtil.iproxy(mjpegServerPort, mjpegServerPort, getId()); return mjpegServerPort; } diff --git a/src/main/java/com/daxiang/core/mobile/ios/IosUtil.java b/src/main/java/com/daxiang/core/mobile/ios/IosUtil.java index 2179dc3..4871bc7 100644 --- a/src/main/java/com/daxiang/core/mobile/ios/IosUtil.java +++ b/src/main/java/com/daxiang/core/mobile/ios/IosUtil.java @@ -3,6 +3,7 @@ import com.daxiang.utils.Terminal; import com.google.common.collect.ImmutableMap; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.exec.ExecuteWatchdog; import org.openqa.selenium.remote.RemoteWebDriver; import org.springframework.util.StringUtils; @@ -79,6 +80,11 @@ public static String getDeviceName(String mobileId, boolean isRealDevice) throws } } + public static void installAppByIdeviceinstaller(String mobileId, String appPath) throws IOException { + String cmd = "ideviceinstaller -u %s -i %s"; + Terminal.execute(String.format(cmd, mobileId, appPath)); + } + public static void uninstallApp(RemoteWebDriver driver, String bundleId) { driver.executeScript("mobile: removeApp", ImmutableMap.of("bundleId", bundleId)); } @@ -96,4 +102,23 @@ public static boolean terminateApp(RemoteWebDriver driver, String bundleId) { public static void pressHome(RemoteWebDriver driver) { driver.executeScript("mobile:pressButton", ImmutableMap.of("name", "home")); } + + private static Boolean isOldIproxy = null; + + public static ExecuteWatchdog iproxy(long localPort, long remotePort, String mobileId) throws IOException { + if (isOldIproxy == null) { + // libusbmuxd < 2.0.2 + isOldIproxy = Terminal.execute("iproxy -v") + .contains("usage: iproxy LOCAL_TCP_PORT DEVICE_TCP_PORT [UDID]"); + } + + String cmd; + if (isOldIproxy) { + cmd = String.format("iproxy %d %d %s", localPort, remotePort, mobileId); + } else { + cmd = String.format("iproxy %d:%d -u %s", localPort, remotePort, mobileId); + } + + return Terminal.executeAsyncAndGetWatchdog(cmd); + } }