Mogenerator和Xcode 4
我刚刚在我的开发机器上安装了mogenerator + xmo'd,并且想要开始使用它。我真正能够在网上找到的唯一指令来自a previous SO post,而那些不能用于XCode 4的指令(或者至少⌘I不再提取元数据,我不知道如何)。Mogenerator和Xcode 4
因此,为了让事情能够正常运行,是否需要在.xcdatamodeld的注释中添加xmod
(无论它们在哪里),并且这些类将在保存之后生成/更新?
虽然试图找到答案我自己,我发现esenciadev.com MOGenerator and Xcode 4 integration guide。这个解决方案不是按钮式集成,但它起作用。链接有详细的说明,但一般你:
- 复制shell脚本到你的项目
- 添加构建规则,以你的目标当你建立你的项目运行两个shell脚本
,该脚本在项目目录中的所有.xcdatamodel文件上运行MOGenerator。生成后,如果脚本生成新的类文件,则必须手动将它们添加到项目中。后续版本会记住现有的MO生成的文件。
注意事项:
的例子的构建规则假定你把脚本到/脚本/文件夹你的项目目录中。当我忽略这个细节(创建一个项目文件夹,但不是一个文件夹文件夹)我有一个生成错误。确保构建规则指向脚本的文件位置。
该脚本使用
--base-class
参数。除非您的模型类是自定义类(不是NSManagedObject)的子类,否则您必须从脚本中删除此参数。例如,
mogenerator --model "${INPUT_FILE_PATH}/$curVer" --output-dir "${INPUT_FILE_DIR}/" --base-class $baseClass
我找到了一个脚本,在“构建阶段”比“生成规则”更可靠。
在您的目标的“构建阶段”下,选择底部的“添加运行脚本”按钮。将运行脚本拖到顶部,以便在编译源代码之前执行。请记住,实际的数据模型文件(.xcdatamodel)包含在包(.xcdatamodeld)中,并且您只需编译项目的最新数据模型。
添加以下脚本(在尖括号替换文本适当时)
MODELS_DIR="${PROJECT_DIR}/<path to your models without trailing slash>"
DATA_MODEL_PACKAGE="$MODELS_DIR/<your model name>.xcdatamodeld"
CURRENT_VERSION=`/usr/libexec/PlistBuddy "$DATA_MODEL_PACKAGE/.xccurrentversion" -c 'print _XCCurrentVersionName'`
# Mogenerator Location
if [ -x /usr/local/bin/mogenerator ]; then
echo "mogenerator exists in /usr/local/bin path";
MOGENERATOR_DIR="/usr/local/bin";
elif [ -x /usr/bin/mogenerator ]; then
echo "mogenerator exists in /usr/bin path";
MOGENERATOR_DIR="/usr/bin";
else
echo "mogenerator not found"; exit 1;
fi
$MOGENERATOR_DIR/mogenerator --model "$DATA_MODEL_PACKAGE/$CURRENT_VERSION" --output-dir "$MODELS_DIR/"
选项添加到适当mogenerator
。 --base-class <your base class>
和--template-var arc=true
是常见的。
在我对模型文件进行更改后,我只是从终端手动运行mogenerator。使用的Xcode 4和ARC,该做的伎俩:
cd <directory of model file>
mogenerator --model <your model>.xcdatamodeld/<current version>.xcdatamodel --template-var arc=YES
也许我会用在一些点构建脚本,但终端的做法是太简单了,搞砸了。
随机提示。如果您获得非法指令:4运行mogenerator时。从命令行安装它:
$ brew update && brew upgrade mogenerator
Xcode 4的仍然受NDA,所以你不应该/无法在这里得到答案。 – paulbailey 2011-02-25 16:01:52
尝试Apple Developer论坛。你可以在那里讨论NDA材料。 – TechZen 2011-02-27 15:39:53
你可以使用命令行来解决这个问题,如果你仍然对答案感兴趣,我会发布一个答案,以解决你的问题 – Ali 2011-03-31 18:47:35