hipercompl / fbdb

Firebird RDBMS access library for Dart and Flutter
BSD 3-Clause "New" or "Revised" License
6 stars 0 forks source link

run in ios / mac and window #1

Open terryhcw opened 3 months ago

terryhcw commented 3 months ago

Hi

Thanks your package, which make firebird sql database can run in android device.

I try to run your package, which can run in android device and connect to window firebird server. But it need change some parameter in your demo apps.

I try to run it ios, mac and window, but it fail to run because of missing of some firebird client library. Please advise how can I add those library in different platform.

If you need some tester, I like to help you.

Regards

Terry Ho

ttyrakow commented 3 months ago

I'm not sure whether it's possible to run the demo app on iOS. The official Firebird distribution (https://firebirdsql.org/en/firebird-5-0/) doesn't provide iOS binaries, so there is no Firebird client dynamic library available for iOS devices, as far as I'm aware (unless there are some unofficial builds, but I can't tell). MacOS is another story. You can download the MacOS Firebird binaries from the aforementioned Firebird site, install it or otherwise extract the client libraries from the installation package, and put them in a place they can be loaded from (e.g. in the same folder as your application binary). It should work just fine, although I haven't tested it on MacOS (I don't use Apple hardware). Connecting from Android Flutter application to a Firebird server running on Windows does work, I've done it many times. The same goes for Android client + Linux server. If you need to adjust connection parameters other than those available via edit fields in the demo app, you'd have to modify the source code of the demo (probably the Database.login method in data.dart). To run the demo app on Mac, Linux and Windows, you need to make the Firebird client library for each system / architecture available for the Dart code to load (place them in the same directory as the binary Flutter app, or in one of the globally-available system locations). I don't distribute those libraries - they are available at the official Firebird site, being a part of the Firebird binary distributions. The only exception I made was bundling Android Firebird client libraries with the demo app, only to show how and where to put the dynamic libraries for multiple CPU architectures in a Flutter project directory tree.

ttyrakow commented 2 months ago

As a second thought, for educational purposes I'm gonna try to bundle the demo application with the client libraries for different platforms (not just Android). If you're willing to help, please try to determine where to place libfbclient.dylib in the MacOS-related Flutter project structure, so that after flutter build for MacOs, the library would be available for the app executable to load.

terryhcw commented 2 months ago

Hi,

Last time I try your demo apps, which success to use android device to connect windows FB server. Then I try it on Mac OS (Intel base cpu), I fail and get the error message, then I search on the web to find the libfbclient.dylib. I don’t know whether it is correct or not. But I put this file in the warning message directory, but it still fail. I

Would you mind to give me this file. Does this library require which version of FB?

In my testing environments, I use FB 2.5.

Regards

Terry Ho

Tomasz Tyrakowski @.***>於2024年9月12日 下午7:48寫道:



As a second thought, for educational purposes I'm gonna try to bundle the demo application with the client libraries for different platforms (not just Android). If you're willing to help, please try to determine where to place libfbclient.dylib in the MacOS-related Flutter project structure, so that after flutter build for MacOs, the library would be available for the app executable to load.

— Reply to this email directly, view it on GitHubhttps://github.com/hipercompl/fbdb/issues/1#issuecomment-2346071898, or unsubscribehttps://github.com/notifications/unsubscribe-auth/AD3HTMG4C3DEF2G32UHEMODZWF5QBAVCNFSM6AAAAABLHPXVBKVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGNBWGA3TCOBZHA. You are receiving this because you authored the thread.Message ID: @.***>

ttyrakow commented 2 months ago

You need the client library from Firebird 4 or 5. Version 3 should work too (but I've not tested it extensively). Version 2.x will definitely not work, because the new, interface-based API of Firebird, is available starting from version 3. So, if you use libfbclient.dylib from FB version 2 or earlier, there's no way it will work. The version of the server you connect to can be 2.x. The client library of FB 3, 4 or 5 should work with 2.x server, using backward-compatibility mode. The Mac FB client library can be obtained from the official Firebird distribution: https://firebirdsql.org/en/firebird-5-0 (select the package matching your architecture). Sadly, I can't help you much in the matter what gets installed where on MacOS. Linux, Windows, Android - fine, I've got access to this hardware and OS and can check and test, unlike MacOS. You'd just need to install the package and then look for the libfbclient.dylib in your system (I'd start with the /Library/Frameworks/Firebird.framework/ directory).

terryhcw commented 2 months ago

Hi,

    I had the following progress:

    Case A

    1. use your demo program and connect from mac(intel) to windows Firebird server,

    2. after put  two files (libfbclient.dylib and libtommath.dylib) in the application build folder then the application will run with the error:

        Login error

        Unable to complete network request to host "192.168.11.242"

        - Failed to establish a connection

     3. I try to solve it but cannot find any detail and find the way to solve it. Please advise how can I find any info to test it.

    (on the same machine, I use android simulate can success connect the windows Firebird server and get the data)

    The attach screen capture show :

    1. "application path.png" is the screen capture for correct path to put the lib file.

         In the application build folder, the folder is "build/macos/Build/Products/Debug/fbdbdemo/Contents/Frameworks/FlutterMacOs.framework/Versions/A/" to put "libfbclient.dylib" in it

          Then create "lib" folder under "A/"  and put "libtommath.dylib" in the "lib" folder.

    2. "loginerror.png" is the connection error capture screen.

    Case B

    1. use your demo program and connect from mac(m3) to windows Firebird server,

    2. try to compile to run in mac os (m3 cpu), then get the following error :

       --- xcodebuild: Warning : Using the first of multiple matching destinations:

      { platform:macOS, arch:arm64, id: 00008122-0015391C1A4001C}

      { platform:macOS, arch:x86_64, id: 00008122-0015391C1A4001C}

      fbdbdemo.app : resouce fork, Finder information, or similar detritus not allowed

      Command CodeSign failed with a nonzero exit code

     Case C

      I try to run your demo application into iphone simulator. it need "libfbclient.so", please advise how can I find this file?

     Regards

Terry Ho --------------CgnyP38Or0YS5qqY17iH0IBM Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

<!DOCTYPE html>

Hi,

    I had the following progress:

    Case A

    1. use your demo program and connect from mac(intel) to windows Firebird server,

    2. after put  two files (libfbclient.dylib and libtommath.dylib) in the application build folder then the application will run with the error:

        Login error

        Unable to complete network request to host "192.168.11.242"

        - Failed to establish a connection

     3. I try to solve it but cannot find any detail and find the way to solve it. Please advise how can I find any info to test it.

    (on the same machine, I use android simulate can success connect the windows Firebird server and get the data)

    The attach screen capture show :

    1. "application path.png" is the screen capture for correct path to put the lib file.

         In the application build folder, the folder is "build/macos/Build/Products/Debug/fbdbdemo/Contents/Frameworks/FlutterMacOs.framework/Versions/A/" to put "libfbclient.dylib" in it

          Then create "lib" folder under "A/"  and put "libtommath.dylib" in the "lib" folder.

    2. "loginerror.png" is the connection error capture screen.

    Case B

    1. use your demo program and connect from mac(m3) to windows Firebird server,

    2. try to compile to run in mac os (m3 cpu), then get the following error :

       --- xcodebuild: Warning : Using the first of multiple matching destinations:

      { platform:macOS, arch:arm64, id: 00008122-0015391C1A4001C}

      { platform:macOS, arch:x86_64, id: 00008122-0015391C1A4001C}

      fbdbdemo.app : resouce fork, Finder information, or similar detritus not allowed

      Command CodeSign failed with a nonzero exit code


     Case C

      I try to run your demo application into iphone simulator. it need "libfbclient.so", please advise how can I find this file?


     Regards


Terry Ho

--------------CgnyP38Or0YS5qqY17iH0IBM--

--------------OtxiOnl1DMjAtvh05QrYYT9T Content-Type: image/png; name="application path.png" Content-Disposition: attachment; filename="application path.png" Content-Transfer-Encoding: base64

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 HevTRw2H/rHUYVveerp3NluRwD9svIf/oe5/zmBU1Qn8c/4XEikIHjcFcAQAAACKZVhJZk1NACoA AAAIAAQBGgAFAAAAAQAAAD4BGwAFAAAAAQAAAEYBKAADAAAAAQACAACHaQAEAAAAAQAAAE4AAAAA AAAAkAAAAAEAAACQAAAAAQADkoYABwAAABIAAAB4oAIABAAAAAEAAAWGoAMABAAAAAEAAAGoAAAA AEFTQ0lJAAAAU2NyZWVuc2hvdCY1HqEAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAHXaVRYdFhNTDpj b20uYWRvYmUueG1wAAAAAAA8eDp4bXBtZXRhIHhtbG5zOng9ImFkb2JlOm5zOm1ldGEvIiB4Onht cHRrPSJYTVAgQ29yZSA2LjAuMCI+CiAgIDxyZGY6UkRGIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53 My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyI+CiAgICAgIDxyZGY6RGVzY3JpcHRpb24g cmRmOmFib3V0PSIiCiAgICAgICAgICAgIHhtbG5zOmV4aWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20v ZXhpZi8xLjAvIj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjQyNDwvZXhpZjpQaXhl bFlEaW1lbnNpb24+CiAgICAgICAgIDxleGlmOlBpeGVsWERpbWVuc2lvbj4xNDE0PC9leGlmOlBp eGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6VXNlckNvbW1lbnQ+U2NyZWVuc2hvdDwvZXhp ZjpVc2VyQ29tbWVudD4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94 OnhtcG1ldGE+CiEuW+QAAAAcaURPVAAAAAIAAAAAAAAA1AAAACgAAADUAAAA1AAAyKxRQ9ySAABA AElEQVR4AeydB4AURfbG3wZyTgJKWoKASA7mgIqJ8wynICjqAaY7xQAKZhAjYsIzYsScE+rp/0yI YkQkSEaiBAmS07L7f9/rqdneYWZ2Znd23Zn9CnY6VVd3/7q7quurV6/SVq1Ymbt161Zp3LixMJAA CZAACZAACZAACZAACZAACZAACZAACZAACZAACaQ+gTQKw6l/k3mFJEACJEACJEACJEACJEACJEAC JEACJEACJEACJOAnQGHYT4PzJEACJEACJEACJEACJEACJEACJEACJEACJEACJFAGCFAYLgM3mZdI AiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAn4CFIb9NDhPAiRAAiRAAiRAAiRAAiRAAiRAAiRA AiRAAiRAAmWAAIXhMnCTeYkkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIk4CdAYdhPg/MkQAIk QAIkQAIkQAIkQAIkQAIkQAIkUAYI7NixQypWrFgGrpSXSAIkEIkAheFIZLieBEiABEiABEiABEiA BEiABEiABEiABFKQwAcffCCff/65HHDAATJgwAApV65cCl4lL4kESKAgAhSGCyLE7SRAAiRAAiRA AiRAAiRAAiRAAiRAAiSQAgRyc3PlnXfeka8nfy25aSL6X1q2bCmDBg2iOJwC95eXQALxEqAwHC8x xicBEiABEiABEiABEiABEiABEiCBFCAwe/ZsWbBggeTqP8nBBeVKjgqHaelpkpaWLhARIRxie7r+ y8m1SN46ExXTbBtWp2FZ93PpYH/E9/bXRIIziKdp52jaaUg/3fbr0KGjNGnSGCfBUEwEcD9ff/11 +f6H73FTNehN0XV6CySrWZYMHjxYKlSoUExHT61kd+3aJbNmzpR169dLTk6OvQdgivfAfgLvRNVq 1aRdu3ZSvXr11ALAq0kZAhSGU+ZW8kJIgARIgARIgARIgARIgARIgARIIHYCN9xwg+zcuTOwA5RC qFoaIBaqwqW6rVmVui02hZbohGCNCqnYtDDsZn8Qe7EGSwj5l7DJktfNzmIVsSAKDxlyBWYZioEA xMvXXntdfvzxB7s7tevUkfVr10nlqlWsMWD7tm3SuHFjufjii+l3uAD+K1askGeeeVo2bNhoGjCe 9mjvQfny5aVv37OlY8eOBaRctjavXbtW1qxZIxs3bhT4u87MzJRKlSpLvXp1pWHDhgJuDMVPgMJw 8TPmEUiABEiABEiABEiABEiABEiABEig1BF49dVX5ddfZ5lQa9aOGSJ79qh1MMweTQX2nbKquWbp q1NYFbs4fnHXLIx1X1gDp2dkaLp7NIG904KVcK7sUVENVslqVZyWIUcccbgcd9xxvgNyNlEEIAq/ 9OJLMm36NLvXp592uiz+7TeZ9ss0qVWrlvTr10+eePxxyd6zR/bbbz+56KKLpEqVKok6fEqls2zZ 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 AAake1Z9Du/auUvSAyI5hPJ0/YH7g4GDBtGncOre/jJzZRSGy8yt5oWSAAmQAAmQAAmQAAmQAAmQ AAmQAAmQAAnESgBW7q+88opatq5W82n42EiXhg0bSP/+/XXaMNZkGI8ESi0BCsOl9tbwxEiABEiA BEiABEiABEiABEiABEiABEiABP5KAvCPC7cH69evN9/KcCkBv+8MJJAKBCgMp8Jd5DWQAAmQAAmQ AAmQAAmQAAmQAAmQAAmQAAmQAAmQQBwEKAzHAYtRSYAESIAESIAESIAESIAESIAESIAESIAESIAE SCAVCFAYToW7yGsgARIgARIgARIgARIgARIgARIgARIgARIgARIggTgIUBiOAxajkgAJkAAJkAAJ kAAJkAAJkAAJkAAJkAAJkAAJkEAqEKAwnAp3kddAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRA AnEQoDAcByxGJQESIAESIAESIAESIAESIAESIAESIAESIAESIIFUIEBhOBXuIq+BBEiABEiABEiA BEiABEiABEiABEiABEiABEiABOIgQGE4DliMSgIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAKp QIDCcCrcRV4DCZAACZAACZAACZAACZAACZAACZAACZAACZAACcRBgMJwHLAYlQRIgARIgARIgARI gARIgARIgARIgARIgARIgARSgQCF4VS4i7wGEiABEiABEiABEiABEiABEiABEiABEiABEiABEoiD AIXhOGAxKgmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmQAAmkAgEKw6lwF3kNJEACJEACJEACJEAC JEACJEACJEACJEACJEACJBAHAQrDccBiVBIgARIgARIgARIgARIgARIgARIgARIgARIgARJIBQIU hlPhLvIaSIAESIAESIAESIAESIAESIAESIAESIAESIAESCAOAhSG44DFqCRAAiRAAiRAAiRAAiRA AiRAAiRAAiRAAiRAAiSQCgQoDKfCXeQ1kAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkAAJkEAcBCgM xwGLUUmABEiABEiABEiABEiABEiABEiABEiABEiABEggFQhQGE6Fu8hrIAESIAESIAESIAESIAES IAESIAESIAESIAESIIE4CFAYjgMWo5IACZAACZAACZAACZAACZAACZAACZAACZAACZBAKhCgMJwK d5HXQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAJxEKAwHAcsRiUBEiABEiABEiABEiABEiAB EiABEiABEiABEiCBVCBAYTgV7iKvgQRIgARIgARIgARIgARIgARIgARIgARIgARIgATiIEBhOA5Y jEoCJEACJEACJEACJEACJEACJEACJEACJEACJEACqUCAwnAq3EVeAwmQAAmQAAmQAAmQAAmQAAmQ AAmQAAmQAAmQAAnEQYDCcBywGJUESIAESIAESIAESIAESIAESIAESIAESIAESIAEUoEAheFUuIu8 BhIgARIgARIgARIgARIgARIgARIgARIgARIgARKIgwCF4ThgMSoJkAAJkAAJkAAJkAAJkAAJkAAJ kAAJkAAJkAAJpAIBCsOpcBd5DSRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiRAAiQQBwEKw3HAYlQS IAESIAESIAESIAESIAESIAESIAESIAESIAESSAUCFIZT4S7yGkiABEiABEiABEiABEiABEiABEiA BEiABEiABEggDgIUhuOAxagkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkQAIkkAoEKAynwl3kNZAA CZAACZAACZAACZAACZAACZAACZAACZAACZBAHASCwnB27p44dos/6sqVK22nhg0bxr8z9yABEiAB EiABEihWAiynixUvEycBEiABEiCBIhFgOV0kfNyZBEiABEggAoGgMFyvwT4RoiRmNQuyxHBkKiRA AiRAAiRQHARYThcHVaZJAiRAAiRAAokhwHI6MRyZCgmQAAmQQH4CQWG4easW+bckeIkFWYKBMjkS IAESIAESSCABltMJhMmkSIAESIAESCDBBFhOJxgokyMBEiABEjACFIb5IJAACZAACZAACQgrnHwI SIAESIAESKD0EmA5XXrvDc+MBEiABJKZAIXhZL57PHcSIAESIAESSBABVjgTBJLJkAAJkAAJkEAx EGA5XQxQmSQJkAAJkIBQGOZDQAIkQAIkQAIkQIthPgMkQAIkQAIkUIoJUBguxTeHp0YCJEACSUyA wnAS3zyeOgmQAAmQAAkkigArnIkiyXRIgARIgARIIPEEWE4nnilTJAESIAESEFoM8yEgARIgARIg ARIQWgzzISABEiABEiCBUkyAwnApvjk8NRIgARJIYgK0GE7im8dTJwESIAESIIFEEWCFM1EkmQ4J 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

ttyrakow commented 2 months ago

Case A. The "Unable to complete network request to host 192.168.11.242" error message suggests, that the Firebird client library has actually been loaded by the Flutter application (partial success!), but the actual network connection to the server could not be established. Are you able to connect to Firebird running at 192.168.11.242 using another tool? Like isql, FlameRobin, DBeaver, etc. Perhaps the Firebird 3050 port is blocked by a firewall at 192.168.11.242.

Case B. Can't help you with this issue. It looks like an issue between Flutter and XCode. I don't have any Mac machines, so I'm not able to examine and diagnose the Flutter app build process on MacOS. Have you used aarch Firebird .dylib? Maybe you kept using the Intel libfbclient.dylib while trying to build an Arm executable? That's just a wild guess on my part, I have no idea what can cause the XCode errors you described.

Case C. You can't find this file anywhere, and neither can I. Firebird team does not provide Firebird binaries for iOS, so there is no libfbclient.so / libfbclient.dylib available for iOS.

Lastly, please consider writing comments via Github issues page instead of sending them via email. First, you will be able to properly add screenshots, and second, sending a comment via email adds a lot of HTML garbage to the actual content and it looks terrible on Github (take a look at your last comment on the issues page). So, to make the communication easier, please use the issues page instead of emailing your comments.

ttyrakow commented 2 months ago

Some more info on case C. There's a custom build of iOS binaries here: http://paulbeachsblog.blogspot.com/2013/09/an-update-about-firebird-on-ios.html, but it's old and I can't tell anything about its quality. Couldn't find anything else, though. Maybe it will help.

Edit: it looks like it's Firebird 2.x. So, unfortunately, it won't help. The 2.x client is not compatible with fbdb (which currently requires the client v4.0+ and the compatibility with v3.x is in progress - I plan to publish it with version 1.1 of fbdb).

terryhcw commented 2 months ago

In Case A. I had use DBheaver, which success connect to same db. Also in the same machine with Android emulator, which success get data from "192.168.11.242". Does there any check point, I can find out why it is "Unable to complete network request"

In Case B. I had use ARM base dylib. But I will work on this process again, to make sure I had use the correct library.

In Case C. I had read Paulbeach blog before. but it seem it can not use.

ttyrakow commented 2 months ago

I've asked about Firebird client for iOS on the official firebird-support mailing group, but no answer so far. As soon as I know anything, I'll post it here (but I'm rather pessimistic: if the Firebird team doesn't provide iOS builds, probably no one else does).

I wonder what may be the issue in your case A. If you get as far as "unable to complete network request", that means the Firebird client dylib is loaded properly (otherwise you'd get an error sooner and of a different kind). There are 2 possible paths to check that come to my mind: a) The MacOS Flutter app requires some kind of extra permission to access the network (not very likely, but possible, see for example here: https://stackoverflow.com/questions/61196860/how-to-enable-flutter-internet-permission-for-macos-desktop-app#61201081). b) your server requires an encrypted connection, but the client is not able to provide it (that's also unlikely, probably the error message would be different). To test that you can add the setting in firebird.conf on the server: WireCrypt = Enabled (by default it's Requred which means unencrypted connections are prohibited).

ttyrakow commented 1 month ago

One of the core Firebird developers prepared an experimental build of iOS client libraries. It's available here: https://drive.google.com/drive/folders/1vdiowymH_oOCSgOQFJBuet1xtCEQAoK5?usp=sharing. If you find some time to do some tests, I'll be glad to get your feedback, which I'll also pass to the Firebird team.

terryhcw commented 1 month ago

Hi

Case A. After I add the following key to access network in Mac Os app, which now it can connect the db and get the data.

     <key>com.apple.security.network.client</key>
    <true/>

Case B. 

    After I upgrade flutter sdk to 3.24.3  , then in the M3 process, it can compile the Mac OS app, which had some compile warning "Warning: Using the first of multiple matching destinations:", but the app can run. With the ARM base Firebird client library, it can connect Firebird db and get the data from employees db.

Now the problem is, when I compile the apps, I need manual to copy the "libfbclient.dylib" and "libtommath.dylib" to related folder, how can I  put those file in the compiled application folder when compile the application?
Regards

Terry Ho

ttyrakow commented 1 month ago

Again, not having access to the actual MacOS build tools, I can only provide you some hints from what I've read (not from what I've tested myself). First, there's a decent MacOS Flutter packaging guide here: https://medium.com/@fluttergems/packaging-and-distributing-flutter-desktop-apps-the-missing-guide-part-1-macos-b36438269285, I don't know if you're familiar with it. From what I understand, when you open the Runner.xcodeproj Flutter-generated project, you can tweak some project settings. I think you should examine the "Build phases" tab of the project in XCode, and see if you can add a custom build phase, which would just copy the required shared libraries to appropriate location in the final application folder. Sorry that I'm not able provide you a ready to use, step-by-step solution for MacOS/iOS, I hope you'll figure it out.

terryhcw commented 1 month ago

Some progress:

Now I find the correct place to put two library file in MacOS environment. In the attach screen shot. Which is in the xcode, under Runner->Build Phases->Bundle Framework

Then select Frameworks, and add the libfbclient.dylib and add a folder which call "lib", where the file "libtommath.dylib" is into the "lib" folder.

Then compile and run, it will include the above lib file in the apps's content.

The above method work in ARM MacBook environment, which it will compile error in Intel Base CPU. I think it is the mac sdk version problem.

lib place

The following is the capture screen after put one file and folder in the framework in Flutter project macos Folder

macos folder

For IOS environment, under your suggest ios "libfbclient.so" fail in both Intel and ARM CPU ios simulator. I think it is the problem of client library. I will try to use Linux ARM 64 firebird client library and test again.

ttyrakow commented 1 month ago

There's no point in trying to load Linux ARM library in an iOS application. It won't work for sure. Could you provide some more information (is there a meaningful error message available?) about how the loading of the library fails? I'll send it to the Firebird developer, maybe he'll be able to figure it out. Also, I'm wondering if an iOS build of libtommath wouldn't be necessary, as it's a library fbclient depends on.

terryhcw commented 1 month ago

The following is the Login Error, which I put your suggest "libfbclient.so"

flutter: Invalid argument(s): Failed to load dynamic library 'libfbclient.so': dlopen(libfbclient.so, 0x0001): tried: '/Library/Developer/CoreSimulator/Volumes/iOS_21A342/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.0.simruntime/Contents/Resources/RuntimeRootlibfbclient.so' (no such file), '/Library/Developer/CoreSimulator/Volumes/iOS_21A342/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.0.simruntime/Contents/Resources/RuntimeRoot/usr/lib/swift/libfbclient.so' (no such file), '/usr/lib/swift/libfbclient.so' (no such file, not in dyld cache), '/Users/terryho/Library/Developer/CoreSimulator/Devices/44137D75-5802-4F32-9CDD-0B3BA25FD23E/data/Containers/Bundle/Application/8EB4D8A9-C9C2-4920-853C-DFC0A1AE8E62/Runner.app/Frameworks/libfbclient.so' (mach-o file (/Users/terryho/Library flutter: /Developer/CoreSimulator/Devices/44137D75-5802-4F32-9CDD-0B3BA25FD23E/data/Containers/Bundle/Application/8EB4D8A9-C9C2-4920-853C-DFC0A1AE8E62/Runner.app/Frameworks/libfbclient.so), but incompatible platform (have 'iOS', need 'iOS-sim')), '/usr/lib/libfbclient.so' (no such file, not in dyld cache), 'libfbclient.so' (no such file), '/Library/Developer/CoreSimulator/Volumes/iOS_21A342/Library/Developer/CoreSimulator/Profiles/Runtimes/iOS 17.0.simruntime/Contents/Resources/RuntimeRoot/usr/lib/libfbclient.so' (no such file)

I had put in the correct path(which I copy the above path and search in the ios simulator), but it seem it can not find it. (no such file, not in dyld cache).

It can only copy in the following path, otherwise it can not copy file in it : "'/Users/terryho/Library/Developer/CoreSimulator/Devices/44137D75-5802-4F32-9CDD-0B3BA25FD23E/data/Containers/Bundle/Application/8EB4D8A9-C9C2-4920-853C-DFC0A1AE8E62/Runner.app/Frameworks/libfbclient.so' (mach-o file (/Users/terryho/Library flutter: /Developer/CoreSimulator/Devices/44137D75-5802-4F32-9CDD-0B3BA25FD23E/data/Containers/Bundle/Application/8EB4D8A9-C9C2-4920-853C-DFC0A1AE8E62/Runner.app/Frameworks/"

There is three file in your suggest compress file, two are shortcut and one is library. I rename the libfbclient.so.6.0.0 to libfbclient.so

ttyrakow commented 1 month ago

The error message "incompatible platform (have 'iOS', need 'iOS-sim')" suggests the library can be used only on an actual iOS device. I wasn't aware Apple uses different binaries for the simulator and the real device (maybe that's why it's called "simulator", not "emulator") - that's not how it works for Android (the very same binaries can be used in emulator and on a real device). Anyway, I asked the Firebird developer if he can build also the "iOS-sim" version of the client library. If so, I'll let you know. Apparently the libfbclient.so provided by him is built for the real device only, not the simulator.

ttyrakow commented 1 month ago

Sorry, I haven't got any feedback from the Firebird developer, who was supposed to try and compile the Firebird clienty dylib for "simulator" mode. Besides, from what I've read, up until recently, iOS prohibited using third party dynamic libraries. However, in the recent iOS versions they can be used, but probably they need to be signed by a developer and then additionally sent to Apple to be notarized (i.e. signed again by Apple). So, it looks like a large effort, and I suppose iOS just can't be fully supported right now by the model: Dart package + native shared library. While the fbdb package as such compiles and runs fine on iOS, the native Firebird library, which is a required runtime dependency of fbdb, does not. Which in fact means it's next to impossible to actually use fbdb in iOS project in any meaningful way. Until a way is found to build and deploy the Firebird client library together with a Flutter iOS application, it can't be helped. If I (somehow) get my hands on Apple hardware (Mac + iPhone) in the future, I might try and do it myself, but right now I can only hope someone with enough patience and Mac + iOS expercience manages to do that and shares the secret.

terryhcw commented 1 month ago

Thanks your update. At this moment, most of our user using firebird sql under window environment, I need to rewrite my app in flutter and using fbdb. So it is not rush to have an use firebird under IOS. Thanks your help

ttyrakow commented 1 month ago

I'll intentionally keep this issue open, to remember to get back to it, as soon as I've got technical means (i.e. access to Mac+iPhone/iPad). I'm gonna keep it tagged as "enhancement", though, because right now it seems there is no "bug" I can fix to make it work on iOS. @terryhcw, thanks for your feedback, testing and cooperation so far. We'll stay in touch here, in case the matter improves (I'll let you know when it does).

terryhcw commented 3 weeks ago

Thanks your work. If you need tester, please let me know.