Show HN: I Built a Java IDE for iPad

(apps.apple.com)

189 points | by coolius 16 days ago

6 comments

  • pquki4 16 days ago
    The app store page doesn't mention debugging, so I assume it's not there.

    And probably not "go to definition". Completion quality is also questionable. These are very hard problems, even for a language with strict typing like Java. It's not easy to get these basic lookups correct and smooth.

    Personally I wouldn't call it an IDE (yet).

    • pandemic_region 15 days ago
      >It's not easy to get these basic lookups correct and smooth.

      Exactly, Intellij has been in the autocompletion industry for what, almost 2 decades? And still they present me with types in the autocomplete drop-down that I have never ever used in any of my projects. Yes I know, but I got tired eventually from excluding them. In my brain autocomplete is not hard, yet for an IDE guessing seems really really hard. AI improved this, at the cost of a second latency. No thankee sir.

      • qwerty456127 15 days ago
        Yet IntelliJ has always (figuratively, I dunno about its first years) been famous for having by far the best auto-completion ever. People used to become very upset when they were forced to use Eclipse after experience with IntelliJ.
        • pandemic_region 15 days ago
          True, it was good and lightning fast back then. Granted, the language (java) was arguably simpler then. Autocompleting a lambda is nightmarish at the moment. Nowadays it gets in the way more often than not. I feel it's starting to implode very slowly.
        • pjmlp 14 days ago
          My experience with InteliJ has made me stick to Eclipse and Netbeans, unless external forces require me to use it.
      • gbear605 15 days ago
        If you’re talking about the new autocompletion AI that they added a few months ago, you should be able to turn that off in the settings.
      • MrBuddyCasino 15 days ago
        > autocompletion industry

        This is a great line.

      • wg0 15 days ago
        Why auto complete for a static language would be hard? Everything is known in advance.

        Genuine question.

        • invalidname 14 days ago
          Because Java is static and relatively simple, the level of autocompletion is absolutely fantastic. E.g. a simple case, typing:

          int a = obj.

          Would show first only methods that return integers. But this gets far more sophisticated with completion anticipating your preference, naming variables for you, filling in the parameters with sensible values etc.

          Going back to the simple list of options is a bit of a pain. Also, this needs to be written in Java since it needs to read the API classes to make suggestions. But his editor code is probably in Swift.

  • aduffy 16 days ago
    I’m very curious, are you running the JDK inside the app? What difficulties did you run into trying to embed an external runtime?
    • coolius 16 days ago
      I got OpenJDK 17 to compile for iOS, but I had to disable JIT compilation as iOS doesn't allow running unsigned Code. Running the JVM itself is possible as long as the binaries are signed, and located at the correct paths. The paths issue really made me jump through hoops because Apple doesn't sign binaries unless they are bundled in Frameworks at the root of the bundle. That forced me to create symlinks to replicate the directory structure expected by the JVM while satisfying Apple's stupid policy.

      Of course this whole thing only occured when I tried to submit to the App Store and the whole app was finished. I wasn't going to give up at that point.

      • indigoabstract 16 days ago
        I don't use Java much these days, but for some reason I find this project inspiring. If only because of the level of commitment to get it working.

        I just wanted to say great job!

      • hnarn 15 days ago
        OpenJDK isn’t mentioned once in the apps description, and it is GPL which means this entire application may have to be GPL (IANAL)
        • kryptiskt 15 days ago
          OpenJDK has the classpath exception in its version of the GPL, which allows non-GPL code to link to it without triggering GPL requirements.
          • fweimer 15 days ago
            This is a common misconception. The Classpath exception only applies to the class library, not to Hotspot (the core of the JVM implementation). The class library is also more tightly integrated with Hotspot than it used to be.

            And of course the Classpath exception does not waive the notification and other requirements for the OpenJDK libraries that are distributed under the Classpath exception.

      • jimbobthrowawy 15 days ago
        Where did you get a non-GPL version of OpenJDK?
        • jevinskie 15 days ago
          Alternatively, where can I get the source for the app?
          • Benjamin_Dobell 15 days ago
            Fair question if you've bought the app.
            • echoangle 15 days ago
              You can download it for free and you can then compile stuff with it, so you don't need to buy anything for this
          • jimbobthrowawy 14 days ago
            The appstore ToS explicitly forbids submitting apps containing code under the GPL or similar licenses, which was one of the main reasons I asked.
      • karussell 15 days ago
        Impressive. Can you please work together with Oracle and make this available to everyone :) ?

        And did you also try to use GraalVM?

      • cyberpunk 16 days ago
        Is there any technical reason why one couldn’t run e.g clang or go compilers in this way? I assume you’re running javac on-device?
        • throwaway11460 16 days ago
          No technical reason, but you won't be able to run a compiled binary due to policy. You need to use an interpreter.
          • cyberpunk 16 days ago
            I wonder if qemu with cpu=host counts...
            • greenavocado 16 days ago
              Maybe run a VM inside Safari via QEMU and WASM that boots a Linux desktop environment
              • lxgr 16 days ago
                WASM is indeed one possible workaround. That's how a-Shell [1] manages to include a C compiler and run resulting programs at (I believe) better-than-interpreted speeds.

                [1] https://holzschu.github.io/a-Shell_iOS/

    • robrtsql 16 days ago
      The app is monetized by limiting the number of “runs” you can do per month. Based on iOS limitations I think we can assume this means the compilation is done on a remote server.

      EDIT: nevermind! I tried running a program with airplane mode on and it still worked. Now I’m really interested to hear how this was accomplished.

      • lewurm 16 days ago
        Probably a OpenJDK Zero VM build. That's a configuration without JIT or template interpreter, but a "plain" C++ switch dispatch interpreter that requires no runtime code generation.
      • lnxg33k1 16 days ago
        Didn't Apple recently allow to run "emulators"? So code that generates code on the app store?
        • glhaynes 16 days ago
          More like code that runs code, not code that generates code. Assuming the latter means that it's generating native code and attempting to execute it natively, that's not allowed.
          • kmeisthax 16 days ago
            Code that generates code - specifically user-specified code - has been allowed on the App Store for years now. They have a very patronizing term for it, too: "learn-to-code apps".

            Granted, Apple's never going to give you the entitlements necessary to make this performant or let you create separate temporary containers for compiled apps like Swift Playgrounds can. But you can absolutely ship a dev environment on iPadOS as long as you're willing to deal with those limitations.

        • trollied 16 days ago
          Emulators don't have to generate code. At the simplest level, a CPU emulator is a switch statement.
        • mrbungie 16 days ago
          Emulators don't necessarily generate code (maybe if they use JIT). They run arbitrary code, but that's other thing.
      • Rohansi 16 days ago
        I don't have a compatible device but I'm curious how the pricing works. Does it work like a subscription where you pay monthly for unlimited runs per month? Or do you just need to pay for enough runs and buy more if you run out?
  • sdwr 16 days ago
    In university, my friend used an iPad for all his notetaking. He had a keyboard for it, and used it like a little laptop. Bet he would have been all over this!

    The UI is good, looks clean

    • mkl 16 days ago
      This is very common. A majority of my engineering maths students are writing lecture notes and exercises on a digital device, the plurality on iPad (Surface next most common). Many of these iPad users have a laptop as well as or instead of a keyboard for their tablet though, as the extra screen and flexibility are worth it.
  • wanderbuilds 15 days ago
    This is awesome! I definitely think it makes coding way more accessible to beginners and would allow me to work on cool side projects, without having to carry a laptop around. Can't wait to try it out.
  • criddell 16 days ago
    Can you use it to write iPadOS applications that you compile and run on the device?
    • davely 16 days ago
      This is my biggest hang up about the iPad. Hardware is great. The OS is… passable. Sort of.

      For me: I can’t do computer things that I want to do (mainly code, but sometimes game, etc).

      I ended up buying a used Surface Pro X. A bit slow, but I like that I can run something like VS Code and a Node server, or even a real web browser with network debugging tools, all using a touchscreen while on a bus or in an airplane.

      (For my gaming fix, I find that GeForce Now or Moonlight work pretty well for streaming my existing games — not as practical to do on a bus though.)

      • criddell 16 days ago
        I understand what you are saying. The iPad is the best choice for some people and the worst choice for others. I have an older iPad Pro and it’s by far my favorite computer mostly because it doesn’t really feel like a computer.

        My favorite apps are Procreate and GoodNotes. For me, either one is a killer app that justifies having an iPad.

        I also have a ThinkPad for my personal projects and a desktop workstation for my job. Each machine has its strengths and weaknesses. Each was chosen because it was a great choice for what I need to do with it.

        I’m one of the few people that hope the iPad doesn’t get more computer-like. I miss the days when you had an Atari or Amiga or PC or Mac and they were all very different and exciting and in competition with each other. Now we are approaching a very boring endgame where cross platform apps look the same everywhere and there’s nothing fun about any of it.

        • talldayo 16 days ago
          > I’m one of the few people that hope the iPad doesn’t get more computer-like.

          Genuine question; what loss of features or capabilities are you expecting if the iPad does become more computer-like? I don't understand how features like sideloading, compiling or emulating limits your ability to use Procreate and GoodNotes.

          • fragmede 15 days ago
            While I’d love an iPad running macOS (You know there’s a lucky Apple engineer with one), The worry having the features is that it will require futzing with to get it to work right. Right now an iPad is like a Video game console. You just plug it in and it works. There is an expectation of a very, very smooth user experience. The fear is that in adding computer-like features, it won’t be as smooth anymore. Don’t know if I agree with that, but that’s the concern anyway.
            • talldayo 15 days ago
              I guess I just don't agree with it either. None of the features I mentioned should have any negative impact on the end-user unless the OEM deliberately implements it wrong.
      • twobitshifter 15 days ago
        One solution is to tape a pi to your iPad case. :)

        No internet connection required.

        This should work for node but not compiled languages. I think that the compilation would happen on the slower Pi but maybe someone can figure out a way to compile but not run on the iPad.

        https://magpi.raspberrypi.com/articles/connect-raspberry-pi-...

    • rock_artist 16 days ago
      While not perfect. For Swift, I’ve actually doing inițial app development using Swift Playgrounds.

      I’m even maintaining project that still keeps working as Swift Playgrounds.

      Here is an open source example of such: https://github.com/talaviram/OpenSpoken/tree/main/OpenSpoken...

      But I also have internally a bigger app that is doing similar approach (not open source code though) - https://www.smartercurrency.app

      I’ve yet tried and I guess it’s limited for trying to do any ObjC++ / C++ / Metal. But I do believe Apple is using playgrounds as a playground for Xcode successor.

      The biggest issue though, is version control (git…) which requires more work to get things properly.

      • Kon-Peki 15 days ago
        > I guess it’s limited for trying to do any ObjC++ / C++ / Metal

        The last time I tried, I couldn't get it to work, except...

        One of the documented ways of creating compiled Metal kernels is to provide the source code as a string in your Swift code. And that works in Swift Playgrounds. It will compile and run your C++ Metal kernels, but it either works or doesn't. You get no compiler output.

    • alexpc201 16 days ago
      That's the main drawback I find with the iPad. So much memory, so much processor, and not being able to use an app that allows me to create iOS apps. It's the reason why I only have an old iPad Air, it's enough for browsing, reading ebooks, and watching a movie on a trip. Anything bigger would be too bulky with the MacBook.
      • sharkjacobs 16 days ago
        > and not being able to use an app that allows me to create iOS apps

        Maybe you already know about this and you just mean there isn't an app that provides the equivalent of your full MacOS dev environment, but you can absolutely build and run iOS apps on your iPad with Swift Playgrounds.

        It has a lot of shortcomings, but I've used it to create a couple little personal apps that I can run without distributing them through the App Store.

        • 2muchcoffeeman 16 days ago
          They are basically running 1 platform now. They should merge the iPad and MacBook lines already.
          • jayd16 15 days ago
            I fear this would only hamstring macos, not empower ios.
  • jorgeleo 16 days ago
    So... Continuous for Java? Meaning it can compile and run in device?

    https://apps.apple.com/us/app/continuous-net-c-and-f-ide/id1...

    • rcarmo 16 days ago
      So far, sort of. Continuous does have the advantage of having both C# and F# (although it’s a bit crashy these days on modern iOS). I can take the code I test there and build it on a desktop system as well, but haven’t figured out how easy it is to round-trip stuff in this yet (should be as easy, if not easier, but re-using libraries might be trickier).