xcodebuild:cdtool无法编译:DataModelCompile /path/to/coredatamodel.xcdatamodeld dyld:找不到符号:_OBJC_CLASS _ $ _ OS_object

我正在构build一个Mac桌面/cocoa应用程序来存档我的iOS项目,核心实现使用NSTask与xcodebuild命令,其次是raywenderlich的这个指南 。

根本原因是CoreData模型文件编译,我用这个应用程序来build立我的另一个项目,没有包含任何CoreData文件,没有问题。 比较有趣的是,我在terminal上尝试了相同的xcodebuild命令,它就成功了!

然后,我开始比较两个xcodebuild输出,发现一些差异,

在terminal,

DataModelCompile /Users/hanwei/Library/Developer/Xcode/DerivedData/youYue3xMaster-cjatyqmgblwyoyccarejxlozikdi/Build/Intermediates/ArchiveIntermediates/youYue3xMaster/InstallationBuildProductsLocation/Applications/youYue3xMaster.app/ youYue3xMaster/LogicBook.xcdatamodeld cd /Users/hanwei/work/DragonSource/projects/ios_youyue3_xmaster/youYue3xMaster export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/opt/subversion/bin:/usr/local/bin:/opt/subversion/bin:/usr/local/bin:/opt/subversion/bin:/usr/local/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin" /Applications/Xcode.app/Contents/Developer/usr/bin/momc --sdkroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk --iphoneos-deployment-target 7.0 --module youYue3xMaster /Users/hanwei/work/DragonSource/projects/ios_youyue3_xmaster/youYue3xMaster/youYue3xMaster/LogicBook.xcdatamodeld /Users/hanwei/Library/Developer/Xcode/DerivedData/youYue3xMaster-cjatyqmgblwyoyccarejxlozikdi/Build/Intermediates/ArchiveIntermediates/youYue3xMaster/InstallationBuildProductsLocation/Applications/youYue3xMaster.app/ 

在我的cocoa应用程序的日志

 DataModelCompile /Users/hanwei/Library/Developer/Xcode/DerivedData/youYue3xMaster-cjatyqmgblwyoyccarejxlozikdi/Build/Intermediates/ArchiveIntermediates/youYue3xMaster/InstallationBuildProductsLocation/Applications/youYue3xMaster.app/ youYue3xMaster/MagazineModel.xcdatamodeld cd /Users/hanwei/work/DragonSource/projects/ios_youyue3_xmaster/youYue3xMaster export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" /Applications/Xcode.app/Contents/Developer/usr/bin/momc --sdkroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk --iphoneos-deployment-target 7.0 --module youYue3xMaster /Users/hanwei/work/DragonSource/projects/ios_youyue3_xmaster/youYue3xMaster/youYue3xMaster/MagazineModel.xcdatamodeld /Users/hanwei/Library/Developer/Xcode/DerivedData/youYue3xMaster-cjatyqmgblwyoyccarejxlozikdi/Build/Intermediates/ArchiveIntermediates/youYue3xMaster/InstallationBuildProductsLocation/Applications/youYue3xMaster.app/ dyld: Symbol not found: _OBJC_CLASS_$_OS_object Referenced from: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/libxpc.dylib Expected in: /usr/lib/system/introspection/libdispatch.dylib in /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/usr/lib/system/libxpc.dylib 2016-06-17 09:46:28.158 momc[76594:13533677] *** -[NSKeyedUnarchiver initForReadingWithData:]: data is empty; did you forget to send -finishEncoding to the NSKeyedArchiver? cdtool invalid hashes: /Users/hanwei/work/DragonSource/projects/ios_youyue3_xmaster/youYue3xMaster/youYue3xMaster/MagazineModel.xcdatamodeld/MagazineModel.xcdatamodel:: error: cdtool cannot compile 

主要的错误日志细节可以在后面的部分find,diff结果是“export PATH = …” 。 在terminal,PATH包含当前用户的$ {PATH},我通过这应该是最终的原因,但没有运气后,试图导出到我的cocoa应用程序的shell脚本相同的path。

这是我的shell脚本,

 command -v xcodebuild >/dev/null 2>&1 || { echo >&2 "It requires xcodebuild but it's not installed. Aborting."; exit 1; } #export PATH=$PATH:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/opt/subversion/bin:/usr/local/bin:/opt/subversion/bin:/usr/local/bin:/opt/subversion/bin:/usr/local/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin #PATH=$PATH:/opt/subversion/bin:/usr/local/bin:/opt/subversion/bin:/usr/local/bin:/opt/subversion/bin:/usr/local/bin:/usr/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/git/bin echo ${PATH} type xcodebuild type xcpretty if [ -x "$(command -v xcpretty)" ]; then xcodebuild -workspace "${1}" -scheme "${2}" -sdk iphoneos -destination generic/platform=iOS -archivePath "${3}" archive | xcpretty else echo "xcpretty is not installed, suggest to install it and try again."; xcodebuild -workspace "${1}" -scheme "${2}" -sdk iphoneos -destination generic/platform=iOS -archivePath "${3}" archive fi 

对于错误“dyld:Symbol not found:_OBJC_CLASS _ $ _ OS_object …” ,我search了它,发现从libdispach构build的_OBJC_CLASS _ $ _ OS_object符号,libdispatch应该在Foundation.framework中构build,然后我试图链接Foundation.framework我的项目明确,同样的错误存在。

对于“引用来自… …预期在…”声明,它引用了iPhone模拟器,那么我猜可能有xcodebuild -destination ,通过generics/平台= iOS或我的iOS设备这cheetsheet )不起作用,要么。

对于“错误:cdtool无法编译” ,我发现在Xcode错误, .xcdatamodel相关的这个大问题:cdtool无法编译 ,我试过重命名解决scheme,没有运气,该问题的背景是Xcodetesting版本。

目前我的环境是Xcode 7.3.1(7D1014),10.11.5(15F34)。

我已经把这个问题集中在8个小时以上,如果你有一些好的可疑点或者解决scheme,请提前帮助我,非常感谢!

顺便说一句,我发现@MichalMoskala遇到同样的问题,没有解决scheme, 从Swift命令行工具调用xcodebuild失败 。 他没有声明它在Xcode-beta版本中发生的背景。

如果真的没有最终的解决scheme,我必须决定将CoreData传输到FMDB / Realm。


UPDATE

经过几天的调查,我没有find一个真正的最终解决scheme,这应该是Xcode在xcodebuild手动编译xcdatamodeld文件时的错误。 但为什么不出现在Xcode IDE? 也许苹果开发者在Xcode中做了一些补丁。

这是我的解决scheme,将编译的xcdatamodeld文件(* .momd)复制到项目中,从构build词组中删除* .xcdatamodeld文件, 编译项目中的源代码 ,以便在构build/归档时不会编译它们。 添加自定义脚本将.momd备份文件复制到产品目录,它在编译源之前执行,就像Xcode中的生成进度。

这是我的脚本,

 cp -r ${SRCROOT}/CoreDataFiles/*.momd ${BUILT_PRODUCTS_DIR}/${FULL_PRODUCT_NAME}/ 

validation通过!