Xcode 8本地化导入崩溃

时间:2016-12-27 05:56:29

标签: ios objective-c xcode localization xliff

当我导入项目的本地化时,

Xcode(8.1)崩溃了。 它在我导出时崩溃,然后导入相同的xliff文件而不进行修改。

这是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)

3 个答案:

答案 0 :(得分:8)

这个问题让我感到害怕。该工具可以/应该工作,让你的生活更轻松,但它不是。我在夏天遇到了这个问题,并在第一个项目符号中使用了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

答案 1 :(得分:0)

您的一个字符串包含双引号。尝试在未翻译的XLIFF文件中用"替换它们,看看是否可以重新导入该文件。这只是一个疯狂的猜测,我手边没有XCode 8.1来尝试重现这一点,但这是我在你看到狡猾的XLIFF文件时唯一注意到的事情。

答案 2 :(得分:0)

另一个提示:请确保您不翻译CFBundleName和CFBundleDisplayName。在导入的最后一步中,XCode将崩溃。 XCode 10.3中仍然存在此问题。