Xojo でリモート開発(Raspberry Pi / Webアプリ編)

「Xojo でリモート開発」
https://qiita.com/nanbuwks/items/4743756186060c3c3d20
では、Linuxマシンで動かすアプリケーションを、Windows PCで開発してリモートで実行、デバッグしました。

今回は RaspberryPi で動かす Web アプリケーションを、PC で開発してリモートで実行、デバッグします。
リモート開発するPCは Windows/Linux で検証しましたが、多分Macもイケる・・・ハズ。

# 概要

Xojo は、Mac/Windows/Linux/iOS/Web/RaspberryPi アプリを作成することができます。
このうち、RaspberryPi アプリについてはデスクトップアプリ/CUIアプリ/Webアプリいずれも作成可能となりました。
しかしながら IDE が動作するのは Mac/Windows/Linux PC でのみです。
開発は以下のいずれかとなります。

- ターゲットを ARM に設定して、バイナリを RaspberryPi に転送して実行する
- リモートで実行、デバッグする(リモート開発時)


# 環境


- Xojo 2019 r3.1
- Raspbian GNU/Linux 10 (buster)
- Raspberry Pi 3 Model B

リモート開発PCは以下の2つでテストしています。

- MS-Windows 10 Pro 64bit
- Ubuntu 18.04 AMD64


# RaspberryPi での設定


Ubuntu の Xojo パッケージを解凍した以下のファイルを RaspberryPiにコピー

.../xojo2019r3.1/Extras/Remote Debugger Console/linux\ ARM.zip 

```

$ scp linux\ ARM.zip pi@192.168.162.100:/home/pi
```

RaspberryPi で解凍

```
pi@raspberrypi:~ $ mkdir xojo
pi@raspberrypi:~ $ cd xojo
pi@raspberrypi:~/xojo $ mv ../linux\ ARM.zip .
pi@raspberrypi:~/xojo $ unzip linux\ ARM.zip 
Archive:  linux ARM.zip
   creating: RemoteDebuggerConsole/
  inflating: RemoteDebuggerConsole/RemoteDebuggerConsole  
   creating: RemoteDebuggerConsole/RemoteDebuggerConsole Libs/
  inflating: RemoteDebuggerConsole/RemoteDebuggerConsole Libs/libc++.so.1  
  inflating: RemoteDebuggerConsole/RemoteDebuggerConsole Libs/libGZipARM.so  
  inflating: RemoteDebuggerConsole/RemoteDebuggerConsole Libs/libRBShellARM.so  
  inflating: RemoteDebuggerConsole/RemoteDebuggerConsole Libs/XojoConsoleFrameworkARM.so  ls

   creating: RemoteDebuggerConsole/RemoteDebuggerConsole Resources/
   creating: RemoteDebuggerConsole/RemoteDebuggerConsole Resources/en.UTF-8/
   creating: RemoteDebuggerConsole/RemoteDebuggerConsole Resources/en.UTF-8/LC_MESSAGES/
  inflating: RemoteDebuggerConsole/RemoteDebuggerConsole Resources/en.UTF-8/LC_MESSAGES/localizable.mo  
pi@raspberrypi:~/xojo $ ls
 RemoteDebuggerConsole  'linux ARM.zip'
pi@raspberrypi:~/xojo $ cd RemoteDebuggerConsole/
pi@raspberrypi:~/xojo/RemoteDebuggerConsole $ ./RemoteDebuggerConsole
./RemoteDebuggerConsole: error while loading shared libraries: libunwind.so.8: cannot open shared object file: No such file or directory

```

実行しようとしたらライブラリがないと出たのでインストール

```


pi@raspberrypi:~/xojo/RemoteDebuggerConsole $ sudo apt install libunwind8
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  libunwind8
0 upgraded, 1 newly installed, 0 to remove and 74 not upgraded.
Need to get 48.3 kB of archives.
After this operation, 165 kB of additional disk space will be used.
Get:1 http://ftp.tsukuba.wide.ad.jp/Linux/raspbian/raspbian buster/main armhf libunwind8 armhf 1.2.1-9 [48.3 kB]
Fetched 48.3 kB in 1s (45.1 kB/s)    
・
・
・

```

実行すると色々聞いてくるので適当に答える

```
pi@raspberrypi:~/xojo/RemoteDebuggerConsole $ ./RemoteDebuggerConsole
Machine Name: RaspberryPi
Download Directory: /home/pi/xojo
192.168.162.100
192.168.43.13
IP Address: 192.168.162.100
Maximum Connections: 10
Auto Launch: 
Auto Launch: Yes
Public: Yes
```

とすると、待受になった。

```

Machine Name: RaspberryPi
Download Directory: /home/pi/xojo
IP Address: 192.168.162.100 X
IP Address: 192.168.43.13
Port: 44553
Max Connections: 10
Launch After Unpack: true
Public Stub: true
11:28:24 AM: Binding New StubLocator to port: 44553
11:28:24 AM: StubLocator New: Connected
ServerSocket1 is Listening on 192.168.162.100:44553
```


母艦側で、ボタン１つだけのWebアプリを作ってみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/9d4a76ba-38e5-4f9b-b9b7-41ed12de8df7.png)

開発PC 側で、Project-Run Remotely でRaspberryPiのIPアドレスを登録し、選択すると、RaspberryPi のコンソールで以下のように出て、動いた。

```

11:31:25 AM: Connection established
11:31:25 AM: Stub<-IDE    HELLO, 19.3.1a0, Protocol: 6, Local IP: 192.168.162.100
11:31:25 AM: Using protocol version 6
11:31:25 AM: IDE Version supported
11:31:25 AM: Stub->IDE    OLLEH, 1.9.057, 6, Remote Address: 192.168.162.82
11:31:25 AM: Stub<-IDE    PLATFORM-REQUEST
11:31:25 AM: Stub->IDE    PLATFORM-RESPONSE, Linux, ARM, ELF, Linux 4.19.75-v7+ Raspbian GNU/Linux 10 \n \l
11:31:30 AM: Stub<-IDE    CREATEFILE, DebugMyApplication.tar.gz,  Relative path: True, 
11:31:30 AM: Stub->IDE    CHALLENGE, 123EBF 192.168.162.100 192.168.162.82
11:31:30 AM: Waiting for RESPONSE
11:31:30 AM: Got a RESPONSE packet, about to decrypt
11:31:30 AM: Stub<-IDE    RESPONSE, 123EC0 192.168.162.82 192.168.162.10011:31:30 AM: Response accepted
11:31:30 AM: Creating file: /home/pi/xojo/DebugMyApplication.tar.gz
11:31:30 AM: Created the file list
11:31:30 AM: Added the file or folder to the file list
11:31:30 AM: Stub->IDE    FILECREATION, File ID: 0, Status: 0
11:31:30 AM: Stub<-IDE    FILEINFO, File ID: 0, Size: 1.883502e+7, Compressed: False, Stub Delete: False
11:31:30 AM: 1024.0 KB/18.0 MB 6%
11:31:31 AM: 2.0 MB/18.0 MB 11%
11:31:31 AM: 3.0 MB/18.0 MB 17%
11:31:31 AM: 4.0 MB/18.0 MB 22%
11:31:31 AM: 5.0 MB/18.0 MB 28%
11:31:32 AM: 6.0 MB/18.0 MB 33%
11:31:32 AM: 7.0 MB/18.0 MB 39%
11:31:32 AM: 8.0 MB/18.0 MB 45%
11:31:32 AM: 9.0 MB/18.0 MB 50%
11:31:33 AM: 10.0 MB/18.0 MB 56%
11:31:33 AM: 11.0 MB/18.0 MB 61%
11:31:33 AM: 12.0 MB/18.0 MB 67%
11:31:33 AM: 13.0 MB/18.0 MB 72%
11:31:34 AM: 14.0 MB/18.0 MB 78%
11:31:34 AM: 15.0 MB/18.0 MB 84%
11:31:34 AM: 16.0 MB/18.0 MB 89%
11:31:34 AM: 17.0 MB/18.0 MB 95%
11:31:35 AM: 18.0 MB/18.0 MB 100%
11:31:35 AM: Stub->IDE    FILEWRITTEN, File ID: 0, Status: 0
11:31:35 AM: Stub<-IDE    FILELAUNCH, File ID: 0, Launch in Terminal: False, Command line args: 
11:31:35 AM: Stub->IDE    CHALLENGE, 123EC1 192.168.162.100 192.168.162.82
11:31:35 AM: Got a RESPONSE packet, about to decrypt
11:31:35 AM: Stub<-IDE    RESPONSE, 123EC2 192.168.162.82 192.168.162.10011:31:35 AM: Response accepted
11:31:35 AM: Decompressing DebugMyApplication.tar.gz
11:31:36 AM: Untarring DebugMyApplication.tar
11:31:38 AM: Launching DebugMyApplication
```

適当なマシンでWebブラウザでIPアドレス:8080 を開くと実行できていることがわかる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139524/1f16bf24-f018-ac5a-efb7-020df3013558.png)

# 杞憂？

- Linux PC をターゲットにして、コンソール版デバッガを立ち上げ、Windows PCからリモートデバッグしようとするとダメ
- 以前は Windows から RaspberryPi にリモートデバッグできなかった? https://www.k2-y.com/?page_id=2748 (リンク切れ)

とかで心配でしたが、あっさり動きました。

# トラブルシューティング

 illegal instruction と出る

→ Raspberry Pi 2 以降で無い場合はアーキテクチャの問題