TL: DR;
idb_companion
was built for newer Swift enviroments, but I was still using Big Sur. After upgrading my MacOS, Flipper managed to connect to my iOS device fine.
Of course I explain below that I build idb
from the source to match the version 1.1.8
for both idb_companion
and idb
.
Below I also explain how I found the error that was crashing idb_companion
preventing Flipper from maintaining a stable connection and restarting several times yielding the message: [conn] ... restarted 4 times in 20 seconds
.
What I learned:
- idb_companion runs on my Mac in the background as a server that knows how to control or get logs from iOS physical devices;
- idb is a command line interface that Flipper can use for communicating with idb_companion.
I was able to install idb_companion@1.1.8
using Homebrew. But I was not able to install the same version 1.1.8
for the cli (aka idb (aka fb-idb)).
So I decided to build the idb
from the github repo. The command line for building it was
pip3.9 install .
First I struggled with an error related to grpclib
version. Apparently idb
required the version 0.4.1
but I had 0.4.3
installed. To downgrade grpclib
I used the following command:
pip3.9 install grpclib==0.4.1
I also tried to make sure there was no other grpclib
installed in other python version, so I ran a bunch of
pip3 install grpclib==0.4.1
pip3.7 install grpclib==0.4.1
pip3.9 install grpclib==0.4.1
To see which version of python I had, I ran a bunch of
which pip
which pip3
which pip3.6
which pip3.7
which pip3.8
which pip3.9
which pip3.10
Anyways...
As I was randomly trying to build idb
with those different python versions, with and without sudo
, I also faced the following error, which was fixed just by adding sudo
again to the build
command.
ERROR: Could not install packages due to an OSError: [Errno 13] Permission denied: '/Users/alexandrelage/Library/Python/3.9/lib'
Check the permissions.
Anyways...
Basically after fixing the grpclib
requirement, pip3.9 install .
inside the source folder was enough for building idb
(client, on version 1.1.8).
Of course I had to go to Flipper >> Settings and update the idb path. All seemed good.
Unfortunately that was not enough, Flipper kept on trying to connect to my iPhone device with no success. Then I copied the idb
command Flipper was trying to run:
/Library/Frameworks/Python.framework/Versions/3.7/bin/idb file pull --log DEBUG --udid 00008020-000A7D2C36DUMMYDUMMY --bundle-id org.reactjs.native.example.MyExample 'Library/Application Support/sonar/app.csr' '/var/folders/r6/xrp3nw8j4wj45mvdpnlzlv740000gn/T/tmp-10199-CW6olKXUvwek/app.csr'
I was lucky to run the command above while I was also running idb_companion
on another tab. The command I used to manually start idb_companion
was:
idb_companion --uidid 00008020-000A7D2C36DUMMYDUMMY
I was lucky because I noticed the idb_companion
tab stopped running when I tried to run the idb
(client) command above I copied from Flipper. I restarted idb_companion
again and tried to run the idb
(client) command again. Then I realized idb_companion
was crashing with an error message:
...
2022-10-21 18:14:11.853-0300 Starting swift server on tcp port 10882
2022-10-21 18:14:11.854-0300 Swift server started on [IPv6]::/:::10882
{"grpc_swift_port":10882,"grpc_port":10882}
2022-10-21 18:14:11.854-0300 Companion will stay alive if target goes offline
2022-10-21 18:14:30.997-0300 Start of connect
dyld: lazy symbol binding failed:
can't resolve symbol _$sScCMa in
/usr/local/Cellar/idb-companion/1.1.8/bin/../Frameworks/IDBGRPCSwift.framework/Versions/A/IDBGRPCSwift
because dependent dylib @rpath/libswift_Concurrency.dylib could not be loaded
dyld: can't resolve symbol _$sScCMa in
/usr/local/Cellar/idb-companion/1.1.8/bin/../Frameworks/IDBGRPCSwift.framework/Versions/A/IDBGRPCSwift
because dependent dylib @rpath/libswift_Concurrency.dylib could not be loaded
That indicated there was something else going on. It seemed idb_companion
was built for a Swift environment different to mine. I looked for this error on Google and realized my XCode was outdated. In fact I was still using Big Sur
.
Now I upgraded my MacOS to Montrey, Flipper manages to connect to my iOS device fine. And I haven't even upgraded my XCode yet.