XCode 8本地化导入崩溃



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)

这个问题杀死了我。该工具可以/应该使您的生活变得如此轻松,但事实并非如此。我在夏天遇到了这个问题,并用info.plist提示在第一个子弹中修复了它,但是我最近更新了该项目,我又回到了Xliff例外地狱。从明亮的一面来看,我目前的崩溃似乎在完成工作后正在发生,因此我能够继续工作。

有很多事情可能会出错,并导致导入崩溃。通常,Xcode只是眨眼出来。如果您想在崩溃前查看一些信息,请使用XcodeBuild:

xcodebuild -verbose -importLocalizations -localizationPath "lang.xliff" -project ./myProject.xcodeproj
  • 当您本地化时,请勿将语言直接添加到info.plist中。而是将Infoplist.strings文件添加到您的项目中,然后将语言添加到其中。您可能需要在每个lang.lproj文件夹中手动创建文件。确保您在任何lang.lproj文件夹中都没有info.plist文件。lproj。

  • 本地化设置时,创建您的lang.lproj文件夹。当您创建root.strings文件时,资本化很重要。它必须是" root.strings",否则它可能在iOS上可以使用,但在iOS模拟器上不起作用。

  • 在您的项目结构中环顾四周。使用崩溃工具后,您最终会在错误的位置放置很多文件。您可以在项目的根组中有一个本地化。Strings文件。删除这些。

  • 仅使用base.lproj代替en.lproj,如果您在项目中找到它们。

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

  • 不适合您,但据说Xcode 7中已解决了特定的崩溃

我有一些与Xliff一起生活的Python脚本。他们需要在某些脚本中更新源路径,但从长远来看可能会有所帮助:https://github.com/danloughney/xliffhell

您的一个字符串包含双引号。尝试在未翻译的Xliff文件中替换"替换它们,看看是否可以重新显示该文件。这只是一个疯狂的猜测,我没有Xcode 8.1自己尝试重现这个,但这是我在Xliff文件中唯一注意到的东西。

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

最新更新