【问题标题】:genstrings tool throwing exception, aborting when parsing XCode projectgenstrings 工具抛出异常,解析 XCode 项目时中止
【发布时间】:2011-02-27 00:45:26
【问题描述】:

我一直在使用genstrings 来构建字符串文件以国际化我的 iPhone 应用程序。但是,我最近所做的一些更改导致genstrings 工具开始抛出如下错误:

s1075-88:Directory jason$ genstrings -o en.lproj *.m
2011-02-26 16:42:26.941 genstrings[17962:903] *** Terminating app due to uncaught exception 'NSRangeException', reason: '*** -[NSCFString characterAtIndex:]: Range or index out of bounds'
*** Call stack at first throw:
(
    0   CoreFoundation                      0x00007fff82a267b4 __exceptionPreprocess + 180
    1   libobjc.A.dylib                     0x00007fff85c640f3 objc_exception_throw + 45
    2   CoreFoundation                      0x00007fff82a265d7 +[NSException raise:format:arguments:] + 103
    3   CoreFoundation                      0x00007fff82a26564 +[NSException raise:format:] + 148
    4   Foundation                          0x00007fff841a65e1 -[NSCFString characterAtIndex:] + 97
    5   genstrings                          0x0000000100001b9d 0x0 + 4294974365
    6   genstrings                          0x0000000100003080 0x0 + 4294979712
    7   genstrings                          0x0000000100003ee6 0x0 + 4294983398
    8   genstrings                          0x0000000100000d20 0x0 + 4294970656
)

这可能是什么原因造成的,如何在不手动更改所有内容的情况下找到导致该问题的项目部分?

【问题讨论】:

    标签: iphone xcode ios internationalization genstrings


    【解决方案1】:

    这里没有简单的技巧。

    将所有 .m 文件复制到单独的文件夹,然后进行二分搜索。

    对一半的文件运行 genstrings,看看问题是否存在。找出哪一半文件有问题,然后再做一次……

    这是 genstrings 中的一个错误,所以你无能为力。

    【讨论】:

    • 谢谢!这是个好主意,效果很好。我发现我在一个地方有一个] 而不是)
    【解决方案2】:

    您可以使用head 限制genstrings 处理的文件数量。如果这是您本地化所有文件的命令:

    find . -name \*.m | xargs genstrings -o en.lproj
    

    那么这就是使用head时的样子:

    find . -name \*.m | head -5 | xargs genstrings -o ~/Documents/GenStringsTest
    

    只需增加 head 旁边的数字并一次又一次地运行命令,直到它崩溃。在运行之间,您可以删除临时 GenStrinsTest 文件夹中的文件。当它崩溃时,减少数字直到你现在确切地崩溃然后运行

    find . -name \*.m | head -<minimum number of files for crash>
    

    最后写入控制台的文件将是“错误”的文件。

    【讨论】:

      【解决方案3】:

      如果它对其他人有帮助,我在评论中有 NSLocalizedString 时遇到了这个崩溃。我猜它找到了它并且它没有参数和崩溃

      【讨论】:

        【解决方案4】:

        我遇到了这个问题。就我而言,genstrings 正在扫描 git 合并遗留的 &lt;filename&gt;.m.orig 文件。删除 *.m.orig 文件修复了问题,因为它们必须包含格式错误的本地化字符串。

        【讨论】:

          【解决方案5】:

          对我来说,由于 NSLocalizedString 调用中的注释而崩溃。

          例如:

          NSLocalizedString(@"some text" /* a comment */,  
                            @"some other text.");
          

          导致 genstrings 崩溃,但这很好:

          /* a comment */
          NSLocalizedString(@"some text", @"some other text.");
          

          【讨论】:

            【解决方案6】:

            拥有 Swift 4

            """
            This is a comment
            """
            

            语法似乎也让它崩溃了。

            【讨论】:

              【解决方案7】:

              这是genstrings找不到宏调用结束时产生的错误。

              请注意,genstrings 实用程序无法处理跨多行的调用(无论内部是否有注释)。

              所以这行得通:

              NSLocalizedString(@"Key", @"Comment")
              

              但这不是

              NSLocalizedString(@"Key",
                                @"Comment")
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2020-11-20
                • 1970-01-01
                • 2020-04-17
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2011-06-02
                相关资源
                最近更新 更多