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);
+ }
}