XTool – Cross-platform Xcode replacement

195 points by TheWiggles 1 month ago | 66 comments
  • lwouis 1 month ago
    This tool says "Xcode replacement" and "Xcode-free development". I thought there is no way they can build apps without Xcode. How would they replicate the libraries, compilers, etc.

    I dug more and of course they don't: "Though we don’t rely on the Xcode build system, you still need to install Xcode for the iOS SDK and toolchain"

    I think they should clarify their messaging. This is not a replacement or an alternative. It's a layer on top designed for what they think is a better experience.

    • rockbruno 1 month ago
      I think you are mixing some different concepts here. It's not that this is a layer on top of Xcode/xcodebuild, it's just that Apple today happens to package everything iOS/Swift-related together with Xcode releases. So even if you couldn't care less about the Xcode IDE itself or the xcodebuild build system, you still need to have it because this is the only way for you to download / install those toolchains. Apple could provide these separately, but they just don't.
      • kabiroberai 1 month ago
        xtool creator here, this is correct. it wouldn’t have been possible to support Linux if xtool was just a layer on top of Xcode, as Xcode doesn’t run on Linux.

        we only need Xcode to be installed on macOS since it bundles the iOS SDK (ie all the header files.) similarly, we ask the user to supply a copy of Xcode.xip during the setup process on Linux in order to extract the SDK.

        it definitely depends on your definition of “replacement” in the end, but I (and most people I’ve spoken with in the iOS community) would consider “Xcode” to be the Xcode build system, user interface, and proprietary tooling. xtool doesn’t rely on any of this, not even for signing and installation. you can (read: must on Linux, may on macOS) use it with the open-source Swift and Clang toolchain + LLVM’s LLD linker and MachO tooling. Codesigning uses zsign, an MIT-licensed x-platform codesign alternative, and installation relies on the open source libimobiledevice project, which is installed by default on many Linux distributions (eg Ubuntu).

        • lwouis 1 month ago
          I've been developing a fairly popular macOS app for years. I consider myself in the community for that reason.

          Apple has bundled everything together in a big mess.

          - Only certain macOS versions can run certain XCode versions

          - Only certain XCode versions contain certain SDK versions

          - XCode embeds "Command line tools" which contains things like gcc, ruby, python, installed as a package, and conflicting with other versions on the machine

          - Interface Builder is built into XCode and has its own compatibility story

          It's a big messy blob and you can't pick-and-choose parts. You have to update your whole machine to move to the latest OS so they will let you run the latest XCode, so your app can compile on the latest platform for your users. It's not the best experience for sure. Many ecosystems have SDKs that you can download as you wish. I don't need to update my OS to download a version of the JDK for example.

          That being all said, if you require users to download XCode, regardless of which part of it is necessary, i don't think you should mention "XCode free experience" or "XCode replacement".

          I'm already developing a macOS app without launching the XCode GUI. I use the xcodebuild CLI that ships with XCode. My IDE is AppCode. I also use xcodebuild on CI to build the app headless. I would never call that a XCode free experience though, as i suffer from all the issues i mentionned above with version upgrades and XCode issues

          • rushiiMachine 1 month ago
            I'm not too familiar with the xcode dev environment; could Theos be used instead of the huge xcode bundle? As far as I know, it provides the compilers and frameworks directly.
          • notpushkin 1 month ago
            Would it be possible to get just the SDK from the Xcode package? Like Asahi installer streams only the relevant parts of macOS images from Apple’s servers.
            • kabiroberai 1 month ago
              I looked into streaming but afaict the XIP format doesn’t support random access the same way that ZIP does. specifically because 1) it doesn’t seem to have a Central Directory like ZIP and 2) it has an optimization where files can be hardlinks to other files (by ID) in the XIP, so if you want to extract a file but all you get is a hardlink ID, you can’t expand the contents until you encounter and expand the hardlink pointee. it’s possible I’ve missed something, open to ideas for sure.
              • isodev 1 month ago
                There are some components that may be downloadable separately but they really are part of Xcode. One ring to rule them all.
              • ImPostingOnHN 1 month ago
                It sounds like this "cross-platform xcode replacement" isn't cross-platform, and ios app developers still need macos?
                • dadoum 1 month ago
                  But that's wrong. You don't need macOS. That's why they say "cross-platform Xcode replacement". You just need the SDK, which can be used on every platform.
            • firecall 1 month ago
              JetBrains used to develop AppCode:

                AppCode
              
                A smart IDE for iOS/macOS development
              
                AppCode is no longer available as a commercial product as of December 14, 2022.
              
                https://www.jetbrains.com/objc/
              • lwouis 1 month ago
                It seems that Fleet will support building XCode apps. It looks like a big regression from AppCode. As of today Fleet doesn't compile my macOS app. I try regularly on new updates. No alternatives, unfortunately
                • Larrikin 1 month ago
                  Fleet will also most likely get abandoned as people who pay for an IDE highly prefer the older one and people who want VSCode use VSCode

                  I also think any revival of AppCode is also dead as JetBrains is all in on Kotlin everywhere. iOS multiplatform support hit stable recently.

                  • BrandonSmith 1 month ago
                    JetBrains already announced it is no longer targeting Fleet as its iOS strategy for Kotlin Multiplatform. Instead it will be realizing its strategy through IntelliJ IDEA and Android Studio.
                  • sandebert 1 month ago
                    What's Fleet?
                • mdaniel 1 month ago
                  It likely doesn't help the ObjC part of that story, but they moved the Swift part out into a CLion plugin https://plugins.jetbrains.com/plugin/8240-swift

                  Regrettably I didn't see that they did anything with the ObjC part, choosing to /dev/null it

              • flax 1 month ago
                Would this theoretically allow a Flutter app developer to build and deploy an ios app from Linux? God, I hope so.
                • candiddevmike 1 month ago
                  It technically violates the Apple Developer Agreement AFAIK, but that seems like yet another lawsuit waiting to happen IMO.
                  • ronsor 1 month ago
                    Apple won't do anything right now as they're certainly afraid the courts* will slap them hard.

                    *Both US and EU now

                    • saagarjha 1 month ago
                      They’re still rejecting Fortnite so I don’t think they’re particularly scared of anything
                    • petabyt 1 month ago
                      People have been doing hackintoshes and macos VMs for years... And apple hasn't really done anything. So I doubt this tool will provoke them.
                      • karlgkk 1 month ago
                        A long while ago, they put some company selling hackintoshes straight into the ground. Nobody tried since
                        • conception 1 month ago
                          Apple has killed the Hackintosh…. It’s just bleeding out still.
                        • _blk 1 month ago
                          Yeah weird world. When Gates bundles IE that no one wants it's an abuse of power but when Jobs shoves his apples down your throat just to (try to) publish for their platform it's all OK.. Oh, or was that the lawsuit waiting to happen? ;)
                          • freeamz 1 month ago
                            Same thing with the bank bail out, if Bush did oh my we will never hear end of it, but if cool president who smokes weed and get down some good music, then no one really call him out on it.
                          • notpushkin 1 month ago
                            I believe it allows usage on “Apple-branded computers”, so building iOS apps with xtool on Asahi is probably legit.

                            But yeah, I would probably use this for testing only, and do actual releases from macOS proper.

                            • tgma 1 month ago
                              IIRC it is only a potential issue if the host machine isn't made by Apple. You can install Linux on a Mac and use this.

                              IANAL yada yada.

                              • nar001 1 month ago
                                Does it? You still need to install Xcode for the iOS SDK, so they're not really doing anything wrong?
                              • loic-sharma 1 month ago
                                This project helps but isn’t enough alone:

                                1. Dart can’t cross-compile from Linux to iOS yet. You could use Dart’s interpreter instead, but that’d significantly regress performance.

                                2. Flutter iOS projects use the Xcode project format, you’d need to migrate that to xtool’s project format

                                3. Flutter hasn’t finished migrating its plugin ecosystem from CocoaPods to SwiftPM - any plugin that hasn’t migrated to SwiftPM yet likely won’t work with xtool.

                                • Cloudef 1 month ago
                                  Afaik its already possible with darling. Nixpkgs also has xcbuild replacement, but not sure if it can handle codesigning.
                                  • gman83 1 month ago
                                    Just use something like CodeMagic, I wouldn't risk getting your Apple account banned.
                                  • zh3 1 month ago
                                    • awinter-py 1 month ago
                                      xcode, the tool that takes 9 hours to download every few months and makes random edits to my XML and plist files? that xcode?
                                      • novoreorx 1 month ago
                                        Reminds me of Sweetpad (https://sweetpad.hyzyla.dev/), which is a bit tedious to setup, XTool seems to provide a better DX, huge wish for this project to grow!
                                      • walterbell 1 month ago
                                        Earlier, "Build iOS Apps on Linux and Windows", https://news.ycombinator.com/item?id=43952239
                                        • bdcravens 1 month ago
                                          I see the Github org is "xtool-org". I wonder if XTool the company (makes laser engravers and other creative/crafting tech) will take issue.
                                          • jasau 1 month ago
                                            Would be cool to have similar tooling (de-attached from XCode) for live previewing interfaces built with Swift UI.
                                            • waynecochran 1 month ago
                                              The screenshot has a vscode icon?
                                              • bdcravens 1 month ago
                                                Yes, because the tool itself is just a command line app, replacing the build tools, but not the IDE. You edit the code in your tool of choice.
                                              • pjmlp 1 month ago
                                                More likely a command line xcodebuild replacement.
                                                • woleium 1 month ago
                                                  no android support?
                                                  • landr0id 1 month ago
                                                    ...this is for building apps targeting iOS and macOS on non-macOS platforms. Why would Android support be necessary?
                                                    • thayne 1 month ago
                                                      So you can build iOS apps on your android device?

                                                      If for no other reason, it would be gloriously ironic.

                                                      • woleium 1 month ago
                                                        Oh, i misunderstood. my bad!

                                                        I thought it was for compilation of ios apps for linux and macos.

                                                      • 1 month ago