How do I use Mogenerator?

Senseful picture Senseful · Aug 25, 2010 · Viewed 12.5k times · Source

I installed Mogenerator. Now what do I do? How do I use it?

The first problem I have is that I have no idea where it was installed to. During the install process, it only let me select the hard drive to install it on, not the directory. The most natural location would be the Applications folder, but it isn't there.

Next, the readme (which I found online) states:

Xmo'd works by noticing when your *.xcdatamodel is saved. If the model file's Xcode project item comment contains xmod, an AppleScript is fired that creates a folder based on your model's file name and populates it with derived source code files from your model. It then adds the new folder to your project as a Group Reference and adds all the source files to your project.

There are several issues with the above statement that aren't clear:

  • What does "the model file's Xcode project item comment" refer to? How can I make it contain "xmod"?
  • Is adding this comment and having mogenerator monitor the .xcdatamodel file the only way to use mogenerator? Is there any way I can manually run mogenerator so that it recreates the generated files?

Answer

Johannes Fahrenkrug picture Johannes Fahrenkrug · Oct 21, 2010

One more caveat to be aware of: You have to already set the Class properties of your entities to something different than NSManagedObject. Otherwise Xmo'd won't do anything.

Note: Xmo'd currently doesn't work with Xcode 4/5, afaik.

What I do is just add a "MOGenerator" target in Xcode:

  1. Go to your project and click on "Add Target..." in the "Targets" section.
  2. Choose "iOS -> Other -> Aggregate"
  3. Go to "Build Phases"
  4. Select from the Menu "Editor -> Add Build Phase -> Add Run Script Build Phase"
  5. Paste your MOGenerator command into the Run Script section, for example:
PATH=${PATH}:/usr/local/bin    
cd "${PROJECT_DIR}/MyApp"
mogenerator --human-dir Classes --machine-dir MOGenerated --model MyApp.xcdatamodeld/MyApp.xcdatamodel --template-var arc=true

Now you can update your MOGenerator-generated by simply running this target.