Xcode Project Manager aims at making Xcode project easier to setup, build and even run in a single command line tool. It providing convenience for both manually usage and interacting with other programs.
Specifically, xpm makes the most commonly used commands easier to execute. Examples:
- You can simply run
xpm buildnow to avoid typing the very very longxcodebuild -workspace XPM.xcworkspace -scheme xpm -configuration Debug -sdk iphoneos buildcommand each time you build.xpmwill remember the default option you choose by writing to a config file locally or globally, it will even guess the options first time you run it. - You can simply run
xpm installinstead ofbundle install && bundle exec pod install.
Important
Current Status
Xcode Project Manager currently is at the very beginning stage, only very basical and limited feature is provided, like build and clean. But we're keep on moving! You can track the progress in the Milestones page. Feel free to tell us there what you eager to use so we can consider speeding it up!
If you're interested in this project, give it a star or just watch its releases, and feel free to post how you think and feel in Discussions.
If you meet any issue or have any feature idea, feel free to open up an issue!
Currently you can install xpm by donloading it from the Releases page, and put it to /usr/local/bin/ folder. We will make it available on Homebrew in the future.
Xcode Project Manager provides the following features as subcommands:
| Command | Status |
|---|---|
| config | 🚧 not ready yet |
| install | 🚧 not ready yet |
| build | 🚀 basically ready |
| docbuild | 🚧 not ready yet |
| run | 🚧 not ready yet |
| exec | 🚧 not ready yet |
| 🚀 basically ready | |
| clean | 🚀 basically ready |
xpm will automatically generate a .xpm.yml file to pwd when first time you use xpm in your project. The configs with default values available are listed as follows:
config:
autoChange: true # whether change this file when executing commands with different configs
install:
mode: cocoapods # maybe carthage, spm will be supported in the future
build:
mode: xcodebuild # maybe bazel will be supported in the future
xcodebuild:
workspace: XPM.xcworkspace # will ask you to pick one at first time
project: XPM.xcodeproj # will ask you to pick one at first time
scheme: xpm # will ask you to pick one at first time
configuration: Debug # or Release
sdk: iphoneos # or iphonesimulator, etc.
beautify: true # use xcbeautify or xcpretty to beautify output logs
logLevel: error # only print logs which level are equal to or more serious than the given value
generateBuildServerFile: false # use xcode-build-server to generate buildServer.json file
continueBuildingAfterErrors: false
run:
type: device # or simulator
target:
device: Saafo's iPhone 14 Pro # will ask you to pick one at first time.
simulator: iPhone 14 Pro # will ask you to pick one at first time.
exec:
scripts:
hello: echo 'hello world' # just an example.You can also run xpm config --local config.autoChange false to change the config(🚧 not ready yet).
And you can also configure some basic configs(like autoChange and mode) at ~/.xpm.yml. The global config file is used when generating new .xpm.yml in your project.
xpm install helps to setup your project (like resolving and downloading all dependencies) in a single command.
| Commands | Equals to |
|---|---|
| xpm install | bundle install && bundle exec pod install |
| xpm install bundle | bundle install |
| xpm install pod | bundle exec pod install |
TODO: xpm install bundle is even longer than bundle install.
xpm build helps to build your project and shows building logs of specific levels.
When running xpm build for the first time, xpm will ask you to select default configs and will write to .xpm.yml file to pwd. When already having .xpm.yml, xpm will use the configs in the file.
We know manually input workspace or project or scheme name is kind of pain, so we add completion as you type when need input them.
Besides, the most different thing is that, you can update configs in the config file through command line instead of manually edit it. A simple process is like:
- Run
xpm build -sdkand press tab,xpmwill give a list of all available sdks, you can choose one to finish the completion. - Currently the command is like
xpm build -sdk iphonesimulator, and ifconfig.autoChangeis true and you execute the command,build.xcodebuild.sdkwill update it's value toiphonesimulator(You'll never manually input the longiphonesimulatoranymore!). You can also add--no-saveflag to avoid updating the config. - Vice versa, when
config.autoChangeis false and you can add--saveflag to force updating the config.
For DocC documentation generating, similar as xcodebuild docbuild.
xpm run mainly aggregating simctl and ios-deploy for simulator and device running into a single command.
Used as executing shell scripts configured in exec.scripts.
Print basic infomation about the project, used as interacting with other command line tools.