Repository navigation
Improve Xcode support #459
Description
There is a bunch of Rust tools out there that ease access to (parts of) Xcode:
- Cargo runner (mine):
cargo-apple-runner - Create a new Xcode project:
cargo-xcode - Create new Xcode project and launch it in the simulator / on device:
- Create application bundles:
- Launch Instruments:
cargo-instruments - Create fat binaries:
cargo-lipo - Make Rust packages available to Objective-C/Swift:
cargo-cocoapods - Create and launch a .app bundle automatically:
fruitbasket - Lower-level tools for Apple-specific stuff:
apple-platform-rs,apple-bundle
But all of them currently feel quite clunky, or are missing a lot of functionality.
If we actually desire at least somewhat competitiveness with Swift (#429), it needs to be easy to:
- Use storyboards/nib files.
- Use assets.
- Configure application information (
Info.plist). - Use advanced debugging utilities (main thread checker, UI hierarchy viewer, metal shader debugger, ...).
- Bundle, sign and publish to the app store.
All of these are certainly possible to do outside of Xcode, and we should strive towards that eventually, but it's going to take a lot of time for the ecosystem to get there! So instead, we should start by making it easier to work with Rust projects inside Xcode!
Perhaps a path forward would be some combination of rust-xcode-plugin / rust-xcode-langspec, a Source Editor Extension and cargo-xcode? Ideally, we'd want full LSP-like support, and probably eventually some kind of IBAction/IBOutlet support, but having a solid way to run Rust applications from inside Xcode would be a huge step!
Let's also remember that Rust is not the only ecosystem that has this problem, perhaps we can learn from what others are doing? Mentioning XcodeGen here.
Activity
madsmtm commentedon Jun 15, 2023
Whether or not we (as in, the
objc2project) end up solving these problems, we need to curate and link users to the current best solutions.madsmtm commentedon Sep 13, 2023
Related: RalfJung/cargo-careful#22
madsmtm commentedon Dec 7, 2023
Swift has something called Package Plugins, specifically the "build tool plugin" may allow us to easily invoke Cargo from Xcode
madsmtm commentedon Dec 12, 2023
For interface builder support, this removed document detailing the legacy IB plug-ins might reveal some more information on how these links work?
Maybe it utilizes
NSKeyValueBindingCreation?madsmtm commentedon Feb 20, 2024
Upstream
rustcissuesVarious issues that would benefit Xcode integration:
IPHONEOS_DEPLOYMENT_TARGETon Mac Catalyst rust-lang/rust#121296ld/ld64is fairly good at reporting problems, and we want to surface those)/System/iOSSupportto the library search path on Mac Catalyst rust-lang/rust#121430Paths are weird:
Rpaths are weirder:
-rpathrust-lang/rust#127100