smartdust-client 1.1.0 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5ad0e2e8968ddc2d92112ef56c8ad15403b99507f9699b45e18fd75c42adf76
4
- data.tar.gz: a44754161a3a0a3eb9ce069717c6c00e5ce2ffce12d00380c43764863172101d
3
+ metadata.gz: aecd7f3f68308d02daca89b7dde9ac29af0f591b9b6958156f88ad8b3220e392
4
+ data.tar.gz: 12ec2efbf1d1c92858e751991b7199d4c3eab74ea2fcca89cd89146f255a8456
5
5
  SHA512:
6
- metadata.gz: 9ff4070a8ba7c49778a713b777e149487747a9aa28462f5cbc8bbbc7f0e8d918a344312f6652c49a4a6a2469fd4ab56d0ef09f4f6cb1b3feb1cb49598df3a7df
7
- data.tar.gz: 84bd40b60b759ea84d4b498c96b0a91c139be9bc398bb0de72c3cc71d89347b5713b0c502d034bc3e75edd25447bd38c36832263059b632754bf5dd8145ad03f
6
+ metadata.gz: c9135de81485161d76a5d7f245a363eac06f37aafa64c7df012579a41d69b3000b76fe13b86629210de374e10015f636d453221e2dece03f29873320dbb3a839
7
+ data.tar.gz: 41aa90c194c5c10f9cde3a85ee694556ccd77a74d952e2458ef8e1f4260ca41fdd35fdb2e7cb94b98017df6dc24636d405033e0f6510830632de39cf8dfc71a3
data/lib/di.rb CHANGED
@@ -10,6 +10,7 @@ require 'stf/interactor/remove_all_user_devices_interactor'
10
10
  require 'stf/interactor/get_keys_interactor'
11
11
  require 'stf/interactor/get_values_interactor'
12
12
  require 'stf/interactor/add_adb_public_key'
13
+ require 'stf/interactor/connect_ios_interactor'
13
14
  require 'stf/validate/uri_validator'
14
15
  require 'stf/model/device_enhancer'
15
16
 
@@ -70,9 +71,14 @@ class DI
70
71
  c.register(:add_adb_public_key_interactor,
71
72
  -> {Stf::AddAdbPublicKeyInteractor.new},
72
73
  memoize: true)
74
+
73
75
  c.register(:device_enhancer,
74
76
  -> {Stf::DeviceEnhancer.new},
75
77
  memoize: true)
78
+
79
+ c.register(:connect_ios,
80
+ -> {Stf::ConnectIosInteractor.new("sd_remoteios", "idevice_id")},
81
+ memoize: true)
76
82
  end
77
83
 
78
84
  def [](what)
@@ -83,4 +89,4 @@ class DI
83
89
  @@container
84
90
  end
85
91
  end
86
- end
92
+ end
@@ -0,0 +1,50 @@
1
+ module Stf
2
+ class ConnectIosInteractor
3
+
4
+ @@connected_ios_urls = Array.new
5
+
6
+ def initialize(sd_remote_ios_path, ideviceid_path)
7
+ @sd_remote_ios = sd_remote_ios_path
8
+ @ideviceid = ideviceid_path
9
+ end
10
+
11
+ def connect(url, serial)
12
+ if connected_ios_devices().include? serial
13
+ @@connected_ios_urls.append(url)
14
+ else
15
+ `sudo rm -rf /tmp/usbfluxd`
16
+ `sudo systemctl restart usbmuxd`
17
+ disconnect()
18
+ connected_before = connected_ios_devices().count
19
+ fork do
20
+ `sudo #{@sd_remote_ios} -c #{url} &`
21
+ end
22
+ sleep 2
23
+ if connected_ios_devices().count > connected_before
24
+ @@connected_ios_urls.append(url)
25
+ else
26
+ raise "Cannot connect to iOS device"
27
+ end
28
+ end
29
+ end
30
+
31
+ def disconnect()
32
+ `sudo pkill -f #{@sd_remote_ios}`
33
+ @@connected_ios_urls = Array.new
34
+ end
35
+
36
+ def connected_ios_urls()
37
+ return @@connected_ios_urls
38
+ end
39
+
40
+ def connected_ios_devices()
41
+ ideviceid_output = `#{@ideviceid} -l`.split("\n")
42
+ if ((ideviceid_output.select {|line| line.include? " "}).size > 0) or ideviceid_output.empty?
43
+ return Array.new
44
+ else
45
+ return ideviceid_output
46
+ end
47
+ end
48
+
49
+ end
50
+ end
@@ -1,8 +1,10 @@
1
1
  require 'ADB'
2
2
 
3
+ require 'di'
3
4
  require 'stf/client'
4
5
  require 'stf/log/log'
5
6
  require 'stf/model/device_list'
7
+ require 'stf/interactor/connect_ios_interactor'
6
8
 
7
9
  module Stf
8
10
  class StartDebugSessionInteractor
@@ -94,7 +96,7 @@ module Stf
94
96
  if all_flag
95
97
  to_connect = stf_devices.size
96
98
  else
97
- connected = devices & all_devices.as_connect_url_list
99
+ connected = (devices + DI[:connect_ios].connected_ios_urls()) & all_devices.as_connect_url_list
98
100
  to_connect = wanted - connected.size
99
101
  end
100
102
 
@@ -117,7 +119,7 @@ module Stf
117
119
  def count_connected_devices(filter)
118
120
  stf_devices = DeviceList.new(DI[:stf].get_user_devices)
119
121
  stf_devices = stf_devices.by_filter(filter) if filter
120
- connected = devices & stf_devices.as_connect_url_list
122
+ connected = (devices + DI[:connect_ios].connected_ios_urls()) & stf_devices.as_connect_url_list
121
123
  connected.size
122
124
  end
123
125
 
@@ -141,7 +143,7 @@ module Stf
141
143
  end
142
144
  end
143
145
 
144
- dead_persons = stf_devices.as_connect_url_list - devices
146
+ dead_persons = stf_devices.as_connect_url_list - (devices + DI[:connect_ios].connected_ios_urls())
145
147
  unless dead_persons.empty?
146
148
  logger.info 'will be disconnected because not present locally: ' + dead_persons.join(',')
147
149
  to_disconnect += dead_persons
@@ -44,10 +44,17 @@ module Stf
44
44
  end
45
45
  remote_connect_tunneled_url = DI[:device_enhancer].get_tunneled_remote_connect_url(device)
46
46
  logger.info remote_connect_tunneled_url
47
- execute_adb_with 30, "connect #{remote_connect_tunneled_url}"
48
47
 
49
- shell('echo adbtest', {serial: "#{remote_connect_tunneled_url}"}, 30)
50
- raise ADBError, "Could not execute shell test" unless stdout_contains "adbtest"
48
+ case device.getValue "platform"
49
+ when "Android"
50
+ execute_adb_with 30, "connect #{remote_connect_tunneled_url}"
51
+ shell('echo adbtest', {serial: "#{remote_connect_tunneled_url}"}, 30)
52
+ raise ADBError, "Could not execute shell test" unless stdout_contains "adbtest"
53
+ when "iOS"
54
+ DI[:connect_ios].connect(remote_connect_tunneled_url, device.getValue("serial"))
55
+ else
56
+ logger.error "Unrecognized device platform"
57
+ end
51
58
 
52
59
  return true
53
60
 
@@ -73,4 +80,4 @@ module Stf
73
80
  s.gsub(/["]/, '\"').gsub(/[ ]/, '\ ').gsub(/[=]/, '\=').gsub(/[,]/, '\,')
74
81
  end
75
82
  end
76
- end
83
+ end
@@ -14,7 +14,11 @@ module Stf
14
14
  device = remote_devices.find {|d| d.remoteConnect == true && DI[:device_enhancer].get_tunneled_remote_connect_url(d).eql?(remote_connect_url)}
15
15
 
16
16
  # try to disconnect anyway
17
- execute_adb_with 30, "disconnect #{remote_connect_url}"
17
+ if DI[:connect_ios].connected_ios_devices.include? remote_connect_url
18
+ DI[:connect_ios].disconnect()
19
+ else
20
+ execute_adb_with 30, "disconnect #{remote_connect_url}"
21
+ end
18
22
 
19
23
  if device.nil?
20
24
  logger.error "Device #{remote_connect_url} is not available"
data/lib/stf/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Stf
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.0'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: smartdust-client
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Smartdust
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-31 00:00:00.000000000 Z
11
+ date: 2023-08-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: gli
@@ -229,6 +229,7 @@ files:
229
229
  - lib/stf.rb
230
230
  - lib/stf/client.rb
231
231
  - lib/stf/interactor/add_adb_public_key.rb
232
+ - lib/stf/interactor/connect_ios_interactor.rb
232
233
  - lib/stf/interactor/get_keys_interactor.rb
233
234
  - lib/stf/interactor/get_values_interactor.rb
234
235
  - lib/stf/interactor/remove_all_user_devices_interactor.rb