2016-12-27 145 views
4

当我为我的项目导入本地化时,Xcode(8.1)崩溃。 它也崩溃时,我导出,然后导入相同的xliff文件未经修改。Xcode 8本地化导入崩溃

这里是XLIFF文件:http://ge.tt/7J5UY3i2

以下是完整的崩溃报告http://pastebin.com/JsJFeCqB。任何提示或解决方法?

Application Specific Information: 
ProductBuildVersion: 8B62 
UNCAUGHT EXCEPTION (NSInvalidArgumentException): -[Xcode3VariantGroup addToTargetDefaultResourcesBuildPhase:]: unrecognized selector sent to instance 0x7fe69615cba0 
UserInfo: (null) 
Hints: None 

Backtrace: 
    0 __exceptionPreprocess (in CoreFoundation) 
    1 DVTFailureHintExceptionPreprocessor (in DVTFoundation) 
    2 objc_exception_throw (in libobjc.A.dylib) 
    3 -[NSObject(NSObject) doesNotRecognizeSelector:] (in CoreFoundation) 
    4 ___forwarding___ (in CoreFoundation) 
    5 _CF_forwarding_prep_0 (in CoreFoundation) 
    6 __81+[IDELocalizationWork fileReferenceStreamForName:directoryPath:superitem:target:]_block_invoke (in IDEFoundation) 
    7 __33-[IDEStream(IDEStreamMonad) map:]_block_invoke (in IDEFoundation) 
    8 __24-[_IDEStreamMap onNext:]_block_invoke_4 (in IDEFoundation) 
    9 -[_DVTTimeSlicedMainThreadOrderedUniquingWorkQueue _processWorkItemsWithDeadline:] (in DVTFoundation) 
10 -[DVTTimeSlicedMainThreadWorkQueue _processWithDeadline:] (in DVTFoundation) 
11 -[_DVTTimeSlicedMainThreadActiveWorkQueues _processWorkQueuesOnDeadline] (in DVTFoundation) 
12 __NSFireDelayedPerform (in Foundation) 
13 __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__ (in CoreFoundation) 
14 __CFRunLoopDoTimer (in CoreFoundation) 
15 __CFRunLoopDoTimers (in CoreFoundation) 
16 __CFRunLoopRun (in CoreFoundation) 
17 CFRunLoopRunSpecific (in CoreFoundation) 
18 RunCurrentEventLoopInMode (in HIToolbox) 
19 ReceiveNextEventCommon (in HIToolbox) 
20 _BlockUntilNextEventMatchingListInModeWithFilter (in HIToolbox) 
21 _DPSNextEvent (in AppKit) 
22 -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] (in AppKit) 
23 -[DVTApplication nextEventMatchingMask:untilDate:inMode:dequeue:] (in DVTKit) 
24 -[NSApplication run] (in AppKit) 
25 NSApplicationMain (in AppKit) 
26 start (in libdyld.dylib) 
+0

林有同样的问题。你有没有找到任何东西? –

回答

0

其中一个字符串包含双引号。请尝试在未翻译的XLIFF文件中将其替换为",然后查看是否可以重新导入该文件。这只是一个疯狂的猜测,我手边没有XCode 8.1来尝试重现这一点,但这是我在XLIFF文件中注意到的唯一看起来不可靠的东西。

+0

这没有遗憾的工作:/ – tdeegan

+0

对不起...... 下大胆猜测:您翻译XLIFF不验证对XLIFF 1.2严格的模式。某些“”元素出现在它们的“”之前。不过,我认为这不是未翻译文件的情况。 '''元素中不允许使用'build-num'属性。 您也可以尝试在反斜杠前面加上双引号:这似乎很奇怪,但对于一些人来说,纯XML并不够复杂,所以他们将它与.properties语法混合使用。 – Jenszcz

2

这个问题杀了我。该工具可以/应该工作,让你的生活变得如此简单,但它却没有。我在夏天遇到了这个问题,并在第一个项目符号中使用info.plist提示修复了它,但是我最近更新了项目,并且我又回到了xliff异常地狱。在光明的一面,我目前的崩溃似乎在它完成工作后发生,所以我能够继续工作。

有一堆东西可能会出错,导致导入崩溃。通常Xcode只是闪烁不存在。如果你想看到在飞机坠毁前的一些信息,使用xcodebuild联编:

xcodebuild -verbose -importLocalizations -localizationPath "lang.xliff" -project ./myProject.xcodeproj 
  • 当本地化,不直接增加语言的info.plist中。相反,请将InfoPlist.Strings文件添加到您的项目并添加该语言。您可能需要在每个lang.lproj文件夹中手动创建该文件。确保在base.lproj以外的任何lang.lproj文件夹中没有info.plist文件。

  • 本地化Settings.bundle时,创建您的lang.lproj文件夹。在创建Root.strings文件时,大小写很重要。它必须是“Root.strings”,否则它可能在iOS上工作,但它不适用于iOS模拟器。

  • 环顾您的项目结构。在使用崩溃工具后,最终会在错误的地方出现一堆文件。您可以在项目的根组中包含Localized.Strings文件。删除这些。

  • 只能使用base.lproj代替en.lproj,因此如果在项目中找到它们,请手动删除en.lproj文件。

  • 的XLIFF文件确实需要很好地格式化,但是我不认为这会导致系统崩溃。

  • 不适合你,但据说有固定在Xcode 7,以便确保您使用的是最新,以避免一个,至少一个特定的崩溃。

我有一些生活在xliff中的python脚本。他们需要源路径在一些脚本的更新,但他们可以帮忙从长远来看:https://github.com/danloughney/xliffHell

+2

第一个要点也适用于我。 – laynemoseley

+0

我的项目文件或工作区必须有问题。我有一个新的应用程序,导入XLIFF时不会崩溃。如果你遇到这个崩溃,也许完全重建该项目将会有所帮助。 –

+0

Xcode 9测试版发生崩溃 –